Move generation of examples into another build/generated
Bug: b/270105162
Change-Id: Iceb105a1b4cbad6ec68d4d868837ba3cabe6d625
diff --git a/src/test/examplesAndroidO/invokecustom/TestGenerator.java b/src/test/examplesAndroidO/invokecustom/TestGenerator.java
index a4cd89a..4879521 100644
--- a/src/test/examplesAndroidO/invokecustom/TestGenerator.java
+++ b/src/test/examplesAndroidO/invokecustom/TestGenerator.java
@@ -13,6 +13,7 @@
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
+import java.nio.file.StandardOpenOption;
import org.objectweb.asm.ClassReader;
import org.objectweb.asm.ClassVisitor;
import org.objectweb.asm.ClassWriter;
@@ -26,19 +27,24 @@
public class TestGenerator {
private final Path classNamePath;
+ private final Path outputClassNamePath;
public static void main(String[] args) throws IOException {
- assert args.length == 1;
- TestGenerator testGenerator = new TestGenerator(Paths.get(args[0],
- TestGenerator.class.getPackage().getName(), InvokeCustom.class.getSimpleName() + ".class"));
+ assert args.length == 2;
+ String fileName = InvokeCustom.class.getSimpleName() + ".class";
+ Path inputFile = Paths.get(args[0], TestGenerator.class.getPackage().getName(), fileName);
+ Path outputFile = Paths.get(args[1], fileName);
+ TestGenerator testGenerator = new TestGenerator(inputFile, outputFile);
testGenerator.generateTests();
}
- public TestGenerator(Path classNamePath) {
+ public TestGenerator(Path classNamePath, Path outputClassNamePath) {
this.classNamePath = classNamePath;
+ this.outputClassNamePath = outputClassNamePath;
}
private void generateTests() throws IOException {
+ Files.createDirectories(outputClassNamePath.getParent());
try (InputStream input = Files.newInputStream(classNamePath)) {
ClassReader cr = new ClassReader(input);
ClassWriter cw = new ClassWriter(ClassWriter.COMPUTE_MAXS | ClassWriter.COMPUTE_FRAMES);
@@ -63,7 +69,8 @@
super.visitEnd();
}
}, 0);
- try (OutputStream output = Files.newOutputStream(classNamePath)) {
+ try (OutputStream output =
+ Files.newOutputStream(outputClassNamePath, StandardOpenOption.CREATE)) {
output.write(cw.toByteArray());
}
}
diff --git a/src/test/examplesAndroidO/invokecustom2/TestGenerator.java b/src/test/examplesAndroidO/invokecustom2/TestGenerator.java
index 377084e..2a4eba4 100644
--- a/src/test/examplesAndroidO/invokecustom2/TestGenerator.java
+++ b/src/test/examplesAndroidO/invokecustom2/TestGenerator.java
@@ -14,6 +14,7 @@
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
+import java.nio.file.StandardOpenOption;
import org.objectweb.asm.ClassReader;
import org.objectweb.asm.ClassVisitor;
import org.objectweb.asm.ClassWriter;
@@ -25,19 +26,24 @@
public class TestGenerator {
private final Path classNamePath;
+ private final Path outputClassNamePath;
public static void main(String[] args) throws IOException {
- assert args.length == 1;
- TestGenerator testGenerator = new TestGenerator(Paths.get(args[0],
- TestGenerator.class.getPackage().getName(), InvokeCustom.class.getSimpleName() + ".class"));
+ assert args.length == 2;
+ String fileName = invokecustom.InvokeCustom.class.getSimpleName() + ".class";
+ Path inputFile = Paths.get(args[0], TestGenerator.class.getPackage().getName(), fileName);
+ Path outputFile = Paths.get(args[1], fileName);
+ TestGenerator testGenerator = new TestGenerator(inputFile, outputFile);
testGenerator.generateTests();
}
- public TestGenerator(Path classNamePath) {
+ public TestGenerator(Path classNamePath, Path outputClassNamePath) {
this.classNamePath = classNamePath;
+ this.outputClassNamePath = outputClassNamePath;
}
private void generateTests() throws IOException {
+ Files.createDirectories(outputClassNamePath.getParent());
try (InputStream input = Files.newInputStream(classNamePath)) {
ClassReader cr = new ClassReader(input);
ClassWriter cw = new ClassWriter(ClassWriter.COMPUTE_MAXS | ClassWriter.COMPUTE_FRAMES);
@@ -58,7 +64,8 @@
super.visitEnd();
}
}, 0);
- try (OutputStream output = Files.newOutputStream(classNamePath)) {
+ try (OutputStream output =
+ Files.newOutputStream(outputClassNamePath, StandardOpenOption.CREATE)) {
output.write(cw.toByteArray());
}
}
diff --git a/src/test/examplesAndroidO/stringconcat/TestGenerator.java b/src/test/examplesAndroidO/stringconcat/TestGenerator.java
index 72bdfbf..4755c4d 100644
--- a/src/test/examplesAndroidO/stringconcat/TestGenerator.java
+++ b/src/test/examplesAndroidO/stringconcat/TestGenerator.java
@@ -12,6 +12,7 @@
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
+import java.nio.file.StandardOpenOption;
import java.util.ArrayList;
import java.util.List;
import org.objectweb.asm.ClassReader;
@@ -40,13 +41,16 @@
false);
public static void main(String[] args) throws IOException {
- assert args.length == 1;
- generateTests(Paths.get(args[0],
- TestGenerator.class.getPackage().getName(),
- StringConcat.class.getSimpleName() + ".class"));
+ assert args.length == 2;
+ String fileName = StringConcat.class.getSimpleName() + ".class";
+ Path inputFile = Paths.get(args[0], TestGenerator.class.getPackage().getName(), fileName);
+ Path outputFile = Paths.get(args[1], fileName);
+ generateTests(inputFile, outputFile);
}
- private static void generateTests(Path classNamePath) throws IOException {
+ private static void generateTests(Path classNamePath, Path outputClassNamePath)
+ throws IOException {
+ Files.createDirectories(outputClassNamePath.getParent());
try (InputStream input = Files.newInputStream(classNamePath)) {
ClassReader cr = new ClassReader(input);
ClassWriter cw = new ClassWriter(ClassWriter.COMPUTE_MAXS | ClassWriter.COMPUTE_FRAMES);
@@ -221,7 +225,8 @@
};
}
}, 0);
- try (OutputStream output = Files.newOutputStream(classNamePath)) {
+ try (OutputStream output =
+ Files.newOutputStream(outputClassNamePath, StandardOpenOption.CREATE)) {
output.write(cw.toByteArray());
}
}
diff --git a/src/test/examplesAndroidP/invokecustom/TestGenerator.java b/src/test/examplesAndroidP/invokecustom/TestGenerator.java
index b08441c..ef5f8de 100644
--- a/src/test/examplesAndroidP/invokecustom/TestGenerator.java
+++ b/src/test/examplesAndroidP/invokecustom/TestGenerator.java
@@ -13,6 +13,7 @@
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
+import java.nio.file.StandardOpenOption;
import org.objectweb.asm.ClassReader;
import org.objectweb.asm.ClassVisitor;
import org.objectweb.asm.ClassWriter;
@@ -24,19 +25,24 @@
public class TestGenerator {
private final Path classNamePath;
+ private final Path outputClassNamePath;
public static void main(String[] args) throws IOException {
- assert args.length == 1;
- TestGenerator testGenerator = new TestGenerator(Paths.get(args[0],
- TestGenerator.class.getPackage().getName(), InvokeCustom.class.getSimpleName() + ".class"));
+ assert args.length == 2;
+ String fileName = InvokeCustom.class.getSimpleName() + ".class";
+ Path inputFile = Paths.get(args[0], TestGenerator.class.getPackage().getName(), fileName);
+ Path outputFile = Paths.get(args[1], fileName);
+ TestGenerator testGenerator = new TestGenerator(inputFile, outputFile);
testGenerator.generateTests();
}
- public TestGenerator(Path classNamePath) {
+ public TestGenerator(Path classNamePath, Path outputClassNamePath) {
this.classNamePath = classNamePath;
+ this.outputClassNamePath = outputClassNamePath;
}
private void generateTests() throws IOException {
+ Files.createDirectories(outputClassNamePath.getParent());
try (InputStream inputStream = Files.newInputStream(classNamePath)) {
ClassReader cr = new ClassReader(inputStream);
ClassWriter cw = new ClassWriter(ClassWriter.COMPUTE_MAXS | ClassWriter.COMPUTE_FRAMES);
@@ -52,7 +58,8 @@
super.visitEnd();
}
}, 0);
- try (OutputStream output = Files.newOutputStream(classNamePath)) {
+ try (OutputStream output =
+ Files.newOutputStream(outputClassNamePath, StandardOpenOption.CREATE)) {
output.write(cw.toByteArray());
}
}
diff --git a/src/test/java/com/android/tools/r8/D8IncrementalRunExamplesAndroidOTest.java b/src/test/java/com/android/tools/r8/D8IncrementalRunExamplesAndroidOTest.java
index dd3311b..d3a155f 100644
--- a/src/test/java/com/android/tools/r8/D8IncrementalRunExamplesAndroidOTest.java
+++ b/src/test/java/com/android/tools/r8/D8IncrementalRunExamplesAndroidOTest.java
@@ -33,6 +33,7 @@
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
+import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
@@ -130,14 +131,22 @@
}
private List<String> collectClassFiles(Path testJarFile) {
- List<String> result = new ArrayList<>();
+ Map<String, String> result = new HashMap<>();
// Collect Java 8 classes.
- visitFiles(getClassesRoot(testJarFile), path -> result.add(path.toString()));
+ visitFiles(
+ getClassesRoot(testJarFile),
+ path -> result.put(path.toFile().getName(), path.toString()));
+ // Collect generated classes, overwrite non-generated files.
+ visitFiles(
+ getGeneratedRoot(testJarFile),
+ path -> result.put(path.toFile().getName(), path.toString()));
// Collect legacy classes.
visitFiles(
- getLegacyClassesRoot(testJarFile, packageName), path -> result.add(path.toString()));
- Collections.sort(result);
- return result;
+ getLegacyClassesRoot(testJarFile, packageName),
+ path -> result.put(path.toFile().getName(), path.toString()));
+ List<String> files = new ArrayList<>(result.values());
+ Collections.sort(files);
+ return files;
}
Path getClassesRoot(Path testJarFile) {
@@ -145,6 +154,12 @@
return parent.resolve(Paths.get("classes", packageName));
}
+ Path getGeneratedRoot(Path testJarFile) {
+ String sourceSet = testJarFile.getParent().toFile().getName();
+ Path parent = testJarFile.getParent().getParent().getParent();
+ return parent.resolve(Paths.get("generated", sourceSet, packageName));
+ }
+
AndroidApp compileClassFilesInIntermediate(
Path testJarFile, List<String> inputFiles, Path outputPath, OutputMode outputMode)
throws Throwable {