private static Dictionary<ITypeElement, IList<PsiOptionSymbol>> GetVisitorClasses(PsiCache cache) { List<PsiOptionSymbol> visitorClassName = cache.GetOptionSymbols("visitorClassName").ToList(); List<PsiOptionSymbol> visitorMetodSuffix = cache.GetOptionSymbols("visitorMethodSuffix").ToList(); List<PsiOptionSymbol> visitorMetodPrefix = cache.GetOptionSymbols("\"visitMethodPrefix\"").ToList(); List<PsiOptionSymbol> interfacesPackageName = cache.GetOptionSymbols("psiInterfacePackageName").ToList(); var classes = new Dictionary<ITypeElement, IList<PsiOptionSymbol>>(); foreach (PsiOptionSymbol visitorName in visitorClassName) { foreach (PsiOptionSymbol methodSuffix in visitorMetodSuffix) { foreach (PsiOptionSymbol methodPrefix in visitorMetodPrefix) { foreach (PsiOptionSymbol packageName in interfacesPackageName) { if ((visitorName.SourceFile == methodSuffix.SourceFile) && (methodPrefix.SourceFile == packageName.SourceFile) && (packageName.SourceFile == methodSuffix.SourceFile)) { IPsiSourceFile sourceFile = visitorName.SourceFile; ICollection<ITypeElement> visitorClasses = new List<ITypeElement>(); ICollection<ITypeElement> visitorNotGenericClasses = sourceFile.GetPsiServices().CacheManager.GetDeclarationsCache(sourceFile.PsiModule, false, true).GetTypeElementsByCLRName(packageName.Value + "." + visitorName.Value); foreach (ITypeElement typeElement in visitorNotGenericClasses) { visitorClasses.Add(typeElement); } ICollection<ITypeElement> visitorGenericClasses = sourceFile.GetPsiServices().CacheManager.GetDeclarationsCache(sourceFile.PsiModule, false, true).GetTypeElementsByCLRName( packageName.Value + "." + visitorName.Value + "`1"); foreach (ITypeElement visitorGenericClass in visitorGenericClasses) { visitorClasses.Add(visitorGenericClass); } visitorGenericClasses = sourceFile.GetPsiServices().CacheManager.GetDeclarationsCache(sourceFile.PsiModule, false, true).GetTypeElementsByCLRName( packageName.Value + "." + visitorName.Value + "`2"); foreach (ITypeElement visitorGenericClass in visitorGenericClasses) { visitorClasses.Add(visitorGenericClass); } foreach (ITypeElement typeElement in visitorClasses) { classes.Add(typeElement, new List<PsiOptionSymbol> { visitorName, methodSuffix, methodPrefix, packageName }); } } } } } } return classes; }
private static Dictionary <ITypeElement, IList <PsiOptionSymbol> > GetVisitorClasses(PsiCache cache) { List <PsiOptionSymbol> visitorClassName = cache.GetOptionSymbols("visitorClassName").ToList(); List <PsiOptionSymbol> visitorMetodSuffix = cache.GetOptionSymbols("visitorMethodSuffix").ToList(); List <PsiOptionSymbol> visitorMetodPrefix = cache.GetOptionSymbols("\"visitMethodPrefix\"").ToList(); List <PsiOptionSymbol> interfacesPackageName = cache.GetOptionSymbols("psiInterfacePackageName").ToList(); var classes = new Dictionary <ITypeElement, IList <PsiOptionSymbol> >(); foreach (PsiOptionSymbol visitorName in visitorClassName) { foreach (PsiOptionSymbol methodSuffix in visitorMetodSuffix) { foreach (PsiOptionSymbol methodPrefix in visitorMetodPrefix) { foreach (PsiOptionSymbol packageName in interfacesPackageName) { if ((visitorName.SourceFile == methodSuffix.SourceFile) && (methodPrefix.SourceFile == packageName.SourceFile) && (packageName.SourceFile == methodSuffix.SourceFile)) { IPsiSourceFile sourceFile = visitorName.SourceFile; ICollection <ITypeElement> visitorClasses = new List <ITypeElement>(); ICollection <ITypeElement> visitorNotGenericClasses = sourceFile.GetPsiServices().CacheManager.GetDeclarationsCache(sourceFile.PsiModule, false, true).GetTypeElementsByCLRName(packageName.Value + "." + visitorName.Value); foreach (ITypeElement typeElement in visitorNotGenericClasses) { visitorClasses.Add(typeElement); } ICollection <ITypeElement> visitorGenericClasses = sourceFile.GetPsiServices().CacheManager.GetDeclarationsCache(sourceFile.PsiModule, false, true).GetTypeElementsByCLRName( packageName.Value + "." + visitorName.Value + "`1"); foreach (ITypeElement visitorGenericClass in visitorGenericClasses) { visitorClasses.Add(visitorGenericClass); } visitorGenericClasses = sourceFile.GetPsiServices().CacheManager.GetDeclarationsCache(sourceFile.PsiModule, false, true).GetTypeElementsByCLRName( packageName.Value + "." + visitorName.Value + "`2"); foreach (ITypeElement visitorGenericClass in visitorGenericClasses) { visitorClasses.Add(visitorGenericClass); } foreach (ITypeElement typeElement in visitorClasses) { classes.Add(typeElement, new List <PsiOptionSymbol> { visitorName, methodSuffix, methodPrefix, packageName }); } } } } } } return(classes); }