langtools/test/tools/javac/lambda/lambdaNaming/TestSerializedLambdaNameStability.java
author akulyakh
Thu, 21 May 2015 11:41:04 -0700
changeset 30730 d3ce7619db2c
parent 26100 bb7dd001d190
child 36526 3b41f1c69604
permissions -rw-r--r--
8076543: Add @modules as needed to the langtools tests Reviewed-by: jjg, shurailine
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
21489
018e34d4045f 8023668: Desugar serializable lambda bodies using more robust naming scheme
rfield
parents:
diff changeset
     1
/*
30730
d3ce7619db2c 8076543: Add @modules as needed to the langtools tests
akulyakh
parents: 26100
diff changeset
     2
 * Copyright (c) 2013, 2015, Oracle and/or its affiliates. All rights reserved.
21489
018e34d4045f 8023668: Desugar serializable lambda bodies using more robust naming scheme
rfield
parents:
diff changeset
     3
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
018e34d4045f 8023668: Desugar serializable lambda bodies using more robust naming scheme
rfield
parents:
diff changeset
     4
 *
018e34d4045f 8023668: Desugar serializable lambda bodies using more robust naming scheme
rfield
parents:
diff changeset
     5
 * This code is free software; you can redistribute it and/or modify it
018e34d4045f 8023668: Desugar serializable lambda bodies using more robust naming scheme
rfield
parents:
diff changeset
     6
 * under the terms of the GNU General Public License version 2 only, as
018e34d4045f 8023668: Desugar serializable lambda bodies using more robust naming scheme
rfield
parents:
diff changeset
     7
 * published by the Free Software Foundation.
018e34d4045f 8023668: Desugar serializable lambda bodies using more robust naming scheme
rfield
parents:
diff changeset
     8
 *
018e34d4045f 8023668: Desugar serializable lambda bodies using more robust naming scheme
rfield
parents:
diff changeset
     9
 * This code is distributed in the hope that it will be useful, but WITHOUT
018e34d4045f 8023668: Desugar serializable lambda bodies using more robust naming scheme
rfield
parents:
diff changeset
    10
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
018e34d4045f 8023668: Desugar serializable lambda bodies using more robust naming scheme
rfield
parents:
diff changeset
    11
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
018e34d4045f 8023668: Desugar serializable lambda bodies using more robust naming scheme
rfield
parents:
diff changeset
    12
 * version 2 for more details (a copy is included in the LICENSE file that
018e34d4045f 8023668: Desugar serializable lambda bodies using more robust naming scheme
rfield
parents:
diff changeset
    13
 * accompanied this code).
018e34d4045f 8023668: Desugar serializable lambda bodies using more robust naming scheme
rfield
parents:
diff changeset
    14
 *
018e34d4045f 8023668: Desugar serializable lambda bodies using more robust naming scheme
rfield
parents:
diff changeset
    15
 * You should have received a copy of the GNU General Public License version
018e34d4045f 8023668: Desugar serializable lambda bodies using more robust naming scheme
rfield
parents:
diff changeset
    16
 * 2 along with this work; if not, write to the Free Software Foundation,
018e34d4045f 8023668: Desugar serializable lambda bodies using more robust naming scheme
rfield
parents:
diff changeset
    17
 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
018e34d4045f 8023668: Desugar serializable lambda bodies using more robust naming scheme
rfield
parents:
diff changeset
    18
 *
018e34d4045f 8023668: Desugar serializable lambda bodies using more robust naming scheme
rfield
parents:
diff changeset
    19
 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
018e34d4045f 8023668: Desugar serializable lambda bodies using more robust naming scheme
rfield
parents:
diff changeset
    20
 * or visit www.oracle.com if you need additional information or have any
018e34d4045f 8023668: Desugar serializable lambda bodies using more robust naming scheme
rfield
parents:
diff changeset
    21
 * questions.
018e34d4045f 8023668: Desugar serializable lambda bodies using more robust naming scheme
rfield
parents:
diff changeset
    22
 */
018e34d4045f 8023668: Desugar serializable lambda bodies using more robust naming scheme
rfield
parents:
diff changeset
    23
