diff -r eca8e9c3ec3e -r cd50c1894ce5 rt/emul/compact/src/main/java/java/lang/invoke/MethodHandleProxies.java --- a/rt/emul/compact/src/main/java/java/lang/invoke/MethodHandleProxies.java Sun Aug 17 20:09:05 2014 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,321 +0,0 @@ -/* - * Copyright (c) 2008, 2013, 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 - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Oracle designates this - * particular file as subject to the "Classpath" exception as provided - * by Oracle in the LICENSE file that accompanied this code. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ - -package java.lang.invoke; - -import java.lang.reflect.*; -import java.security.AccessController; -import java.security.PrivilegedAction; -import sun.invoke.WrapperInstance; -import java.util.ArrayList; -//import sun.reflect.CallerSensitive; -//import sun.reflect.Reflection; -//import sun.reflect.misc.ReflectUtil; - -/** - * This class consists exclusively of static methods that help adapt - * method handles to other JVM types, such as interfaces. - */ -public class MethodHandleProxies { - - private MethodHandleProxies() { } // do not instantiate - - /** - * Produces an instance of the given single-method interface which redirects - * its calls to the given method handle. - *
- * A single-method interface is an interface which declares a uniquely named method. - * When determining the uniquely named method of a single-method interface, - * the public {@code Object} methods ({@code toString}, {@code equals}, {@code hashCode}) - * are disregarded. For example, {@link java.util.Comparator} is a single-method interface, - * even though it re-declares the {@code Object.equals} method. - *
- * The interface must be public. No additional access checks are performed. - *
- * The resulting instance of the required type will respond to - * invocation of the type's uniquely named method by calling - * the given target on the incoming arguments, - * and returning or throwing whatever the target - * returns or throws. The invocation will be as if by - * {@code target.invoke}. - * The target's type will be checked before the - * instance is created, as if by a call to {@code asType}, - * which may result in a {@code WrongMethodTypeException}. - *
- * The uniquely named method is allowed to be multiply declared, - * with distinct type descriptors. (E.g., it can be overloaded, - * or can possess bridge methods.) All such declarations are - * connected directly to the target method handle. - * Argument and return types are adjusted by {@code asType} - * for each individual declaration. - *
- * The wrapper instance will implement the requested interface - * and its super-types, but no other single-method interfaces. - * This means that the instance will not unexpectedly - * pass an {@code instanceof} test for any unrequested type. - *
- * Implementation Note: - * Therefore, each instance must implement a unique single-method interface. - * Implementations may not bundle together - * multiple single-method interfaces onto single implementation classes - * in the style of {@link java.awt.AWTEventMulticaster}. - *
- * The method handle may throw an undeclared exception, - * which means any checked exception (or other checked throwable) - * not declared by the requested type's single abstract method. - * If this happens, the throwable will be wrapped in an instance of - * {@link java.lang.reflect.UndeclaredThrowableException UndeclaredThrowableException} - * and thrown in that wrapped form. - *
- * Like {@link java.lang.Integer#valueOf Integer.valueOf}, - * {@code asInterfaceInstance} is a factory method whose results are defined - * by their behavior. - * It is not guaranteed to return a new instance for every call. - *
- * Because of the possibility of {@linkplain java.lang.reflect.Method#isBridge bridge methods} - * and other corner cases, the interface may also have several abstract methods - * with the same name but having distinct descriptors (types of returns and parameters). - * In this case, all the methods are bound in common to the one given target. - * The type check and effective {@code asType} conversion is applied to each - * method type descriptor, and all abstract methods are bound to the target in common. - * Beyond this type check, no further checks are made to determine that the - * abstract methods are related in any way. - *
- * Future versions of this API may accept additional types, - * 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. - *
- * 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
- // No stable mapping is promised between the single-method interface and
- // the implementation class C. Over time, several implementation
- // classes might be used for the same type.
- //
- // If the implementation is able
- // to prove that a wrapper of the required type
- // has already been created for a given
- // method handle, or for another method handle with the
- // same behavior, the implementation may return that wrapper in place of
- // a new wrapper.
- //
- // This method is designed to apply to common use cases
- // where a single method handle must interoperate with
- // an interface that implements a function-like
- // API. Additional variations, such as single-abstract-method classes with
- // private constructors, or interfaces with multiple but related
- // entry points, must be covered by hand-written or automatically
- // generated adapter classes.
- //
-// @CallerSensitive
- public static
-