diff options
Diffstat (limited to 'libjava/java/lang/reflect/Method.java')
-rw-r--r-- | libjava/java/lang/reflect/Method.java | 123 |
1 files changed, 123 insertions, 0 deletions
diff --git a/libjava/java/lang/reflect/Method.java b/libjava/java/lang/reflect/Method.java new file mode 100644 index 00000000000..01e830876e5 --- /dev/null +++ b/libjava/java/lang/reflect/Method.java @@ -0,0 +1,123 @@ +// Method.java - Represent method of class or interface. + +/* Copyright (C) 1998, 1999 Cygnus Solutions + + This file is part of libgcj. + +This software is copyrighted work licensed under the terms of the +Libgcj License. Please consult the file "LIBGCJ_LICENSE" for +details. */ + +package java.lang.reflect; + +/** + * @author Tom Tromey <tromey@cygnus.com> + * @date December 12, 1998 + */ +/* Written using "Java Class Libraries", 2nd edition, ISBN 0-201-31002-3 + * "The Java Language Specification", ISBN 0-201-63451-1 + * plus online API docs for JDK 1.2 beta from http://www.javasoft.com. + * Status: Incomplete: needs a private constructor, and + * invoke() needs to be finished. + */ + +public final class Method extends AccessibleObject implements Member +{ + public boolean equals (Object obj) + { + if (! (obj instanceof Method)) + return false; + Method m = (Method) obj; + return declaringClass == m.declaringClass && offset == m.offset; + } + + public Class getDeclaringClass () + { + return declaringClass; + } + + public Class[] getExceptionTypes () + { + return (Class[]) exception_types.clone(); + } + + public native int getModifiers (); + + public native String getName (); + + private native void getType (); + + public Class[] getParameterTypes () + { + if (parameter_types == null) + getType(); + return (Class[]) parameter_types.clone(); + } + + public Class getReturnType () + { + if (return_type == null) + getType(); + return return_type; + } + + public int hashCode () + { + // FIXME. + return name.hashCode() + declaringClass.getName().hashCode(); + } + + public native Object invoke (Object obj, Object[] args) + throws IllegalAccessException, IllegalArgumentException, + InvocationTargetException; + + public String toString () + { + StringBuffer b = new StringBuffer (); + b.append(Modifier.toString(getModifiers())); + b.append(" "); + b.append(return_type.toString()); + b.append(" "); + b.append(declaringClass.toString()); + b.append("."); + b.append(name); + b.append("("); + for (int i = 0; i < parameter_types.length; ++i) + { + b.append(parameter_types[i].toString()); + if (i < parameter_types.length - 1) + b.append(","); + } + b.append(")"); + if (exception_types.length > 0) + { + b.append(" throws "); + for (int i = 0; i < exception_types.length; ++i) + { + b.append(exception_types[i].toString()); + if (i < exception_types.length - 1) + b.append(","); + } + } + return b.toString(); + } + + private Method () + { + } + + // Declaring class. + private Class declaringClass; + + // Exception types. + private Class[] exception_types; + // Name cache. (Initially null.) + private String name; + // Parameter types. + private Class[] parameter_types; + // Return type. + private Class return_type; + + // Offset in bytes from the start of declaringClass's methods array. + private int offset; +} |