@@ -295,9 +295,13 @@ private ConstantPoolException malformedInput(int px) {
295
295
296
296
@ Override
297
297
public Utf8EntryImpl clone (ConstantPoolBuilder cp ) {
298
- return (state == State .STRING && rawBytes == null )
298
+ var ret = (state == State .STRING && rawBytes == null )
299
299
? (Utf8EntryImpl ) cp .utf8Entry (stringValue )
300
300
: ((SplitConstantPool ) cp ).maybeCloneUtf8Entry (this );
301
+ var mySym = this .typeSym ;
302
+ if (ret .typeSym == null && mySym != null )
303
+ ret .typeSym = mySym ;
304
+ return ret ;
301
305
}
302
306
303
307
@ Override
@@ -939,6 +943,8 @@ public static final class InvokeDynamicEntryImpl
939
943
extends AbstractDynamicConstantPoolEntry
940
944
implements InvokeDynamicEntry {
941
945
946
+ public @ Stable DynamicCallSiteDesc sym ;
947
+
942
948
InvokeDynamicEntryImpl (ConstantPool cpm , int index , int hash , BootstrapMethodEntryImpl bootstrapMethod ,
943
949
NameAndTypeEntryImpl nameAndType ) {
944
950
super (cpm , index , hash , bootstrapMethod , nameAndType );
@@ -957,13 +963,27 @@ public int tag() {
957
963
958
964
@ Override
959
965
public InvokeDynamicEntry clone (ConstantPoolBuilder cp ) {
960
- return cp .invokeDynamicEntry (bootstrap (), nameAndType ());
966
+ var ret = (InvokeDynamicEntryImpl ) cp .invokeDynamicEntry (bootstrap (), nameAndType ());
967
+ var mySym = this .sym ;
968
+ if (ret .sym == null && mySym != null )
969
+ ret .sym = mySym ;
970
+ return ret ;
971
+ }
972
+
973
+ @ Override
974
+ public DynamicCallSiteDesc asSymbol () {
975
+ var cache = this .sym ;
976
+ if (cache != null )
977
+ return cache ;
978
+ return this .sym = InvokeDynamicEntry .super .asSymbol ();
961
979
}
962
980
}
963
981
964
982
public static final class ConstantDynamicEntryImpl extends AbstractDynamicConstantPoolEntry
965
983
implements ConstantDynamicEntry {
966
984
985
+ public @ Stable DynamicConstantDesc <?> sym ;
986
+
967
987
ConstantDynamicEntryImpl (ConstantPool cpm , int index , int hash , BootstrapMethodEntryImpl bootstrapMethod ,
968
988
NameAndTypeEntryImpl nameAndType ) {
969
989
super (cpm , index , hash , bootstrapMethod , nameAndType );
@@ -982,7 +1002,19 @@ public int tag() {
982
1002
983
1003
@ Override
984
1004
public ConstantDynamicEntry clone (ConstantPoolBuilder cp ) {
985
- return cp .constantDynamicEntry (bootstrap (), nameAndType ());
1005
+ var ret = (ConstantDynamicEntryImpl ) cp .constantDynamicEntry (bootstrap (), nameAndType ());
1006
+ var mySym = this .sym ;
1007
+ if (ret .sym == null && mySym != null )
1008
+ ret .sym = mySym ;
1009
+ return ret ;
1010
+ }
1011
+
1012
+ @ Override
1013
+ public DynamicConstantDesc <?> asSymbol () {
1014
+ var cache = this .sym ;
1015
+ if (cache != null )
1016
+ return cache ;
1017
+ return this .sym = ConstantDynamicEntry .super .asSymbol ();
986
1018
}
987
1019
}
988
1020
@@ -991,6 +1023,7 @@ public static final class MethodHandleEntryImpl extends AbstractPoolEntry
991
1023
992
1024
private final int refKind ;
993
1025
private final AbstractPoolEntry .AbstractMemberRefEntry reference ;
1026
+ public @ Stable DirectMethodHandleDesc sym ;
994
1027
995
1028
MethodHandleEntryImpl (ConstantPool cpm , int index , int hash , int refKind , AbstractPoolEntry .AbstractMemberRefEntry
996
1029
reference ) {
@@ -1023,7 +1056,14 @@ public AbstractPoolEntry.AbstractMemberRefEntry reference() {
1023
1056
1024
1057
@ Override
1025
1058
public DirectMethodHandleDesc asSymbol () {
1026
- return MethodHandleDesc .of (
1059
+ var cache = this .sym ;
1060
+ if (cache != null )
1061
+ return cache ;
1062
+ return computeSymbol ();
1063
+ }
1064
+
1065
+ private DirectMethodHandleDesc computeSymbol () {
1066
+ return this .sym = MethodHandleDesc .of (
1027
1067
DirectMethodHandleDesc .Kind .valueOf (kind (), reference () instanceof InterfaceMethodRefEntry ),
1028
1068
((MemberRefEntry ) reference ()).owner ().asSymbol (),
1029
1069
((MemberRefEntry ) reference ()).nameAndType ().name ().stringValue (),
@@ -1037,7 +1077,11 @@ void writeTo(BufWriterImpl pool) {
1037
1077
1038
1078
@ Override
1039
1079
public MethodHandleEntry clone (ConstantPoolBuilder cp ) {
1040
- return cp .methodHandleEntry (refKind , reference );
1080
+ var ret = (MethodHandleEntryImpl ) cp .methodHandleEntry (refKind , reference );
1081
+ var mySym = this .sym ;
1082
+ if (ret .sym == null && mySym != null )
1083
+ ret .sym = mySym ;
1084
+ return ret ;
1041
1085
}
1042
1086
1043
1087
@ Override
0 commit comments