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) {