/// <summary> /// Swap reference expression to built in type. /// </summary> /// <param name="referenceExpression"> /// The reference expression. /// </param> private static void SwapReferenceExpressionToBuiltInType(IReferenceExpression referenceExpression) { IPsiModule project = referenceExpression.GetPsiModule(); ICSharpExpression qualifierExpression = referenceExpression.QualifierExpression; if (qualifierExpression != null) { using (WriteLockCookie.Create(true)) { foreach (string[] builtInType in BuiltInTypes) { string text = qualifierExpression.GetText(); if (text == builtInType[0] || text == builtInType[1]) { ICSharpExpression expression = CSharpElementFactory.GetInstance(project).CreateExpression(builtInType[2], new object[0]); referenceExpression.SetQualifierExpression(expression); break; } } } } }
[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); }