018e34d4045f 8023668: Desugar serializable lambda bodies using more robust naming scheme
rfield
parents:
diff changeset
    24
/*
018e34d4045f 8023668: Desugar serializable lambda bodies using more robust naming scheme
rfield
parents:
diff changeset
    25
 * @test
018e34d4045f 8023668: Desugar serializable lambda bodies using more robust naming scheme
rfield
parents:
diff changeset
    26
 * @bug 8023668
018e34d4045f 8023668: Desugar serializable lambda bodies using more robust naming scheme
rfield
parents:
diff changeset
    27
 * @summary Desugar serializable lambda bodies using more robust naming scheme
26100
bb7dd001d190 8050429: Update/cleanup ToolBox
jjg
parents: 21489
diff changeset
    28
 * @library /tools/lib
30730
d3ce7619db2c 8076543: Add @modules as needed to the langtools tests
akulyakh
parents: 26100
diff changeset
    29
 * @modules jdk.compiler/com.sun.tools.javac.api
d3ce7619db2c 8076543: Add @modules as needed to the langtools tests
akulyakh
parents: 26100
diff changeset
    30
 *          jdk.compiler/com.sun.tools.javac.file
d3ce7619db2c 8076543: Add @modules as needed to the langtools tests
akulyakh
parents: 26100
diff changeset
    31
 *          jdk.compiler/com.sun.tools.javac.main
21489
018e34d4045f 8023668: Desugar serializable lambda bodies using more robust naming scheme
rfield
parents:
diff changeset
    32
 * @build ToolBox
018e34d4045f 8023668: Desugar serializable lambda bodies using more robust naming scheme
rfield
parents:
diff changeset
    33
 * @run main TestSerializedLambdaNameStability
018e34d4045f 8023668: Desugar serializable lambda bodies using more robust naming scheme
rfield
parents:
diff changeset
    34
 */
018e34d4045f 8023668: Desugar serializable lambda bodies using more robust naming scheme
rfield
parents:
diff changeset
    35
018e34d4045f 8023668: Desugar serializable lambda bodies using more robust naming scheme
rfield
parents:
diff changeset
    36
import java.io.*;
018e34d4045f 8023668: Desugar serializable lambda bodies using more robust naming scheme
rfield
parents:
diff changeset
    37
import java.lang.reflect.Constructor;
018e34d4045f 8023668: Desugar serializable lambda bodies using more robust naming scheme
rfield
parents:
diff changeset
    38
import java.lang.reflect.InvocationTargetException;
018e34d4045f 8023668: Desugar serializable lambda bodies using more robust naming scheme
rfield
parents:
diff changeset
    39
import java.lang.reflect.Method;
018e34d4045f 8023668: Desugar serializable lambda bodies using more robust naming scheme
rfield
parents:
diff changeset
    40
import java.nio.file.*;
018e34d4045f 8023668: Desugar serializable lambda bodies using more robust naming scheme
rfield
parents:
diff changeset
    41
018e34d4045f 8023668: Desugar serializable lambda bodies using more robust naming scheme
rfield
parents:
diff changeset
    42
