@Override public final boolean equals(Object other) { assert other != null && other instanceof Key; Key that = (Key) other; return (name.equals(that.name) && classloader.equals(that.classloader)); } }
@Override public final boolean equals(Object other) { assert other != null && other instanceof Key; Key that = (Key) other; return (name.equals(that.name) && classloader.equals(that.classloader)); } }
private static boolean isAPIComponent(final IClass cls) { ClassLoaderReference clr = cls.getClassLoader().getReference(); if (! (clr.equals(ClassLoaderReference.Primordial) || clr.equals(ClassLoaderReference.Extension))) { if (cls.getName().toString().startsWith("Landroid/")) { return true; } return false; } else { return true; } }
private static boolean isAPIComponent(final IClass cls) { ClassLoaderReference clr = cls.getClassLoader().getReference(); if (! (clr.equals(ClassLoaderReference.Primordial) || clr.equals(ClassLoaderReference.Extension))) { if (cls.getName().toString().startsWith("Landroid/")) { return true; } return false; } else { return true; } }
@Override public IClassLoader getLoader(ClassLoaderReference loaderRef) { for (IClassLoader loader : loaders) { if (loader.getReference().equals(loaderRef)) { return loader; } } Assertions.UNREACHABLE(); return null; }
public static boolean fromLoader(IClass declClass, ClassLoaderReference clr) { ClassLoaderReference nodeClRef = declClass.getClassLoader().getReference(); return nodeClRef.equals(clr); } }
@Override public void addToScope(ClassLoaderReference loader, Module m) { if (m instanceof SourceDirectoryTreeModule && loader.equals(ClassLoaderReference.Application)) { super.addToScope(SOURCE, m); } else { super.addToScope(loader, m); } } }
@Override public IClassLoader getLoader(ClassLoaderReference loaderRef) { for (IClassLoader loader : loaders) { if (loader.getReference().equals(loaderRef)) { return loader; } } Assertions.UNREACHABLE(); return null; }
@Override public void addToScope(ClassLoaderReference loader, Module m) { if (m instanceof SourceDirectoryTreeModule && loader.equals(ClassLoaderReference.Application)) { super.addToScope(SOURCE, m); } else { super.addToScope(loader, m); } } }
/** * @return true iff klass is loaded by the application loader. */ private static boolean isApplicationClass(AnalysisScope scope, IClass klass) { return scope.getApplicationLoader().equals(klass.getClassLoader().getReference()); } }
public static boolean fromLoader(IMethod method, ClassLoaderReference clr) { IClass declClass = method.getDeclaringClass(); ClassLoaderReference nodeClRef = declClass.getClassLoader().getReference(); return nodeClRef.equals(clr); }
/** * @return true iff klass is loaded by the application loader. */ private static boolean isApplicationClass(AnalysisScope scope, IClass klass) { return scope.getApplicationLoader().equals(klass.getClassLoader().getReference()); } }
public static boolean fromLoader(CGNode node, ClassLoaderReference clr) { IClass declClass = node.getMethod().getDeclaringClass(); ClassLoaderReference nodeClRef = declClass.getClassLoader().getReference(); return nodeClRef.equals(clr); }
@Override protected IClassLoader makeNewClassLoader(ClassLoaderReference classLoaderReference, IClassHierarchy cha, IClassLoader parent, AnalysisScope scope) throws IOException { if (classLoaderReference.equals(JavaSourceAnalysisScope.SOURCE)) { ClassLoaderImpl cl = makeSourceLoader(classLoaderReference, cha, parent); cl.init(scope.getModules(classLoaderReference)); return cl; } else { return super.makeNewClassLoader(classLoaderReference, cha, parent, scope); } }
@Override protected IClassLoader makeNewClassLoader(ClassLoaderReference classLoaderReference, IClassHierarchy cha, IClassLoader parent, AnalysisScope scope) throws IOException { if (classLoaderReference.equals(JavaSourceAnalysisScope.SOURCE)) { ClassLoaderImpl cl = makeSourceLoader(classLoaderReference, cha, parent); cl.init(scope.getModules(classLoaderReference)); return cl; } else { return super.makeNewClassLoader(classLoaderReference, cha, parent, scope); } }
/** * Restrict g to nodes from the Application loader */ public static Graph<IClass> pruneForAppLoader(Graph<IClass> g) { Predicate<IClass> f = c -> (c.getClassLoader().getReference().equals(ClassLoaderReference.Application)); return pruneGraph(g, f); }
/** * Restrict g to nodes from the Application loader */ static Graph<IClass> pruneForAppLoader(Graph<IClass> g) { Predicate<IClass> f = c -> (c.getClassLoader().getReference().equals(ClassLoaderReference.Application)); return pruneGraph(g, f); }
@Override public boolean test(CGNode o) { if (o == null) return false; return o.getMethod().getDeclaringClass().getClassLoader().getReference().equals(ClassLoaderReference.Application); } }
protected void test(URI[] androidLibs, String mainClass, String javaScopeFile, String... args) throws ClassHierarchyException, IllegalArgumentException, IOException, CancelException, InterruptedException, ClassNotFoundException, SecurityException, InvalidClassFileException, FailureException { AnalysisScope javaScope = CallGraphTestUtil.makeJ2SEAnalysisScope(javaScopeFile, CallGraphTestUtil.REGRESSION_EXCLUSIONS); String javaJarPath = getJavaJar(javaScope); File androidDex = convertJarToDex(javaJarPath); Pair<CallGraph,PointerAnalysis<InstanceKey>> android = makeDalvikCallGraph(androidLibs, null, mainClass, androidDex.getAbsolutePath()); dynamicCG(new File(javaJarPath), mainClass, args); checkEdges(android.fst, t -> t.getDeclaringClass().getClassLoader().equals(ClassLoaderReference.Application)); }
protected static Set<MethodReference> applicationMethods(CallGraph cg) { return processCG(cg, t -> t.getMethod().getReference().getDeclaringClass().getClassLoader().equals(ClassLoaderReference.Application), object -> object.getMethod().getReference()); }