2016-10-18 4 views
0

Я пытаюсь получить завершение кода, но когда я пытаюсь получить завершение async на CompletionService, я получаю NullReferenceExeption.NullReferenceExeption на GetCompletionsAsync на Roslyn

Вот кусок кода:

public async Task<IList<ICompletionData>> GetCompletionData(String code, int offset) 
    { 
     IList<ICompletionData> completionData = null; 

     if (_workspace != null) 
     { 
      _workspace.Dispose(); 
     } 
     _workspace = new AdhocWorkspace(); 
     _project = _workspace.AddProject("Test", LanguageNames.CSharp); 



     var sourceText = SourceText.From(code); 
     var document = _workspace.AddDocument(_project.Id, "Compilation0", sourceText); 
     var completionService = CompletionService.GetService(document); 
     var charCompletion = GetCompletionTrigger('.'); 
     var data = await completionService.GetCompletionsAsync(_document, offset,charCompletion,).ConfigureAwait(false); 

     if (data == null || data.Items.Any() == false) 
      return new List<ICompletionData>(); 

     completionData = data.Items.Select(item => new RoslynCodeCompletion(_document, item)).ToList<ICompletionData>(); 

     return completionData; 
    } 

Ошибка в строке:

var data = await completionService.GetCompletionsAsync(_document, offset,charCompletion,).ConfigureAwait(false);//NullReferenseException. 

Script код codepletion запускающего на '' (Точка) символ:

var str=""; 
str. // here calls `GetCompletionData` 

Полный фрагмент кода на pastebin

+1

Вы уверены, что 'CompletionService.GetService (document);' возвращает non-null? Рабочее пространство AdHoc не устанавливает это по умолчанию и, глядя на ваш код, похоже, что вы сами не настраиваете его. – Ties

+0

@ Ties, hm..yes это null! –

ответ

1

Это стало намного легче после того, как Roslyn PR #14921 был слит. Перед тем, как было много manual MEF configuration, но теперь оно должно быть достаточно, чтобы быть установлены следующие пакеты NuGet:

  • Microsoft.CodeAnalysis
  • Microsoft.CodeAnalysis.CSharp
  • Microsoft.CodeAnalysis.Features
  • Microsoft.CodeAnalysis.CSharp.Features

И Roslyn выполнит требуемую конфигурацию.