/* Generate classes to process, adding or removing package marked by * command line options. */ private void prepareClasses() { // Remove/add all classes from packageInclusionMask as per -i option Chain<SootClass> processedClasses = new HashChain<SootClass>(); while (true) { Chain<SootClass> unprocessedClasses = new HashChain<SootClass>(getClasses()); unprocessedClasses.removeAll(processedClasses); if (unprocessedClasses.isEmpty()) break; processedClasses.addAll(unprocessedClasses); for (SootClass s : unprocessedClasses) { if (s.isPhantom()) continue; if (Options.v().app()) { s.setApplicationClass(); } if (Options.v().classes().contains(s.getName())) { s.setApplicationClass(); continue; } if (s.isApplicationClass() && isExcluded(s)) { s.setLibraryClass(); } if (isIncluded(s)) { s.setApplicationClass(); } if (s.isApplicationClass()) { // make sure we have the support loadClassAndSupport(s.getName()); } } } }