File tree Expand file tree Collapse file tree 4 files changed +12
-5
lines changed
src/java.base/share/classes/java/lang/invoke Expand file tree Collapse file tree 4 files changed +12
-5
lines changed Original file line number Diff line number Diff line change @@ -101,7 +101,7 @@ public boolean isAccessModeSupported(AccessMode accessMode) {
101101 @ Override
102102 MethodHandle getMethodHandleUncached (int mode ) {
103103 MethodHandle targetHandle = target .getMethodHandle (mode ); // might throw UOE of access mode is not supported, which is ok
104- return handleFactory .apply (AccessMode .values ()[ mode ] , targetHandle );
104+ return handleFactory .apply (AccessMode .valueFromOrdinal ( mode ) , targetHandle );
105105 }
106106
107107 @ Override
Original file line number Diff line number Diff line change 2626
2727import jdk .internal .vm .annotation .DontInline ;
2828import jdk .internal .vm .annotation .ForceInline ;
29+ import jdk .internal .vm .annotation .Hidden ;
2930import jdk .internal .vm .annotation .Stable ;
3031
3132import java .lang .invoke .VarHandle .AccessMode ;
@@ -108,14 +109,15 @@ final MethodType getMethodType(int type) {
108109 }
109110
110111 @ ForceInline
112+ @ Hidden
111113 final MemberName getMemberName (int mode ) {
112114 // Can be simplified by calling getMemberNameOrNull, but written in this
113115 // form to improve interpreter/coldpath performance.
114116 MemberName mn = memberName_table [mode ];
115117 if (mn == null ) {
116118 mn = resolveMemberName (mode );
117119 if (mn == null ) {
118- throw new UnsupportedOperationException ();
120+ throw new UnsupportedOperationException (AccessMode . valueFromOrdinal ( mode ). methodName () );
119121 }
120122 }
121123 return mn ;
@@ -132,7 +134,7 @@ final MemberName getMemberNameOrNull(int mode) {
132134
133135 @ DontInline
134136 MemberName resolveMemberName (int mode ) {
135- AccessMode value = AccessMode .values ()[ mode ] ;
137+ AccessMode value = AccessMode .valueFromOrdinal ( mode ) ;
136138 String methodName = value .methodName ();
137139 MethodType type = methodType_table [value .at .ordinal ()].insertParameterTypes (0 , VarHandle .class );
138140 return memberName_table [mode ] = MethodHandles .Lookup .IMPL_LOOKUP
Original file line number Diff line number Diff line change @@ -1989,6 +1989,11 @@ public static AccessMode valueFromMethodName(String methodName) {
19891989 default -> throw new IllegalArgumentException ("No AccessMode value for method name " + methodName );
19901990 };
19911991 }
1992+
1993+ private static final @ Stable AccessMode [] VALUES = values ();
1994+ static AccessMode valueFromOrdinal (int mode ) {
1995+ return VALUES [mode ];
1996+ }
19921997 }
19931998
19941999 static final class AccessDescriptor {
@@ -2187,7 +2192,7 @@ final MethodHandle getMethodHandle(int mode) {
21872192 }
21882193
21892194 MethodHandle getMethodHandleUncached (int mode ) {
2190- MethodType mt = accessModeType (AccessMode .values ()[ mode ] ).
2195+ MethodType mt = accessModeType (AccessMode .valueFromOrdinal ( mode ) ).
21912196 insertParameterTypes (0 , VarHandle .class );
21922197 MemberName mn = vform .getMemberName (mode );
21932198 DirectMethodHandle dmh = DirectMethodHandle .make (mn );
Original file line number Diff line number Diff line change 11/*
2- * Copyright (c) 2014, 2020 , Oracle and/or its affiliates. All rights reserved.
2+ * Copyright (c) 2014, 2023 , Oracle and/or its affiliates. All rights reserved.
33 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
44 *
55 * This code is free software; you can redistribute it and/or modify it
You can’t perform that action at this time.
0 commit comments