private List <INamedTypeSymbol> ReloadAllClasses(DothtmlCompletionContext context) { return(allClasses.GetOrRetrieve(() => { var syntaxTrees = CompletionHelper.GetSyntaxTrees(context); var ownSymbols = syntaxTrees.SelectMany(t => t.Tree.GetRoot().DescendantNodes().OfType <ClassDeclarationSyntax>() .Select(c => t.SemanticModel.GetDeclaredSymbol(c))).ToList(); var referencedSymbols = CompletionHelper.GetReferencedSymbols(context); return Enumerable.Concat(referencedSymbols, ownSymbols).OfType <INamedTypeSymbol>() .Where(c => c.DeclaredAccessibility == Accessibility.Public && !c.IsAbstract) .ToList(); })); }