public class TestSerializedLambdaNameStability {
018e34d4045f 8023668: Desugar serializable lambda bodies using more robust naming scheme
rfield
parents:
diff changeset
    43
018e34d4045f 8023668: Desugar serializable lambda bodies using more robust naming scheme
rfield
parents:
diff changeset
    44
    final ClassLoader writingClassLoader;
018e34d4045f 8023668: Desugar serializable lambda bodies using more robust naming scheme
rfield
parents:
diff changeset
    45
    final ClassLoader clonedClassLoader;
018e34d4045f 8023668: Desugar serializable lambda bodies using more robust naming scheme
rfield
parents:
diff changeset
    46
    final ClassLoader checkingClassLoader;
018e34d4045f 8023668: Desugar serializable lambda bodies using more robust naming scheme
rfield
parents:
diff changeset
    47
018e34d4045f 8023668: Desugar serializable lambda bodies using more robust naming scheme
rfield
parents:
diff changeset
    48
    TestSerializedLambdaNameStability()  {
018e34d4045f 8023668: Desugar serializable lambda bodies using more robust naming scheme
rfield
parents:
diff changeset
    49
        writingClassLoader = new TestClassLoader("before");
018e34d4045f 8023668: Desugar serializable lambda bodies using more robust naming scheme
rfield
parents:
diff changeset
    50
        clonedClassLoader = new TestClassLoader("before");
018e34d4045f 8023668: Desugar serializable lambda bodies using more robust naming scheme
rfield
parents:
diff changeset
    51
        checkingClassLoader = new TestClassLoader("after");
018e34d4045f 8023668: Desugar serializable lambda bodies using more robust naming scheme
rfield
parents:
diff changeset
    52
    }
018e34d4045f 8023668: Desugar serializable lambda bodies using more robust naming scheme
rfield
parents:
diff changeset
    53
018e34d4045f 8023668: Desugar serializable lambda bodies using more robust naming scheme
rfield
parents:
diff changeset
    54
    public static void main(String... args) throws Exception {
018e34d4045f 8023668: Desugar serializable lambda bodies using more robust naming scheme
rfield
parents:
diff changeset
    55
        new TestSerializedLambdaNameStability().doit("NameOfCapturedArgs", true);
018e34d4045f 8023668: Desugar serializable lambda bodies using more robust naming scheme
rfield
parents:
diff changeset
    56
        new TestSerializedLambdaNameStability().doit("TypesOfCapturedArgs", true);
018e34d4045f 8023668: Desugar serializable lambda bodies using more robust naming scheme
rfield
parents:
diff changeset
    57
        new TestSerializedLambdaNameStability().doit("OrderOfCapturedArgs", true);
018e34d4045f 8023668: Desugar serializable lambda bodies using more robust naming scheme
rfield
parents:
diff changeset
    58
        new TestSerializedLambdaNameStability().doit("VariableAssignmentTarget", false);
018e34d4045f 8023668: Desugar serializable lambda bodies using more robust naming scheme
rfield
parents:
diff changeset
    59
        new TestSerializedLambdaNameStability().doit("TargetName", true);
018e34d4045f 8023668: Desugar serializable lambda bodies using more robust naming scheme
rfield
parents:
diff changeset
    60
        new TestSerializedLambdaNameStability().doit("TargetType", true);
018e34d4045f 8023668: Desugar serializable lambda bodies using more robust naming scheme
rfield
parents:
diff changeset
    61
    }
018e34d4045f 8023668: Desugar serializable lambda bodies using more robust naming scheme
rfield
parents:
diff changeset
    62
018e34d4045f 8023668: Desugar serializable lambda bodies using more robust naming scheme
rfield
parents:
diff changeset
    63
    public void doit(String name, boolean expectFail) throws Exception {
018e34d4045f 8023668: Desugar serializable lambda bodies using more robust naming scheme
rfield
parents:
diff changeset
    64
        String iName = "I" + name;
018e34d4045f 8023668: Desugar serializable lambda bodies using more robust naming scheme
rfield
parents:
diff changeset
    65
        String testName = "TEST" + name;
018e34d4045f 8023668: Desugar serializable lambda bodies using more robust naming scheme
rfield
parents:
diff changeset
    66
        Class<?> kw = writingClassLoader.loadClass(testName);
018e34d4045f 8023668: Desugar serializable lambda bodies using more robust naming scheme
rfield
parents:
diff changeset
    67
        Object instw = getInstance(kw);
018e34d4045f 8023668: Desugar serializable lambda bodies using more robust naming scheme
rfield
parents:
diff changeset
    68
        Method mw = getMethod(kw, "write", ObjectOutput.class);
018e34d4045f 8023668: Desugar serializable lambda bodies using more robust naming scheme
rfield
parents:
diff changeset
    69
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
018e34d4045f 8023668: Desugar serializable lambda bodies using more robust naming scheme
rfield
parents:
diff changeset
    70
        try (ObjectOutput out = new ObjectOutputStream(baos)) {
018e34d4045f 8023668: Desugar serializable lambda bodies using more robust naming scheme
rfield
parents:
diff changeset
    71
            mw.invoke(instw, out);
018e34d4045f 8023668: Desugar serializable lambda bodies using more robust naming scheme
rfield
parents:
diff changeset
    72
        }
018e34d4045f 8023668: Desugar serializable lambda bodies using more robust naming scheme
rfield
parents:
diff changeset
    73
        byte[] ser = baos.toByteArray();
018e34d4045f 8023668: Desugar serializable lambda bodies using more robust naming scheme
rfield
parents:
diff changeset
    74
018e34d4045f 8023668: Desugar serializable lambda bodies using more robust naming scheme
rfield
parents:
diff changeset
    75
        // Read and check clone
018e34d4045f 8023668: Desugar serializable lambda bodies using more robust naming scheme
rfield
parents:
diff changeset
    76
        readCheck(iName, testName, clonedClassLoader, ser);
018e34d4045f 8023668: Desugar serializable lambda bodies using more robust naming scheme
rfield
parents:
diff changeset
    77
        System.err.printf("cloned test readCheck %s\n", testName);
018e34d4045f 8023668: Desugar serializable lambda bodies using more robust naming scheme
rfield
parents:
diff changeset
    78
018e34d4045f 8023668: Desugar serializable lambda bodies using more robust naming scheme
rfield
parents:
diff changeset
    79
        // Read and check other
018e34d4045f 8023668: Desugar serializable lambda bodies using more robust naming scheme
rfield
parents:
diff changeset
    80
        if (expectFail) {
018e34d4045f 8023668: Desugar serializable lambda bodies using more robust naming scheme
rfield
parents:
diff changeset
    81
            try {
018e34d4045f 8023668: Desugar serializable lambda bodies using more robust naming scheme
rfield
parents:
diff changeset
    82
                readCheck(iName, testName, checkingClassLoader, ser);
018e34d4045f 8023668: Desugar serializable lambda bodies using more robust naming scheme
rfield
parents:
diff changeset
    83
            } catch (InvocationTargetException ite) {
018e34d4045f 8023668: Desugar serializable lambda bodies using more robust naming scheme
rfield
parents:
diff changeset
    84
                Throwable underlying = ite;
018e34d4045f 8023668: Desugar serializable lambda bodies using more robust naming scheme
rfield
parents:
diff changeset
    85
                while (underlying != null && !(underlying instanceof IllegalArgumentException)) {
018e34d4045f 8023668: Desugar serializable lambda bodies using more robust naming scheme
rfield
parents:
diff changeset
    86
                    underlying = underlying.getCause();
018e34d4045f 8023668: Desugar serializable lambda bodies using more robust naming scheme
rfield
parents:
diff changeset
    87
                }
018e34d4045f 8023668: Desugar serializable lambda bodies using more robust naming scheme
rfield
parents:
diff changeset
    88
                if (underlying != null) {
018e34d4045f 8023668: Desugar serializable lambda bodies using more robust naming scheme
rfield
parents:
diff changeset
    89
                    if (underlying.getMessage().contains("deserialization")) {
018e34d4045f 8023668: Desugar serializable lambda bodies using more robust naming scheme
rfield
parents:
diff changeset
    90
                        System.err.printf("PASS: other test %s got expected exception %s\n", testName, underlying);
018e34d4045f 8023668: Desugar serializable lambda bodies using more robust naming scheme
rfield
parents:
diff changeset
    91
                        return;
018e34d4045f 8023668: Desugar serializable lambda bodies using more robust naming scheme
rfield
parents:
diff changeset
    92
                    }
018e34d4045f 8023668: Desugar serializable lambda bodies using more robust naming scheme
rfield
parents:
diff changeset
    93
                }
018e34d4045f 8023668: Desugar serializable lambda bodies using more robust naming scheme
rfield
parents:
diff changeset
    94
                System.err.printf("FAIL: other test %s got unexpected exception %s\n", testName, ite);
018e34d4045f 8023668: Desugar serializable lambda bodies using more robust naming scheme
rfield
parents:
diff changeset
    95
                throw new Exception("unexpected exception ", ite);
018e34d4045f 8023668: Desugar serializable lambda bodies using more robust naming scheme
rfield
parents:
diff changeset
    96
            }
018e34d4045f 8023668: Desugar serializable lambda bodies using more robust naming scheme
rfield
parents:
diff changeset
    97
            System.err.printf("FAIL: other test %s expected an exception", testName);
018e34d4045f 8023668: Desugar serializable lambda bodies using more robust naming scheme
rfield
parents:
diff changeset
    98
            throw new Exception("expected an exception" + testName);
018e34d4045f 8023668: Desugar serializable lambda bodies using more robust naming scheme
rfield
parents:
diff changeset
    99
        } else {
018e34d4045f 8023668: Desugar serializable lambda bodies using more robust naming scheme
rfield
parents:
diff changeset
   100
            readCheck(iName, testName, checkingClassLoader, ser);
018e34d4045f 8023668: Desugar serializable lambda bodies using more robust naming scheme
rfield
parents:
diff changeset
   101
            System.err.printf("PASS: other test %s readCheck\n", testName);
018e34d4045f 8023668: Desugar serializable lambda bodies using more robust naming scheme
rfield
parents:
diff changeset
   102
        }
018e34d4045f 8023668: Desugar serializable lambda bodies using more robust naming scheme
rfield
parents:
diff changeset
   103
    }
018e34d4045f 8023668: Desugar serializable lambda bodies using more robust naming scheme
rfield
parents:
diff changeset
   104
018e34d4045f 8023668: Desugar serializable lambda bodies using more robust naming scheme
rfield
parents:
diff changeset
   105
    void readCheck(String iName, String testName, ClassLoader loader, byte[] ser) throws Exception {
018e34d4045f 8023668: Desugar serializable lambda bodies using more robust naming scheme
rfield
parents:
diff changeset
   106
        Class<?> k = loader.loadClass(testName);
018e34d4045f 8023668: Desugar serializable lambda bodies using more robust naming scheme
rfield
parents:
diff changeset
   107
        Object inst = getInstance(k);
018e34d4045f 8023668: Desugar serializable lambda bodies using more robust naming scheme
rfield
parents:
diff changeset
   108
        Method mrc = getMethod(k, "readCheck", ObjectInput.class);
018e34d4045f 8023668: Desugar serializable lambda bodies using more robust naming scheme
rfield
parents:
diff changeset
   109
        ByteArrayInputStream bais = new ByteArrayInputStream(ser);
018e34d4045f 8023668: Desugar serializable lambda bodies using more robust naming scheme
rfield
parents:
diff changeset
   110
        try (ObjectInput in = new ObjectInputStream(bais)) {
018e34d4045f 8023668: Desugar serializable lambda bodies using more robust naming scheme
rfield
parents:
diff changeset
   111
            mrc.invoke(inst, in);
018e34d4045f 8023668: Desugar serializable lambda bodies using more robust naming scheme
rfield
parents:
diff changeset
   112
        }
018e34d4045f 8023668: Desugar serializable lambda bodies using more robust naming scheme
rfield
parents:
diff changeset
   113
    }
018e34d4045f 8023668: Desugar serializable lambda bodies using more robust naming scheme
rfield
parents:
diff changeset
   114
018e34d4045f 8023668: Desugar serializable lambda bodies using more robust naming scheme
rfield
parents:
diff changeset
   115
    Method getMethod(Class<?> k, String name, Class<?> argTypes) throws Exception {
018e34d4045f 8023668: Desugar serializable lambda bodies using more robust naming scheme
rfield
parents:
diff changeset
   116
        Method meth = k.getDeclaredMethod(name, argTypes);
018e34d4045f 8023668: Desugar serializable lambda bodies using more robust naming scheme
rfield
parents:
diff changeset
   117
        meth.setAccessible(true);
018e34d4045f 8023668: Desugar serializable lambda bodies using more robust naming scheme
rfield
parents:
diff changeset
   118
        return meth;
018e34d4045f 8023668: Desugar serializable lambda bodies using more robust naming scheme
rfield
parents:
diff changeset
   119
    }
018e34d4045f 8023668: Desugar serializable lambda bodies using more robust naming scheme
rfield
parents:
diff changeset
   120
018e34d4045f 8023668: Desugar serializable lambda bodies using more robust naming scheme
rfield
parents:
diff changeset
   121
    Object getInstance(Class<?> k) throws Exception {
018e34d4045f 8023668: Desugar serializable lambda bodies using more robust naming scheme
rfield
parents:
diff changeset
   122
        Constructor<?> cons = k.getConstructors()[0];
018e34d4045f 8023668: Desugar serializable lambda bodies using more robust naming scheme
rfield
parents:
diff changeset
   123
        cons.setAccessible(true);
018e34d4045f 8023668: Desugar serializable lambda bodies using more robust naming scheme
rfield
parents:
diff changeset
   124
        return cons.newInstance();
018e34d4045f 8023668: Desugar serializable lambda bodies using more robust naming scheme
rfield
parents:
diff changeset
   125
    }
018e34d4045f 8023668: Desugar serializable lambda bodies using more robust naming scheme
rfield
parents:
diff changeset
   126
018e34d4045f 8023668: Desugar serializable lambda bodies using more robust naming scheme
rfield
parents:
diff changeset
   127
    static class TestClassLoader extends ClassLoader  {
018e34d4045f 8023668: Desugar serializable lambda bodies using more robust naming scheme
rfield
parents:
diff changeset
   128
        static final String compiledDir = System.getProperty("user.dir");
018e34d4045f 8023668: Desugar serializable lambda bodies using more robust naming scheme
rfield
parents:
diff changeset
   129
        static final String sourceBaseDir = System.getProperty("test.src");
018e34d4045f 8023668: Desugar serializable lambda bodies using more robust naming scheme
rfield
parents:
diff changeset
   130
26100
bb7dd001d190 8050429: Update/cleanup ToolBox
jjg
parents: 21489
diff changeset
   131
        final ToolBox tb = new ToolBox();
21489
018e34d4045f 8023668: Desugar serializable lambda bodies using more robust naming scheme
rfield
parents:
diff changeset
   132
        final String context;
018e34d4045f 8023668: Desugar serializable lambda bodies using more robust naming scheme
rfield
parents:
diff changeset
   133
018e34d4045f 8023668: Desugar serializable lambda bodies using more robust naming scheme
rfield
parents:
diff changeset
   134
        public TestClassLoader(String context) {
018e34d4045f 8023668: Desugar serializable lambda bodies using more robust naming scheme
rfield
parents:
diff changeset
   135
            super();
018e34d4045f 8023668: Desugar serializable lambda bodies using more robust naming scheme
rfield
parents:
diff changeset
   136
            this.context = context;
018e34d4045f 8023668: Desugar serializable lambda bodies using more robust naming scheme
rfield
parents:
diff changeset
   137
        }
018e34d4045f 8023668: Desugar serializable lambda bodies using more robust naming scheme
rfield
parents:
diff changeset
   138
018e34d4045f 8023668: Desugar serializable lambda bodies using more robust naming scheme
rfield
parents:
diff changeset
   139
        @Override
018e34d4045f 8023668: Desugar serializable lambda bodies using more robust naming scheme
rfield
parents:
diff changeset
   140
        public Class findClass(String name) throws ClassNotFoundException {
018e34d4045f 8023668: Desugar serializable lambda bodies using more robust naming scheme
rfield
parents:
diff changeset
   141
            byte[] b;
018e34d4045f 8023668: Desugar serializable lambda bodies using more robust naming scheme
rfield
parents:
diff changeset
   142
018e34d4045f 8023668: Desugar serializable lambda bodies using more robust naming scheme
rfield
parents:
diff changeset
   143
            try {
018e34d4045f 8023668: Desugar serializable lambda bodies using more robust naming scheme
rfield
parents:
diff changeset
   144
                b = loadClassData(name);
018e34d4045f 8023668: Desugar serializable lambda bodies using more robust naming scheme
rfield
parents:
diff changeset
   145
            } catch (Throwable th) {
018e34d4045f 8023668: Desugar serializable lambda bodies using more robust naming scheme
rfield
parents:
diff changeset
   146
                // th.printStackTrace();
018e34d4045f 8023668: Desugar serializable lambda bodies using more robust naming scheme
rfield
parents:
diff changeset
   147
                throw new ClassNotFoundException("Loading error", th);
018e34d4045f 8023668: Desugar serializable lambda bodies using more robust naming scheme
rfield
parents:
diff changeset
   148
            }
018e34d4045f 8023668: Desugar serializable lambda bodies using more robust naming scheme
rfield
parents:
diff changeset
   149
            return defineClass(name, b, 0, b.length);
018e34d4045f 8023668: Desugar serializable lambda bodies using more robust naming scheme
rfield
parents:
diff changeset
   150
        }
018e34d4045f 8023668: Desugar serializable lambda bodies using more robust naming scheme
rfield
parents:
diff changeset
   151
018e34d4045f 8023668: Desugar serializable lambda bodies using more robust naming scheme
rfield
parents:
diff changeset
   152
        private byte[] loadClassData(String name) throws Exception {
018e34d4045f 8023668: Desugar serializable lambda bodies using more robust naming scheme
rfield
parents:
diff changeset
   153
            String srcName;
018e34d4045f 8023668: Desugar serializable lambda bodies using more robust naming scheme
rfield
parents:
diff changeset
   154
            if (name.startsWith("TEST"))
018e34d4045f 8023668: Desugar serializable lambda bodies using more robust naming scheme
rfield
parents:
diff changeset
   155
                srcName = name;
018e34d4045f 8023668: Desugar serializable lambda bodies using more robust naming scheme
rfield
parents:
diff changeset
   156
            else if (name.startsWith("I"))
018e34d4045f 8023668: Desugar serializable lambda bodies using more robust naming scheme
rfield
parents:
diff changeset
   157
                srcName = "TEST" + name.substring(1);
018e34d4045f 8023668: Desugar serializable lambda bodies using more robust naming scheme
rfield
parents:
diff changeset
   158
            else
018e34d4045f 8023668: Desugar serializable lambda bodies using more robust naming scheme
rfield
parents:
diff changeset
   159
                throw new Exception("Did not expect to load " + name);
018e34d4045f 8023668: Desugar serializable lambda bodies using more robust naming scheme
rfield
parents:
diff changeset
   160
            Path srcFile = Paths.get(sourceBaseDir, context, srcName + ".java");
26100
bb7dd001d190 8050429: Update/cleanup ToolBox
jjg
parents: 21489
diff changeset
   161
            tb.new JavacTask()
bb7dd001d190 8050429: Update/cleanup ToolBox
jjg
parents: 21489
diff changeset
   162
                    .outdir(compiledDir)
bb7dd001d190 8050429: Update/cleanup ToolBox
jjg
parents: 21489
diff changeset
   163
                    .files(srcFile)
bb7dd001d190 8050429: Update/cleanup ToolBox
jjg
parents: 21489
diff changeset
   164
                    .run();
21489
018e34d4045f 8023668: Desugar serializable lambda bodies using more robust naming scheme
rfield
parents:
diff changeset
   165
            Path cfFile = Paths.get(compiledDir, name + ".class");
018e34d4045f 8023668: Desugar serializable lambda bodies using more robust naming scheme
rfield
parents:
diff changeset
   166
            byte[] bytes = Files.readAllBytes(cfFile);
018e34d4045f 8023668: Desugar serializable lambda bodies using more robust naming scheme
rfield
parents:
diff changeset
   167
            return bytes;
018e34d4045f 8023668: Desugar serializable lambda bodies using more robust naming scheme
rfield
parents:
diff changeset
   168
        }
018e34d4045f 8023668: Desugar serializable lambda bodies using more robust naming scheme
rfield
parents:
diff changeset
   169
    }
018e34d4045f 8023668: Desugar serializable lambda bodies using more robust naming scheme
rfield
parents:
diff changeset
   170
}