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;
 }
示例#2
0
        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);
        }