OSDN Git Service

* java/lang/Class.h (_getDeclaredMethod): Declare.
authortromey <tromey@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 3 Sep 2002 21:33:46 +0000 (21:33 +0000)
committertromey <tromey@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 3 Sep 2002 21:33:46 +0000 (21:33 +0000)
(_getMethod): Now private.
* java/lang/natClass.cc (_getDeclaredMethod): Renamed from
getDeclaredMethod.  Now returns NULL on failure.
* java/lang/Class.java (_getDeclaredMethod): Declare.
(getDeclaredMethod): No longer native; implements access checks.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@56772 138bc75d-0d04-0410-961f-82ee72b054a4

libjava/ChangeLog
libjava/java/lang/Class.h
libjava/java/lang/Class.java
libjava/java/lang/natClass.cc

index dabee51..22c7ddb 100644 (file)
@@ -1,3 +1,12 @@
+2002-09-03  Tom Tromey  <tromey@redhat.com>
+
+       * java/lang/Class.h (_getDeclaredMethod): Declare.
+       (_getMethod): Now private.
+       * java/lang/natClass.cc (_getDeclaredMethod): Renamed from
+       getDeclaredMethod.  Now returns NULL on failure.
+       * java/lang/Class.java (_getDeclaredMethod): Declare.
+       (getDeclaredMethod): No longer native; implements access checks.
+
 2002-09-01  Mark Wielaard  <mark@klomp.org>
 
        * gnu/gcj/runtime/NameFinder.java (remove_interpreter): New field.
index 253aa64..9a8d418 100644 (file)
@@ -160,6 +160,9 @@ private:
   java::lang::reflect::Method *getPrivateMethod (jstring, JArray<jclass> *);
   java::security::ProtectionDomain *getProtectionDomain0 ();
 
+  java::lang::reflect::Method *_getMethod (jstring, JArray<jclass> *);
+  java::lang::reflect::Method *_getDeclaredMethod (jstring, JArray<jclass> *);
+
 public:
   JArray<java::lang::reflect::Field *> *getFields (void);
 
@@ -167,7 +170,6 @@ public:
 
   void getSignature (java::lang::StringBuffer *buffer);
   static jstring getSignature (JArray<jclass> *, jboolean is_constructor);
-  java::lang::reflect::Method *_getMethod (jstring, JArray<jclass> *);
   JArray<java::lang::reflect::Method *> *getMethods (void);
 
   inline jint getModifiers (void)
index 12306da..cc1cc40 100644 (file)
@@ -65,9 +65,31 @@ public final class Class implements Serializable
   public native Field getDeclaredField (String fieldName)
     throws NoSuchFieldException, SecurityException;
   public native Field[] getDeclaredFields () throws SecurityException;
-  public native Method getDeclaredMethod (String methodName,
-                                         Class[] parameterTypes)
-    throws NoSuchMethodException, SecurityException;
+
+  private native Method _getDeclaredMethod (String methodName,
+                                           Class[] parameterTypes);
+
+  public Method getDeclaredMethod (String methodName, Class[] parameterTypes)
+    throws NoSuchMethodException, SecurityException
+  {
+    SecurityManager sm = System.getSecurityManager();
+    if (sm != null)
+      {
+       sm.checkMemberAccess(this, Member.DECLARED);
+       Package p = getPackage();
+       if (p != null)
+         sm.checkPackageAccess(p.getName());
+      }
+
+    if ("<init>".equals(methodName) || "<clinit>".equals(methodName))
+      throw new NoSuchMethodException(methodName);
+
+    Method m = _getDeclaredMethod(methodName, parameterTypes);
+    if (m == null)
+      throw new NoSuchMethodException (methodName);
+    return m;
+  }
+
   public native Method[] getDeclaredMethods () throws SecurityException;
 
   // This is marked as unimplemented in the JCL book.
index 43b79ad..fca0741 100644 (file)
@@ -315,8 +315,8 @@ java::lang::Class::getSignature (JArray<jclass> *param_types,
 }
 
 java::lang::reflect::Method *
-java::lang::Class::getDeclaredMethod (jstring name,
-                                     JArray<jclass> *param_types)
+java::lang::Class::_getDeclaredMethod (jstring name,
+                                      JArray<jclass> *param_types)
 {
   jstring partial_sig = getSignature (param_types, false);
   jint p_len = partial_sig->length();
@@ -324,7 +324,6 @@ java::lang::Class::getDeclaredMethod (jstring name,
   int i = isPrimitive () ? 0 : method_count;
   while (--i >= 0)
     {
-      // FIXME: access checks.
       if (_Jv_equalUtf8Consts (methods[i].name, utf_name)
          && _Jv_equaln (methods[i].signature, partial_sig, p_len))
        {
@@ -336,7 +335,7 @@ java::lang::Class::getDeclaredMethod (jstring name,
          return rmethod;
        }
     }
-  throw new java::lang::NoSuchMethodException;
+  return NULL;
 }
 
 JArray<java::lang::reflect::Method *> *