Revert "Allow use of predex when shrinking"

This reverts commit 5759d5d622b1405d2c8cfe9a8df11f86abe801ff.

Bug: 18421993
Tests: PreSubmitTests

Change-Id: Ia23bd6016306cf1272828dc1f0fe52d325cfc5ae
diff --git a/jack-tests/tests/com/android/jack/shrob/ShrinkTests.java b/jack-tests/tests/com/android/jack/shrob/ShrinkTests.java
index 0c056af..37fec60 100644
--- a/jack-tests/tests/com/android/jack/shrob/ShrinkTests.java
+++ b/jack-tests/tests/com/android/jack/shrob/ShrinkTests.java
@@ -18,7 +18,6 @@
 
 import com.android.jack.Options;
 import com.android.jack.ProguardFlags;
-import com.android.jack.comparator.DexComparator;
 import com.android.jack.shrob.shrink.ShrinkStructurePrinter;
 import com.android.jack.test.category.SlowTests;
 import com.android.jack.test.comparator.ComparatorMapping;
@@ -144,9 +143,7 @@
   public void test020() throws Exception {
     File libOut = AbstractTestTools.createTempDir();
     File testOut = null;
-    File shrunkJackOut = null;
-    File dexFromShrunkJackOut = null;
-    File dexShrunkFromJackOut = null;
+    File shrinkOut = null;
 
     JackApiToolchainBase toolchain =
         AbstractTestTools.getCandidateToolchain(JackApiToolchainBase.class);
@@ -164,7 +161,7 @@
         /* zipFiles = */ false,
         new File(shrobTestsDir, "test020/jack"));
 
-    shrunkJackOut = AbstractTestTools.createTempDir();
+    shrinkOut = AbstractTestTools.createTempDir();
     toolchain = AbstractTestTools.getCandidateToolchain(JackApiToolchainBase.class);
     toolchain.addProguardFlags(
         dontObfuscateFlagFile,
@@ -172,37 +169,8 @@
     toolchain.addToClasspath(toolchain.getDefaultBootClasspath());
     toolchain.libToLib(
         testOut,
-        shrunkJackOut,
+        shrinkOut,
         /* zipFile = */ false);
-
-    dexFromShrunkJackOut = AbstractTestTools.createTempDir();
-    toolchain = AbstractTestTools.getCandidateToolchain(JackApiToolchainBase.class);
-    toolchain.addProperty("jack.library.prebuilt.use", "false");
-    toolchain.libToExe(
-        shrunkJackOut,
-        dexFromShrunkJackOut,
-        /* zipFile = */ false);
-
-    dexShrunkFromJackOut = AbstractTestTools.createTempDir();
-    toolchain = AbstractTestTools.getCandidateToolchain(JackApiToolchainBase.class);
-    toolchain.addProguardFlags(
-        dontObfuscateFlagFile,
-        new ProguardFlags(new File(shrobTestsDir, "test020"),"proguard.flags"));
-    toolchain.addToClasspath(toolchain.getDefaultBootClasspath());
-    toolchain.libToExe(
-        testOut,
-        dexShrunkFromJackOut,
-        /* zipFile = */ false);
-
-    DexComparator comparator = new DexComparator(
-        /* compareDebugInfo = */ true,
-        /* strict = */ true,
-        /* compareDebugInfoBinarily = */ true,
-        /* compareCodeBinarily = */ true);
-
-    comparator.compare(new File(dexFromShrunkJackOut, "classes.dex"),
-        new File(dexShrunkFromJackOut, "classes.dex"));
-
   }
 
   @Test
@@ -290,12 +258,12 @@
   public void test028() throws Exception {
     File testFolder = new File(shrobTestsDir, "test028");
     File jackar = null;
-    File shrunkjackar = null;
+    File shrinkedjackar = null;
 
     JackBasedToolchain toolchain = AbstractTestTools.getCandidateToolchain(JackBasedToolchain.class);
 
     jackar = AbstractTestTools.createTempFile("jackar", toolchain.getLibraryExtension());
-    shrunkjackar = AbstractTestTools.createTempFile("shrunkjackar", toolchain.getLibraryExtension());
+    shrinkedjackar = AbstractTestTools.createTempFile("shrinkedjackar", toolchain.getLibraryExtension());
     ProguardFlags flags = new ProguardFlags(testFolder, "proguard.flags001");
 
     toolchain.addToClasspath(toolchain.getDefaultBootClasspath())
@@ -305,7 +273,7 @@
         testFolder);
 
     toolchain = AbstractTestTools.getCandidateToolchain(JackBasedToolchain.class);
-    toolchain.libToLib(jackar, shrunkjackar, /* zipFiles = */ true);
+    toolchain.libToLib(jackar, shrinkedjackar, /* zipFiles = */ true);
   }
 
   @Test
diff --git a/jack/src/com/android/jack/Jack.java b/jack/src/com/android/jack/Jack.java
index 67c13b1..84ce916 100644
--- a/jack/src/com/android/jack/Jack.java
+++ b/jack/src/com/android/jack/Jack.java
@@ -53,17 +53,13 @@
 import com.android.jack.backend.dex.DexFileWriter;
 import com.android.jack.backend.dex.DexInLibraryProduct;
 import com.android.jack.backend.dex.DexInLibraryWriterAll;
-import com.android.jack.backend.dex.DexInLibraryWriterNoTypePrebuilt;
+import com.android.jack.backend.dex.DexInLibraryWriterNoPrebuilt;
 import com.android.jack.backend.dex.DexWritingTool;
 import com.android.jack.backend.dex.EncodedFieldBuilder;
 import com.android.jack.backend.dex.EncodedMethodBuilder;
 import com.android.jack.backend.dex.EnsureAndroidCompatibility;
 import com.android.jack.backend.dex.FieldAnnotationBuilder;
 import com.android.jack.backend.dex.FieldInitializerRemover;
-import com.android.jack.backend.dex.ImportedCodeItemBuilder;
-import com.android.jack.backend.dex.ImportedDexClassMarkerRemover;
-import com.android.jack.backend.dex.ImportedDexMarkerBuilder;
-import com.android.jack.backend.dex.ImportedDexMethodMarkerRemover;
 import com.android.jack.backend.dex.MainDexCollector;
 import com.android.jack.backend.dex.MainDexTracer;
 import com.android.jack.backend.dex.MethodAnnotationBuilder;
@@ -1752,13 +1748,10 @@
       {
         SubPlanBuilder<JDefinedClassOrInterface> typePlan6 =
             planBuilder.appendSubPlan(JDefinedClassOrInterfaceAdapter.class);
-        typePlan6.append(ImportedDexMarkerBuilder.class);
 
         {
           SubPlanBuilder<JMethod> methodPlan5 = typePlan6.appendSubPlan(JMethodAdapter.class);
           methodPlan5.append(CodeItemBuilder.class);
-          methodPlan5.append(ImportedCodeItemBuilder.class);
-          methodPlan5.append(ImportedDexMethodMarkerRemover.class);
           methodPlan5.append(CfgMarkerRemover.class);
           methodPlan5.append(EncodedMethodBuilder.class);
           methodPlan5.append(DexCodeMarkerRemover.class);
@@ -1787,10 +1780,9 @@
             || !features.contains(Incremental.class)) {
           typePlan6.append(DexInLibraryWriterAll.class);
         } else {
-          typePlan6.append(DexInLibraryWriterNoTypePrebuilt.class);
+          typePlan6.append(DexInLibraryWriterNoPrebuilt.class);
         }
         typePlan6.append(ClassDefItemMarkerRemover.class);
-        typePlan6.append(ImportedDexClassMarkerRemover.class);
       }
 
     }
diff --git a/jack/src/com/android/jack/JackEventType.java b/jack/src/com/android/jack/JackEventType.java
index ef16d22..2d97708 100644
--- a/jack/src/com/android/jack/JackEventType.java
+++ b/jack/src/com/android/jack/JackEventType.java
@@ -45,8 +45,7 @@
   ALL_JACK_SCHEDULABLES("All Jack schedulables"),
   DX_BACKEND("Dx backend"),
   DEX_MERGER("Dex merger"),
-  DEX_MERGER_FINISH("Dex merger finish"),
-  DEX_CODE_IMPORT("Read, parse and adaptation of imported dex code");
+  DEX_MERGER_FINISH("Dex merger finish");
 
   @Nonnull
   private final String name;
diff --git a/jack/src/com/android/jack/Options.java b/jack/src/com/android/jack/Options.java
index 9fb7b58..8b64bf1 100644
--- a/jack/src/com/android/jack/Options.java
+++ b/jack/src/com/android/jack/Options.java
@@ -380,13 +380,6 @@
         "jack.annotation-processor", "Enable annotation processors")
         .addDefaultValue(true).addCategory(DumpInLibrary.class);
 
-  @Nonnull
-  public static final BooleanPropertyId USE_WHOLE_DEX_PREBUILT =
-      BooleanPropertyId.create(
-        "jack.library.prebuilt.whole", "When using prebuilt, use each dex prebuilt as a whole")
-        .addCategory(Private.class)
-        .addDefaultValue(true);
-
   @Option(name = "--version", usage = "display version")
   private boolean version;
 
