[NotNull] public static HashSet <IDeclaredType> Accept([NotNull] IType type) { var collector = new DeclaredTypesCollector(); type.Accept(collector); return(collector.myTypes); }
protected override bool AddLookupItems(CSharpCodeCompletionContext context, GroupedItemsCollector collector) { var referenceExpression = context.UnterminatedContext.ToReferenceExpression() ?? context.TerminatedContext.ToReferenceExpression(); if (referenceExpression == null) { return(false); } var qualifier = referenceExpression.QualifierExpression; if (qualifier == null) { return(false); } var settingsStore = qualifier.GetSettingsStore(); if (!settingsStore.GetValue(PostfixSettingsAccessor.ShowStaticMethods)) { return(false); } IType filterType; var qualifierType = GetQualifierType(qualifier, out filterType); if (qualifierType == null) { return(false); } var symbolTable = EmptySymbolTable.INSTANCE; foreach (var type in DeclaredTypesCollector.Accept(qualifierType)) { symbolTable = symbolTable.Merge(type.GetSymbolTable(context.PsiModule)); } var argumentsCount = GetExistingArgumentsCount(referenceExpression); // prepare symbol table of suitable static methods var accessFilter = new AccessRightsFilter(new ElementAccessContext(qualifier)); var staticMethodsFilter = new SuitableStaticMethodsFilter(filterType, qualifier, argumentsCount); var filteredSymbolTable = symbolTable.Filter(staticMethodsFilter, OverriddenFilter.INSTANCE, accessFilter); FillCollectorWithStaticItems(context, collector, filteredSymbolTable, argumentsCount); return(true); }
[NotNull] private static ISymbolTable GetStaticMethodsSymbolTable( [NotNull] IReferenceExpression referenceExpression, [NotNull] IType qualifierType, [NotNull] IType firstArgumentType) { var symbolTable = EmptySymbolTable.INSTANCE; var typesToTraverse = DeclaredTypesCollector.Accept(qualifierType); var psiModule = referenceExpression.GetPsiModule(); foreach (var type in typesToTraverse) { symbolTable = symbolTable.Merge(type.GetSymbolTable(psiModule)); } var existingArgumentsCount = GetExistingArgumentsCount(referenceExpression); // prepare symbol table of suitable static methods var accessFilter = new AccessRightsFilter(referenceExpression.Reference.GetAccessContext()); var qualifierExpression = referenceExpression.QualifierExpression.NotNull("qualifierExpression != null"); var staticMethodsFilter = new StaticMethodsByFirstArgumentTypeFilter(firstArgumentType, qualifierExpression, existingArgumentsCount); var filteredSymbolTable = symbolTable.Filter(staticMethodsFilter, OverriddenFilter.INSTANCE, accessFilter); return(filteredSymbolTable); }