/** * Returns true if an access to <code>target</code> is legal from code in <code>container</code>. */ public static boolean isAccessLegal(SootMethod container, SootClass target) { return target.isPublic() || container.getDeclaringClass().getPackageName().equals(target.getPackageName()); }
private static List<SootClass> getVisibleApplicationClasses(SootMethod visibleBy) { final List<SootClass> result = new ArrayList<>(); final Iterator<SootClass> applicationClassesIterator = Scene.v().getApplicationClasses().snapshotIterator(); while (applicationClassesIterator.hasNext()) { final SootClass applicationClass = applicationClassesIterator.next(); if (applicationClass.isConcrete() && !applicationClass.isInterface() && applicationClass.isPublic() && Scene.v().getActiveHierarchy().isVisible(applicationClass, visibleBy)) { result.add(applicationClass); } } return result; }
/** * Checks whether check is a visible class in view of the from class. It assumes that protected and private classes do not * exit. If they exist and check is either protected or private, the check will return false. */ public boolean isVisible(SootClass from, SootClass check) { if (check.isPublic()) { return true; } if (check.isProtected() || check.isPrivate()) { return false; } // package visibility return from.getJavaPackageName().equals(check.getJavaPackageName()); }
/** * Returns true if the given method is visible to client code. */ private static boolean visible(SootMethod mPrime) { SootClass cPrime = mPrime.getDeclaringClass(); return (cPrime.isPublic() || cPrime.isProtected() || (!cPrime.isPrivate() && !ASSUME_PACKAGES_SEALED)) && (mPrime.isPublic() || mPrime.isProtected() || (!mPrime.isPrivate() && !ASSUME_PACKAGES_SEALED)); } }