mirror of
https://github.com/openjdk/jdk.git
synced 2025-08-27 06:45:07 +02:00
8338411: Implement JEP 486: Permanently Disable the Security Manager
Co-authored-by: Sean Mullan <mullan@openjdk.org> Co-authored-by: Alan Bateman <alanb@openjdk.org> Co-authored-by: Weijun Wang <weijun@openjdk.org> Co-authored-by: Aleksei Efimov <aefimov@openjdk.org> Co-authored-by: Brian Burkhalter <bpb@openjdk.org> Co-authored-by: Daniel Fuchs <dfuchs@openjdk.org> Co-authored-by: Harshitha Onkar <honkar@openjdk.org> Co-authored-by: Joe Wang <joehw@openjdk.org> Co-authored-by: Jorn Vernee <jvernee@openjdk.org> Co-authored-by: Justin Lu <jlu@openjdk.org> Co-authored-by: Kevin Walls <kevinw@openjdk.org> Co-authored-by: Lance Andersen <lancea@openjdk.org> Co-authored-by: Naoto Sato <naoto@openjdk.org> Co-authored-by: Roger Riggs <rriggs@openjdk.org> Co-authored-by: Brent Christian <bchristi@openjdk.org> Co-authored-by: Stuart Marks <smarks@openjdk.org> Co-authored-by: Ian Graves <igraves@openjdk.org> Co-authored-by: Phil Race <prr@openjdk.org> Co-authored-by: Erik Gahlin <egahlin@openjdk.org> Co-authored-by: Jaikiran Pai <jpai@openjdk.org> Reviewed-by: kevinw, aivanov, rriggs, lancea, coffeys, dfuchs, ihse, erikj, cjplummer, coleenp, naoto, mchung, prr, weijun, joehw, azvegint, psadhukhan, bchristi, sundar, attila
This commit is contained in:
parent
c12b386d19
commit
db85090553
1885 changed files with 5528 additions and 65650 deletions
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright (c) 2012, 2021, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2012, 2024, 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
|
||||
|
@ -316,9 +316,6 @@ public final class LambdaMetafactory {
|
|||
* handle referencing a method or constructor, or if the linkage
|
||||
* invariants are violated, as defined {@link LambdaMetafactory above}.
|
||||
* @throws NullPointerException If any argument is {@code null}.
|
||||
* @throws SecurityException If a security manager is present, and it
|
||||
* <a href="MethodHandles.Lookup.html#secmgr">refuses access</a>
|
||||
* from {@code caller} to the package of {@code implementation}.
|
||||
*/
|
||||
public static CallSite metafactory(MethodHandles.Lookup caller,
|
||||
String interfaceMethodName,
|
||||
|
@ -467,9 +464,6 @@ public final class LambdaMetafactory {
|
|||
* of {@code args} do not follow the above rules, or if
|
||||
* {@code altInterfaceCount} or {@code altMethodCount} are negative
|
||||
* integers.
|
||||
* @throws SecurityException If a security manager is present, and it
|
||||
* <a href="MethodHandles.Lookup.html#secmgr">refuses access</a>
|
||||
* from {@code caller} to the package of {@code implementation}.
|
||||
*/
|
||||
public static CallSite altMetafactory(MethodHandles.Lookup caller,
|
||||
String interfaceMethodName,
|
||||
|
|
|
@ -147,11 +147,6 @@ public class MethodHandleProxies {
|
|||
* such as abstract classes with single abstract methods.
|
||||
* Future versions of this API may also equip wrapper instances
|
||||
* with one or more additional public "marker" interfaces.
|
||||
* <p>
|
||||
* If a security manager is installed, this method is caller sensitive.
|
||||
* During any invocation of the target method handle via the returned wrapper,
|
||||
* the original creator of the wrapper (the caller) will be visible
|
||||
* to context checks requested by the security manager.
|
||||
*
|
||||
* @param <T> the desired type of the wrapper, a single-method interface
|
||||
* @param intfc a class object representing {@code T}
|
||||
|
|
|
@ -165,8 +165,6 @@ public class MethodHandles {
|
|||
* <em>Discussion:</em>
|
||||
* The lookup class can be changed to any other class {@code C} using an expression of the form
|
||||
* {@link Lookup#in publicLookup().in(C.class)}.
|
||||
* A public lookup object is always subject to
|
||||
* <a href="MethodHandles.Lookup.html#secmgr">security manager checks</a>.
|
||||
* Also, it cannot access
|
||||
* <a href="MethodHandles.Lookup.html#callsens">caller sensitive methods</a>.
|
||||
* @return a lookup object which is trusted minimally
|
||||
|
@ -186,9 +184,6 @@ public class MethodHandles {
|
|||
* allowed to do deep reflection on module {@code M2} and package of the target class
|
||||
* if and only if all of the following conditions are {@code true}:
|
||||
* <ul>
|
||||
* <li>If there is a security manager, its {@code checkPermission} method is
|
||||
* called to check {@code ReflectPermission("suppressAccessChecks")} and
|
||||
* that must return normally.
|
||||
* <li>The caller lookup object must have {@linkplain Lookup#hasFullPrivilegeAccess()
|
||||
* full privilege access}. Specifically:
|
||||
* <ul>
|
||||
|
@ -238,7 +233,6 @@ public class MethodHandles {
|
|||
* @return a lookup object for the target class, with private access
|
||||
* @throws IllegalArgumentException if {@code targetClass} is a primitive type or void or array class
|
||||
* @throws NullPointerException if {@code targetClass} or {@code caller} is {@code null}
|
||||
* @throws SecurityException if denied by the security manager
|
||||
* @throws IllegalAccessException if any of the other access checks specified above fails
|
||||
* @since 9
|
||||
* @see Lookup#dropLookupMode
|
||||
|
@ -459,14 +453,10 @@ public class MethodHandles {
|
|||
* on the target to obtain its symbolic reference, and then called
|
||||
* {@link java.lang.invoke.MethodHandleInfo#reflectAs MethodHandleInfo.reflectAs}
|
||||
* to resolve the symbolic reference to a member.
|
||||
* <p>
|
||||
* If there is a security manager, its {@code checkPermission} method
|
||||
* is called with a {@code ReflectPermission("suppressAccessChecks")} permission.
|
||||
* @param <T> the desired type of the result, either {@link Member} or a subtype
|
||||
* @param expected a class object representing the desired result type {@code T}
|
||||
* @param target a direct method handle to crack into symbolic reference components
|
||||
* @return a reference to the method, constructor, or field object
|
||||
* @throws SecurityException if the caller is not privileged to call {@code setAccessible}
|
||||
* @throws NullPointerException if either argument is {@code null}
|
||||
* @throws IllegalArgumentException if the target is not a direct method handle
|
||||
* @throws ClassCastException if the member is not of the expected type
|
||||
|
@ -616,10 +606,6 @@ public class MethodHandles {
|
|||
* the lookup can still succeed.
|
||||
* For example, lookups for {@code MethodHandle.invokeExact} and
|
||||
* {@code MethodHandle.invoke} will always succeed, regardless of requested type.
|
||||
* <li>If there is a security manager installed, it can forbid the lookup
|
||||
* on various grounds (<a href="MethodHandles.Lookup.html#secmgr">see below</a>).
|
||||
* By contrast, the {@code ldc} instruction on a {@code CONSTANT_MethodHandle}
|
||||
* constant is not subject to security manager checks.
|
||||
* <li>If the looked-up method has a
|
||||
* <a href="MethodHandle.html#maxarity">very large arity</a>,
|
||||
* the method handle creation may fail with an
|
||||
|
@ -1317,74 +1303,6 @@ public class MethodHandles {
|
|||
* all access modes are dropped.</li>
|
||||
* </ul>
|
||||
*
|
||||
* <h2><a id="secmgr"></a>Security manager interactions</h2>
|
||||
* Although bytecode instructions can only refer to classes in
|
||||
* a related class loader, this API can search for methods in any
|
||||
* class, as long as a reference to its {@code Class} object is
|
||||
* available. Such cross-loader references are also possible with the
|
||||
* Core Reflection API, and are impossible to bytecode instructions
|
||||
* such as {@code invokestatic} or {@code getfield}.
|
||||
* There is a {@linkplain java.lang.SecurityManager security manager API}
|
||||
* to allow applications to check such cross-loader references.
|
||||
* These checks apply to both the {@code MethodHandles.Lookup} API
|
||||
* and the Core Reflection API
|
||||
* (as found on {@link java.lang.Class Class}).
|
||||
* <p>
|
||||
* If a security manager is present, member and class lookups are subject to
|
||||
* additional checks.
|
||||
* From one to three calls are made to the security manager.
|
||||
* Any of these calls can refuse access by throwing a
|
||||
* {@link java.lang.SecurityException SecurityException}.
|
||||
* Define {@code smgr} as the security manager,
|
||||
* {@code lookc} as the lookup class of the current lookup object,
|
||||
* {@code refc} as the containing class in which the member
|
||||
* is being sought, and {@code defc} as the class in which the
|
||||
* member is actually defined.
|
||||
* (If a class or other type is being accessed,
|
||||
* the {@code refc} and {@code defc} values are the class itself.)
|
||||
* The value {@code lookc} is defined as <em>not present</em>
|
||||
* if the current lookup object does not have
|
||||
* {@linkplain #hasFullPrivilegeAccess() full privilege access}.
|
||||
* The calls are made according to the following rules:
|
||||
* <ul>
|
||||
* <li><b>Step 1:</b>
|
||||
* If {@code lookc} is not present, or if its class loader is not
|
||||
* the same as or an ancestor of the class loader of {@code refc},
|
||||
* then {@link SecurityManager#checkPackageAccess
|
||||
* smgr.checkPackageAccess(refcPkg)} is called,
|
||||
* where {@code refcPkg} is the package of {@code refc}.
|
||||
* <li><b>Step 2a:</b>
|
||||
* If the retrieved member is not public and
|
||||
* {@code lookc} is not present, then
|
||||
* {@link SecurityManager#checkPermission smgr.checkPermission}
|
||||
* with {@code RuntimePermission("accessDeclaredMembers")} is called.
|
||||
* <li><b>Step 2b:</b>
|
||||
* If the retrieved class has a {@code null} class loader,
|
||||
* and {@code lookc} is not present, then
|
||||
* {@link SecurityManager#checkPermission smgr.checkPermission}
|
||||
* with {@code RuntimePermission("getClassLoader")} is called.
|
||||
* <li><b>Step 3:</b>
|
||||
* If the retrieved member is not public,
|
||||
* and if {@code lookc} is not present,
|
||||
* and if {@code defc} and {@code refc} are different,
|
||||
* then {@link SecurityManager#checkPackageAccess
|
||||
* smgr.checkPackageAccess(defcPkg)} is called,
|
||||
* where {@code defcPkg} is the package of {@code defc}.
|
||||
* </ul>
|
||||
* Security checks are performed after other access checks have passed.
|
||||
* Therefore, the above rules presuppose a member or class that is public,
|
||||
* or else that is being accessed from a lookup class that has
|
||||
* rights to access the member or class.
|
||||
* <p>
|
||||
* If a security manager is present and the current lookup object does not have
|
||||
* {@linkplain #hasFullPrivilegeAccess() full privilege access}, then
|
||||
* {@link #defineClass(byte[]) defineClass},
|
||||
* {@link #defineHiddenClass(byte[], boolean, ClassOption...) defineHiddenClass},
|
||||
* {@link #defineHiddenClassWithClassData(byte[], Object, boolean, ClassOption...)
|
||||
* defineHiddenClassWithClassData}
|
||||
* calls {@link SecurityManager#checkPermission smgr.checkPermission}
|
||||
* with {@code RuntimePermission("defineClass")}.
|
||||
*
|
||||
* <h2><a id="callsens"></a>Caller sensitive methods</h2>
|
||||
* A small number of Java methods have a special property called caller sensitivity.
|
||||
* A <em>caller-sensitive</em> method can behave differently depending on the
|
||||
|
@ -1825,10 +1743,6 @@ public class MethodHandles {
|
|||
* run at a later time, as detailed in section 12.4 of the <em>The Java Language
|
||||
* Specification</em>. </p>
|
||||
*
|
||||
* <p> If there is a security manager and this lookup does not have {@linkplain
|
||||
* #hasFullPrivilegeAccess() full privilege access}, its {@code checkPermission} method
|
||||
* is first called to check {@code RuntimePermission("defineClass")}. </p>
|
||||
*
|
||||
* @param bytes the class bytes
|
||||
* @return the {@code Class} object for the class
|
||||
* @throws IllegalAccessException if this lookup does not have {@code PACKAGE} access
|
||||
|
@ -1838,8 +1752,6 @@ public class MethodHandles {
|
|||
* ({@code ACC_MODULE} flag is set in the value of the {@code access_flags} item)
|
||||
* @throws VerifyError if the newly created class cannot be verified
|
||||
* @throws LinkageError if the newly created class cannot be linked for any other reason
|
||||
* @throws SecurityException if a security manager is present and it
|
||||
* <a href="MethodHandles.Lookup.html#secmgr">refuses access</a>
|
||||
* @throws NullPointerException if {@code bytes} is {@code null}
|
||||
* @since 9
|
||||
* @see MethodHandles#privateLookupIn
|
||||
|
@ -2097,8 +2009,6 @@ public class MethodHandles {
|
|||
*
|
||||
* @throws IllegalAccessException if this {@code Lookup} does not have
|
||||
* {@linkplain #hasFullPrivilegeAccess() full privilege} access
|
||||
* @throws SecurityException if a security manager is present and it
|
||||
* <a href="MethodHandles.Lookup.html#secmgr">refuses access</a>
|
||||
* @throws ClassFormatError if {@code bytes} is not a {@code ClassFile} structure
|
||||
* @throws UnsupportedClassVersionError if {@code bytes} is not of a supported major or minor version
|
||||
* @throws IllegalArgumentException if {@code bytes} denotes a class in a different package
|
||||
|
@ -2180,8 +2090,6 @@ public class MethodHandles {
|
|||
*
|
||||
* @throws IllegalAccessException if this {@code Lookup} does not have
|
||||
* {@linkplain #hasFullPrivilegeAccess() full privilege} access
|
||||
* @throws SecurityException if a security manager is present and it
|
||||
* <a href="MethodHandles.Lookup.html#secmgr">refuses access</a>
|
||||
* @throws ClassFormatError if {@code bytes} is not a {@code ClassFile} structure
|
||||
* @throws UnsupportedClassVersionError if {@code bytes} is not of a supported major or minor version
|
||||
* @throws IllegalArgumentException if {@code bytes} denotes a class in a different package
|
||||
|
@ -2631,8 +2539,6 @@ assertEquals("[x, y]", MH_asList.invoke("x", "y").toString());
|
|||
* or if the method is not {@code static},
|
||||
* or if the method's variable arity modifier bit
|
||||
* is set and {@code asVarargsCollector} fails
|
||||
* @throws SecurityException if a security manager is present and it
|
||||
* <a href="MethodHandles.Lookup.html#secmgr">refuses access</a>
|
||||
* @throws NullPointerException if any argument is null
|
||||
*/
|
||||
public MethodHandle findStatic(Class<?> refc, String name, MethodType type) throws NoSuchMethodException, IllegalAccessException {
|
||||
|
@ -2715,8 +2621,6 @@ assertEquals("", (String) MH_newString.invokeExact());
|
|||
* or if the method is {@code static},
|
||||
* or if the method's variable arity modifier bit
|
||||
* is set and {@code asVarargsCollector} fails
|
||||
* @throws SecurityException if a security manager is present and it
|
||||
* <a href="MethodHandles.Lookup.html#secmgr">refuses access</a>
|
||||
* @throws NullPointerException if any argument is null
|
||||
*/
|
||||
public MethodHandle findVirtual(Class<?> refc, String name, MethodType type) throws NoSuchMethodException, IllegalAccessException {
|
||||
|
@ -2789,8 +2693,6 @@ assertEquals("[x, y, z]", pb.command().toString());
|
|||
* @throws IllegalAccessException if access checking fails
|
||||
* or if the method's variable arity modifier bit
|
||||
* is set and {@code asVarargsCollector} fails
|
||||
* @throws SecurityException if a security manager is present and it
|
||||
* <a href="MethodHandles.Lookup.html#secmgr">refuses access</a>
|
||||
* @throws NullPointerException if any argument is null
|
||||
*/
|
||||
public MethodHandle findConstructor(Class<?> refc, MethodType type) throws NoSuchMethodException, IllegalAccessException {
|
||||
|
@ -2819,8 +2721,6 @@ assertEquals("[x, y, z]", pb.command().toString());
|
|||
* @param targetName the {@linkplain ClassLoader##binary-name binary name} of the class
|
||||
* or the string representing an array class
|
||||
* @return the requested class.
|
||||
* @throws SecurityException if a security manager is present and it
|
||||
* <a href="MethodHandles.Lookup.html#secmgr">refuses access</a>
|
||||
* @throws LinkageError if the linkage fails
|
||||
* @throws ClassNotFoundException if the class cannot be loaded by the lookup class' loader.
|
||||
* @throws IllegalAccessException if the class is not accessible, using the allowed access
|
||||
|
@ -2856,8 +2756,6 @@ assertEquals("[x, y, z]", pb.command().toString());
|
|||
* {@linkplain #accessClass accessible} to this lookup
|
||||
* @throws ExceptionInInitializerError if the class initialization provoked
|
||||
* by this method fails
|
||||
* @throws SecurityException if a security manager is present and it
|
||||
* <a href="MethodHandles.Lookup.html#secmgr">refuses access</a>
|
||||
* @since 15
|
||||
* @jvms 5.5 Initialization
|
||||
*/
|
||||
|
@ -2966,8 +2864,6 @@ assertEquals("[x, y, z]", pb.command().toString());
|
|||
* @return {@code targetClass} that has been access-checked
|
||||
* @throws IllegalAccessException if the class is not accessible from the lookup class
|
||||
* and previous lookup class, if present, using the allowed access modes.
|
||||
* @throws SecurityException if a security manager is present and it
|
||||
* <a href="MethodHandles.Lookup.html#secmgr">refuses access</a>
|
||||
* @throws NullPointerException if {@code targetClass} is {@code null}
|
||||
* @since 9
|
||||
* @see <a href="#cross-module-lookup">Cross-module lookups</a>
|
||||
|
@ -3050,8 +2946,6 @@ assertEquals(""+l, (String) MH_this.invokeExact(subl)); // Listie method
|
|||
* or if the method is {@code static},
|
||||
* or if the method's variable arity modifier bit
|
||||
* is set and {@code asVarargsCollector} fails
|
||||
* @throws SecurityException if a security manager is present and it
|
||||
* <a href="MethodHandles.Lookup.html#secmgr">refuses access</a>
|
||||
* @throws NullPointerException if any argument is null
|
||||
*/
|
||||
public MethodHandle findSpecial(Class<?> refc, String name, MethodType type,
|
||||
|
@ -3075,8 +2969,6 @@ assertEquals(""+l, (String) MH_this.invokeExact(subl)); // Listie method
|
|||
* @return a method handle which can load values from the field
|
||||
* @throws NoSuchFieldException if the field does not exist
|
||||
* @throws IllegalAccessException if access checking fails, or if the field is {@code static}
|
||||
* @throws SecurityException if a security manager is present and it
|
||||
* <a href="MethodHandles.Lookup.html#secmgr">refuses access</a>
|
||||
* @throws NullPointerException if any argument is null
|
||||
* @see #findVarHandle(Class, String, Class)
|
||||
*/
|
||||
|
@ -3099,8 +2991,6 @@ assertEquals(""+l, (String) MH_this.invokeExact(subl)); // Listie method
|
|||
* @throws NoSuchFieldException if the field does not exist
|
||||
* @throws IllegalAccessException if access checking fails, or if the field is {@code static}
|
||||
* or {@code final}
|
||||
* @throws SecurityException if a security manager is present and it
|
||||
* <a href="MethodHandles.Lookup.html#secmgr">refuses access</a>
|
||||
* @throws NullPointerException if any argument is null
|
||||
* @see #findVarHandle(Class, String, Class)
|
||||
*/
|
||||
|
@ -3172,8 +3062,6 @@ assertEquals(""+l, (String) MH_this.invokeExact(subl)); // Listie method
|
|||
* @return a VarHandle giving access to non-static fields.
|
||||
* @throws NoSuchFieldException if the field does not exist
|
||||
* @throws IllegalAccessException if access checking fails, or if the field is {@code static}
|
||||
* @throws SecurityException if a security manager is present and it
|
||||
* <a href="MethodHandles.Lookup.html#secmgr">refuses access</a>
|
||||
* @throws NullPointerException if any argument is null
|
||||
* @since 9
|
||||
*/
|
||||
|
@ -3198,8 +3086,6 @@ assertEquals(""+l, (String) MH_this.invokeExact(subl)); // Listie method
|
|||
* @return a method handle which can load values from the field
|
||||
* @throws NoSuchFieldException if the field does not exist
|
||||
* @throws IllegalAccessException if access checking fails, or if the field is not {@code static}
|
||||
* @throws SecurityException if a security manager is present and it
|
||||
* <a href="MethodHandles.Lookup.html#secmgr">refuses access</a>
|
||||
* @throws NullPointerException if any argument is null
|
||||
*/
|
||||
public MethodHandle findStaticGetter(Class<?> refc, String name, Class<?> type) throws NoSuchFieldException, IllegalAccessException {
|
||||
|
@ -3223,8 +3109,6 @@ assertEquals(""+l, (String) MH_this.invokeExact(subl)); // Listie method
|
|||
* @throws NoSuchFieldException if the field does not exist
|
||||
* @throws IllegalAccessException if access checking fails, or if the field is not {@code static}
|
||||
* or is {@code final}
|
||||
* @throws SecurityException if a security manager is present and it
|
||||
* <a href="MethodHandles.Lookup.html#secmgr">refuses access</a>
|
||||
* @throws NullPointerException if any argument is null
|
||||
*/
|
||||
public MethodHandle findStaticSetter(Class<?> refc, String name, Class<?> type) throws NoSuchFieldException, IllegalAccessException {
|
||||
|
@ -3297,8 +3181,6 @@ assertEquals(""+l, (String) MH_this.invokeExact(subl)); // Listie method
|
|||
* @return a VarHandle giving access to a static field
|
||||
* @throws NoSuchFieldException if the field does not exist
|
||||
* @throws IllegalAccessException if access checking fails, or if the field is not {@code static}
|
||||
* @throws SecurityException if a security manager is present and it
|
||||
* <a href="MethodHandles.Lookup.html#secmgr">refuses access</a>
|
||||
* @throws NullPointerException if any argument is null
|
||||
* @since 9
|
||||
*/
|
||||
|
@ -3351,8 +3233,6 @@ return mh1;
|
|||
* @throws IllegalAccessException if access checking fails
|
||||
* or if the method's variable arity modifier bit
|
||||
* is set and {@code asVarargsCollector} fails
|
||||
* @throws SecurityException if a security manager is present and it
|
||||
* <a href="MethodHandles.Lookup.html#secmgr">refuses access</a>
|
||||
* @throws NullPointerException if any argument is null
|
||||
* @see MethodHandle#bindTo
|
||||
* @see #findVirtual
|
||||
|
@ -3685,8 +3565,6 @@ return mh1;
|
|||
* and was created by a lookup object for a different class.
|
||||
* @param target a direct method handle to crack into symbolic reference components
|
||||
* @return a symbolic reference which can be used to reconstruct this method handle from this lookup object
|
||||
* @throws SecurityException if a security manager is present and it
|
||||
* <a href="MethodHandles.Lookup.html#secmgr">refuses access</a>
|
||||
* @throws IllegalArgumentException if the target is not a direct method handle or if access checking fails
|
||||
* @throws NullPointerException if the target is {@code null}
|
||||
* @see MethodHandleInfo
|
||||
|
@ -4656,7 +4534,7 @@ int spreadArgCount = type.parameterCount() - leadingArgCount;
|
|||
invoker = invoker.asSpreader(Object[].class, spreadArgCount);
|
||||
return invoker;
|
||||
* }
|
||||
* This method throws no reflective or security exceptions.
|
||||
* This method throws no reflective exceptions.
|
||||
* @param type the desired target type
|
||||
* @param leadingArgCount number of fixed arguments, to be passed unchanged to the target
|
||||
* @return a method handle suitable for invoking any method handle of the given type
|
||||
|
@ -4702,7 +4580,7 @@ return invoker;
|
|||
* on the declared {@code invokeExact} or {@code invoke} method will raise an
|
||||
* {@link java.lang.UnsupportedOperationException UnsupportedOperationException}.)</em>
|
||||
* <p>
|
||||
* This method throws no reflective or security exceptions.
|
||||
* This method throws no reflective exceptions.
|
||||
* @param type the desired target type
|
||||
* @return a method handle suitable for invoking any method handle of the given type
|
||||
* @throws IllegalArgumentException if the resulting method handle's type would have
|
||||
|
@ -4740,7 +4618,7 @@ return invoker;
|
|||
* on the declared {@code invokeExact} or {@code invoke} method will raise an
|
||||
* {@link java.lang.UnsupportedOperationException UnsupportedOperationException}.)</em>
|
||||
* <p>
|
||||
* This method throws no reflective or security exceptions.
|
||||
* This method throws no reflective exceptions.
|
||||
* @param type the desired target type
|
||||
* @return a method handle suitable for invoking any method handle convertible to the given type
|
||||
* @throws IllegalArgumentException if the resulting method handle's type would have
|
||||
|
|
|
@ -1178,9 +1178,6 @@ class MethodType
|
|||
* @throws NullPointerException if the string is {@code null}
|
||||
* @throws IllegalArgumentException if the string is not a method descriptor
|
||||
* @throws TypeNotPresentException if a named type cannot be found
|
||||
* @throws SecurityException if the security manager is present and
|
||||
* {@code loader} is {@code null} and the caller does not have the
|
||||
* {@link RuntimePermission}{@code ("getClassLoader")}
|
||||
* @jvms 4.3.3 Method Descriptors
|
||||
*/
|
||||
public static MethodType fromMethodDescriptorString(String descriptor, ClassLoader loader)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue