Ejemplo n.º 1
0
        public override WriterContext GetWriterContext(IMemberDefinition member, ILanguage language)
        {
            TypeDefinition type = Utilities.GetDeclaringTypeOrSelf(member);

            Dictionary <FieldDefinition, PropertyDefinition> fieldToPropertyMap = type.GetFieldToPropertyMap(language);
            IEnumerable <FieldDefinition> propertyFields            = fieldToPropertyMap.Keys;
            HashSet <PropertyDefinition>  autoImplementedProperties = new HashSet <PropertyDefinition>(fieldToPropertyMap.Values);
            HashSet <EventDefinition>     autoImplementedEvents     = GetAutoImplementedEvents(type, language);

            TypeSpecificContext typeContext = new TypeSpecificContext(type)
            {
                AutoImplementedProperties = autoImplementedProperties, AutoImplementedEvents = autoImplementedEvents
            };

            TypeDefinition declaringType = Utilities.GetDeclaringTypeOrSelf(member);

            Dictionary <string, string> renamedNamespacesMap = new Dictionary <string, string>();
            MemberRenamingData          memberReanmingData   = GetMemberRenamingData(declaringType.Module, language);

            ModuleSpecificContext moduleContext =
                new ModuleSpecificContext(declaringType.Module, new List <string>(), new Dictionary <string, List <string> >(), new Dictionary <string, HashSet <string> >(),
                                          renamedNamespacesMap, memberReanmingData.RenamedMembers, memberReanmingData.RenamedMembersMap);

            return(new WriterContext(
                       new AssemblySpecificContext(),
                       moduleContext,
                       typeContext,
                       new Dictionary <string, MethodSpecificContext>(),
                       GetDecompiledStatements(member, language, propertyFields)));
        }
        public override ModuleSpecificContext GetModuleContext(ModuleDefinition module, ILanguage language)
        {
            if (this.cacheService.IsModuleContextInCache(module, language, this.renameInvalidMembers))
            {
                return(this.cacheService.GetModuleContextFromCache(module, language, this.renameInvalidMembers));
            }

            ICollection <string> moduleNamespaceUsings = GetModuleNamespaceUsings(module);
            Dictionary <string, List <string> >    collisionTypesData   = new Dictionary <string, List <string> >();
            Dictionary <string, HashSet <string> > namesapceHieararchy  = new Dictionary <string, HashSet <string> >();
            Dictionary <string, string>            renamedNamespacesMap = new Dictionary <string, string>();
            MemberRenamingData memberRenamingData = GetMemberRenamingData(module, language);

            ModuleSpecificContext moduleContext =
                new ModuleSpecificContext(module, moduleNamespaceUsings, collisionTypesData, namesapceHieararchy, renamedNamespacesMap, memberRenamingData.RenamedMembers, memberRenamingData.RenamedMembersMap);

            this.cacheService.AddModuleContextToCache(module, language, this.renameInvalidMembers, moduleContext);

            return(moduleContext);
        }