+++ /dev/null
-// Method.java - Represent method of class or interface.
-
-/* Copyright (C) 1998, 1999, 2000, 2001 Free Software Foundation
-
- 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;
-
-import gnu.gcj.RawData;
-
-/**
- * @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: Complete, but not correct: access checks aren't done.
- */
-
-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 ()
- {
- if (exception_types == null)
- getType();
- 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 getName().hashCode() + declaringClass.getName().hashCode();
- }
-
- public native Object invoke (Object obj, Object[] args)
- throws IllegalAccessException, IllegalArgumentException,
- InvocationTargetException;
-
- // Append a class name to a string buffer. We try to print the
- // fully-qualified name, the way that a Java programmer would expect
- // it to be written. Weirdly, Class has no appropriate method for
- // this.
- static void appendClassName (StringBuffer buf, Class k)
- {
- if (k.isArray ())
- {
- appendClassName (buf, k.getComponentType ());
- buf.append ("[]");
- }
- else
- {
- // This is correct for primitive and reference types. Really
- // we'd like `Main$Inner' to be printed as `Main.Inner', I
- // think, but that is a pain.
- buf.append (k.getName ());
- }
- }
-
- public String toString ()
- {
- if (parameter_types == null)
- getType ();
-
- StringBuffer b = new StringBuffer ();
- Modifier.toString(getModifiers(), b);
- b.append(" ");
- appendClassName (b, return_type);
- b.append(" ");
- appendClassName (b, declaringClass);
- b.append(".");
- b.append(getName());
- b.append("(");
- for (int i = 0; i < parameter_types.length; ++i)
- {
- appendClassName (b, parameter_types[i]);
- 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)
- {
- appendClassName (b, exception_types[i]);
- 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;
-}