aboutsummaryrefslogtreecommitdiff
path: root/libjava/classpath/java/lang/reflect/InvocationHandler.java
diff options
context:
space:
mode:
Diffstat (limited to 'libjava/classpath/java/lang/reflect/InvocationHandler.java')
-rw-r--r--libjava/classpath/java/lang/reflect/InvocationHandler.java137
1 files changed, 0 insertions, 137 deletions
diff --git a/libjava/classpath/java/lang/reflect/InvocationHandler.java b/libjava/classpath/java/lang/reflect/InvocationHandler.java
deleted file mode 100644
index 3d30afd..0000000
--- a/libjava/classpath/java/lang/reflect/InvocationHandler.java
+++ /dev/null
@@ -1,137 +0,0 @@
-/* java.lang.reflect.InvocationHandler - dynamically executes methods in
- proxy instances
- Copyright (C) 2001 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-GNU Classpath 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 for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-
-package java.lang.reflect;
-
-/**
- * This interface defines an invocation handler. Suppose you are using
- * reflection, and found a method that requires that its parameter
- * be an object of a given interface. You want to call this method,
- * but have no idea what classes implement that interface. So, you can
- * create a {@link Proxy} instance, a convenient way to dynamically
- * generate a class that meets all the necessary properties of that
- * interface. But in order for the proxy instance to do any good, it
- * needs to know what to do when interface methods are invoked! So,
- * this interface is basically a cool wrapper that provides runtime
- * code generation needed by proxy instances.
- *
- * <p>While this interface was designed for use by Proxy, it will also
- * work on any object in general.</p>
- *
- * <p>Hints for implementing this class:</p>
- *
- * <ul>
- * <li>Don't forget that Object.equals, Object.hashCode, and
- * Object.toString will call this handler. In particular,
- * a naive call to proxy.equals, proxy.hashCode, or proxy.toString
- * will put you in an infinite loop. And remember that string
- * concatenation also invokes toString.</li>
- * <li>Obey the contract of the Method object you are handling, or
- * the proxy instance will be forced to throw a
- * {@link NullPointerException}, {@link ClassCastException},
- * or {@link UndeclaredThrowableException}.</li>
- * <li>Be prepared to wrap/unwrap primitives as necessary.</li>
- * <li>The Method object may be owned by a different interface than
- * what was actually used as the qualifying type of the method
- * invocation in the Java source code. This means that it might
- * not always be safe to throw an exception listed as belonging
- * to the method's throws clause.</li>
- * </ul>
- *
- * <p><small>For a fun time, create an InvocationHandler that handles the
- * methods of a proxy instance of the InvocationHandler interface!</small></p>
- *
- * @see Proxy
- * @see UndeclaredThrowableException
- *
- * @author Eric Blake (ebb9@email.byu.edu)
- * @since 1.3
- * @status updated to 1.4
- */
-public interface InvocationHandler
-{
- /**
- * When a method is invoked on a proxy instance, it is wrapped and
- * this method is called instead, so that you may decide at runtime
- * how the original method should behave.
- *
- * @param proxy the instance that the wrapped method should be
- * invoked on. When this method is called by a Proxy object,
- * `proxy' will be an instance of {@link Proxy}, and oddly enough,
- * <code>Proxy.getInvocationHandler(proxy)</code> will return
- * <code>this</code>!
- * @param method the reflected method to invoke on the proxy.
- * When this method is called by a Proxy object, 'method'
- * will be the reflection object owned by the declaring
- * class or interface, which may be a supertype of the
- * interfaces the proxy directly implements.
- * @param args the arguments passed to the original method, or
- * <code>null</code> if the method takes no arguments.
- * (But also be prepared to handle a 0-length array).
- * Arguments of primitive type, such as <code>boolean</code>
- * or <code>int</code>, are wrapped in the appropriate
- * class such as {@link Boolean} or {@link Integer}.
- * @return whatever is necessary to return from the wrapped method.
- * If the wrapped method is <code>void</code>, the proxy
- * instance will ignore it. If the wrapped method returns
- * a primitive, this must be the correct wrapper type whose value
- * is exactly assignable to the appropriate type (no widening
- * will be performed); a null object in this case causes a
- * {@link NullPointerException}. In all remaining cases, if
- * the returned object is not assignment compatible to the
- * declared type of the original method, the proxy instance
- * will generate a {@link ClassCastException}.
- * @throws Throwable this interface is listed as throwing anything,
- * but the implementation should only throw unchecked
- * exceptions and exceptions listed in the throws clause of
- * all methods being overridden by the proxy instance. If
- * something is thrown that is not compatible with the throws
- * clause of all overridden methods, the proxy instance will
- * wrap the exception in an UndeclaredThrowableException.
- * Note that an exception listed in the throws clause of the
- * `method' parameter might not be declared in additional
- * interfaces also implemented by the proxy object.
- *
- * @see Proxy
- * @see UndeclaredThrowableException
- */
- Object invoke(Object proxy, Method method, Object[] args)
- throws Throwable;
-
-}