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)); }