@@ -1109,7 +1102,7 @@
 
     if (flags != null) {
       if (flags.obfuscate() || flags.shrink()) {
-        configBuilder.set(Options.USE_WHOLE_DEX_PREBUILT, false);
+        configBuilder.set(Options.USE_PREBUILT_FROM_LIBRARY, false);
         logger
             .log(
                 Level.WARNING,
@@ -1117,7 +1110,6 @@
       }
 
       if (flags.obfuscate()) { // keepAttribute only makes sense when obfuscating
-        configBuilder.set(Options.USE_PREBUILT_FROM_LIBRARY, false);
         boolean emitRuntimeInvisibleAnnotation = flags.keepAttribute("RuntimeInvisibleAnnotations");
         configBuilder.set(
             AnnotationRemover.EMIT_SOURCE_RETENTION_ANNOTATION, emitRuntimeInvisibleAnnotation);
diff --git a/jack/src/com/android/jack/backend/dex/ClassAnnotationBuilder.java b/jack/src/com/android/jack/backend/dex/ClassAnnotationBuilder.java
index 311dee1..83c9629 100644
--- a/jack/src/com/android/jack/backend/dex/ClassAnnotationBuilder.java
+++ b/jack/src/com/android/jack/backend/dex/ClassAnnotationBuilder.java
@@ -22,7 +22,7 @@
 import com.android.jack.ir.ast.JAnnotation;
 import com.android.jack.ir.ast.JDefinedClassOrInterface;
 import com.android.jack.scheduling.feature.SourceVersion8;
-import com.android.jack.scheduling.filter.TypeWithoutValidTypePrebuilt;
+import com.android.jack.scheduling.filter.TypeWithoutPrebuiltFilter;
 import com.android.jack.scheduling.marker.ClassDefItemMarker;
 import com.android.sched.item.Description;
 import com.android.sched.schedulable.Constraint;
@@ -46,7 +46,7 @@
 @Use(AnnotationBuilder.class)
 @Optional(@ToSupport(feature = SourceVersion8.class,
     add = @Constraint(no = JAnnotation.RepeatedAnnotation.class)))
-@Filter(TypeWithoutValidTypePrebuilt.class)
+@Filter(TypeWithoutPrebuiltFilter.class)
 public class ClassAnnotationBuilder implements RunnableSchedulable<JDefinedClassOrInterface> {
 
   @Override
diff --git a/jack/src/com/android/jack/backend/dex/ClassDefItemBuilder.java b/jack/src/com/android/jack/backend/dex/ClassDefItemBuilder.java
index fc59a9f..548c503 100644
--- a/jack/src/com/android/jack/backend/dex/ClassDefItemBuilder.java
+++ b/jack/src/com/android/jack/backend/dex/ClassDefItemBuilder.java
@@ -33,7 +33,7 @@
 import com.android.jack.ir.ast.JTypeLookupException;
 import com.android.jack.ir.sourceinfo.SourceInfo;
 import com.android.jack.lookup.CommonTypes;
-import com.android.jack.scheduling.filter.TypeWithoutValidTypePrebuilt;
+import com.android.jack.scheduling.filter.TypeWithoutPrebuiltFilter;
 import com.android.jack.scheduling.marker.ClassDefItemMarker;
 import com.android.sched.item.Description;
 import com.android.sched.item.Name;
@@ -70,7 +70,7 @@
 @Transform(add = ClassDefItemMarker.class)
 @Protect(add = JDefinedClassOrInterface.class, modify = JDefinedClassOrInterface.class,
     remove = JDefinedClassOrInterface.class)
-@Filter(TypeWithoutValidTypePrebuilt.class)
+@Filter(TypeWithoutPrebuiltFilter.class)
 //Access isAnonymous which may depend on TypeName that is accessing enclosing type name.
 @Access(JSession.class)
 public class ClassDefItemBuilder implements RunnableSchedulable<JDefinedClassOrInterface> {
@@ -83,6 +83,10 @@
    * created {@code ClassDefItem} instance is then attached to the {@code JDeclaredType}
    * in a {@code ClassDefItemMarker} to be accessible from other schedulables.
    *
+   * <p>If the given type is external (not declared in the source files being
+   * compiled), it is ignored. No {@code ClassDefItem} is created for it and no
+   * marker is attached to it.
+   *
    * @param declaredType a non-null {@code JDeclaredType} for which a {@code ClassDefItem}
    * is created.
    */
diff --git a/jack/src/com/android/jack/backend/dex/DexInLibraryWriter.java b/jack/src/com/android/jack/backend/dex/DexInLibraryWriter.java
index 86d82c4..8743730 100644
--- a/jack/src/com/android/jack/backend/dex/DexInLibraryWriter.java
+++ b/jack/src/com/android/jack/backend/dex/DexInLibraryWriter.java
@@ -22,22 +22,7 @@
 import com.android.jack.Options;
 import com.android.jack.backend.dex.rop.CodeItemBuilder;
 import com.android.jack.dx.dex.DexOptions;
-import com.android.jack.dx.dex.file.CallSiteIdsSection;
 import com.android.jack.dx.dex.file.DexFile;
-import com.android.jack.dx.dex.file.FieldIdsSection;
-import com.android.jack.dx.dex.file.LazyCstIndexMap;
-import com.android.jack.dx.dex.file.MethodHandleIdsSection;
-import com.android.jack.dx.dex.file.MethodIdsSection;
-import com.android.jack.dx.dex.file.ProtoIdsSection;
-import com.android.jack.dx.dex.file.StringIdsSection;
-import com.android.jack.dx.dex.file.TypeIdsSection;
-import com.android.jack.dx.rop.cst.CstCallSiteRef;
-import com.android.jack.dx.rop.cst.CstFieldRef;
-import com.android.jack.dx.rop.cst.CstMethodHandleRef;
-import com.android.jack.dx.rop.cst.CstMethodRef;
-import com.android.jack.dx.rop.cst.CstPrototypeRef;
-import com.android.jack.dx.rop.cst.CstString;
-import com.android.jack.dx.rop.type.Type;
 import com.android.jack.ir.ast.JDefinedClassOrInterface;
 import com.android.jack.ir.formatter.BinaryQualifiedNameFormatter;
 import com.android.jack.library.FileType;
@@ -47,7 +32,6 @@
 import com.android.jack.library.OutputJackLibrary;
 import com.android.jack.library.TypeInInputLibraryLocation;
 import com.android.jack.scheduling.marker.ClassDefItemMarker;
-import com.android.jack.scheduling.marker.ImportedDexClassMarker;
 import com.android.jack.util.AndroidApiLevel;
 import com.android.sched.schedulable.RunnableSchedulable;
 import com.android.sched.util.config.ThreadConfig;
@@ -83,9 +67,8 @@
   @Nonnull
   private final AndroidApiLevel apiLevel = ThreadConfig.get(Options.ANDROID_MIN_API_LEVEL);
 
-  private final boolean useWholeDexPrebuilts =
-      ThreadConfig.get(Options.USE_PREBUILT_FROM_LIBRARY).booleanValue()
-      && ThreadConfig.get(Options.USE_WHOLE_DEX_PREBUILT).booleanValue();
+  private final boolean usePrebuilts =
+      ThreadConfig.get(Options.USE_PREBUILT_FROM_LIBRARY).booleanValue();
 
   @Nonnull
   private final Tracer tracer = TracerFactory.getTracer();
@@ -94,7 +77,7 @@
   public void run(@Nonnull JDefinedClassOrInterface type) {
     OutputVFile vFile;
 
-    if (useWholeDexPrebuilts) {
+    if (usePrebuilts) {
       Location loc = type.getLocation();
       if (loc instanceof TypeInInputLibraryLocation) {
         InputVFile in;
@@ -129,55 +112,13 @@
         }
       }
     }
+
     ClassDefItemMarker cdiMarker = type.getMarker(ClassDefItemMarker.class);
     assert cdiMarker != null;
 
     try (Event event = tracer.open(JackEventType.DX_BACKEND)) {
       DexOptions options = new DexOptions(apiLevel, forceJumbo);
       DexFile typeDex = new DexFile(options);
-
-      ImportedDexClassMarker importedDex = type.getMarker(ImportedDexClassMarker.class);
-      if (importedDex != null) {
-        try (Event importEvent = tracer.open(JackEventType.DEX_CODE_IMPORT)) {
-          LazyCstIndexMap indexMap = importedDex.getIndexMap();
-
-          StringIdsSection stringIds = typeDex.getStringIds();
-          for (CstString cstString : indexMap.getUsedCstString()) {
-            stringIds.intern(cstString);
-          }
-
-          TypeIdsSection typeIds = typeDex.getTypeIds();
-          for (Type typeRef : indexMap.getUsedType()) {
-            typeIds.intern(typeRef);
-          }
-
-          MethodIdsSection methodIds = typeDex.getMethodIds();
-          for (CstMethodRef cstMethodRef : indexMap.getUsedCstMethodRef()) {
-            methodIds.intern(cstMethodRef);
-          }
-
-          FieldIdsSection fieldIds = typeDex.getFieldIds();
-          for (CstFieldRef cstFieldRef : indexMap.getUsedCstFieldRef()) {
-            fieldIds.intern(cstFieldRef);
-          }
-
-          ProtoIdsSection protoIds = typeDex.getProtoIds();
-          for (CstPrototypeRef cstPrototypeRef : indexMap.getUsedCstPrototypeRef()) {
-            protoIds.intern(cstPrototypeRef.getPrototype());
-          }
-
-          MethodHandleIdsSection methodHandleIds = typeDex.getMethodHandleIds();
-          for (CstMethodHandleRef cstMethodHandleRef : indexMap.getUsedCstMethodHandleRef()) {
-            methodHandleIds.intern(cstMethodHandleRef);
-          }
-
-          CallSiteIdsSection callSiteIds = typeDex.getCallSiteIds();
-          for (CstCallSiteRef cstCallSiteRef : indexMap.getUsedCstCallSiteRef()) {
-            callSiteIds.add(cstCallSiteRef);
-          }
-        }
-      }
-
       typeDex.add(cdiMarker.getClassDefItem());
       try {
         vFile = outputLibrary.createFile(FileType.PREBUILT,
diff --git a/jack/src/com/android/jack/backend/dex/DexInLibraryWriterAll.java b/jack/src/com/android/jack/backend/dex/DexInLibraryWriterAll.java
index 6be131d..4ab1d5f 100644
--- a/jack/src/com/android/jack/backend/dex/DexInLibraryWriterAll.java
+++ b/jack/src/com/android/jack/backend/dex/DexInLibraryWriterAll.java
@@ -17,7 +17,6 @@
 package com.android.jack.backend.dex;
 
 import com.android.jack.scheduling.marker.ClassDefItemMarker;
-import com.android.jack.scheduling.marker.ImportedDexClassMarker;
 import com.android.sched.item.Description;
 import com.android.sched.schedulable.Constraint;
 import com.android.sched.schedulable.Produce;
@@ -26,7 +25,7 @@
  * A {@link DexInLibraryWriter} processing all types.
  */
 @Description("Write dex files in library")
-@Constraint(need = {ClassDefItemMarker.Complete.class, ImportedDexClassMarker.class})
+@Constraint(need = {ClassDefItemMarker.Complete.class})
 @Produce(DexInLibraryProduct.class)
 public class DexInLibraryWriterAll extends DexInLibraryWriter {}
 
diff --git a/jack/src/com/android/jack/backend/dex/DexInLibraryWriterNoTypePrebuilt.java b/jack/src/com/android/jack/backend/dex/DexInLibraryWriterNoPrebuilt.java
similarity index 69%
rename from jack/src/com/android/jack/backend/dex/DexInLibraryWriterNoTypePrebuilt.java
rename to jack/src/com/android/jack/backend/dex/DexInLibraryWriterNoPrebuilt.java
index 4ae4cdb..90b428c 100644
--- a/jack/src/com/android/jack/backend/dex/DexInLibraryWriterNoTypePrebuilt.java
+++ b/jack/src/com/android/jack/backend/dex/DexInLibraryWriterNoPrebuilt.java
@@ -16,20 +16,19 @@
 
 package com.android.jack.backend.dex;
 
-import com.android.jack.scheduling.filter.TypeWithoutValidTypePrebuilt;
+import com.android.jack.scheduling.filter.TypeWithoutPrebuiltFilter;
 import com.android.jack.scheduling.marker.ClassDefItemMarker;
-import com.android.jack.scheduling.marker.ImportedDexClassMarker;
 import com.android.sched.item.Description;
 import com.android.sched.schedulable.Constraint;
 import com.android.sched.schedulable.Filter;
 import com.android.sched.schedulable.Produce;
 
 /**
- * A {@link DexInLibraryWriter} only processing types without whole dex prebuilts.
+ * A {@link DexInLibraryWriter} only processing types without prebuilt.
  */
 @Description("Write dex files in library")
-@Constraint(need = {ClassDefItemMarker.Complete.class, ImportedDexClassMarker.class})
+@Constraint(need = {ClassDefItemMarker.Complete.class})
 @Produce(DexInLibraryProduct.class)
-@Filter(TypeWithoutValidTypePrebuilt.class)
-public class DexInLibraryWriterNoTypePrebuilt extends DexInLibraryWriter {}
+@Filter(TypeWithoutPrebuiltFilter.class)
+public class DexInLibraryWriterNoPrebuilt extends DexInLibraryWriter {}
 
diff --git a/jack/src/com/android/jack/backend/dex/DexWritingTool.java b/jack/src/com/android/jack/backend/dex/DexWritingTool.java
index 0be4b31..1bb5944 100644
--- a/jack/src/com/android/jack/backend/dex/DexWritingTool.java
+++ b/jack/src/com/android/jack/backend/dex/DexWritingTool.java
@@ -121,8 +121,8 @@
   @Nonnull
   private final AndroidApiLevel apiLevel = ThreadConfig.get(Options.ANDROID_MIN_API_LEVEL);
 
-  protected final boolean useWholeDexPrebuilts =
-      ThreadConfig.get(Options.USE_WHOLE_DEX_PREBUILT).booleanValue();
+  protected final boolean usePrebuilts =
+            ThreadConfig.get(Options.USE_PREBUILT_FROM_LIBRARY).booleanValue();
 
 
   @Nonnull
@@ -216,7 +216,7 @@
       anyDexList.add(new MatchableInputVFile(getDexInputVFileOfType(jackOutputLibrary, type)));
     }
 
-    if (useWholeDexPrebuilts) {
+    if (usePrebuilts) {
       DexWritingTool.addOrphanDexFiles(/*outputLibrary = */ null, mainDexList,
           new HashSet<MatchableInputVFile>(anyDexList));
     }
@@ -226,16 +226,13 @@
   protected InputVFile getDexInputVFileOfType(@Nonnull OutputJackLibrary jackOutputLibrary,
       @Nonnull JDefinedClassOrInterface type) {
     InputVFile inputVFile = null;
-
+    Location location = type.getLocation();
     try {
-      if (useWholeDexPrebuilts) {
-        Location location = type.getLocation();
-        if (location instanceof TypeInInputLibraryLocation) {
-          InputLibrary inputLibrary = ((TypeInInputLibraryLocation) location).getInputLibrary();
-          if (inputLibrary.containsFileType(FileType.PREBUILT)) {
-            inputVFile = inputLibrary.getFile(FileType.PREBUILT,
-                new VPath(BinaryQualifiedNameFormatter.getFormatter().getName(type), '/'));
-          }
+      if (location instanceof TypeInInputLibraryLocation) {
+        InputLibrary inputLibrary = ((TypeInInputLibraryLocation) location).getInputLibrary();
+        if (inputLibrary.containsFileType(FileType.PREBUILT)) {
+          inputVFile = inputLibrary.getFile(FileType.PREBUILT,
+              new VPath(BinaryQualifiedNameFormatter.getFormatter().getName(type), '/'));
         }
       }
 
diff --git a/jack/src/com/android/jack/backend/dex/EncodedFieldBuilder.java b/jack/src/com/android/jack/backend/dex/EncodedFieldBuilder.java
index d1bdd25..30a79f1 100644
--- a/jack/src/com/android/jack/backend/dex/EncodedFieldBuilder.java
+++ b/jack/src/com/android/jack/backend/dex/EncodedFieldBuilder.java
@@ -24,7 +24,7 @@
 import com.android.jack.ir.ast.JDefinedClassOrInterface;
 import com.android.jack.ir.ast.JField;
 import com.android.jack.ir.ast.JLiteral;
-import com.android.jack.scheduling.filter.TypeWithoutValidTypePrebuilt;
+import com.android.jack.scheduling.filter.TypeWithoutPrebuiltFilter;
 import com.android.jack.scheduling.marker.ClassDefItemMarker;
 import com.android.sched.item.Description;
 import com.android.sched.item.Name;
@@ -47,7 +47,7 @@
 @Constraint(need = ClassDefItemMarker.class)
 @Transform(add = ClassDefItemMarker.Field.class, modify = ClassDefItemMarker.class)
 @Protect(add = JField.class, modify = JField.class, remove = JField.class)
-@Filter(TypeWithoutValidTypePrebuilt.class)
+@Filter(TypeWithoutPrebuiltFilter.class)
 public class EncodedFieldBuilder implements RunnableSchedulable<JField> {
 
   /**
diff --git a/jack/src/com/android/jack/backend/dex/EncodedMethodBuilder.java b/jack/src/com/android/jack/backend/dex/EncodedMethodBuilder.java
index 702184c..25353f8 100644
--- a/jack/src/com/android/jack/backend/dex/EncodedMethodBuilder.java
+++ b/jack/src/com/android/jack/backend/dex/EncodedMethodBuilder.java
@@ -27,7 +27,7 @@
 import com.android.jack.ir.ast.JDefinedClassOrInterface;
 import com.android.jack.ir.ast.JMethod;
 import com.android.jack.ir.ast.JModifier;
-import com.android.jack.scheduling.filter.TypeWithoutValidTypePrebuilt;
+import com.android.jack.scheduling.filter.TypeWithoutPrebuiltFilter;
 import com.android.jack.scheduling.marker.ClassDefItemMarker;
 import com.android.jack.scheduling.marker.DexCodeMarker;
 import com.android.jack.transformations.EmptyClinit;
@@ -56,7 +56,7 @@
 @Transform(add = ClassDefItemMarker.Method.class,
     modify = ClassDefItemMarker.class)
 @Protect(add = JMethod.class, modify = JMethod.class, remove = JMethod.class)
-@Filter(TypeWithoutValidTypePrebuilt.class)
+@Filter(TypeWithoutPrebuiltFilter.class)
 public class EncodedMethodBuilder implements RunnableSchedulable<JMethod> {
 
   @Nonnull
diff --git a/jack/src/com/android/jack/backend/dex/FieldAnnotationBuilder.java b/jack/src/com/android/jack/backend/dex/FieldAnnotationBuilder.java
index 8d65295..f5be1e9 100644
--- a/jack/src/com/android/jack/backend/dex/FieldAnnotationBuilder.java
+++ b/jack/src/com/android/jack/backend/dex/FieldAnnotationBuilder.java
@@ -23,7 +23,7 @@
 import com.android.jack.ir.ast.JDefinedClassOrInterface;
 import com.android.jack.ir.ast.JField;
 import com.android.jack.scheduling.feature.SourceVersion8;
-import com.android.jack.scheduling.filter.TypeWithoutValidTypePrebuilt;
+import com.android.jack.scheduling.filter.TypeWithoutPrebuiltFilter;
 import com.android.jack.scheduling.marker.ClassDefItemMarker;
 import com.android.sched.item.Description;
 import com.android.sched.item.Synchronized;
@@ -49,7 +49,7 @@
 @Use(AnnotationBuilder.class)
 @Optional(@ToSupport(feature = SourceVersion8.class,
     add = @Constraint(no = JAnnotation.RepeatedAnnotation.class)))
-@Filter(TypeWithoutValidTypePrebuilt.class)
+@Filter(TypeWithoutPrebuiltFilter.class)
 public class FieldAnnotationBuilder implements RunnableSchedulable<JField> {
 
   @Override
diff --git a/jack/src/com/android/jack/backend/dex/ImportedCodeItemBuilder.java b/jack/src/com/android/jack/backend/dex/ImportedCodeItemBuilder.java
deleted file mode 100644
index c3275bb..0000000
--- a/jack/src/com/android/jack/backend/dex/ImportedCodeItemBuilder.java
+++ /dev/null
@@ -1,97 +0,0 @@
-/*
- * Copyright (C) 2016 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.jack.backend.dex;
-
-import com.android.jack.JackEventType;
-import com.android.jack.Options;
-import com.android.jack.dx.dex.file.ImportedCodeItem;
-import com.android.jack.dx.dex.file.ImportedDebugInfoItem;
-import com.android.jack.dx.dex.file.LazyCstIndexMap;
-import com.android.jack.dx.io.ClassData.Method;
-import com.android.jack.dx.io.Code;
-import com.android.jack.dx.io.DexBuffer;
-import com.android.jack.dx.rop.cst.CstMethodRef;
-import com.android.jack.ir.ast.JDefinedClassOrInterface;
-import com.android.jack.ir.ast.JMethod;
-import com.android.jack.scheduling.filter.TypeWithValidMethodPrebuilt;
-import com.android.jack.scheduling.filter.TypeWithoutValidTypePrebuilt;
-import com.android.jack.scheduling.marker.DexCodeMarker;
-import com.android.jack.scheduling.marker.ImportedDexClassMarker;
-import com.android.jack.scheduling.marker.ImportedDexMethodMarker;
-import com.android.sched.item.Description;
-import com.android.sched.schedulable.Constraint;
-import com.android.sched.schedulable.Filter;
-import com.android.sched.schedulable.RunnableSchedulable;
-import com.android.sched.schedulable.Transform;
-import com.android.sched.util.config.ThreadConfig;
-import com.android.sched.util.log.Event;
-import com.android.sched.util.log.Tracer;
-import com.android.sched.util.log.TracerFactory;
-
-import javax.annotation.Nonnull;
-
-/**
- * Generates {@link ImportedCodeItem} for {@link JMethod}. The
- * generated {@link ImportedCodeItem} is saved into the {@link DexCodeMarker}.
- */
-@Description("Builds ImportedCodeItem for JMethod")
-@Constraint(need = {ImportedDexClassMarker.class, ImportedDexMethodMarker.class})
-@Transform(add = DexCodeMarker.class)
-@Filter({TypeWithValidMethodPrebuilt.class, TypeWithoutValidTypePrebuilt.class})
-public class ImportedCodeItemBuilder implements RunnableSchedulable<JMethod> {
-  @Nonnull
-  private final  Tracer tracer = TracerFactory.getTracer();
-
-  @Nonnull
-  private final com.android.jack.util.filter.Filter<JMethod> filter =
-      ThreadConfig.get(Options.METHOD_FILTER);
-
-  @Override
-  public void run(@Nonnull JMethod jMethod) {
-    if (jMethod.isNative()
-        || jMethod.isAbstract()
-        || !filter.accept(this.getClass(), jMethod)) {
-      return;
-    }
-
-    try (Event importEvent = tracer.open(JackEventType.DEX_CODE_IMPORT)) {
-      JDefinedClassOrInterface enclosingType = jMethod.getEnclosingType();
-      ImportedDexClassMarker dexClassMarker = enclosingType.getMarker(ImportedDexClassMarker.class);
-      assert dexClassMarker != null;
-      synchronized (dexClassMarker) {
-        LazyCstIndexMap cstIndexMap = dexClassMarker.getIndexMap();
-        DexBuffer importedDexBuffer = dexClassMarker.getDexBuffer();
-        ImportedDexMethodMarker importedMethod = jMethod.getMarker(ImportedDexMethodMarker.class);
-        assert importedMethod != null;
-        Method method = importedMethod.getMethod();
-        CstMethodRef cstMethodRef = cstIndexMap.getCstMethodRef(method.getMethodIndex());
-        assert method.getCodeOffset() != 0;
-        Code code = importedDexBuffer.readCode(method);
-        ImportedDebugInfoItem idii =
-            code.getDebugInfoOffset() != 0 ? new ImportedDebugInfoItem(importedDexBuffer,
-                code.getDebugInfoOffset(), cstIndexMap) : null;
-
-        ImportedCodeItem codeItem = new ImportedCodeItem(cstMethodRef, code, idii, cstIndexMap);
-
-        // parse code and debug info to populate cstIndexMap
-        codeItem.loadLazyIndexMap();
-
-        jMethod.addMarker(new DexCodeMarker(codeItem));
-      }
-    }
-  }
-}
diff --git a/jack/src/com/android/jack/backend/dex/ImportedDexClassMarkerRemover.java b/jack/src/com/android/jack/backend/dex/ImportedDexClassMarkerRemover.java
deleted file mode 100644
index 5de46cb..0000000
--- a/jack/src/com/android/jack/backend/dex/ImportedDexClassMarkerRemover.java
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- * Copyright (C) 2017 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.jack.backend.dex;
-
-import com.android.jack.ir.ast.JDefinedClassOrInterface;
-import com.android.jack.scheduling.filter.TypeWithValidMethodPrebuilt;
-import com.android.jack.scheduling.filter.TypeWithoutValidTypePrebuilt;
-import com.android.jack.scheduling.marker.ImportedDexClassMarker;
-import com.android.sched.item.Description;
-import com.android.sched.schedulable.Constraint;
-import com.android.sched.schedulable.Filter;
-import com.android.sched.schedulable.RunnableSchedulable;
-import com.android.sched.schedulable.Transform;
-
-import javax.annotation.Nonnull;
-
-/**
- * A schedulable that removes {@link ImportedDexClassMarker} from a {@code JDefinedClassOrInterface}
- */
-@Description("Removes useless ImportedDexMethodMarker")
-@Constraint(need = ImportedDexClassMarker.class)
-@Transform(remove = ImportedDexClassMarker.class)
-@Filter({TypeWithValidMethodPrebuilt.class, TypeWithoutValidTypePrebuilt.class})
-public class ImportedDexClassMarkerRemover
-  implements RunnableSchedulable<JDefinedClassOrInterface> {
-
-  @Override
-  public void run(@Nonnull JDefinedClassOrInterface jdcoi) {
-    jdcoi.removeMarker(ImportedDexClassMarker.class);
-  }
-}
diff --git a/jack/src/com/android/jack/backend/dex/ImportedDexMarkerBuilder.java b/jack/src/com/android/jack/backend/dex/ImportedDexMarkerBuilder.java
deleted file mode 100644
index 0917c09..0000000
--- a/jack/src/com/android/jack/backend/dex/ImportedDexMarkerBuilder.java
+++ /dev/null
@@ -1,175 +0,0 @@
-/*
- * Copyright (C) 2016 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.jack.backend.dex;
-
-import com.google.common.collect.Maps;
-
-import com.android.jack.Jack;
-import com.android.jack.JackAbortException;
-import com.android.jack.dx.dex.file.LazyCstIndexMap;
-import com.android.jack.dx.io.ClassData;
-import com.android.jack.dx.io.ClassData.Method;
-import com.android.jack.dx.io.ClassDef;
-import com.android.jack.dx.io.DexBuffer;
-import com.android.jack.dx.io.MethodId;
-import com.android.jack.dx.io.ProtoId;
-import com.android.jack.dx.io.TypeList;
-import com.android.jack.ir.ast.JDefinedClassOrInterface;
-import com.android.jack.ir.ast.JMethod;
-import com.android.jack.ir.formatter.BinaryQualifiedNameFormatter;
-import com.android.jack.ir.formatter.TypePackageAndMethodFormatter;
-import com.android.jack.library.FileType;
-import com.android.jack.library.FileTypeDoesNotExistException;
-import com.android.jack.library.InputLibrary;
-import com.android.jack.library.TypeInInputLibraryLocation;
-import com.android.jack.reporting.ReportableException;
-import com.android.jack.reporting.Reporter.Severity;
-import com.android.jack.scheduling.filter.TypeWithValidMethodPrebuilt;
-import com.android.jack.scheduling.filter.TypeWithoutValidTypePrebuilt;
-import com.android.jack.scheduling.marker.ImportedDexClassMarker;
-import com.android.jack.scheduling.marker.ImportedDexMethodMarker;
-import com.android.jack.transformations.EmptyClinit;
-import com.android.sched.item.Description;
-import com.android.sched.schedulable.Constraint;
-import com.android.sched.schedulable.Filter;
-import com.android.sched.schedulable.Protect;
-import com.android.sched.schedulable.RunnableSchedulable;
-import com.android.sched.schedulable.Transform;
-import com.android.sched.util.file.CannotCreateFileException;
-import com.android.sched.util.file.CannotReadException;
-import com.android.sched.util.file.WrongPermissionException;
-import com.android.sched.util.location.Location;
-import com.android.sched.vfs.InputVFile;
-import com.android.sched.vfs.VPath;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.util.Iterator;
-import java.util.Map;
-
-import javax.annotation.Nonnull;
-
-/**
- * Builds markers required for prebuilt dex code importation.
- */
-@Description("Builds markers required for prebuilt dex code importation.")
-@Constraint(no = EmptyClinit.class)
-@Transform(add = {ImportedDexClassMarker.class, ImportedDexMethodMarker.class})
-@Protect(add = {JDefinedClassOrInterface.class, JMethod.class},
-         modify = {JDefinedClassOrInterface.class, JMethod.class},
-         remove = {JDefinedClassOrInterface.class, JMethod.class})
-@Filter({TypeWithValidMethodPrebuilt.class, TypeWithoutValidTypePrebuilt.class})
-public class ImportedDexMarkerBuilder implements RunnableSchedulable<JDefinedClassOrInterface> {
-
-  /**
-   * Creates the {@link LazyCstIndexMap} for the given {@link JDefinedClassOrInterface}. The created
-   * {@link LazyCstIndexMap} instance is then attached to the {@link JDefinedClassOrInterface} in a
-   * {@link ImportedDexClassMarker} to be accessible from other schedulables.
-   *
-   * @param declaredType a {@link JDefinedClassOrInterface} for which a
-   *        {@link ImportedDexClassMarker} is created.
-   */
-  @Override
-  public void run(@Nonnull JDefinedClassOrInterface declaredType) {
-    Location loc = declaredType.getLocation();
-    assert loc instanceof TypeInInputLibraryLocation;
-    InputVFile vFile;
-    InputLibrary inputLibrary = ((TypeInInputLibraryLocation) loc).getInputLibrary();
-    try {
-      vFile = inputLibrary.getFile(FileType.PREBUILT,
-          new VPath(BinaryQualifiedNameFormatter.getFormatter().getName(declaredType), '/'));
-      try (InputStream in = vFile.getInputStream()) {
-        try {
-          DexBuffer dexBuffer = new DexBuffer(in);
-          LazyCstIndexMap indexMap = new LazyCstIndexMap(dexBuffer);
-          Iterator<ClassDef> classDefs = dexBuffer.classDefs().iterator();
-          assert classDefs.hasNext();
-          ClassDef classDef = classDefs.next();
-          assert (!classDefs.hasNext())
-          && classDef.getTypeName().equals(Jack.getLookupFormatter().getName(declaredType));
-
-          ImportedDexClassMarker marker = new ImportedDexClassMarker(indexMap, dexBuffer, classDef);
-          declaredType.addMarker(marker);
-
-          if (classDef.getClassDataOffset() != 0) {
-            ClassData classDataToMerge = dexBuffer.readClassData(classDef);
-
-            Method[] allMethods = classDataToMerge.allMethods();
-            Map<String, Method> dexMethods = Maps.newHashMapWithExpectedSize(allMethods.length);
-            for (Method method : allMethods) {
-              dexMethods.put(getFullDescriptor(dexBuffer, method), method);
-            }
-
-            TypePackageAndMethodFormatter formater = Jack.getLookupFormatter();
-            for (JMethod jMethod : declaredType.getMethods()) {
-              Method dexMethod = dexMethods.get(formater.getName(jMethod));
-              assert dexMethod != null;
-              jMethod.addMarker(new ImportedDexMethodMarker(dexMethod));
-            }
-          }
-        } catch (IOException e) {
-          throw new CannotReadException(vFile, e);
-        }
-      } catch (IOException e) {
-        throw new CannotCreateFileException(vFile, e);
-      }
-    } catch (FileTypeDoesNotExistException | WrongPermissionException e) {
-      // handled by @Filter
-      throw new AssertionError(e);
-    } catch (CannotReadException | CannotCreateFileException e) {
-      PrebuiltImportException reportable = new PrebuiltImportException(e);
-      Jack.getSession().getReporter().report(Severity.FATAL, reportable);
-      throw new JackAbortException(reportable);
-    }
-  }
-
-  @Nonnull
-  private static String getFullDescriptor(@Nonnull DexBuffer dexBuffer, @Nonnull Method method) {
-    MethodId id = dexBuffer.methodIds().get(method.getMethodIndex());
-    StringBuilder sb = new StringBuilder(dexBuffer.strings().get(id.getNameIndex()));
-    sb.append('(');
-    ProtoId protoId = dexBuffer.protoIds().get(id.getProtoIndex());
-    TypeList paramTypes = dexBuffer.readTypeList(protoId.getParametersOffset());
-    for (short paramTypeId : paramTypes.getTypes()) {
-      sb.append(dexBuffer.typeNames().get(paramTypeId));
-    }
-    sb.append(')');
-    sb.append(dexBuffer.typeNames().get(protoId.getReturnTypeIndex()));
-    return sb.toString();
-  }
-
-
-  private static class PrebuiltImportException extends ReportableException {
-    private static final long serialVersionUID = 1L;
-
-    public PrebuiltImportException (@Nonnull Throwable cause) {
-      super(cause);
-    }
-
-    @Nonnull
-    @Override
-    public String getMessage() {
-      return "Prebuilt import: " + getCause().getMessage();
-    }
-
-    @Override
-    @Nonnull
-    public ProblemLevel getDefaultProblemLevel() {
-      return ProblemLevel.ERROR;
-    }
-  }
-}
diff --git a/jack/src/com/android/jack/backend/dex/ImportedDexMethodMarkerRemover.java b/jack/src/com/android/jack/backend/dex/ImportedDexMethodMarkerRemover.java
deleted file mode 100644
index 289de8c..0000000
--- a/jack/src/com/android/jack/backend/dex/ImportedDexMethodMarkerRemover.java
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * Copyright (C) 2017 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.jack.backend.dex;
-
-import com.android.jack.ir.ast.JMethod;
-import com.android.jack.scheduling.filter.TypeWithValidMethodPrebuilt;
-import com.android.jack.scheduling.filter.TypeWithoutValidTypePrebuilt;
-import com.android.jack.scheduling.marker.ImportedDexMethodMarker;
-import com.android.sched.item.Description;
-import com.android.sched.schedulable.Constraint;
-import com.android.sched.schedulable.Filter;
-import com.android.sched.schedulable.RunnableSchedulable;
-import com.android.sched.schedulable.Transform;
-
-import javax.annotation.Nonnull;
-
-/**
- * A schedulable that removes {@link ImportedDexMethodMarker} from a {@code JMethod}
- */
-@Description("Removes useless ImportedDexMethodMarker")
-@Constraint(need = ImportedDexMethodMarker.class)
-@Transform(remove = ImportedDexMethodMarker.class)
-@Filter({TypeWithValidMethodPrebuilt.class, TypeWithoutValidTypePrebuilt.class})
-public class ImportedDexMethodMarkerRemover implements RunnableSchedulable<JMethod> {
-
-  @Override
-  public void run(@Nonnull JMethod method) {
-    method.removeMarker(ImportedDexMethodMarker.class);
-  }
-}
diff --git a/jack/src/com/android/jack/backend/dex/MethodAnnotationBuilder.java b/jack/src/com/android/jack/backend/dex/MethodAnnotationBuilder.java
index 543289a..5bb806b 100644
--- a/jack/src/com/android/jack/backend/dex/MethodAnnotationBuilder.java
+++ b/jack/src/com/android/jack/backend/dex/MethodAnnotationBuilder.java
@@ -28,7 +28,7 @@
 import com.android.jack.ir.ast.JMethod;
 import com.android.jack.ir.ast.JParameter;
 import com.android.jack.scheduling.feature.SourceVersion8;
-import com.android.jack.scheduling.filter.TypeWithoutValidTypePrebuilt;
+import com.android.jack.scheduling.filter.TypeWithoutPrebuiltFilter;
 import com.android.jack.scheduling.marker.ClassDefItemMarker;
 import com.android.sched.item.Description;
 import com.android.sched.item.Synchronized;
@@ -57,7 +57,7 @@
                add = @Constraint(no = JAnnotation.RepeatedAnnotation.class)),
            @ToSupport(feature = ParameterMetadataFeature.class,
                add = @Constraint(need = ParameterMetadataAnnotation.class))})
-@Filter(TypeWithoutValidTypePrebuilt.class)
+@Filter(TypeWithoutPrebuiltFilter.class)
 public class MethodAnnotationBuilder implements RunnableSchedulable<JMethod> {
 
   @Nonnull
diff --git a/jack/src/com/android/jack/backend/dex/SingleDexWritingTool.java b/jack/src/com/android/jack/backend/dex/SingleDexWritingTool.java
index f8342d2..d66d84f 100644
--- a/jack/src/com/android/jack/backend/dex/SingleDexWritingTool.java
+++ b/jack/src/com/android/jack/backend/dex/SingleDexWritingTool.java
@@ -47,7 +47,7 @@
     for (JDefinedClassOrInterface type : Jack.getSession().getTypesToEmit()) {
       dexToMerge.add(new MatchableInputVFile(getDexInputVFileOfType(jackOutputLibrary, type)));
     }
-    if (useWholeDexPrebuilts) {
+    if (usePrebuilts) {
       DexWritingTool.addOrphanDexFiles(/*outputLibrary = */ null, dexToMerge);
     }
 
diff --git a/jack/src/com/android/jack/backend/dex/annotations/DefaultValueAnnotationAdder.java b/jack/src/com/android/jack/backend/dex/annotations/DefaultValueAnnotationAdder.java
index f2fb3ba..1c37f69 100644
--- a/jack/src/com/android/jack/backend/dex/annotations/DefaultValueAnnotationAdder.java
+++ b/jack/src/com/android/jack/backend/dex/annotations/DefaultValueAnnotationAdder.java
@@ -33,7 +33,7 @@
 import com.android.jack.ir.ast.MethodKind;
 import com.android.jack.ir.sourceinfo.SourceInfo;
 import com.android.jack.scheduling.feature.SourceVersion8;
-import com.android.jack.scheduling.filter.TypeWithoutValidTypePrebuilt;
+import com.android.jack.scheduling.filter.TypeWithoutPrebuiltFilter;
 import com.android.jack.transformations.request.AddAnnotation;
 import com.android.jack.transformations.request.AddNameValuePair;
 import com.android.jack.transformations.request.Remove;
@@ -85,7 +85,7 @@
     add = {JAnnotation.class, JNameValuePair.class})
 @Optional(@ToSupport(feature = SourceVersion8.class,
     add = @Constraint(no = JAnnotation.RepeatedAnnotation.class)))
-@Filter(TypeWithoutValidTypePrebuilt.class)
+@Filter(TypeWithoutPrebuiltFilter.class)
 // Method default values are transformed in class annotations, while the schedulable runs on methods
 @ExclusiveAccess(JDefinedClassOrInterface.class)
 public class DefaultValueAnnotationAdder implements RunnableSchedulable<JMethod> {
diff --git a/jack/src/com/android/jack/backend/dex/annotations/ReflectAnnotationsAdder.java b/jack/src/com/android/jack/backend/dex/annotations/ReflectAnnotationsAdder.java
index 196d47d..edb01fd 100644
--- a/jack/src/com/android/jack/backend/dex/annotations/ReflectAnnotationsAdder.java
+++ b/jack/src/com/android/jack/backend/dex/annotations/ReflectAnnotationsAdder.java
@@ -54,7 +54,7 @@
 import com.android.jack.ir.sourceinfo.SourceInfo;
 import com.android.jack.lookup.JPhantomLookup;
 import com.android.jack.scheduling.feature.SourceVersion8;
-import com.android.jack.scheduling.filter.TypeWithoutValidTypePrebuilt;
+import com.android.jack.scheduling.filter.TypeWithoutPrebuiltFilter;
 import com.android.jack.shrob.obfuscation.FinalNames;
 import com.android.jack.transformations.request.AddAnnotation;
 import com.android.jack.transformations.request.PutNameValuePair;
@@ -92,7 +92,7 @@
     unprotect = @With(remove = ReflectAnnotations.class))
 @Optional(@ToSupport(feature = SourceVersion8.class,
     add = @Constraint(no = JAnnotation.RepeatedAnnotation.class)))
-@Filter(TypeWithoutValidTypePrebuilt.class)
+@Filter(TypeWithoutPrebuiltFilter.class)
 // Access getSimpleName which may depend on TypeName that is accessing enclosing type name.
 @Access(JSession.class)
 public class ReflectAnnotationsAdder implements RunnableSchedulable<JDefinedClassOrInterface> {
diff --git a/jack/src/com/android/jack/dx/dex/file/DexFile.java b/jack/src/com/android/jack/dx/dex/file/DexFile.java
index 0bb4f34..7217d7d 100644
--- a/jack/src/com/android/jack/dx/dex/file/DexFile.java
+++ b/jack/src/com/android/jack/dx/dex/file/DexFile.java
@@ -387,7 +387,7 @@
    *
    * @return {@code non-null;} the prototype identifiers section
    */
-  public ProtoIdsSection getProtoIds() {
+  /*package*/ProtoIdsSection getProtoIds() {
     return protoIds;
   }
 
@@ -401,7 +401,7 @@
    * @return {@code non-null;} the method handle identifiers section
    */
   @Nonnull
-  public MethodHandleIdsSection getMethodHandleIds() {
+  /* package */MethodHandleIdsSection getMethodHandleIds() {
     return methodHandleIds;
   }
 
@@ -415,7 +415,7 @@
    * @return {@code non-null;} the call site identifiers section
    */
   @Nonnull
-  public CallSiteIdsSection getCallSiteIds() {
+  /*package*/CallSiteIdsSection getCallSiteIds() {
     return callSiteIds;
   }
 
diff --git a/jack/src/com/android/jack/dx/dex/file/ImportedCodeItem.java b/jack/src/com/android/jack/dx/dex/file/ImportedCodeItem.java
index 6e3d11b..27f2fc0 100644
--- a/jack/src/com/android/jack/dx/dex/file/ImportedCodeItem.java
+++ b/jack/src/com/android/jack/dx/dex/file/ImportedCodeItem.java
@@ -244,16 +244,6 @@
     return out.toByteArray();
   }
 
-  private void loadCatchHandlerTypes() {
-    for (CatchHandler catchHandler : code.getCatchHandlers()) {
-      int[] typeIndexes = catchHandler.getTypeIndexes();
-      int typeIndexesLength = typeIndexes.length;
-      for (int i = 0; i < typeIndexesLength; i++) {
-        cstIndexMap.getType(typeIndexes[i]);
-      }
-    }
-  }
-
   /**
    * Encode and remap code.
    * @param file {@link DexFile} which will contains remapped code.
@@ -286,51 +276,6 @@
     return outputCode.getArray();
   }
 
-  private void loadCodeConstants() {
-    CodeReader codeReader = new CodeReader();
-
-    codeReader.setStringVisitor(new CodeReader.Visitor() {
-      @Override
-      public void visit(DecodedInstruction[] all, DecodedInstruction decodedInst) {
-        cstIndexMap.getCstString(decodedInst.getFirstIndex());
-      }
-    });
-    codeReader.setFieldVisitor(new CodeReader.Visitor() {
-      @Override
-      public void visit(DecodedInstruction[] all, DecodedInstruction decodedInst) {
-        cstIndexMap.getCstFieldRef(decodedInst.getFirstIndex());
-      }
-    });
-    codeReader.setTypeVisitor(new CodeReader.Visitor() {
-      @Override
-      public void visit(DecodedInstruction[] all, DecodedInstruction decodedInst) {
-        cstIndexMap.getType(decodedInst.getFirstIndex());
-      }
-    });
-    codeReader.setMethodVisitor(new CodeReader.Visitor() {
-      @Override
-      public void visit(DecodedInstruction[] all, DecodedInstruction decodedInst) {
-        cstIndexMap.getCstMethodRef(decodedInst.getFirstIndex());
-      }
-    });
-    codeReader.setDualConstantVisitor(new CodeReader.Visitor() {
-      @Override
-      public void visit(DecodedInstruction[] all, DecodedInstruction decodedInst) {
-        cstIndexMap.getCstMethodRef(decodedInst.getFirstIndex());
-        cstIndexMap.getCstPrototype(decodedInst.getSecondIndex());
-      }
-    });
-    codeReader.setCallSiteVisitor(new CodeReader.Visitor() {
-      @Override
-      public void visit(DecodedInstruction[] all, DecodedInstruction decodedInst) {
-        cstIndexMap.getCstCallSite(decodedInst.getFirstIndex());
-      }
-    });
-
-    codeReader.visitAll(DecodedInstruction.decodeAll(code.getInstructions()));
-  }
-
-
   /**
    * Get the in registers count.
    * @return the count
@@ -370,15 +315,6 @@
     return cstIndexMap;
   }
 
-  public void loadLazyIndexMap() {
-    assert cstIndexMap instanceof LazyCstIndexMap;
-    loadCatchHandlerTypes();
-    loadCodeConstants();
-    if (debugInfoItem != null) {
-      debugInfoItem.loadDebugInfoItemConstants();
-    }
-  }
-
   private class GenericVisitor implements CodeReader.Visitor {
 
     @Override
diff --git a/jack/src/com/android/jack/dx/dex/file/ImportedDebugInfoItem.java b/jack/src/com/android/jack/dx/dex/file/ImportedDebugInfoItem.java
index b6e29ad..60f0b09 100644
--- a/jack/src/com/android/jack/dx/dex/file/ImportedDebugInfoItem.java
+++ b/jack/src/com/android/jack/dx/dex/file/ImportedDebugInfoItem.java
@@ -196,68 +196,4 @@
       }
     }
   }
-
-  public void loadDebugInfoItemConstants() {
-    com.android.jack.dx.io.DexBuffer.Section in = dexBuffer.open(debugInfoOffset);
-
-    in.readUleb128();
-
-    int parametersSize = in.readUleb128();
-
-    for (int p = 0; p < parametersSize; p++) {
-      int parameterName = in.readUleb128p1();
-      if (parameterName != ClassDef.NO_INDEX) {
-        cstIndexMap.getCstString(parameterName);
-      }
-    }
-
-    int nameIndex; // uleb128p1 string index. Needs indexMap adjustment.
-    int typeIndex; // uleb128p1 type index. Needs indexMap adjustment.
-    int sigIndex; // uleb128p1 string index. Needs indexMap adjustment.
-
-    while (true) {
-      int opcode = in.readByte();
-
-      switch (opcode) {
-        case DBG_END_SEQUENCE:
-          return;
-
-        case DBG_ADVANCE_PC:
-          in.readUleb128(); // addrDiff
-          break;
-
-        case DBG_ADVANCE_LINE:
-          in.readSleb128(); // lineDiff
-          break;
-
-        case DBG_START_LOCAL:
-        case DBG_START_LOCAL_EXTENDED:
-          in.readUleb128(); // registerNum
-          nameIndex = in.readUleb128p1();
-          cstIndexMap.getCstString(nameIndex);
-          typeIndex = in.readUleb128p1();
-          cstIndexMap.getType(typeIndex);
-          if (opcode == DBG_START_LOCAL_EXTENDED) {
-            sigIndex = in.readUleb128p1();
-            cstIndexMap.getCstString(sigIndex);
-          }
-          break;
-
-        case DBG_END_LOCAL:
-        case DBG_RESTART_LOCAL:
-          in.readUleb128(); // registerNum
-          break;
-
-        case DBG_SET_FILE:
-          nameIndex = in.readUleb128p1();
-          cstIndexMap.getCstString(nameIndex);
-          break;
-
-        case DBG_SET_PROLOGUE_END:
-        case DBG_SET_EPILOGUE_BEGIN:
-        default:
-          break;
-      }
-    }
-  }
 }
diff --git a/jack/src/com/android/jack/dx/dex/file/LazyCstIndexMap.java b/jack/src/com/android/jack/dx/dex/file/LazyCstIndexMap.java
deleted file mode 100644
index a1a8c3f..0000000
--- a/jack/src/com/android/jack/dx/dex/file/LazyCstIndexMap.java
+++ /dev/null
@@ -1,204 +0,0 @@
-/*
- * Copyright (C) 2016 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.jack.dx.dex.file;
-
-import com.android.jack.dx.io.DexBuffer;
-import com.android.jack.dx.io.FieldId;
-import com.android.jack.dx.io.MethodId;
-import com.android.jack.dx.io.ProtoId;
-import com.android.jack.dx.rop.cst.CstCallSiteRef;
-import com.android.jack.dx.rop.cst.CstFieldRef;
-import com.android.jack.dx.rop.cst.CstIndexMap;
-import com.android.jack.dx.rop.cst.CstMethodHandleRef;
-import com.android.jack.dx.rop.cst.CstMethodRef;
-import com.android.jack.dx.rop.cst.CstPrototypeRef;
-import com.android.jack.dx.rop.cst.CstString;
-import com.android.jack.dx.rop.type.Prototype;
-import com.android.jack.dx.rop.type.StdTypeList;
-import com.android.jack.dx.rop.type.Type;
-
-import java.util.ArrayList;
-import java.util.Collection;
-
-import javax.annotation.Nonnegative;
-import javax.annotation.Nonnull;
-
-/**
- * Auto loading index map, creating only used constants.
- */
-public class LazyCstIndexMap extends CstIndexMap {
-
-  @Nonnull
-  private final DexBuffer dexBuffer;
-
-  public LazyCstIndexMap(@Nonnull DexBuffer dexBuffer) {
-    super(dexBuffer);
-    this.dexBuffer = dexBuffer;
-  }
-
-  @Override
-  @Nonnull
-  public CstMethodRef getCstMethodRef(@Nonnegative int index) {
-    CstMethodRef cstMethodRef = methods[index];
-    if (cstMethodRef == null) {
-      MethodId id = dexBuffer.methodIds().get(index);
-      Type definingClass = getType(id.getDeclaringClassIndex());
-      CstString name = getCstString(id.getNameIndex());
-      Prototype prototype = getPrototype(id.getProtoIndex());
-      cstMethodRef = new CstMethodRef(definingClass, name, prototype);
-      methods[index] = cstMethodRef;
-    }
-    return cstMethodRef;
-  }
-
-  @Override
-  @Nonnull
-  public CstFieldRef getCstFieldRef(@Nonnegative int index) {
-    CstFieldRef cstFieldRef = fields[index];
-    if (cstFieldRef == null) {
-      FieldId id = dexBuffer.fieldIds().get(index);
-      Type definingClass = getType(id.getDeclaringClassIndex());
-      cstFieldRef = new CstFieldRef(definingClass, getCstString(id.getNameIndex()),
-          getType(id.getTypeIndex()));
-      fields[index] = cstFieldRef;
-    }
-    return cstFieldRef;
-  }
-
-  @Override
-  @Nonnull
-  public CstString getCstString(@Nonnegative int index) {
-    CstString cstString = strings[index];
-    if (cstString == null) {
-      cstString = new CstString(dexBuffer.strings().get(index));
-      strings[index] = cstString;
-    }
-    return cstString;
-  }
-
-  @Override
-  @Nonnull
-  public Type getType(@Nonnegative int index) {
-    Type type = types[index];
-    if (type == null) {
-      getCstString(dexBuffer.typeIds().get(index).intValue());
-      String typeNameDesc = dexBuffer.typeNames().get(index);
-      if (typeNameDesc.equals(Type.VOID.getDescriptor().getString())) {
-        type = Type.VOID;
-      } else {
-        type = Type.intern(typeNameDesc);
-      }
-      types[index] = type;
-    }
-    return type;
-  }
-
-  @Override
-  @Nonnull
-  public CstPrototypeRef getCstPrototype(@Nonnegative int index) {
-    CstPrototypeRef cstPrototypeRef = prototypes[index];
-    if (cstPrototypeRef == null) {
-      Prototype prototype = getPrototype(index);
-      cstPrototypeRef = new CstPrototypeRef(prototype);
-      prototypes[index] = cstPrototypeRef;
-    }
-    return cstPrototypeRef;
-  }
-
-  @Override
-  @Nonnull
-  public CstMethodHandleRef getCstMethodHandle(@Nonnegative int index) {
-    CstMethodHandleRef cstMethodHandleRef = methodHandles[index];
-    if (cstMethodHandleRef == null) {
-      cstMethodHandleRef = getCstMethodHandleRef(dexBuffer.methodHandleIds().get(index));
-      methodHandles[index] = cstMethodHandleRef;
-    }
-    return cstMethodHandleRef;
-  }
-
-  @Override
-  @Nonnull
-  public CstCallSiteRef getCstCallSite(@Nonnegative int index) {
-    CstCallSiteRef cstCallSiteRef = callSites[index];
-    if (cstCallSiteRef == null) {
-      cstCallSiteRef = dexBuffer.readCstCallSiteRef(this,
-          dexBuffer.callSiteIds().get(index).intValue());
-      callSites[index] = cstCallSiteRef;
-    }
-    return cstCallSiteRef;
-  }
-
-  @Nonnull
-  public Collection<CstString> getUsedCstString() {
-    return filterToCollection(strings);
-  }
-
-  @Nonnull
-  public Collection<Type> getUsedType() {
-    return filterToCollection(types);
-
-  }
-
-  @Nonnull
-  public Collection<CstFieldRef> getUsedCstFieldRef() {
-    return filterToCollection(fields);
-
-  }
-
-  @Nonnull
-  public Collection<CstMethodRef> getUsedCstMethodRef() {
-    return filterToCollection(methods);
-  }
-
-  @Nonnull
-  public Collection<CstPrototypeRef> getUsedCstPrototypeRef() {
-    return filterToCollection(prototypes);
-  }
-
-  @Nonnull
-  public Collection<CstMethodHandleRef> getUsedCstMethodHandleRef() {
-    return filterToCollection(methodHandles);
-  }
-
-  @Nonnull
-  public Collection<CstCallSiteRef> getUsedCstCallSiteRef() {
-    return filterToCollection(callSites);
-  }
-
-  @Nonnull
-  private Prototype getPrototype(@Nonnegative int index) {
-    ProtoId protoId = dexBuffer.protoIds().get(index);
-    getCstString(protoId.getShortyIndex());
-    StdTypeList paramTypeList =
-        getStdTypeList(dexBuffer.readTypeList(protoId.getParametersOffset()));
-
-    Type returnType = getType(protoId.getReturnTypeIndex()).getType();
-    Prototype prototype = Prototype.intern(paramTypeList, returnType);
-    return prototype;
-  }
-
-  @Nonnull
-  private <T> Collection<T> filterToCollection(@Nonnull T[] array) {
-    Collection<T> used = new ArrayList<T>(array.length);
-    for (T element : array) {
-      if (element != null) {
-        used.add(element);
-      }
-    }
-    return used;
-  }
-}
diff --git a/jack/src/com/android/jack/dx/rop/cst/CstIndexMap.java b/jack/src/com/android/jack/dx/rop/cst/CstIndexMap.java
index 1608a46..4bc7f33 100644
--- a/jack/src/com/android/jack/dx/rop/cst/CstIndexMap.java
+++ b/jack/src/com/android/jack/dx/rop/cst/CstIndexMap.java
@@ -18,10 +18,6 @@
 import com.android.jack.dx.dex.file.DexFile;
 import com.android.jack.dx.dex.file.IndexedItem;
 import com.android.jack.dx.io.DexBuffer;
-import com.android.jack.dx.io.MethodHandleId;
-import com.android.jack.dx.io.TypeList;
-import com.android.jack.dx.rop.cst.CstMethodHandleRef.MethodHandleKind;
-import com.android.jack.dx.rop.type.StdTypeList;
 import com.android.jack.dx.rop.type.Type;
 
 import javax.annotation.Nonnegative;
@@ -34,30 +30,30 @@
 
   /** Mapping between index and {@link CstString} value of a dex file.*/
   @Nonnull
-  protected final CstString[] strings;
+  private final CstString[] strings;
 
   /** Mapping between index and {@link Type} value of a dex file.*/
   @Nonnull
-  protected final Type[] types;
+  private final Type[] types;
 
   /** Mapping between index and {@link CstMethodRef} value of a dex file.*/
   @Nonnull
-  protected final CstMethodRef[] methods;
+  private final CstMethodRef[] methods;
 
   /** Mapping between index and {@link CstFieldRef} value of a dex file.*/
   @Nonnull
-  protected final CstFieldRef[] fields;
+  private final CstFieldRef[] fields;
 
   /** Mapping between index and {@link CstPrototypeRef} value of a dex file. */
   @Nonnull
-  protected final CstPrototypeRef[] prototypes;
+  private final CstPrototypeRef[] prototypes;
 
   /** Mapping between index and {@link CstMethodHandleRef} value of a dex file. */
   @Nonnull
-  protected final CstMethodHandleRef[] methodHandles;
+  private final CstMethodHandleRef[] methodHandles;
 
   /** Mapping between index and {@link CstCallSiteRef} value of a dex file. */
-  protected final CstCallSiteRef[] callSites;
+  private final CstCallSiteRef[] callSites;
 
   public CstIndexMap(@Nonnull DexBuffer dexBuffer) {
     strings = new CstString[dexBuffer.strings().size()];
@@ -275,52 +271,7 @@
   }
 
   @Nonnull
-  public CstCallSiteRef getCstCallSite(@Nonnegative int index) {
-    CstCallSiteRef cstCallSite = callSites[index];
-    assert cstCallSite != null;
-    return cstCallSite;
-  }
-
-  @Nonnull
   public CstCallSiteRef[] getCstCallSitesType() {
     return callSites;
   }
-  @Nonnull
-  public StdTypeList getStdTypeList(@Nonnull TypeList typeList) {
-    short[] type = typeList.getTypes();
-    int typesLength = type.length;
-    StdTypeList stdTypeList = new StdTypeList(typesLength);
-    for (int i = 0; i < typesLength; i++) {
-      stdTypeList.set(i, getType(type[i]));
-    }
-    stdTypeList.setImmutable();
-    return stdTypeList;
-  }
-
-  @Nonnull
-  public CstMethodHandleRef getCstMethodHandleRef(@Nonnull MethodHandleId methodHandleId) {
-    MethodHandleKind kind = methodHandleId.getKind();
-    CstMethodHandleRef cstMethodHandleRef;
-
-    switch (kind) {
-      case PUT_INSTANCE:
-      case PUT_STATIC:
-      case GET_INSTANCE:
-      case GET_STATIC: {
-        cstMethodHandleRef = new CstMethodHandleRef(kind,
-            getCstFieldRef(methodHandleId.getMemberIndex()));
-        break;
-      }
-      case INVOKE_CONSTRUCTOR:
-      case INVOKE_INSTANCE:
-      case INVOKE_STATIC: {
-        cstMethodHandleRef = new CstMethodHandleRef(kind,
-            getCstMethodRef(methodHandleId.getMemberIndex()));
-        break;
-      }
-      default:
-        throw new AssertionError();
-    }
-    return cstMethodHandleRef;
-  }
 }
diff --git a/jack/src/com/android/jack/scheduling/filter/TypeWithValidMethodPrebuilt.java b/jack/src/com/android/jack/scheduling/filter/TypeWithValidMethodPrebuilt.java
deleted file mode 100644
index b5b7992..0000000
--- a/jack/src/com/android/jack/scheduling/filter/TypeWithValidMethodPrebuilt.java
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- * Copyright (C) 2016 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.jack.scheduling.filter;
-
-import com.android.jack.ir.ast.JDefinedClassOrInterface;
-import com.android.sched.item.Description;
-import com.android.sched.schedulable.ComponentFilter;
-
-import javax.annotation.Nonnull;
-
-/**
- * A filter that only accepts types with a corresponding prebuilt code. The whole type prebuilt does
- * not need to be valid.
- */
-@Description("Filter accepting types with valid code prebuilt")
-public class TypeWithValidMethodPrebuilt implements ComponentFilter<JDefinedClassOrInterface> {
-
-  @Override
-  public boolean accept(@Nonnull JDefinedClassOrInterface clOrI) {
-    return TypeWithoutPrebuiltFilter.hasPrebuilt(clOrI);
-  }
-
-}
-
diff --git a/jack/src/com/android/jack/scheduling/filter/TypeWithoutPrebuiltFilter.java b/jack/src/com/android/jack/scheduling/filter/TypeWithoutPrebuiltFilter.java
index 7b7016e..8f3994e 100644
--- a/jack/src/com/android/jack/scheduling/filter/TypeWithoutPrebuiltFilter.java
+++ b/jack/src/com/android/jack/scheduling/filter/TypeWithoutPrebuiltFilter.java
@@ -27,26 +27,22 @@
 import javax.annotation.Nonnull;
 
 /**
- * A filter that only accepts types without corresponding prebuilt code. These are either types
- * from the source code or types from libraries without valid prebuilt for this type.
+ * A filter that only accepts types without no corresponding prebuilt code. These are either types
+ * from the source code or types from libraries without prebuilt for this type.
  */
 @Description("Filter accepting types without prebuilt")
 public class TypeWithoutPrebuiltFilter implements ComponentFilter<JDefinedClassOrInterface> {
 
   @Override
   public boolean accept(@Nonnull JDefinedClassOrInterface clOrI) {
-    return !TypeWithoutPrebuiltFilter.hasPrebuilt(clOrI);
-  }
-
-  static boolean hasPrebuilt(@Nonnull JDefinedClassOrInterface clOrI) {
     Location location = clOrI.getLocation();
     if (location instanceof TypeInInputLibraryLocation) {
       InputLibrary inputLibrary = ((TypeInInputLibraryLocation) location).getInputLibrary();
       if (inputLibrary.containsFileType(FileType.PREBUILT)) {
-        return true;
+        return false;
       }
     }
-    return false;
+    return true;
   }
 
 }
diff --git a/jack/src/com/android/jack/scheduling/filter/TypeWithoutValidTypePrebuilt.java b/jack/src/com/android/jack/scheduling/filter/TypeWithoutValidTypePrebuilt.java
deleted file mode 100644
index 49ad047..0000000
--- a/jack/src/com/android/jack/scheduling/filter/TypeWithoutValidTypePrebuilt.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * Copyright (C) 2016 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.jack.scheduling.filter;
-
-import com.android.jack.Options;
-import com.android.jack.ir.ast.JDefinedClassOrInterface;
-import com.android.sched.item.Description;
-import com.android.sched.schedulable.ComponentFilter;
-import com.android.sched.util.config.ThreadConfig;
-
-import javax.annotation.Nonnull;
-
-/**
- * A filter that only accepts types without corresponding valid whole dex prebuilt. These are either
- * types from the source code, types from libraries without prebuilt for this type or types for
- * which only prebuilt code is valid.
- */
-@Description("Filter accepting types without a valid type prebuilt")
-public class TypeWithoutValidTypePrebuilt
-  implements ComponentFilter<JDefinedClassOrInterface> {
-
-  private final boolean isUseTypePrebuiltEnabled =
-      ThreadConfig.get(Options.USE_WHOLE_DEX_PREBUILT).booleanValue();
-
-  @Override
-  public boolean accept(@Nonnull JDefinedClassOrInterface clOrI) {
-    if (!isUseTypePrebuiltEnabled) {
-      return true;
-    }
-    return !TypeWithoutPrebuiltFilter.hasPrebuilt(clOrI);
-  }
-
-}
-
diff --git a/jack/src/com/android/jack/scheduling/marker/ImportedDexClassMarker.java b/jack/src/com/android/jack/scheduling/marker/ImportedDexClassMarker.java
deleted file mode 100644
index 8e5398c..0000000
--- a/jack/src/com/android/jack/scheduling/marker/ImportedDexClassMarker.java
+++ /dev/null
@@ -1,74 +0,0 @@
-/*
- * Copyright (C) 2016 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.jack.scheduling.marker;
-
-import com.android.jack.dx.dex.file.LazyCstIndexMap;
-import com.android.jack.dx.io.ClassDef;
-import com.android.jack.dx.io.DexBuffer;
-import com.android.jack.ir.ast.JDefinedClassOrInterface;
-import com.android.sched.item.Description;
-import com.android.sched.marker.Marker;
-import com.android.sched.marker.ValidOn;
-
-import javax.annotation.Nonnull;
-
-/**
- * A marker which contains information about prebuilt dex code of a class or interface.
- */
-@Description("A marker which contains information about prebuilt dex code of a class or interface")
-@ValidOn(JDefinedClassOrInterface.class)
-public final class ImportedDexClassMarker implements Marker {
-
-  @Nonnull
-  private final LazyCstIndexMap indexMap;
-
-  @Nonnull
-  private final DexBuffer dexBuffer;
-
-  @Nonnull
-   private final ClassDef classDef;
-
-  public ImportedDexClassMarker(@Nonnull LazyCstIndexMap indexMap,
-      @Nonnull DexBuffer dexBuffer,
-      @Nonnull ClassDef classDef) {
-    this.indexMap = indexMap;
-    this.dexBuffer = dexBuffer;
-    this.classDef = classDef;
-  }
-
-  @Nonnull
-  public LazyCstIndexMap getIndexMap() {
-    return indexMap;
-  }
-
-  @Nonnull
-  public DexBuffer getDexBuffer() {
-    return dexBuffer;
-  }
-
-  @Nonnull
-  public ClassDef getClassDef() {
-    return classDef;
-  }
-
-  @Override
-  @Nonnull
-  public Marker cloneIfNeeded() {
-    return this;
-  }
-
-}
diff --git a/jack/src/com/android/jack/scheduling/marker/ImportedDexMethodMarker.java b/jack/src/com/android/jack/scheduling/marker/ImportedDexMethodMarker.java
deleted file mode 100644
index c83d99a..0000000
--- a/jack/src/com/android/jack/scheduling/marker/ImportedDexMethodMarker.java
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * Copyright (C) 2016 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.jack.scheduling.marker;
-
-import com.android.jack.dx.io.ClassData.Method;
-import com.android.jack.ir.ast.JMethod;
-import com.android.sched.item.Description;
-import com.android.sched.marker.Marker;
-import com.android.sched.marker.ValidOn;
-
-import javax.annotation.Nonnull;
-
-/**
- * A marker which contains prebuilt dex {@link Method} of a {@link JMethod}.
- */
-@Description("A marker which contains prebuilt dex Method.")
-@ValidOn(JMethod.class)
-public final class ImportedDexMethodMarker implements Marker {
-
-  @Nonnull
-  private final Method method;
-
-  public ImportedDexMethodMarker(@Nonnull Method method) {
-    this.method = method;
-  }
-
-  @Nonnull
-  public Method getMethod() {
-    return method;
-  }
-
-  @Override
-  @Nonnull
-  public Marker cloneIfNeeded() {
-    return this;
-  }
-}
diff --git a/jack/src/com/android/jack/tools/merger/ConstantManager.java b/jack/src/com/android/jack/tools/merger/ConstantManager.java
index 1c2751d..a8e08f5 100644
--- a/jack/src/com/android/jack/tools/merger/ConstantManager.java
+++ b/jack/src/com/android/jack/tools/merger/ConstantManager.java
@@ -23,13 +23,16 @@
 import com.android.jack.dx.io.MethodHandleId;
 import com.android.jack.dx.io.MethodId;
 import com.android.jack.dx.io.ProtoId;
+import com.android.jack.dx.io.TypeList;
 import com.android.jack.dx.rop.cst.CstFieldRef;
 import com.android.jack.dx.rop.cst.CstIndexMap;
 import com.android.jack.dx.rop.cst.CstMethodHandleRef;
+import com.android.jack.dx.rop.cst.CstMethodHandleRef.MethodHandleKind;
 import com.android.jack.dx.rop.cst.CstMethodRef;
 import com.android.jack.dx.rop.cst.CstPrototypeRef;
 import com.android.jack.dx.rop.cst.CstString;
 import com.android.jack.dx.rop.type.Prototype;
+import com.android.jack.dx.rop.type.StdTypeList;
 import com.android.jack.dx.rop.type.Type;
 
 import java.util.ArrayList;
@@ -150,7 +153,7 @@
     List<ProtoId> protoIds = dexBuffer.protoIds();
     for (ProtoId protoId : protoIds) {
       Prototype prototype = Prototype.intern(
-          cstIndexMap.getStdTypeList(dexBuffer.readTypeList(protoId.getParametersOffset())),
+          getStdTypeList(cstIndexMap, dexBuffer.readTypeList(protoId.getParametersOffset())),
           cstIndexMap.getType(protoId.getReturnTypeIndex()));
       CstPrototypeRef cstProtoRef = new CstPrototypeRef(prototype);
       if (cstPrototypeRefs.add(cstProtoRef)) {
@@ -177,7 +180,28 @@
 
     idx = 0;
     for (MethodHandleId methodHandleId : dexBuffer.methodHandleIds()) {
-      CstMethodHandleRef cstMethodHandleRef = cstIndexMap.getCstMethodHandleRef(methodHandleId);
+      MethodHandleKind kind = methodHandleId.getKind();
+      CstMethodHandleRef cstMethodHandleRef;
+
+      switch (kind) {
+        case PUT_INSTANCE:
+        case PUT_STATIC:
+        case GET_INSTANCE:
+        case GET_STATIC: {
+          cstMethodHandleRef = new CstMethodHandleRef(kind,
+              cstIndexMap.getCstFieldRef(methodHandleId.getMemberIndex()));
+          break;
+        }
+        case INVOKE_CONSTRUCTOR:
+        case INVOKE_INSTANCE:
+        case INVOKE_STATIC: {
+          cstMethodHandleRef = new CstMethodHandleRef(kind,
+              cstIndexMap.getCstMethodRef(methodHandleId.getMemberIndex()));
+          break;
+        }
+        default:
+          throw new AssertionError();
+      }
 
       if (cstMethodHandleRefs.add(cstMethodHandleRef)) {
         cstMethodHandleRefsNewlyAdded.add(cstMethodHandleRef);
@@ -238,6 +262,18 @@
     cstMethodHandleRefs.removeAll(cstMethodHandleRefsToRemove);
   }
 
+  @Nonnull
+  private StdTypeList getStdTypeList(@Nonnull CstIndexMap cstIndexMap, @Nonnull TypeList typeList) {
+    short[] type = typeList.getTypes();
+    int typesLength = type.length;
+    StdTypeList stdTypeList = new StdTypeList(typesLength);
+    for (int i = 0; i < typesLength; i++) {
+      stdTypeList.set(i, cstIndexMap.getType(type[i]));
+    }
+    stdTypeList.setImmutable();
+    return stdTypeList;
+  }
+
   public boolean validate(@Nonnull DexFile dexFile) {
     return ((dexFile.getStringIds().items().size() == string2CstStrings.size())
         && (dexFile.getFieldIds().items().size() == cstFieldRefs.size())
diff --git a/jack/src/com/android/jack/transformations/BridgeInInterfaceRemover.java b/jack/src/com/android/jack/transformations/BridgeInInterfaceRemover.java
index 737d017..d3ad1f3 100644
--- a/jack/src/com/android/jack/transformations/BridgeInInterfaceRemover.java
+++ b/jack/src/com/android/jack/transformations/BridgeInInterfaceRemover.java
@@ -24,7 +24,7 @@
 import com.android.jack.ir.ast.JDefinedClassOrInterface;
 import com.android.jack.ir.ast.JInterface;
 import com.android.jack.ir.ast.JMethod;
-import com.android.jack.scheduling.filter.TypeWithoutValidTypePrebuilt;
+import com.android.jack.scheduling.filter.TypeWithoutPrebuiltFilter;
 import com.android.jack.transformations.lambda.DefaultBridgeIntoInterface;
 import com.android.jack.transformations.request.Remove;
 import com.android.jack.transformations.request.TransformationRequest;
@@ -60,7 +60,7 @@
 // where default bridge methods are not supported, these methods have been removed from the code.
 // However, note that these methods are NOT removed from the jayce, thus they do exist in the
 // IR.
-@Filter(value = TypeWithoutValidTypePrebuilt.class,
+@Filter(value = TypeWithoutPrebuiltFilter.class,
     unlessOne = {Api01Feature.class, Api02Feature.class, Api03Feature.class})
 public class BridgeInInterfaceRemover implements RunnableSchedulable<JMethod> {
 
diff --git a/jack/src/com/android/jack/transformations/EmptyClinitRemover.java b/jack/src/com/android/jack/transformations/EmptyClinitRemover.java
index 2833088..4572f9e 100644
--- a/jack/src/com/android/jack/transformations/EmptyClinitRemover.java
+++ b/jack/src/com/android/jack/transformations/EmptyClinitRemover.java
@@ -22,7 +22,7 @@
 import com.android.jack.ir.ast.JMethodBody;
 import com.android.jack.ir.ast.JReturnStatement;
 import com.android.jack.ir.ast.JStatement;
-import com.android.jack.scheduling.filter.TypeWithoutValidTypePrebuilt;
+import com.android.jack.scheduling.filter.TypeWithoutPrebuiltFilter;
 import com.android.jack.transformations.request.Remove;
 import com.android.jack.transformations.request.TransformationRequest;
 import com.android.sched.item.Description;
@@ -42,7 +42,7 @@
 @Description("Remove empty clinit methods")
 @Constraint(no = {InitializationExpression.class})
 @Transform(remove = {EmptyClinit.class})
-@Filter(TypeWithoutValidTypePrebuilt.class)
+@Filter(TypeWithoutPrebuiltFilter.class)
 // This schedulable removes some methods
 @ExclusiveAccess(JDefinedClassOrInterface.class)
 public class EmptyClinitRemover implements RunnableSchedulable<JMethod> {
diff --git a/jack/src/com/android/jack/transformations/FieldInitializer.java b/jack/src/com/android/jack/transformations/FieldInitializer.java
index 14eebec..4eb2705 100644
--- a/jack/src/com/android/jack/transformations/FieldInitializer.java
+++ b/jack/src/com/android/jack/transformations/FieldInitializer.java
@@ -22,7 +22,7 @@
 import com.android.jack.ir.ast.JMethodBody;
 import com.android.jack.ir.ast.JPrimitiveType.JPrimitiveTypeEnum;
 import com.android.jack.ir.ast.JStatement;
-import com.android.jack.scheduling.filter.TypeWithoutValidTypePrebuilt;
+import com.android.jack.scheduling.filter.TypeWithoutPrebuiltFilter;
 import com.android.jack.transformations.assertion.DynamicAssertionFeature;
 import com.android.jack.transformations.request.PrependStatement;
 import com.android.jack.transformations.request.TransformationRequest;
@@ -46,7 +46,7 @@
 @Constraint(need = {InitializationExpression.class, EmptyClinit.class})
 @Transform(remove = {InitializationExpression.class, ThreeAddressCodeForm.class})
 @Support(DynamicAssertionFeature.class)
-@Filter(TypeWithoutValidTypePrebuilt.class)
+@Filter(TypeWithoutPrebuiltFilter.class)
  // Modifies <clinit>
 @ExclusiveAccess(JDefinedClassOrInterface.class)
 public class FieldInitializer implements RunnableSchedulable<JField> {
diff --git a/jack/src/com/android/jack/transformations/assertion/DynamicAssertionTransformer.java b/jack/src/com/android/jack/transformations/assertion/DynamicAssertionTransformer.java
index 9e58efd..f62eb4b 100644
--- a/jack/src/com/android/jack/transformations/assertion/DynamicAssertionTransformer.java
+++ b/jack/src/com/android/jack/transformations/assertion/DynamicAssertionTransformer.java
@@ -44,7 +44,7 @@
 import com.android.jack.ir.sourceinfo.SourceInfo;
 import com.android.jack.lookup.CommonTypes;
 import com.android.jack.lookup.JLookupException;
-import com.android.jack.scheduling.filter.TypeWithoutValidTypePrebuilt;
+import com.android.jack.scheduling.filter.TypeWithoutPrebuiltFilter;
 import com.android.jack.transformations.InitializationExpression;
 import com.android.jack.transformations.ast.BooleanTestOutsideIf;
 import com.android.jack.transformations.ast.NewInstanceRemoved;
@@ -92,7 +92,7 @@
     JExpressionStatement.class},
     remove = {JAssertStatement.class, ThreeAddressCodeForm.class, NewInstanceRemoved.class})
 @Support(DynamicAssertionFeature.class)
-@Filter(TypeWithoutValidTypePrebuilt.class)
+@Filter(TypeWithoutPrebuiltFilter.class)
 // Adds field to enclosing class.
 @ExclusiveAccess(JDefinedClassOrInterface.class)
 public class DynamicAssertionTransformer implements RunnableSchedulable<JMethod> {
diff --git a/jack/src/com/android/jack/transformations/lambda/DefaultBridgeInLambdaAdder.java b/jack/src/com/android/jack/transformations/lambda/DefaultBridgeInLambdaAdder.java
index 25a1655..021856e 100644
--- a/jack/src/com/android/jack/transformations/lambda/DefaultBridgeInLambdaAdder.java
+++ b/jack/src/com/android/jack/transformations/lambda/DefaultBridgeInLambdaAdder.java
@@ -36,7 +36,7 @@
 import com.android.jack.ir.sourceinfo.SourceInfo;
 import com.android.jack.reporting.Reportable;
 import com.android.jack.reporting.Reporter.Severity;
-import com.android.jack.scheduling.filter.TypeWithoutValidTypePrebuilt;
+import com.android.jack.scheduling.filter.TypeWithoutPrebuiltFilter;
 import com.android.jack.transformations.InvalidDefaultBridgeInInterfaceRemoved;
 import com.android.jack.util.AndroidApiLevel;
 import com.android.sched.item.Description;
@@ -64,7 +64,7 @@
 @Transform(
     add = JLambda.DefaultBridgeAddedInLambda.class,
     modify = JLambda.class)
-@Filter(TypeWithoutValidTypePrebuilt.class)
+@Filter(TypeWithoutPrebuiltFilter.class)
 // Access implements.
 @Access(JSession.class)
 public class DefaultBridgeInLambdaAdder implements RunnableSchedulable<JMethod> {
diff --git a/jack/src/com/android/jack/transformations/lambda/LambdaConverter.java b/jack/src/com/android/jack/transformations/lambda/LambdaConverter.java
index c7d8475..68bc2ec 100644
--- a/jack/src/com/android/jack/transformations/lambda/LambdaConverter.java
+++ b/jack/src/com/android/jack/transformations/lambda/LambdaConverter.java
@@ -8,7 +8,7 @@
 import com.android.jack.ir.ast.JMethod;
 import com.android.jack.ir.ast.JVisitor;
 import com.android.jack.ir.sourceinfo.SourceInfo;
-import com.android.jack.scheduling.filter.TypeWithoutValidTypePrebuilt;
+import com.android.jack.scheduling.filter.TypeWithoutPrebuiltFilter;
 import com.android.jack.transformations.request.Replace;
 import com.android.jack.transformations.request.TransformationRequest;
 import com.android.sched.item.Description;
@@ -31,7 +31,7 @@
 @Use(LambdaInfoMarker.class)
 @Support(LambdaToAnonymousConverter.class)
 @Access(JDefinedClassOrInterface.class)
-@Filter(TypeWithoutValidTypePrebuilt.class)
+@Filter(TypeWithoutPrebuiltFilter.class)
 public class LambdaConverter implements RunnableSchedulable<JMethod> {
   @Override
   public void run(@Nonnull JMethod method) {