Merge "Change Builder APIs with more Origin"
diff --git a/src/main/java/com/android/tools/r8/BaseCommand.java b/src/main/java/com/android/tools/r8/BaseCommand.java
index e35010a..5cd87fb 100644
--- a/src/main/java/com/android/tools/r8/BaseCommand.java
+++ b/src/main/java/com/android/tools/r8/BaseCommand.java
@@ -5,6 +5,7 @@
import com.android.tools.r8.errors.CompilationError;
import com.android.tools.r8.errors.Unreachable;
+import com.android.tools.r8.origin.Origin;
import com.android.tools.r8.origin.PathOrigin;
import com.android.tools.r8.shaking.FilteredClassPath;
import com.android.tools.r8.utils.AbortException;
@@ -159,26 +160,14 @@
}
/** Add Java-bytecode program-data. */
- public B addClassProgramData(byte[]... data) {
- app.addClassProgramData(data);
- return self();
- }
-
- /** Add Java-bytecode program-data. */
- public B addClassProgramData(Collection<byte[]> data) {
- app.addClassProgramData(data);
+ public B addClassProgramData(byte[] data, Origin origin) {
+ app.addClassProgramData(data, origin);
return self();
}
/** Add dex program-data. */
- public B addDexProgramData(byte[]... data) {
- app.addDexProgramData(data);
- return self();
- }
-
- /** Add dex program-data. */
- public B addDexProgramData(Collection<byte[]> data) {
- app.addDexProgramData(data);
+ public B addDexProgramData(byte[] data, Origin origin) {
+ app.addDexProgramData(data, origin);
return self();
}
diff --git a/src/main/java/com/android/tools/r8/benchmarks/FrameworkIncrementalDexingBenchmark.java b/src/main/java/com/android/tools/r8/benchmarks/FrameworkIncrementalDexingBenchmark.java
index 8f6caa9..7a5f627 100644
--- a/src/main/java/com/android/tools/r8/benchmarks/FrameworkIncrementalDexingBenchmark.java
+++ b/src/main/java/com/android/tools/r8/benchmarks/FrameworkIncrementalDexingBenchmark.java
@@ -151,7 +151,8 @@
.setOutputMode(OutputMode.FilePerInputClass)
.setEnableDesugaring(desugar);
for (int j = 0; j < count; j++) {
- builder.addClassProgramData(provider.resources.get(descriptors.get(index + j)));
+ builder.addClassProgramData(provider.resources.get(descriptors.get(index + j)),
+ Origin.unknown());
}
D8Output out =
D8.run(
@@ -174,22 +175,21 @@
Map<String, Resource> outputs,
ExecutorService executor)
throws IOException, CompilationException, CompilationFailedException {
- List<byte[]> bytes = new ArrayList<>(outputs.size());
+ Builder builder = D8Command.builder()
+ .setMinApiLevel(API)
+ .setIntermediate(false)
+ .setMode(CompilationMode.DEBUG)
+ .setOutputMode(OutputMode.Indexed)
+ .setEnableDesugaring(false);
for (Resource input : outputs.values()) {
try (InputStream inputStream = input.getStream()) {
- bytes.add(ByteStreams.toByteArray(inputStream));
+ builder.addDexProgramData(ByteStreams.toByteArray(inputStream), input.origin);
}
}
long start = System.nanoTime();
D8Output out =
D8.run(
- D8Command.builder()
- .setMinApiLevel(API)
- .setIntermediate(false)
- .setMode(CompilationMode.DEBUG)
- .addDexProgramData(bytes)
- .setOutputMode(OutputMode.Indexed)
- .setEnableDesugaring(false) // never need to desugar when merging dex.
+ builder // never need to desugar when merging dex.
.build(),
executor);
printRuntimeNanoseconds(title("DexMerge", desugar), System.nanoTime() - start);
diff --git a/src/main/java/com/android/tools/r8/compatdexbuilder/CompatDexBuilder.java b/src/main/java/com/android/tools/r8/compatdexbuilder/CompatDexBuilder.java
index 8972a96..07496c8 100644
--- a/src/main/java/com/android/tools/r8/compatdexbuilder/CompatDexBuilder.java
+++ b/src/main/java/com/android/tools/r8/compatdexbuilder/CompatDexBuilder.java
@@ -7,6 +7,8 @@
import com.android.tools.r8.CompilationMode;
import com.android.tools.r8.D8;
import com.android.tools.r8.D8Output;
+import com.android.tools.r8.origin.ArchiveEntryOrigin;
+import com.android.tools.r8.origin.PathOrigin;
import com.android.tools.r8.utils.AndroidApiLevel;
import com.android.tools.r8.utils.CompilationFailedException;
import com.android.tools.r8.utils.ThreadUtils;
@@ -135,7 +137,9 @@
try (InputStream stream = zipFile.getInputStream(classEntry)) {
CompatDexBuilderCommandBuilder builder = new CompatDexBuilderCommandBuilder();
builder
- .addClassProgramData(ByteStreams.toByteArray(stream))
+ .addClassProgramData(ByteStreams.toByteArray(stream),
+ new ArchiveEntryOrigin(classEntry.getName(),
+ new PathOrigin(Paths.get(zipFile.getName()))))
.setMode(noLocals ? CompilationMode.RELEASE : CompilationMode.DEBUG)
.setMinApiLevel(AndroidApiLevel.H_MR2.getLevel());
return D8.run(builder.build(), executor);
diff --git a/src/main/java/com/android/tools/r8/utils/AndroidApp.java b/src/main/java/com/android/tools/r8/utils/AndroidApp.java
index d08b0b7..e8e05cf 100644
--- a/src/main/java/com/android/tools/r8/utils/AndroidApp.java
+++ b/src/main/java/com/android/tools/r8/utils/AndroidApp.java
@@ -579,8 +579,9 @@
/**
* Add dex program-data.
*/
- public Builder addDexProgramData(byte[]... data) {
- return addDexProgramData(Arrays.asList(data));
+ public Builder addDexProgramData(byte[] data, Origin origin) {
+ addProgramResources(Kind.DEX, Resource.fromBytes(origin, data));
+ return this;
}
/**
@@ -596,13 +597,6 @@
/**
* Add Java-bytecode program data.
*/
- public Builder addClassProgramData(byte[]... data) {
- return addClassProgramData(Arrays.asList(data));
- }
-
- /**
- * Add Java-bytecode program data.
- */
public Builder addClassProgramData(Collection<byte[]> data) {
for (byte[] datum : data) {
addProgramResources(Kind.CLASS, Resource.fromBytes(Origin.unknown(), datum));
diff --git a/src/test/apiUsageSample/com/android/tools/apiusagesample/D8Compiler.java b/src/test/apiUsageSample/com/android/tools/apiusagesample/D8Compiler.java
index 7842a6a..97818f2 100644
--- a/src/test/apiUsageSample/com/android/tools/apiusagesample/D8Compiler.java
+++ b/src/test/apiUsageSample/com/android/tools/apiusagesample/D8Compiler.java
@@ -7,6 +7,7 @@
import com.android.tools.r8.CompilationMode;
import com.android.tools.r8.D8;
import com.android.tools.r8.D8Command;
+import com.android.tools.r8.origin.PathOrigin;
import com.android.tools.r8.utils.CompilationFailedException;
import com.android.tools.r8.utils.OutputMode;
import java.io.IOException;
@@ -99,7 +100,7 @@
@Override
public FileVisitResult visitFile(Path path, BasicFileAttributes basicFileAttributes)
throws IOException {
- builder.addClassProgramData(Files.readAllBytes(path));
+ builder.addClassProgramData(Files.readAllBytes(path), new PathOrigin(path));
return FileVisitResult.CONTINUE;
}
});
@@ -118,7 +119,7 @@
@Override
public FileVisitResult visitFile(Path path, BasicFileAttributes basicFileAttributes)
throws IOException {
- merger.addDexProgramData(Files.readAllBytes(path));
+ merger.addDexProgramData(Files.readAllBytes(path), new PathOrigin(path));
return FileVisitResult.CONTINUE;
}
});
diff --git a/src/test/java/com/android/tools/r8/D8IncrementalRunExamplesAndroidOTest.java b/src/test/java/com/android/tools/r8/D8IncrementalRunExamplesAndroidOTest.java
index c8ca57e..7f9b06f 100644
--- a/src/test/java/com/android/tools/r8/D8IncrementalRunExamplesAndroidOTest.java
+++ b/src/test/java/com/android/tools/r8/D8IncrementalRunExamplesAndroidOTest.java
@@ -183,7 +183,7 @@
Resource mergeClassFiles(List<Resource> dexFiles, Path out) throws Throwable {
D8Command.Builder builder = D8Command.builder();
for (Resource dexFile : dexFiles) {
- builder.addDexProgramData(readFromResource(dexFile));
+ builder.addDexProgramData(readFromResource(dexFile), dexFile.origin);
}
for (UnaryOperator<D8Command.Builder> transformation : builderTransformations) {
builder = transformation.apply(builder);
diff --git a/src/test/java/com/android/tools/r8/D8LazyRunExamplesAndroidOTest.java b/src/test/java/com/android/tools/r8/D8LazyRunExamplesAndroidOTest.java
index 1c68d75..f8b388b 100644
--- a/src/test/java/com/android/tools/r8/D8LazyRunExamplesAndroidOTest.java
+++ b/src/test/java/com/android/tools/r8/D8LazyRunExamplesAndroidOTest.java
@@ -127,7 +127,7 @@
D8Command.Builder builder = D8Command.builder()
.setMinApiLevel(minAPILevel);
for (Resource resource : individalDexes) {
- builder.addDexProgramData(readFromResource(resource));
+ builder.addDexProgramData(readFromResource(resource), resource.origin);
}
AndroidApp mergedResult = ToolHelper.runD8(builder.build(),
options -> options.setMarker(null));
diff --git a/src/test/java/com/android/tools/r8/compatproguard/ForNameTest.java b/src/test/java/com/android/tools/r8/compatproguard/ForNameTest.java
index 8480791..7c1ce1b 100644
--- a/src/test/java/com/android/tools/r8/compatproguard/ForNameTest.java
+++ b/src/test/java/com/android/tools/r8/compatproguard/ForNameTest.java
@@ -97,7 +97,7 @@
Path dexOutputDir = temp.newFolder().toPath();
R8Command command =
new CompatProguardCommandBuilder(true, true)
- .addDexProgramData(builder.compile())
+ .addDexProgramData(builder.compile(), Origin.unknown())
.setOutputPath(dexOutputDir)
.addProguardConfiguration(proguardConfigurations, Origin.unknown())
.build();
diff --git a/src/test/java/com/android/tools/r8/regress/Regress37740372.java b/src/test/java/com/android/tools/r8/regress/Regress37740372.java
index 5258b31..1f13013 100644
--- a/src/test/java/com/android/tools/r8/regress/Regress37740372.java
+++ b/src/test/java/com/android/tools/r8/regress/Regress37740372.java
@@ -9,7 +9,10 @@
import static org.junit.Assert.assertTrue;
import com.android.tools.r8.D8Command;
+import com.android.tools.r8.D8Command.Builder;
import com.android.tools.r8.ToolHelper;
+import com.android.tools.r8.origin.EmbeddedOrigin;
+import com.android.tools.r8.origin.Origin;
import com.android.tools.r8.smali.SmaliTestBase;
import com.android.tools.r8.utils.AndroidApp;
import com.android.tools.r8.utils.DexInspector;
@@ -133,14 +136,16 @@
AndroidApp output =
ToolHelper.runD8(
D8Command.builder()
- .addClassProgramData(Base64.getDecoder().decode(javaLangObjectClassFile))
+ .addClassProgramData(Base64.getDecoder().decode(javaLangObjectClassFile),
+ EmbeddedOrigin.INSTANCE)
.build());
checkApplicationOnlyHasJavaLangObject(output);
// Build an application with the java.lang.Object stub from a dex file.
List<byte[]> dex = output.writeToMemory();
assertEquals(1, dex.size());
- checkApplicationOnlyHasJavaLangObject(
- ToolHelper.runD8(D8Command.builder().addDexProgramData(dex).build()));
+ Builder builder = D8Command.builder();
+ dex.forEach(data -> builder.addDexProgramData(data, Origin.unknown()));
+ checkApplicationOnlyHasJavaLangObject(ToolHelper.runD8(builder.build()));
}
}
diff --git a/src/test/java/com/android/tools/r8/rewrite/staticvalues/inlibraries/StaticLibraryValuesChangeTest.java b/src/test/java/com/android/tools/r8/rewrite/staticvalues/inlibraries/StaticLibraryValuesChangeTest.java
index 76c24f9..dd07b68 100644
--- a/src/test/java/com/android/tools/r8/rewrite/staticvalues/inlibraries/StaticLibraryValuesChangeTest.java
+++ b/src/test/java/com/android/tools/r8/rewrite/staticvalues/inlibraries/StaticLibraryValuesChangeTest.java
@@ -10,6 +10,7 @@
import com.android.tools.r8.ToolHelper;
import com.android.tools.r8.ToolHelper.DexVm.Version;
import com.android.tools.r8.jasmin.JasminBuilder;
+import com.android.tools.r8.origin.EmbeddedOrigin;
import com.android.tools.r8.shaking.FilteredClassPath;
import com.android.tools.r8.smali.SmaliBuilder;
import com.android.tools.r8.utils.AndroidApp;
@@ -75,7 +76,7 @@
// Merge the compiled TestMain with the runtime version of LibraryClass.
builder = AndroidApp.builder(app);
- builder.addDexProgramData(runtimeLibrary.compile());
+ builder.addDexProgramData(runtimeLibrary.compile(), EmbeddedOrigin.INSTANCE);
String result = runOnArt(builder.build(), TestMain.class);
assertEquals("33", result);
}
diff --git a/src/test/java/com/android/tools/r8/smali/SmaliBuildTest.java b/src/test/java/com/android/tools/r8/smali/SmaliBuildTest.java
index 8e946b6..fa08ece 100644
--- a/src/test/java/com/android/tools/r8/smali/SmaliBuildTest.java
+++ b/src/test/java/com/android/tools/r8/smali/SmaliBuildTest.java
@@ -7,6 +7,7 @@
import static org.junit.Assert.assertEquals;
import com.android.tools.r8.ToolHelper;
+import com.android.tools.r8.origin.EmbeddedOrigin;
import com.android.tools.r8.shaking.FilteredClassPath;
import com.android.tools.r8.utils.AndroidApp;
import com.android.tools.r8.utils.DexInspector;
@@ -60,7 +61,7 @@
);
AndroidApp originalApp = AndroidApp.builder()
- .addDexProgramData(builder.compile())
+ .addDexProgramData(builder.compile(), EmbeddedOrigin.INSTANCE)
.addLibraryFiles(FilteredClassPath.unfiltered(ToolHelper.getDefaultAndroidJar()))
.build();
diff --git a/src/test/java/com/android/tools/r8/smali/SmaliTestBase.java b/src/test/java/com/android/tools/r8/smali/SmaliTestBase.java
index e16b172..01b2af4 100644
--- a/src/test/java/com/android/tools/r8/smali/SmaliTestBase.java
+++ b/src/test/java/com/android/tools/r8/smali/SmaliTestBase.java
@@ -18,6 +18,7 @@
import com.android.tools.r8.graph.DexApplication;
import com.android.tools.r8.graph.DexClass;
import com.android.tools.r8.graph.DexEncodedMethod;
+import com.android.tools.r8.origin.EmbeddedOrigin;
import com.android.tools.r8.origin.Origin;
import com.android.tools.r8.shaking.FilteredClassPath;
import com.android.tools.r8.shaking.ProguardConfiguration;
@@ -55,7 +56,7 @@
protected AndroidApp buildApplicationWithAndroidJar(SmaliBuilder builder) {
try {
return AndroidApp.builder()
- .addDexProgramData(builder.compile())
+ .addDexProgramData(builder.compile(), EmbeddedOrigin.INSTANCE)
.addLibraryFiles(FilteredClassPath.unfiltered(ToolHelper.getDefaultAndroidJar()))
.build();
} catch (IOException | RecognitionException | ExecutionException | DexOverflowException e) {
@@ -98,7 +99,7 @@
Path dexOutputDir = temp.newFolder().toPath();
R8Command command =
R8Command.builder()
- .addDexProgramData(builder.compile())
+ .addDexProgramData(builder.compile(), EmbeddedOrigin.INSTANCE)
.setOutputPath(dexOutputDir)
.setMode(CompilationMode.DEBUG)
.addLibraryFiles(Paths.get(ToolHelper.getDefaultAndroidJar()))
diff --git a/tests/api_usage_sample.jar b/tests/api_usage_sample.jar
index 51029b5..3b7d14a 100644
--- a/tests/api_usage_sample.jar
+++ b/tests/api_usage_sample.jar
Binary files differ