Skip to content

Commit dde4b74

Browse files
committed
Magic accessor no longer exists from JDK23 onwards.
1 parent 44a723e commit dde4b74

File tree

4 files changed

+18
-10
lines changed

4 files changed

+18
-10
lines changed

espresso-shared/src/com.oracle.truffle.espresso.classfile/src/com/oracle/truffle/espresso/classfile/JavaVersion.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,8 @@ public static final class VersionRange {
4646

4747
public static final VersionRange ALL = between(0, LATEST_SUPPORTED);
4848
public static final VersionRange VERSION_9_TO_21 = between(9, 21);
49+
public static final VersionRange VERSION_9_TO_23 = between(9, 23);
50+
public static final VersionRange VERSION_22_TO_23 = between(22, 23);
4951

5052
private final int low;
5153
private final int high;

espresso/src/com.oracle.truffle.espresso/src/com/oracle/truffle/espresso/impl/ClassRegistry.java

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -582,14 +582,16 @@ private ObjectKlass createKlass(EspressoContext context, ParserKlass parserKlass
582582
*
583583
* In turn, this ensures that only these classes may be magic accessors.
584584
*/
585-
if (!env.loaderIsBoot(getClassLoader()) &&
586-
env.isReflectPackage(superKlass.getRuntimePackage()) &&
587-
!env.loaderIsReflection(getClassLoader())) {
588-
throw EspressoClassLoadingException.illegalAccessError(
589-
String.format("class %s loaded by %s cannot access reflection superclass %s",
590-
klass.getExternalName(),
591-
loaderDesc(env, context.getMeta(), getClassLoader()),
592-
superKlass.getExternalName()));
585+
if (context.getJavaVersion().java23OrEarlier()) {
586+
if (!env.loaderIsBoot(getClassLoader()) &&
587+
env.isReflectPackage(superKlass.getRuntimePackage()) &&
588+
!env.loaderIsReflection(getClassLoader())) {
589+
throw EspressoClassLoadingException.illegalAccessError(
590+
String.format("class %s loaded by %s cannot access reflection superclass %s",
591+
klass.getExternalName(),
592+
loaderDesc(env, context.getMeta(), getClassLoader()),
593+
superKlass.getExternalName()));
594+
}
593595
}
594596
if (!Klass.checkAccess(superKlass, klass)) {
595597
StringBuilder sb = new StringBuilder().append("class ").append(klass.getExternalName()).append(" cannot access its superclass ").append(superKlass.getExternalName());

espresso/src/com.oracle.truffle.espresso/src/com/oracle/truffle/espresso/impl/Klass.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1898,7 +1898,8 @@ public final Symbol<Name> getSymbolicRuntimePackage() {
18981898

18991899
@Override
19001900
public final boolean isMagicAccessor() {
1901-
if (getMeta().sun_reflect_MagicAccessorImpl != null) {
1901+
if (getJavaVersion().java23OrEarlier()) {
1902+
assert getMeta().sun_reflect_MagicAccessorImpl != null;
19021903
return getMeta().sun_reflect_MagicAccessorImpl.isAssignableFrom(this);
19031904
}
19041905
return false;

espresso/src/com.oracle.truffle.espresso/src/com/oracle/truffle/espresso/meta/Meta.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,11 +31,13 @@
3131
import static com.oracle.truffle.espresso.classfile.JavaVersion.VersionRange.VERSION_21_OR_HIGHER;
3232
import static com.oracle.truffle.espresso.classfile.JavaVersion.VersionRange.VERSION_21_OR_LOWER;
3333
import static com.oracle.truffle.espresso.classfile.JavaVersion.VersionRange.VERSION_22_OR_HIGHER;
34+
import static com.oracle.truffle.espresso.classfile.JavaVersion.VersionRange.VERSION_22_TO_23;
3435
import static com.oracle.truffle.espresso.classfile.JavaVersion.VersionRange.VERSION_24_OR_LOWER;
3536
import static com.oracle.truffle.espresso.classfile.JavaVersion.VersionRange.VERSION_25_OR_HIGHER;
3637
import static com.oracle.truffle.espresso.classfile.JavaVersion.VersionRange.VERSION_8_OR_LOWER;
3738
import static com.oracle.truffle.espresso.classfile.JavaVersion.VersionRange.VERSION_9_OR_HIGHER;
3839
import static com.oracle.truffle.espresso.classfile.JavaVersion.VersionRange.VERSION_9_TO_21;
40+
import static com.oracle.truffle.espresso.classfile.JavaVersion.VersionRange.VERSION_9_TO_23;
3941
import static com.oracle.truffle.espresso.classfile.JavaVersion.VersionRange.between;
4042
import static com.oracle.truffle.espresso.classfile.JavaVersion.VersionRange.higher;
4143
import static com.oracle.truffle.espresso.classfile.JavaVersion.VersionRange.lower;
@@ -898,10 +900,11 @@ public Meta(EspressoContext context) {
898900
sun_reflect_MagicAccessorImpl = diff() //
899901
.klass(VERSION_8_OR_LOWER, Types.sun_reflect_MagicAccessorImpl) //
900902
.klass(VERSION_9_TO_21, Types.jdk_internal_reflect_MagicAccessorImpl) //
903+
.klass(VERSION_22_TO_23, Types.jdk_internal_reflect_SerializationConstructorAccessorImpl) //
901904
.notRequiredKlass();
902905
sun_reflect_DelegatingClassLoader = diff() //
903906
.klass(VERSION_8_OR_LOWER, Types.sun_reflect_DelegatingClassLoader) //
904-
.klass(VERSION_9_TO_21, Types.jdk_internal_reflect_DelegatingClassLoader) //
907+
.klass(VERSION_9_TO_23, Types.jdk_internal_reflect_DelegatingClassLoader) //
905908
.notRequiredKlass();
906909

907910
sun_reflect_MethodAccessorImpl = diff() //

0 commit comments

Comments
 (0)