Switching to most recent version of retrolamda: 2.1.0
authorJaroslav Tulach <jaroslav.tulach@apidesign.org>
Thu, 03 Mar 2016 06:03:06 +0100
changeset 1881fe13a2b0fd24
parent 1880 b5442b691abc
child 1882 bf9cd8ee73d6
Switching to most recent version of retrolamda: 2.1.0
rt/aot/pom.xml
rt/aot/src/main/java/org/apidesign/bck2brwsr/aot/RetroLambda.java
     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              }