diff options
author | Tom Tromey <tromey@redhat.com> | 2002-07-05 20:40:11 +0000 |
---|---|---|
committer | Tom Tromey <tromey@gcc.gnu.org> | 2002-07-05 20:40:11 +0000 |
commit | 0d49ec1158291fa15be03b8a7b89c320212c6e94 (patch) | |
tree | d6831eedd78519f01123093a5f9a1b1695f7a3ea /libjava/java/lang/Class.java | |
parent | 9833f6792a3fc80658167415883160d47ddd68b4 (diff) | |
download | gcc-0d49ec1158291fa15be03b8a7b89c320212c6e94.zip gcc-0d49ec1158291fa15be03b8a7b89c320212c6e94.tar.gz gcc-0d49ec1158291fa15be03b8a7b89c320212c6e94.tar.bz2 |
re PR libgcj/7060 (getMethod() doesn't search super interface)
2002-07-04 Tom Tromey <tromey@redhat.com>
Jeff Sturm <jsturm@one-point.com>
Fix for PR libgcj/7060:
* java/lang/Class.h (_getMethod): Renamed from getMethod.
* java/lang/natClass.cc (_getMethod): Renamed from getMethod.
Recurse into superinterfaces. Don't throw NoSuchMethodException.
* java/lang/Class.java (getMethod): New Java implementation;
complies with spec.
(_getMethod): New native method.
Co-Authored-By: Jeff Sturm <jsturm@one-point.com>
From-SVN: r55266
Diffstat (limited to 'libjava/java/lang/Class.java')
-rw-r--r-- | libjava/java/lang/Class.java | 25 |
1 files changed, 23 insertions, 2 deletions
diff --git a/libjava/java/lang/Class.java b/libjava/java/lang/Class.java index 7bd38de..12306da 100644 --- a/libjava/java/lang/Class.java +++ b/libjava/java/lang/Class.java @@ -121,8 +121,29 @@ public final class Class implements Serializable private static final native String getSignature (Class[] parameterTypes, boolean is_construtor); - public native Method getMethod (String methodName, Class[] parameterTypes) - throws NoSuchMethodException, SecurityException; + public native Method _getMethod (String methodName, Class[] parameterTypes); + + public Method getMethod (String methodName, Class[] parameterTypes) + throws NoSuchMethodException, SecurityException + { + SecurityManager sm = System.getSecurityManager(); + if (sm != null) + { + sm.checkMemberAccess(this, Member.PUBLIC); + Package p = getPackage(); + if (p != null) + sm.checkPackageAccess(p.getName()); + } + + if ("<init>".equals(methodName) || "<clinit>".equals(methodName)) + throw new NoSuchMethodException(methodName); + + Method m = _getMethod(methodName, parameterTypes); + if (m == null) + throw new NoSuchMethodException (methodName); + return m; + } + private native int _getMethods (Method[] result, int offset); public native Method[] getMethods () throws SecurityException; |