예제 #1
0
 /* 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());
       }
     }
   }
 }