/// <summary> /// Try to get dex import data for the given type definition? /// </summary> /// <returns>False if not found.</returns> public bool TryGetDexImport(TypeDefinition type, out DexImport dexImport) { lock (dataLock) { foreach (var assemblyClasses in loadedAssemblies) { if (assemblyClasses.TryGetDexImport(type, out dexImport)) { return(true); } } dexImport = null; return(false); } }
/// <summary> /// Try to get dex import data for the given java class name? /// </summary> /// <returns>False if not found.</returns> public bool TryGetDexImport(string className, out DexImport dexImport) { lock (dataLock) { foreach (var assemblyClasses in loadedAssemblies) { if (assemblyClasses.TryGetDexImport(className, out dexImport)) { return(true); } } dexImport = null; return(false); } }
/// <summary> /// Collect the class names of all dex import types. /// </summary> private static void CollectDexImportClasses(TypeDefinition type, Dictionary <string, DexImport> className2DexImports, Dictionary <TypeDefinition, DexImport> type2DexImports, DexImport declaringType, string scope, List <TypeDefinition> ignoreFromJavaTypes) { var attr = type.GetDexOrJavaImportAttribute(); if (attr == null) { return; } if (attr.HasProperties) { var ignoreFromJava = attr.Properties.Where(x => x.Name == AttributeConstants.DexImportAttributeIgnoreFromJavaName).Select(x => x.Argument.Value).FirstOrDefault(); if ((ignoreFromJava is bool) && ((bool)ignoreFromJava)) { ignoreFromJavaTypes.Add(type); return; } } var className = (string)attr.ConstructorArguments[0].Value; DexImport existing; if (className2DexImports.TryGetValue(className, out existing)) { existing.AddType(type); } else { className2DexImports[className] = existing = new DexImport(className, type, attr, scope) { DeclaringType = declaringType }; } type2DexImports[type] = existing; if (type.HasNestedTypes) { foreach (var nested in type.NestedTypes) { CollectDexImportClasses(nested, className2DexImports, type2DexImports, existing, scope, ignoreFromJavaTypes); } } }
/// <summary> /// Collect the class names of all dex import types. /// </summary> private static void CollectDexImportClasses(TypeDefinition type, Dictionary<string, DexImport> className2DexImports, Dictionary<TypeDefinition, DexImport> type2DexImports, DexImport declaringType, string scope, List<TypeDefinition> ignoreFromJavaTypes) { var attr = type.GetDexOrJavaImportAttribute(); if (attr == null) return; if (attr.HasProperties) { var ignoreFromJava = attr.Properties.Where(x => x.Name == AttributeConstants.DexImportAttributeIgnoreFromJavaName).Select(x => x.Argument.Value).FirstOrDefault(); if ((ignoreFromJava is bool) && ((bool) ignoreFromJava)) { ignoreFromJavaTypes.Add(type); return; } } var className = (string)attr.ConstructorArguments[0].Value; DexImport existing; if (className2DexImports.TryGetValue(className, out existing)) { existing.AddType(type); } else { className2DexImports[className] = existing = new DexImport(className, type, attr, scope) { DeclaringType = declaringType }; } type2DexImports[type] = existing; if (type.HasNestedTypes) { foreach (var nested in type.NestedTypes) { CollectDexImportClasses(nested, className2DexImports, type2DexImports, existing, scope, ignoreFromJavaTypes); } } }
/// <summary> /// Try to get dex import data for the given type definition? /// </summary> /// <returns>False if not found.</returns> public bool TryGetDexImport(TypeDefinition type, out DexImport dexImport) { return type2DexImportMap.TryGetValue(type, out dexImport); }
/// <summary> /// Try to get dex import data for the given class name? /// </summary> /// <returns>False if not found.</returns> public bool TryGetDexImport(string className, out DexImport dexImport) { return className2DexImportMap.TryGetValue(className, out dexImport); }
/// <summary> /// Try to get dex import data for the given java class name? /// </summary> /// <returns>False if not found.</returns> public bool TryGetDexImport(string className, out DexImport dexImport) { lock (dataLock) { foreach (var assemblyClasses in loadedAssemblies) { if (assemblyClasses.TryGetDexImport(className, out dexImport)) return true; } dexImport = null; return false; } }
/// <summary> /// Try to get dex import data for the given type definition? /// </summary> /// <returns>False if not found.</returns> public bool TryGetDexImport(TypeDefinition type, out DexImport dexImport) { lock (dataLock) { foreach (var assemblyClasses in loadedAssemblies) { if (assemblyClasses.TryGetDexImport(type, out dexImport)) return true; } dexImport = null; return false; } }
/// <summary> /// Try to get dex import data for the given type definition? /// </summary> /// <returns>False if not found.</returns> public bool TryGetDexImport(TypeDefinition type, out DexImport dexImport) { return(type2DexImportMap.TryGetValue(type, out dexImport)); }
/// <summary> /// Try to get dex import data for the given class name? /// </summary> /// <returns>False if not found.</returns> public bool TryGetDexImport(string className, out DexImport dexImport) { return(className2DexImportMap.TryGetValue(className, out dexImport)); }