private CodeElement CreateCodeElement(EnumDeclarationSyntax enumDeclaration, SourceText text, SemanticModel semanticModel) { var symbol = semanticModel.GetDeclaredSymbol(enumDeclaration); if (symbol == null) { return(null); } var builder = new CodeElement.Builder { Kind = symbol.GetKindString(), Name = symbol.ToDisplayString(SymbolDisplayFormats.ShortTypeFormat), DisplayName = symbol.ToDisplayString(SymbolDisplayFormats.TypeFormat), }; AddRanges(builder, enumDeclaration.AttributeLists.Span, enumDeclaration.Span, enumDeclaration.Identifier.Span, text); AddSymbolProperties(symbol, builder); foreach (var member in enumDeclaration.Members) { foreach (var childElement in CreateCodeElements(member, text, semanticModel)) { builder.AddChild(childElement); } } return(builder.ToCodeElement()); }
private static async Task <CodeElement> TranslateAsync(this CodeElement element, OmniSharpWorkspace workspace, SimpleFileRequest request) { var builder = new CodeElement.Builder { Kind = element.Kind, DisplayName = element.DisplayName, Name = element.Name }; foreach (var property in element.Properties ?? Enumerable.Empty <KeyValuePair <string, object> >()) { builder.AddProperty(property.Key, property.Value); } foreach (var range in element.Ranges ?? Enumerable.Empty <KeyValuePair <string, Range> >()) { builder.AddRange(range.Key, await range.Value.TranslateAsync(workspace, request)); } foreach (var childElement in element.Children ?? Enumerable.Empty <CodeElement>()) { var translatedElement = await childElement.TranslateAsync(workspace, request); // This is plain stupid, but someone might put a #load directive inside a method or class if (translatedElement.Ranges.Values.Any(x => x.Start.Line < 0)) { continue; } builder.AddChild(translatedElement); } return(builder.ToCodeElement()); }