author | akulyakh |
Thu, 21 May 2015 11:41:04 -0700 | |
changeset 30730 | d3ce7619db2c |
parent 26100 | bb7dd001d190 |
child 36526 | 3b41f1c69604 |
permissions | -rw-r--r-- |
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 | 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 | 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 | 161 |
tb.new JavacTask() |
162 |
.outdir(compiledDir) |
|
163 |
.files(srcFile) |
|
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 |
} |