mirror of
https://github.com/openjdk/jdk.git
synced 2025-08-27 14:54:52 +02:00
8247536: Support for pre-generated java.lang.invoke classes in CDS static archive
Reviewed-by: iklam, mchung
This commit is contained in:
parent
7ec9c8eac7
commit
e4469d2c8c
22 changed files with 537 additions and 20 deletions
|
@ -25,6 +25,7 @@
|
|||
|
||||
package java.lang.invoke;
|
||||
|
||||
import jdk.internal.misc.CDS;
|
||||
import jdk.internal.org.objectweb.asm.ClassWriter;
|
||||
import jdk.internal.org.objectweb.asm.Opcodes;
|
||||
import sun.invoke.util.Wrapper;
|
||||
|
@ -32,6 +33,7 @@ import sun.invoke.util.Wrapper;
|
|||
import java.util.ArrayList;
|
||||
import java.util.HashSet;
|
||||
import java.util.Map;
|
||||
import java.util.Objects;
|
||||
import java.util.Set;
|
||||
import java.util.TreeMap;
|
||||
import java.util.TreeSet;
|
||||
|
@ -58,12 +60,18 @@ class GenerateJLIClassesHelper {
|
|||
shortenSignature(basicTypeSignature(type)) +
|
||||
(resolvedMember != null ? " (success)" : " (fail)"));
|
||||
}
|
||||
if (CDS.isDumpingClassList()) {
|
||||
CDS.traceLambdaFormInvoker(LF_RESOLVE, holder.getName(), name, shortenSignature(basicTypeSignature(type)));
|
||||
}
|
||||
}
|
||||
|
||||
static void traceSpeciesType(String cn, Class<?> salvage) {
|
||||
if (TRACE_RESOLVE) {
|
||||
System.out.println(SPECIES_RESOLVE + " " + cn + (salvage != null ? " (salvaged)" : " (generated)"));
|
||||
}
|
||||
if (CDS.isDumpingClassList()) {
|
||||
CDS.traceSpeciesType(SPECIES_RESOLVE, cn);
|
||||
}
|
||||
}
|
||||
|
||||
// Map from DirectMethodHandle method type name to index to LambdForms
|
||||
|
@ -310,13 +318,14 @@ class GenerateJLIClassesHelper {
|
|||
* jlink phase.
|
||||
*/
|
||||
static Map<String, byte[]> generateHolderClasses(Stream<String> traces) {
|
||||
Objects.requireNonNull(traces);
|
||||
HolderClassBuilder builder = new HolderClassBuilder();
|
||||
traces.map(line -> line.split(" "))
|
||||
.forEach(parts -> {
|
||||
switch (parts[0]) {
|
||||
case SPECIES_RESOLVE:
|
||||
// Allow for new types of species data classes being resolved here
|
||||
assert parts.length == 3;
|
||||
assert parts.length >= 2;
|
||||
if (parts[1].startsWith(BMH_SPECIES_PREFIX)) {
|
||||
String species = parts[1].substring(BMH_SPECIES_PREFIX.length());
|
||||
if (!"L".equals(species)) {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue