Я пытаюсь получить завершение кода, но когда я пытаюсь получить завершение 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
Вы уверены, что 'CompletionService.GetService (document);' возвращает non-null? Рабочее пространство AdHoc не устанавливает это по умолчанию и, глядя на ваш код, похоже, что вы сами не настраиваете его. – Ties
@ Ties, hm..yes это null! –