1.1 --- a/rt/aot/pom.xml Sat Jan 30 20:45:41 2016 +0100
1.2 +++ b/rt/aot/pom.xml Thu Mar 03 06:03:06 2016 +0100
1.3 @@ -30,7 +30,7 @@
1.4 <dependency>
1.5 <groupId>net.orfjackal.retrolambda</groupId>
1.6 <artifactId>retrolambda</artifactId>
1.7 - <version>1.6.1</version>
1.8 + <version>2.1.0</version>
1.9 <type>jar</type>
1.10 </dependency>
1.11 <dependency>
2.1 --- a/rt/aot/src/main/java/org/apidesign/bck2brwsr/aot/RetroLambda.java Sat Jan 30 20:45:41 2016 +0100
2.2 +++ b/rt/aot/src/main/java/org/apidesign/bck2brwsr/aot/RetroLambda.java Thu Mar 03 06:03:06 2016 +0100
2.3 @@ -19,15 +19,17 @@
2.4
2.5 import java.io.IOException;
2.6 import java.io.InputStream;
2.7 +import java.nio.file.Path;
2.8 import java.util.Arrays;
2.9 import java.util.HashMap;
2.10 import java.util.Map;
2.11 -import net.orfjackal.retrolambda.LambdaClassBackporter;
2.12 -import net.orfjackal.retrolambda.LambdaClassDumper;
2.13 -import net.orfjackal.retrolambda.LambdaClassSaver;
2.14 -import net.orfjackal.retrolambda.LambdaReifier;
2.15 -import net.orfjackal.retrolambda.LambdaUsageBackporter;
2.16 +import net.orfjackal.retrolambda.Transformers;
2.17 +import net.orfjackal.retrolambda.asm.ClassReader;
2.18 import net.orfjackal.retrolambda.asm.Opcodes;
2.19 +import net.orfjackal.retrolambda.files.OutputDirectory;
2.20 +import net.orfjackal.retrolambda.interfaces.ClassHierarchyAnalyzer;
2.21 +import net.orfjackal.retrolambda.lambdas.LambdaClassDumper;
2.22 +import net.orfjackal.retrolambda.lambdas.LambdaClassSaver;
2.23 import org.apidesign.bck2brwsr.core.ExtraJavaScript;
2.24 import org.apidesign.vm4brwsr.Bck2Brwsr;
2.25
2.26 @@ -36,24 +38,30 @@
2.27 * @author Jaroslav Tulach
2.28 */
2.29 @ExtraJavaScript(processByteCode = false, resource="")
2.30 -final class RetroLambda extends LambdaClassSaver implements BytecodeProcessor {
2.31 +final class RetroLambda extends OutputDirectory implements BytecodeProcessor {
2.32 private Map<String,byte[]> converted;
2.33 + private final Transformers transformers;
2.34 + private final LambdaClassSaver saver;
2.35
2.36 public RetroLambda() {
2.37 - super(null, Opcodes.V1_7);
2.38 + super(null);
2.39 + transformers = new Transformers(Opcodes.V1_7, false, new ClassHierarchyAnalyzer());
2.40 + saver = new LambdaClassSaver(this, transformers);
2.41 }
2.42
2.43 @Override
2.44 - public void saveIfLambda(String className, byte[] bytecode) {
2.45 - if (LambdaReifier.isLambdaClassToReify(className)) {
2.46 - try {
2.47 - byte[] backportedBytecode = LambdaClassBackporter.transform(bytecode, Opcodes.V1_7);
2.48 - putBytecode(className + ".class", backportedBytecode);
2.49 - } catch (Throwable t) {
2.50 - // print to stdout to keep in sync with other log output
2.51 - throw new IllegalStateException("ERROR: Failed to backport lambda class: " + className);
2.52 - }
2.53 + public void writeFile(Path relativePath, byte[] content) throws IOException {
2.54 + throw new UnsupportedOperationException();
2.55 + }
2.56 +
2.57 + @Override
2.58 + public void writeClass(byte[] bytecode) throws IOException {
2.59 + if (bytecode == null) {
2.60 + return;
2.61 }
2.62 + ClassReader cr = new ClassReader(bytecode);
2.63 + String className = cr.getClassName();
2.64 + putBytecode(className + ".class", bytecode);
2.65 }
2.66
2.67 private void putBytecode(String className, byte[] backportedBytecode) {
2.68 @@ -75,11 +83,11 @@
2.69 }
2.70
2.71 ClassLoader prev = Thread.currentThread().getContextClassLoader();
2.72 - try (LambdaClassDumper dumper = new LambdaClassDumper(this)) {
2.73 + try (LambdaClassDumper dumper = new LambdaClassDumper(saver)) {
2.74 Thread.currentThread().setContextClassLoader(new ResLdr(resources));
2.75 dumper.install();
2.76
2.77 - byte[] newB = LambdaUsageBackporter.transform(byteCode, Opcodes.V1_7);
2.78 + byte[] newB = transformers.backportClass(new ClassReader(byteCode));
2.79 if (!Arrays.equals(newB, byteCode)) {
2.80 putBytecode(className, newB);
2.81 }