diff --git a/src/java.base/share/classes/jdk/internal/classfile/constantpool/ConstantDynamicEntry.java b/src/java.base/share/classes/jdk/internal/classfile/constantpool/ConstantDynamicEntry.java index afb36eaa184..c81a1eadb66 100644 --- a/src/java.base/share/classes/jdk/internal/classfile/constantpool/ConstantDynamicEntry.java +++ b/src/java.base/share/classes/jdk/internal/classfile/constantpool/ConstantDynamicEntry.java @@ -26,6 +26,8 @@ package jdk.internal.classfile.constantpool; import jdk.internal.classfile.TypeKind; import jdk.internal.classfile.impl.Util; + +import java.lang.constant.ClassDesc; import java.lang.constant.ConstantDesc; import java.lang.constant.DynamicConstantDesc; @@ -40,6 +42,13 @@ public sealed interface ConstantDynamicEntry extends DynamicConstantPoolEntry, LoadableConstantEntry permits AbstractPoolEntry.ConstantDynamicEntryImpl { + /** + * {@return a symbolic descriptor for the dynamic constant's type} + */ + default ClassDesc typeSymbol() { + return Util.fieldTypeSymbol(nameAndType()); + } + @Override default ConstantDesc constantValue() { return asSymbol(); @@ -51,7 +60,7 @@ public sealed interface ConstantDynamicEntry default DynamicConstantDesc asSymbol() { return DynamicConstantDesc.ofNamed(bootstrap().bootstrapMethod().asSymbol(), name().stringValue(), - Util.fieldTypeSymbol(nameAndType()), + typeSymbol(), bootstrap().arguments().stream() .map(LoadableConstantEntry::constantValue) .toArray(ConstantDesc[]::new)); diff --git a/src/java.base/share/classes/jdk/internal/classfile/constantpool/FieldRefEntry.java b/src/java.base/share/classes/jdk/internal/classfile/constantpool/FieldRefEntry.java index 9b7f199cb1b..0183b2da389 100644 --- a/src/java.base/share/classes/jdk/internal/classfile/constantpool/FieldRefEntry.java +++ b/src/java.base/share/classes/jdk/internal/classfile/constantpool/FieldRefEntry.java @@ -25,6 +25,9 @@ package jdk.internal.classfile.constantpool; import jdk.internal.classfile.impl.AbstractPoolEntry; +import jdk.internal.classfile.impl.Util; + +import java.lang.constant.ClassDesc; /** * Models a {@code CONSTANT_Fieldref_info} constant in the constant pool of a @@ -34,4 +37,10 @@ import jdk.internal.classfile.impl.AbstractPoolEntry; public sealed interface FieldRefEntry extends MemberRefEntry permits AbstractPoolEntry.FieldRefEntryImpl { + /** + * {@return a symbolic descriptor for the field's type} + */ + default ClassDesc typeSymbol() { + return Util.fieldTypeSymbol(nameAndType()); + } } diff --git a/src/java.base/share/classes/jdk/internal/classfile/constantpool/InterfaceMethodRefEntry.java b/src/java.base/share/classes/jdk/internal/classfile/constantpool/InterfaceMethodRefEntry.java index 495a33211a7..d3a208e0934 100644 --- a/src/java.base/share/classes/jdk/internal/classfile/constantpool/InterfaceMethodRefEntry.java +++ b/src/java.base/share/classes/jdk/internal/classfile/constantpool/InterfaceMethodRefEntry.java @@ -25,6 +25,9 @@ package jdk.internal.classfile.constantpool; import jdk.internal.classfile.impl.AbstractPoolEntry; +import jdk.internal.classfile.impl.Util; + +import java.lang.constant.MethodTypeDesc; /** * Models a {@code CONSTANT_InterfaceMethodRef_info} constant in the constant pool of a @@ -35,4 +38,10 @@ public sealed interface InterfaceMethodRefEntry extends MemberRefEntry permits AbstractPoolEntry.InterfaceMethodRefEntryImpl { + /** + * {@return a symbolic descriptor for the interface method's type} + */ + default MethodTypeDesc typeSymbol() { + return Util.methodTypeSymbol(nameAndType()); + } } diff --git a/src/java.base/share/classes/jdk/internal/classfile/constantpool/InvokeDynamicEntry.java b/src/java.base/share/classes/jdk/internal/classfile/constantpool/InvokeDynamicEntry.java index d5019569d63..a900ab67e95 100644 --- a/src/java.base/share/classes/jdk/internal/classfile/constantpool/InvokeDynamicEntry.java +++ b/src/java.base/share/classes/jdk/internal/classfile/constantpool/InvokeDynamicEntry.java @@ -26,6 +26,7 @@ package jdk.internal.classfile.constantpool; import java.lang.constant.ConstantDesc; import java.lang.constant.DynamicCallSiteDesc; +import java.lang.constant.MethodTypeDesc; import jdk.internal.classfile.impl.AbstractPoolEntry; import jdk.internal.classfile.impl.Util; @@ -38,13 +39,20 @@ public sealed interface InvokeDynamicEntry extends DynamicConstantPoolEntry permits AbstractPoolEntry.InvokeDynamicEntryImpl { + /** + * {@return a symbolic descriptor for the call site's invocation type} + */ + default MethodTypeDesc typeSymbol() { + return Util.methodTypeSymbol(nameAndType()); + } + /** * {@return a symbolic descriptor for the dynamic call site} */ default DynamicCallSiteDesc asSymbol() { return DynamicCallSiteDesc.of(bootstrap().bootstrapMethod().asSymbol(), name().stringValue(), - Util.methodTypeSymbol(nameAndType()), + typeSymbol(), bootstrap().arguments().stream() .map(LoadableConstantEntry::constantValue) .toArray(ConstantDesc[]::new)); diff --git a/src/java.base/share/classes/jdk/internal/classfile/constantpool/MethodRefEntry.java b/src/java.base/share/classes/jdk/internal/classfile/constantpool/MethodRefEntry.java index 52f3ee18dde..c6ccfafb421 100644 --- a/src/java.base/share/classes/jdk/internal/classfile/constantpool/MethodRefEntry.java +++ b/src/java.base/share/classes/jdk/internal/classfile/constantpool/MethodRefEntry.java @@ -25,6 +25,9 @@ package jdk.internal.classfile.constantpool; import jdk.internal.classfile.impl.AbstractPoolEntry; +import jdk.internal.classfile.impl.Util; + +import java.lang.constant.MethodTypeDesc; /** * Models a {@code CONSTANT_MethodRef_info} constant in the constant pool of a @@ -34,4 +37,10 @@ import jdk.internal.classfile.impl.AbstractPoolEntry; public sealed interface MethodRefEntry extends MemberRefEntry permits AbstractPoolEntry.MethodRefEntryImpl { + /** + * {@return a symbolic descriptor for the method's type} + */ + default MethodTypeDesc typeSymbol() { + return Util.methodTypeSymbol(nameAndType()); + } } diff --git a/src/java.base/share/classes/jdk/internal/classfile/instruction/FieldInstruction.java b/src/java.base/share/classes/jdk/internal/classfile/instruction/FieldInstruction.java index ff502c432ed..2d869b1d4da 100644 --- a/src/java.base/share/classes/jdk/internal/classfile/instruction/FieldInstruction.java +++ b/src/java.base/share/classes/jdk/internal/classfile/instruction/FieldInstruction.java @@ -77,7 +77,7 @@ public sealed interface FieldInstruction extends Instruction * {@return a symbolic descriptor for the type of the field} */ default ClassDesc typeSymbol() { - return Util.fieldTypeSymbol(field().nameAndType()); + return field().typeSymbol(); } /** diff --git a/src/java.base/share/classes/jdk/internal/classfile/instruction/InvokeDynamicInstruction.java b/src/java.base/share/classes/jdk/internal/classfile/instruction/InvokeDynamicInstruction.java index 77262353391..22a9b391195 100644 --- a/src/java.base/share/classes/jdk/internal/classfile/instruction/InvokeDynamicInstruction.java +++ b/src/java.base/share/classes/jdk/internal/classfile/instruction/InvokeDynamicInstruction.java @@ -70,7 +70,7 @@ public sealed interface InvokeDynamicInstruction extends Instruction * {@return the invocation type of the call site, as a symbolic descriptor} */ default MethodTypeDesc typeSymbol() { - return Util.methodTypeSymbol(invokedynamic().nameAndType()); + return invokedynamic().typeSymbol(); } /**