Esempio n. 1
0
        public static TypeReference findTypeReference(ModuleDefinition module, string asmSimpleName, string fullName)
        {
            foreach (var type in module.GetTypeReferences()) {
                if (type.FullName != fullName)
                    continue;
                var asmRef = type.Scope as AssemblyNameReference;
                if (asmRef == null || asmRef.Name != asmSimpleName)
                    continue;

                return type;
            }
            return null;
        }
		private ICollection<AssemblyNameReference> GetModuleDependsOnAnalysis(ModuleDefinition module)
		{
			Mono.Collections.Generic.Collection<TypeDefinition> assemblyModuleTypes = module.Types;

			HashSet<TypeReference> firstLevelDependanceTypes = new HashSet<TypeReference>();
			foreach (TypeReference type in assemblyModuleTypes)
			{
				if (!firstLevelDependanceTypes.Contains(type))
				{
					firstLevelDependanceTypes.Add(type);
				}
			}

			foreach (TypeReference type in module.GetTypeReferences())
			{
				if (!firstLevelDependanceTypes.Contains(type))
				{
					firstLevelDependanceTypes.Add(type);
				}
			}

			ICollection<TypeReference> expadendTypeDependanceList = Utilities.GetExpandedTypeDependanceList(firstLevelDependanceTypes);
			ICollection<AssemblyNameReference> dependingOnAssemblies = Utilities.GetAssembliesDependingOn(module, expadendTypeDependanceList);

			foreach (AssemblyNameReference assemblyReference in module.AssemblyReferences)
			{
				if (!dependingOnAssemblies.Contains(assemblyReference))
				{
					dependingOnAssemblies.Add(assemblyReference);
				}
			}

			return dependingOnAssemblies;
		}
		private ICollection<TypeReference> GetExpandedTypeDependanceList(ModuleDefinition module)
		{
			Mono.Collections.Generic.Collection<TypeDefinition> moduleTypes;
			if (!UserDefinedTypes.TryGetValue(module, out moduleTypes))
			{
				throw new Exception("Module types not found.");
			}

			HashSet<TypeReference> firstLevelDependanceTypes = new HashSet<TypeReference>();
			foreach (TypeReference type in moduleTypes)
			{
				if (!firstLevelDependanceTypes.Contains(type))
				{
					firstLevelDependanceTypes.Add(type);
				}
			}

			foreach (TypeReference type in module.GetTypeReferences())
			{
				if (!firstLevelDependanceTypes.Contains(type))
				{
					firstLevelDependanceTypes.Add(type);
				}
			}

			return Telerik.JustDecompiler.Decompiler.Utilities.GetExpandedTypeDependanceList(firstLevelDependanceTypes);
		}
        public static TypeReference GetReference(this ModuleDefinition moduleDefinition, Type type)
        {
            var typeRefs = moduleDefinition.GetTypeReferences();

            return(typeRefs.FirstOrDefault(t => t.FullName == type.FullName));
        }