private void Initialize(string dexFilename, string mapfile, Func <AssemblyDefinition, string> filenameFromAssembly) { try { var readDex = Task.Factory.StartNew(() => DexLib.Dex.Read(dexFilename)); var readMap = Task.Factory.StartNew(() => new MapFileLookup(new MapFile(mapfile))); Task.WaitAll(readMap, readDex); var dex = readDex.Result; var map = readMap.Result; _modifiedDetector = new AssemblyModifiedDetector(filenameFromAssembly, map); foreach (var type in map.TypeEntries) { if (type.ScopeId == null) { continue; } var typeScopeId = GetTypeScopeId(type); // redirect the generated class if neccessary. var dexType = type.Id == 0 ? map.GeneratedType : type; foreach (var method in type.Methods) { if (type.ScopeId == null) { continue; } var scopeKey = Tuple.Create(typeScopeId, method.ScopeId); _methodsByScopeId[scopeKey] = Tuple.Create(dexType, method); } } _dexLookup = new DexLookup(dex); _dex = dex; _map = map; } catch (Exception ex) { IsEnabled = false; DLog.Warning(DContext.CompilerCodeGenerator, "Unable to initialize compiler cache: {0}", ex.Message); } }
private void Initialize(string dexFilename, string mapfile, Func<AssemblyDefinition, string> filenameFromAssembly) { try { var readDex = Task.Factory.StartNew(() => DexLib.Dex.Read(dexFilename)); var readMap = Task.Factory.StartNew(() => new MapFileLookup(new MapFile(mapfile))); Task.WaitAll(readMap, readDex); var dex = readDex.Result; var map = readMap.Result; _modifiedDetector = new AssemblyModifiedDetector(filenameFromAssembly, map); foreach (var type in map.TypeEntries) { if(type.ScopeId == null) continue; var typeScopeId = GetTypeScopeId(type); // redirect the generated class if neccessary. var dexType = type.Id == 0 ? map.GeneratedType : type; foreach (var method in type.Methods) { if (type.ScopeId == null) continue; var scopeKey = Tuple.Create(typeScopeId, method.ScopeId); _methodsByScopeId[scopeKey] = Tuple.Create(dexType, method); } } _dexLookup = new DexLookup(dex); _dex = dex; _map = map; } catch (Exception ex) { IsEnabled = false; DLog.Warning(DContext.CompilerCodeGenerator, "Unable to initialize compiler cache: {0}", ex.Message); } }