- 
    CSR 
- 
    Resolution: Approved
- 
     P2 P2
- 
    None
- 
        behavioral
- 
        minimal
- 
        JEP 409 Sealed classes becomes a permanent Java SE feature in 17. No compatibility risk with this spec change.
- 
        Java API
- 
        SE
Summary
java.lang.reflect.Proxy::newProxyInstance will throw IllegalArgumentException if one of the given proxy interfaces is sealed.  Similiarly, java.lang.invoke.MethodHandleProxies::asInterfaceInstance will throw IllegalArgumentException if the given interface is sealed.
Problem
Proxy and MethodHandleProxies API do not specify how to deal with sealed interfaces.
Solution
Update the specification of Proxy::newProxyInstance and MethodHandleProxies::asInterfaceInstance to restrict proxy interfaces to be non-sealed; otherwise, it will throw IllegalArgumentException
Specification
Changes to java.lang.reflect.Proxy::newProxyInstance spec:
      * <a id="restrictions">{@code IllegalArgumentException} will be thrown
      * if any of the following restrictions is violated:</a>
      * <ul>
      * <li>All of {@code Class} objects in the given {@code interfaces} array
-     * must represent {@linkplain Class#isHidden() non-hidden} interfaces,
+     * must represent {@linkplain Class#isHidden() non-hidden} and
+     * {@linkplain Class#isSealed() non-sealed} interfaces,
      * not classes or primitive types.
      *
      * <li>No two elements in the {@code interfaces} array mayand changes to java.lang.invoke.MethodHandleProxies::asInterfaceInstance
--- a/src/java.base/share/classes/java/lang/invoke/MethodHandleProxies.java
+++ b/src/java.base/share/classes/java/lang/invoke/MethodHandleProxies.java
@@ -59,7 +59,8 @@ public class MethodHandleProxies {
      * even though it re-declares the {@code Object.equals} method and also
      * declares default methods, such as {@code Comparator.reverse}.
      * <p>
-     * The interface must be public.  No additional access checks are performed.
+     * The interface must be public and not {@linkplain Class#isSealed() sealed}.
+     * No additional access checks are performed.
      * <p>
      * The resulting instance of the required type will respond to
      * invocation of the type's uniquely named method by calling- csr of
- 
                    JDK-8269351 Proxy::newProxyInstance and MethodHandleProxies::asInterfaceInstance should reject sealed interfaces -           
- Closed
 
-