diff --git a/src/java.base/share/classes/jdk/internal/reflect/AccessorUtils.java b/src/java.base/share/classes/jdk/internal/reflect/AccessorUtils.java index 64b928e05e056..ec32da34c359b 100644 --- a/src/java.base/share/classes/jdk/internal/reflect/AccessorUtils.java +++ b/src/java.base/share/classes/jdk/internal/reflect/AccessorUtils.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2021, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2021, 2025, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -31,7 +31,7 @@ /** * Utility methods used by DirectMethodHandleAccessor and DirectConstructorHandleAccessor */ -public class AccessorUtils { +public final class AccessorUtils { /** * Determines if the given exception thrown by MethodHandle::invokeExact * is caused by an illegal argument passed to Method::invoke or diff --git a/src/java.base/share/classes/jdk/internal/reflect/ConstantPool.java b/src/java.base/share/classes/jdk/internal/reflect/ConstantPool.java index a43034126e44e..a3cdcf569ca11 100644 --- a/src/java.base/share/classes/jdk/internal/reflect/ConstantPool.java +++ b/src/java.base/share/classes/jdk/internal/reflect/ConstantPool.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2018, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2025, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -32,7 +32,7 @@ Currently this is needed to provide reflective access to annotations but may be used by other internal subsystems in the future. */ -public class ConstantPool { +public final class ConstantPool { // Number of entries in this constant pool (= maximum valid constant pool index) public int getSize() { return getSize0 (constantPoolOop); } public Class getClassAt (int index) { return getClassAt0 (constantPoolOop, index); } diff --git a/src/java.base/share/classes/jdk/internal/reflect/ConstructorAccessor.java b/src/java.base/share/classes/jdk/internal/reflect/ConstructorAccessor.java index 30d8baf634cc9..16b06580f1344 100644 --- a/src/java.base/share/classes/jdk/internal/reflect/ConstructorAccessor.java +++ b/src/java.base/share/classes/jdk/internal/reflect/ConstructorAccessor.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2001, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2001, 2025, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -32,7 +32,7 @@ configured with a (possibly dynamically-generated) class which implements this interface. */ -public interface ConstructorAccessor { +public sealed interface ConstructorAccessor permits ConstructorAccessorImpl { /** Matches specification in {@link java.lang.reflect.Constructor} */ public Object newInstance(Object[] args) throws InstantiationException, diff --git a/src/java.base/share/classes/jdk/internal/reflect/ConstructorAccessorImpl.java b/src/java.base/share/classes/jdk/internal/reflect/ConstructorAccessorImpl.java index 13f6804b810c8..9aeacfc00c1f8 100644 --- a/src/java.base/share/classes/jdk/internal/reflect/ConstructorAccessorImpl.java +++ b/src/java.base/share/classes/jdk/internal/reflect/ConstructorAccessorImpl.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2001, 2024, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2001, 2025, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -27,7 +27,8 @@ import java.lang.reflect.InvocationTargetException; -abstract class ConstructorAccessorImpl implements ConstructorAccessor { +abstract sealed class ConstructorAccessorImpl implements ConstructorAccessor + permits DirectConstructorHandleAccessor, DirectConstructorHandleAccessor.NativeAccessor, InstantiationExceptionConstructorAccessorImpl { /** Matches specification in {@link java.lang.reflect.Constructor} */ public abstract Object newInstance(Object[] args) throws InstantiationException, diff --git a/src/java.base/share/classes/jdk/internal/reflect/CsMethodAccessorAdapter.java b/src/java.base/share/classes/jdk/internal/reflect/CsMethodAccessorAdapter.java index a2cfae6e97507..018436744d25e 100644 --- a/src/java.base/share/classes/jdk/internal/reflect/CsMethodAccessorAdapter.java +++ b/src/java.base/share/classes/jdk/internal/reflect/CsMethodAccessorAdapter.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2021, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2021, 2025, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -41,7 +41,7 @@ * the adapter method with the caller class parameter will be called * instead. */ -class CsMethodAccessorAdapter extends MethodAccessorImpl { +final class CsMethodAccessorAdapter extends MethodAccessorImpl { private final Method csmAdapter; private final MethodAccessor accessor; diff --git a/src/java.base/share/classes/jdk/internal/reflect/DirectConstructorHandleAccessor.java b/src/java.base/share/classes/jdk/internal/reflect/DirectConstructorHandleAccessor.java index 03a327b9e2cff..22e453c35dd37 100644 --- a/src/java.base/share/classes/jdk/internal/reflect/DirectConstructorHandleAccessor.java +++ b/src/java.base/share/classes/jdk/internal/reflect/DirectConstructorHandleAccessor.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2021, 2023, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2021, 2025, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -35,7 +35,7 @@ import static jdk.internal.reflect.MethodHandleAccessorFactory.SPECIALIZED_PARAM_COUNT; -class DirectConstructorHandleAccessor extends ConstructorAccessorImpl { +final class DirectConstructorHandleAccessor extends ConstructorAccessorImpl { static ConstructorAccessorImpl constructorAccessor(Constructor ctor, MethodHandle target) { return new DirectConstructorHandleAccessor(ctor, target); } @@ -94,7 +94,7 @@ Object invokeImpl(Object[] args) throws Throwable { /** * Invoke the constructor via native VM reflection */ - static class NativeAccessor extends ConstructorAccessorImpl { + static final class NativeAccessor extends ConstructorAccessorImpl { private final Constructor ctor; NativeAccessor(Constructor ctor) { this.ctor = ctor; diff --git a/src/java.base/share/classes/jdk/internal/reflect/DirectMethodHandleAccessor.java b/src/java.base/share/classes/jdk/internal/reflect/DirectMethodHandleAccessor.java index e6c5aa5db2edd..5133185dbcb85 100644 --- a/src/java.base/share/classes/jdk/internal/reflect/DirectMethodHandleAccessor.java +++ b/src/java.base/share/classes/jdk/internal/reflect/DirectMethodHandleAccessor.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2021, 2024, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2021, 2025, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -42,7 +42,7 @@ import static java.lang.invoke.MethodType.genericMethodType; import static jdk.internal.reflect.MethodHandleAccessorFactory.LazyStaticHolder.JLIA; -class DirectMethodHandleAccessor extends MethodAccessorImpl { +final class DirectMethodHandleAccessor extends MethodAccessorImpl { /** * Creates a MethodAccessorImpl for a non-native method. */ @@ -203,7 +203,7 @@ private void checkReceiver(Object o) { /** * Invoke the method via native VM reflection */ - static class NativeAccessor extends MethodAccessorImpl { + static final class NativeAccessor extends MethodAccessorImpl { private final Method method; private final Method csmAdapter; private final boolean callerSensitive; diff --git a/src/java.base/share/classes/jdk/internal/reflect/FieldAccessor.java b/src/java.base/share/classes/jdk/internal/reflect/FieldAccessor.java index 0df292afa60cd..ea5786fc04767 100644 --- a/src/java.base/share/classes/jdk/internal/reflect/FieldAccessor.java +++ b/src/java.base/share/classes/jdk/internal/reflect/FieldAccessor.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2001, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2001, 2025, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -30,7 +30,7 @@ (possibly dynamically-generated) class which implements this interface. */ -public interface FieldAccessor { +public sealed interface FieldAccessor permits FieldAccessorImpl { /** Matches specification in {@link java.lang.reflect.Field} */ public Object get(Object obj) throws IllegalArgumentException; diff --git a/src/java.base/share/classes/jdk/internal/reflect/FieldAccessorImpl.java b/src/java.base/share/classes/jdk/internal/reflect/FieldAccessorImpl.java index 303924a25d853..81a2186fa84b5 100644 --- a/src/java.base/share/classes/jdk/internal/reflect/FieldAccessorImpl.java +++ b/src/java.base/share/classes/jdk/internal/reflect/FieldAccessorImpl.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2001, 2024, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2001, 2025, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -28,7 +28,7 @@ import java.lang.reflect.Field; import java.lang.reflect.Modifier; -abstract class FieldAccessorImpl implements FieldAccessor { +abstract sealed class FieldAccessorImpl implements FieldAccessor permits MethodHandleFieldAccessorImpl { protected final Field field; FieldAccessorImpl(Field field) { diff --git a/src/java.base/share/classes/jdk/internal/reflect/InstantiationExceptionConstructorAccessorImpl.java b/src/java.base/share/classes/jdk/internal/reflect/InstantiationExceptionConstructorAccessorImpl.java index 7ec7dd32f761b..244d539885f41 100644 --- a/src/java.base/share/classes/jdk/internal/reflect/InstantiationExceptionConstructorAccessorImpl.java +++ b/src/java.base/share/classes/jdk/internal/reflect/InstantiationExceptionConstructorAccessorImpl.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2001, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2001, 2025, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -31,7 +31,7 @@ /** Throws an InstantiationException with given error message upon newInstance() call */ -class InstantiationExceptionConstructorAccessorImpl +final class InstantiationExceptionConstructorAccessorImpl extends ConstructorAccessorImpl { private final String message; diff --git a/src/java.base/share/classes/jdk/internal/reflect/MethodAccessor.java b/src/java.base/share/classes/jdk/internal/reflect/MethodAccessor.java index 27dfe4452e48f..28d2e8f3c9ad7 100644 --- a/src/java.base/share/classes/jdk/internal/reflect/MethodAccessor.java +++ b/src/java.base/share/classes/jdk/internal/reflect/MethodAccessor.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2001, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2001, 2025, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -33,7 +33,7 @@ configured with a (possibly dynamically-generated) class which implements this interface. */ -public interface MethodAccessor { +public sealed interface MethodAccessor permits MethodAccessorImpl { /** Matches specification in {@link java.lang.reflect.Method} */ public Object invoke(Object obj, Object[] args) throws IllegalArgumentException, InvocationTargetException; diff --git a/src/java.base/share/classes/jdk/internal/reflect/MethodAccessorImpl.java b/src/java.base/share/classes/jdk/internal/reflect/MethodAccessorImpl.java index adc4e1e268af5..560042f94a107 100644 --- a/src/java.base/share/classes/jdk/internal/reflect/MethodAccessorImpl.java +++ b/src/java.base/share/classes/jdk/internal/reflect/MethodAccessorImpl.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2001, 2024, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2001, 2025, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -36,7 +36,8 @@ methods for java.lang.reflect.Method.invoke().

*/ -abstract class MethodAccessorImpl implements MethodAccessor { +abstract sealed class MethodAccessorImpl implements MethodAccessor + permits DirectMethodHandleAccessor, DirectMethodHandleAccessor.NativeAccessor, CsMethodAccessorAdapter { /** Matches specification in {@link java.lang.reflect.Method} */ public abstract Object invoke(Object obj, Object[] args) throws IllegalArgumentException, InvocationTargetException; diff --git a/src/java.base/share/classes/jdk/internal/reflect/MethodHandleAccessorFactory.java b/src/java.base/share/classes/jdk/internal/reflect/MethodHandleAccessorFactory.java index 93a208662d572..77c0ed7f3a001 100644 --- a/src/java.base/share/classes/jdk/internal/reflect/MethodHandleAccessorFactory.java +++ b/src/java.base/share/classes/jdk/internal/reflect/MethodHandleAccessorFactory.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2021, 2024, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2021, 2025, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -438,7 +438,7 @@ public static boolean isSignaturePolymorphicMethod(Method method) { /* * Delay initializing these static fields until java.lang.invoke is fully initialized. */ - static class LazyStaticHolder { + static final class LazyStaticHolder { static final JavaLangInvokeAccess JLIA = SharedSecrets.getJavaLangInvokeAccess(); } diff --git a/src/java.base/share/classes/jdk/internal/reflect/MethodHandleBooleanFieldAccessorImpl.java b/src/java.base/share/classes/jdk/internal/reflect/MethodHandleBooleanFieldAccessorImpl.java index 2e0609264bd2d..1b8335cfbad88 100644 --- a/src/java.base/share/classes/jdk/internal/reflect/MethodHandleBooleanFieldAccessorImpl.java +++ b/src/java.base/share/classes/jdk/internal/reflect/MethodHandleBooleanFieldAccessorImpl.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2021, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2021, 2025, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -30,7 +30,7 @@ import java.lang.reflect.Field; import java.lang.reflect.Modifier; -class MethodHandleBooleanFieldAccessorImpl extends MethodHandleFieldAccessorImpl { +final class MethodHandleBooleanFieldAccessorImpl extends MethodHandleFieldAccessorImpl { static FieldAccessorImpl fieldAccessor(Field field, MethodHandle getter, MethodHandle setter, boolean isReadOnly) { boolean isStatic = Modifier.isStatic(field.getModifiers()); if (isStatic) { diff --git a/src/java.base/share/classes/jdk/internal/reflect/MethodHandleByteFieldAccessorImpl.java b/src/java.base/share/classes/jdk/internal/reflect/MethodHandleByteFieldAccessorImpl.java index b56fbbcbcb28e..242a731b4610b 100644 --- a/src/java.base/share/classes/jdk/internal/reflect/MethodHandleByteFieldAccessorImpl.java +++ b/src/java.base/share/classes/jdk/internal/reflect/MethodHandleByteFieldAccessorImpl.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2021, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2021, 2025, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -30,7 +30,7 @@ import java.lang.reflect.Field; import java.lang.reflect.Modifier; -class MethodHandleByteFieldAccessorImpl extends MethodHandleFieldAccessorImpl { +final class MethodHandleByteFieldAccessorImpl extends MethodHandleFieldAccessorImpl { static FieldAccessorImpl fieldAccessor(Field field, MethodHandle getter, MethodHandle setter, boolean isReadOnly) { boolean isStatic = Modifier.isStatic(field.getModifiers()); if (isStatic) { diff --git a/src/java.base/share/classes/jdk/internal/reflect/MethodHandleCharacterFieldAccessorImpl.java b/src/java.base/share/classes/jdk/internal/reflect/MethodHandleCharacterFieldAccessorImpl.java index c1f357326f4e2..424914a8a92cd 100644 --- a/src/java.base/share/classes/jdk/internal/reflect/MethodHandleCharacterFieldAccessorImpl.java +++ b/src/java.base/share/classes/jdk/internal/reflect/MethodHandleCharacterFieldAccessorImpl.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2021, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2021, 2025, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -30,7 +30,7 @@ import java.lang.reflect.Field; import java.lang.reflect.Modifier; -class MethodHandleCharacterFieldAccessorImpl extends MethodHandleFieldAccessorImpl { +final class MethodHandleCharacterFieldAccessorImpl extends MethodHandleFieldAccessorImpl { static FieldAccessorImpl fieldAccessor(Field field, MethodHandle getter, MethodHandle setter, boolean isReadOnly) { boolean isStatic = Modifier.isStatic(field.getModifiers()); if (isStatic) { diff --git a/src/java.base/share/classes/jdk/internal/reflect/MethodHandleDoubleFieldAccessorImpl.java b/src/java.base/share/classes/jdk/internal/reflect/MethodHandleDoubleFieldAccessorImpl.java index 01652951e4272..6408a03f3ce58 100644 --- a/src/java.base/share/classes/jdk/internal/reflect/MethodHandleDoubleFieldAccessorImpl.java +++ b/src/java.base/share/classes/jdk/internal/reflect/MethodHandleDoubleFieldAccessorImpl.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2021, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2021, 2025, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -30,7 +30,7 @@ import java.lang.reflect.Field; import java.lang.reflect.Modifier; -class MethodHandleDoubleFieldAccessorImpl extends MethodHandleFieldAccessorImpl { +final class MethodHandleDoubleFieldAccessorImpl extends MethodHandleFieldAccessorImpl { static FieldAccessorImpl fieldAccessor(Field field, MethodHandle getter, MethodHandle setter, boolean isReadOnly) { boolean isStatic = Modifier.isStatic(field.getModifiers()); if (isStatic) { diff --git a/src/java.base/share/classes/jdk/internal/reflect/MethodHandleFieldAccessorImpl.java b/src/java.base/share/classes/jdk/internal/reflect/MethodHandleFieldAccessorImpl.java index f979d38f9ab73..4b56378e04bca 100644 --- a/src/java.base/share/classes/jdk/internal/reflect/MethodHandleFieldAccessorImpl.java +++ b/src/java.base/share/classes/jdk/internal/reflect/MethodHandleFieldAccessorImpl.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2021, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2021, 2025, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -29,7 +29,16 @@ import java.lang.reflect.Field; import java.lang.reflect.Modifier; -abstract class MethodHandleFieldAccessorImpl extends FieldAccessorImpl { +abstract sealed class MethodHandleFieldAccessorImpl extends FieldAccessorImpl + permits MethodHandleBooleanFieldAccessorImpl, + MethodHandleCharacterFieldAccessorImpl, + MethodHandleByteFieldAccessorImpl, + MethodHandleShortFieldAccessorImpl, + MethodHandleIntegerFieldAccessorImpl, + MethodHandleLongFieldAccessorImpl, + MethodHandleFloatFieldAccessorImpl, + MethodHandleDoubleFieldAccessorImpl, + MethodHandleObjectFieldAccessorImpl { private static final int IS_READ_ONLY_BIT = 0x0001; private static final int IS_STATIC_BIT = 0x0002; private static final int NONZERO_BIT = 0x8000; diff --git a/src/java.base/share/classes/jdk/internal/reflect/MethodHandleFloatFieldAccessorImpl.java b/src/java.base/share/classes/jdk/internal/reflect/MethodHandleFloatFieldAccessorImpl.java index 5ac00ec5ea8e8..e8e59b159167d 100644 --- a/src/java.base/share/classes/jdk/internal/reflect/MethodHandleFloatFieldAccessorImpl.java +++ b/src/java.base/share/classes/jdk/internal/reflect/MethodHandleFloatFieldAccessorImpl.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2021, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2021, 2025, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -30,7 +30,7 @@ import java.lang.reflect.Field; import java.lang.reflect.Modifier; -class MethodHandleFloatFieldAccessorImpl extends MethodHandleFieldAccessorImpl { +final class MethodHandleFloatFieldAccessorImpl extends MethodHandleFieldAccessorImpl { static FieldAccessorImpl fieldAccessor(Field field, MethodHandle getter, MethodHandle setter, boolean isReadOnly) { boolean isStatic = Modifier.isStatic(field.getModifiers()); if (isStatic) { diff --git a/src/java.base/share/classes/jdk/internal/reflect/MethodHandleIntegerFieldAccessorImpl.java b/src/java.base/share/classes/jdk/internal/reflect/MethodHandleIntegerFieldAccessorImpl.java index 62e3ab083dbdc..220147d374e7e 100644 --- a/src/java.base/share/classes/jdk/internal/reflect/MethodHandleIntegerFieldAccessorImpl.java +++ b/src/java.base/share/classes/jdk/internal/reflect/MethodHandleIntegerFieldAccessorImpl.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2021, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2021, 2025, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -30,7 +30,7 @@ import java.lang.reflect.Field; import java.lang.reflect.Modifier; -class MethodHandleIntegerFieldAccessorImpl extends MethodHandleFieldAccessorImpl { +final class MethodHandleIntegerFieldAccessorImpl extends MethodHandleFieldAccessorImpl { static FieldAccessorImpl fieldAccessor(Field field, MethodHandle getter, MethodHandle setter, boolean isReadOnly) { boolean isStatic = Modifier.isStatic(field.getModifiers()); if (isStatic) { diff --git a/src/java.base/share/classes/jdk/internal/reflect/MethodHandleLongFieldAccessorImpl.java b/src/java.base/share/classes/jdk/internal/reflect/MethodHandleLongFieldAccessorImpl.java index a0e02204b3101..29efadbff371e 100644 --- a/src/java.base/share/classes/jdk/internal/reflect/MethodHandleLongFieldAccessorImpl.java +++ b/src/java.base/share/classes/jdk/internal/reflect/MethodHandleLongFieldAccessorImpl.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2021, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2021, 2025, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -30,7 +30,7 @@ import java.lang.reflect.Field; import java.lang.reflect.Modifier; -class MethodHandleLongFieldAccessorImpl extends MethodHandleFieldAccessorImpl { +final class MethodHandleLongFieldAccessorImpl extends MethodHandleFieldAccessorImpl { static FieldAccessorImpl fieldAccessor(Field field, MethodHandle getter, MethodHandle setter, boolean isReadOnly) { boolean isStatic = Modifier.isStatic(field.getModifiers()); if (isStatic) { diff --git a/src/java.base/share/classes/jdk/internal/reflect/MethodHandleObjectFieldAccessorImpl.java b/src/java.base/share/classes/jdk/internal/reflect/MethodHandleObjectFieldAccessorImpl.java index 722d73d22a6ad..afbe41e8fe92f 100644 --- a/src/java.base/share/classes/jdk/internal/reflect/MethodHandleObjectFieldAccessorImpl.java +++ b/src/java.base/share/classes/jdk/internal/reflect/MethodHandleObjectFieldAccessorImpl.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2021, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2021, 2025, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -30,7 +30,7 @@ import java.lang.reflect.Field; import java.lang.reflect.Modifier; -class MethodHandleObjectFieldAccessorImpl extends MethodHandleFieldAccessorImpl { +final class MethodHandleObjectFieldAccessorImpl extends MethodHandleFieldAccessorImpl { static FieldAccessorImpl fieldAccessor(Field field, MethodHandle getter, MethodHandle setter, boolean isReadOnly) { boolean isStatic = Modifier.isStatic(field.getModifiers()); if (isStatic) { diff --git a/src/java.base/share/classes/jdk/internal/reflect/MethodHandleShortFieldAccessorImpl.java b/src/java.base/share/classes/jdk/internal/reflect/MethodHandleShortFieldAccessorImpl.java index 265c555421a3e..711c372d2bfd1 100644 --- a/src/java.base/share/classes/jdk/internal/reflect/MethodHandleShortFieldAccessorImpl.java +++ b/src/java.base/share/classes/jdk/internal/reflect/MethodHandleShortFieldAccessorImpl.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2021, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2021, 2025, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -30,7 +30,7 @@ import java.lang.reflect.Field; import java.lang.reflect.Modifier; -class MethodHandleShortFieldAccessorImpl extends MethodHandleFieldAccessorImpl { +final class MethodHandleShortFieldAccessorImpl extends MethodHandleFieldAccessorImpl { static FieldAccessorImpl fieldAccessor(Field field, MethodHandle getter, MethodHandle setter, boolean isReadOnly) { boolean isStatic = Modifier.isStatic(field.getModifiers()); if (isStatic) { diff --git a/src/java.base/share/classes/jdk/internal/reflect/Reflection.java b/src/java.base/share/classes/jdk/internal/reflect/Reflection.java index 5025b81dd10ed..912b712f9b38e 100644 --- a/src/java.base/share/classes/jdk/internal/reflect/Reflection.java +++ b/src/java.base/share/classes/jdk/internal/reflect/Reflection.java @@ -41,7 +41,7 @@ /** Common utility routines used by both java.lang and java.lang.reflect */ -public class Reflection { +public final class Reflection { /** Used to filter out fields and methods from certain classes from public view, where they are sensitive or they may contain VM-internal objects. diff --git a/src/java.base/share/classes/jdk/internal/reflect/ReflectionFactory.java b/src/java.base/share/classes/jdk/internal/reflect/ReflectionFactory.java index 20b390855c908..36d3e6d3a2f5a 100644 --- a/src/java.base/share/classes/jdk/internal/reflect/ReflectionFactory.java +++ b/src/java.base/share/classes/jdk/internal/reflect/ReflectionFactory.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2001, 2024, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2001, 2025, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -60,7 +60,7 @@ {@link jdk.internal.misc.Unsafe}.

*/ -public class ReflectionFactory { +public final class ReflectionFactory { private static final ReflectionFactory soleInstance = new ReflectionFactory(); diff --git a/test/hotspot/jtreg/runtime/classFileParserBug/FakeMethodAcc.java b/test/hotspot/jtreg/runtime/classFileParserBug/FakeMethodAcc.java index ba8304319b5a7..1825f1c1d5b18 100644 --- a/test/hotspot/jtreg/runtime/classFileParserBug/FakeMethodAcc.java +++ b/test/hotspot/jtreg/runtime/classFileParserBug/FakeMethodAcc.java @@ -31,7 +31,7 @@ /* * Test that trying to create a sub-type of a 'magic' jdk.internal.reflect - * class should fail with an IllegalAccessError exception. + * class should fail with an IncompatibleClassChangeError exception. */ public class FakeMethodAcc { public static void main(String args[]) throws Throwable { @@ -40,8 +40,8 @@ public static void main(String args[]) throws Throwable { try { Class newClass = Class.forName("fakeMethodAccessor"); throw new RuntimeException( - "Missing expected IllegalAccessError exception"); - } catch (java.lang.IllegalAccessError e) { + "Missing expected IncompatibleClassChangeError exception"); + } catch (java.lang.IncompatibleClassChangeError e) { } } }