protected void addToResolveWorklist(Type type, int level) { // We go from Type -> SootClass directly, since RefType.getSootClass // calls makeClassRef anyway if (type instanceof RefType) { addToResolveWorklist(((RefType) type).getSootClass(), level); } else if (type instanceof ArrayType) { addToResolveWorklist(((ArrayType) type).baseType, level); } // Other types ignored }
public void reResolveHierarchy(SootClass sc, int level) { // Bring superclasses to hierarchy SootClass superClass = sc.getSuperclassUnsafe(); if (superClass != null) { addToResolveWorklist(superClass, level); } SootClass outerClass = sc.getOuterClassUnsafe(); if (outerClass != null) { addToResolveWorklist(outerClass, level); } for (SootClass iface : sc.getInterfaces()) { addToResolveWorklist(iface, level); } }
protected void bringToBodiesUnchecked(SootClass sc) { { Collection<Type> references = classToTypesHierarchy.get(sc); if (references != null) { // This must be an iterator, not a for-all since the underlying // collection may change as we go Iterator<Type> it = references.iterator(); while (it.hasNext()) { final Type t = it.next(); addToResolveWorklist(t, SootClass.HIERARCHY); } } } { Collection<Type> references = classToTypesSignature.get(sc); if (references != null) { // This must be an iterator, not a for-all since the underlying // collection may change as we go Iterator<Type> it = references.iterator(); while (it.hasNext()) { final Type t = it.next(); addToResolveWorklist(t, SootClass.SIGNATURES); } } } }
protected void bringToSignaturesUnchecked(SootClass sc) { for (SootField f : sc.getFields()) { addToResolveWorklist(f.getType(), SootClass.HIERARCHY); } for (SootMethod m : sc.getMethods()) { addToResolveWorklist(m.getReturnType(), SootClass.HIERARCHY); for (Type ptype : m.getParameterTypes()) { addToResolveWorklist(ptype, SootClass.HIERARCHY); } List<SootClass> exceptions = m.getExceptionsUnsafe(); if (exceptions != null) { for (SootClass exception : exceptions) { addToResolveWorklist(exception, SootClass.HIERARCHY); } } } // Bring superclasses to signatures reResolveHierarchy(sc, SootClass.SIGNATURES); }
public void reResolve(SootClass cl, int newResolvingLevel) { int resolvingLevel = cl.resolvingLevel(); if (resolvingLevel >= newResolvingLevel) { return; } reResolveHierarchy(cl, SootClass.HIERARCHY); cl.setResolvingLevel(newResolvingLevel); addToResolveWorklist(cl, resolvingLevel); processResolveWorklist(); }
/** * Resolves the given class. Depending on the resolver settings, may decide to resolve other classes as well. If the class * has already been resolved, just returns the class that was already resolved. */ public SootClass resolveClass(String className, int desiredLevel) { SootClass resolvedClass = null; try { resolvedClass = makeClassRef(className); addToResolveWorklist(resolvedClass, desiredLevel); processResolveWorklist(); return resolvedClass; } catch (SootClassNotFoundException e) { // remove unresolved class and rethrow if (resolvedClass != null) { assert resolvedClass.resolvingLevel() == SootClass.DANGLING; Scene.v().removeClass(resolvedClass); } throw e; } }
private void addToResolveWorklist(Type type, int level) { if( type instanceof RefType ) addToResolveWorklist(((RefType) type).getClassName(), level); else if( type instanceof ArrayType ) addToResolveWorklist(((ArrayType) type).baseType, level); } private void addToResolveWorklist(String className, int level) {
private void addToResolveWorklist(Type type, int level) { if( type instanceof RefType ) addToResolveWorklist(((RefType) type).getClassName(), level); else if( type instanceof ArrayType ) addToResolveWorklist(((ArrayType) type).baseType, level); } private void addToResolveWorklist(String className, int level) {
private void addToResolveWorklist(String className, int level) { addToResolveWorklist(makeClassRef(className), level); } private void addToResolveWorklist(SootClass sc, int desiredLevel) {
private void addToResolveWorklist(String className, int level) { addToResolveWorklist(makeClassRef(className), level); } private void addToResolveWorklist(SootClass sc, int desiredLevel) {
public void reResolveHierarchy(SootClass sc) { // Bring superclasses to hierarchy if(sc.hasSuperclass()) addToResolveWorklist(sc.getSuperclass(), SootClass.HIERARCHY); if(sc.hasOuterClass()) addToResolveWorklist(sc.getOuterClass(), SootClass.HIERARCHY); for( Iterator ifaceIt = sc.getInterfaces().iterator(); ifaceIt.hasNext(); ) { final SootClass iface = (SootClass) ifaceIt.next(); addToResolveWorklist(iface, SootClass.HIERARCHY); } }
public void reResolveHierarchy(SootClass sc) { // Bring superclasses to hierarchy if(sc.hasSuperclass()) addToResolveWorklist(sc.getSuperclass(), SootClass.HIERARCHY); if(sc.hasOuterClass()) addToResolveWorklist(sc.getOuterClass(), SootClass.HIERARCHY); for( Iterator ifaceIt = sc.getInterfaces().iterator(); ifaceIt.hasNext(); ) { final SootClass iface = (SootClass) ifaceIt.next(); addToResolveWorklist(iface, SootClass.HIERARCHY); } }
/** * Resolves the given class. Depending on the resolver settings, may * decide to resolve other classes as well. If the class has already * been resolved, just returns the class that was already resolved. * */ public SootClass resolveClass(String className, int desiredLevel) { SootClass resolvedClass = makeClassRef(className); addToResolveWorklist(resolvedClass, desiredLevel); processResolveWorklist(); return resolvedClass; }
/** * Resolves the given class. Depending on the resolver settings, may * decide to resolve other classes as well. If the class has already * been resolved, just returns the class that was already resolved. * */ public SootClass resolveClass(String className, int desiredLevel) { SootClass resolvedClass = makeClassRef(className); addToResolveWorklist(resolvedClass, desiredLevel); processResolveWorklist(); return resolvedClass; }
addToResolveWorklist((String) o, SootClass.HIERARCHY); } else if( o instanceof Type ) { addToResolveWorklist((Type) o, SootClass.HIERARCHY); } else throw new RuntimeException(o.toString()); addToResolveWorklist((String) o, SootClass.SIGNATURES); } else if( o instanceof Type ) { addToResolveWorklist((Type) o, SootClass.SIGNATURES); } else throw new RuntimeException(o.toString());
addToResolveWorklist((String) o, SootClass.HIERARCHY); } else if( o instanceof Type ) { addToResolveWorklist((Type) o, SootClass.HIERARCHY); } else throw new RuntimeException(o.toString()); addToResolveWorklist((String) o, SootClass.SIGNATURES); } else if( o instanceof Type ) { addToResolveWorklist((Type) o, SootClass.SIGNATURES); } else throw new RuntimeException(o.toString());
addToResolveWorklist( f.getType(), SootClass.HIERARCHY ); addToResolveWorklist( m.getReturnType(), SootClass.HIERARCHY ); for( Iterator ptypeIt = m.getParameterTypes().iterator(); ptypeIt.hasNext(); ) { final Type ptype = (Type) ptypeIt.next(); addToResolveWorklist( ptype, SootClass.HIERARCHY ); addToResolveWorklist( exception, SootClass.HIERARCHY ); addToResolveWorklist(sc.getSuperclass(), SootClass.SIGNATURES); for( Iterator ifaceIt = sc.getInterfaces().iterator(); ifaceIt.hasNext(); ) { final SootClass iface = (SootClass) ifaceIt.next(); addToResolveWorklist(iface, SootClass.SIGNATURES);
addToResolveWorklist( f.getType(), SootClass.HIERARCHY ); addToResolveWorklist( m.getReturnType(), SootClass.HIERARCHY ); for( Iterator ptypeIt = m.getParameterTypes().iterator(); ptypeIt.hasNext(); ) { final Type ptype = (Type) ptypeIt.next(); addToResolveWorklist( ptype, SootClass.HIERARCHY ); addToResolveWorklist( exception, SootClass.HIERARCHY ); addToResolveWorklist(sc.getSuperclass(), SootClass.SIGNATURES); for( Iterator ifaceIt = sc.getInterfaces().iterator(); ifaceIt.hasNext(); ) { final SootClass iface = (SootClass) ifaceIt.next(); addToResolveWorklist(iface, SootClass.SIGNATURES);
public void reResolve(SootClass cl) { int resolvingLevel = cl.resolvingLevel(); if( resolvingLevel < SootClass.HIERARCHY ) return; reResolveHierarchy(cl); cl.setResolvingLevel(SootClass.HIERARCHY); addToResolveWorklist(cl, resolvingLevel); processResolveWorklist(); }
public void reResolve(SootClass cl) { int resolvingLevel = cl.resolvingLevel(); if( resolvingLevel < SootClass.HIERARCHY ) return; reResolveHierarchy(cl); cl.setResolvingLevel(SootClass.HIERARCHY); addToResolveWorklist(cl, resolvingLevel); processResolveWorklist(); }