PatchSet 3967 
Date: 2003/08/21 10:59:29
Author: dalibor
Branch: HEAD
Tag: (none) 
Log:
improved exception message when a method is not found

Members: 
        ChangeLog:1.1565->1.1566 
        libraries/clib/native/Class.c:1.67->1.68 
        libraries/javalib/java/lang/Class.java:1.45->1.46 
        test/regression/ProcessClassInst.java:1.8->1.9 
        test/regression/ProcessClassStop.java:1.7->1.8 

Index: kaffe/ChangeLog
diff -u kaffe/ChangeLog:1.1565 kaffe/ChangeLog:1.1566
--- kaffe/ChangeLog:1.1565      Wed Aug 20 14:32:05 2003
+++ kaffe/ChangeLog     Thu Aug 21 10:59:29 2003
@@ -1,3 +1,19 @@
+2003-08-21  Dalibor Topic <[EMAIL PROTECTED]>
+
+       * libraries/clib/native/Class.c:
+       (java_lang_Class_getMethod0) changed to return NULL on a failed
+       lookup. Added documentation.
+
+       * libraries/javalib/java/lang/Class.java:
+       (getDeclaredMethod, getMethod) use lookupMethod.
+       (lookupMethod) new helper method. Throw an exception if
+       java_lang_Class_getMethod0 returns null. Improved exception
+       message to include class and parameter types of not found method.
+
+       * test/regression/ProcessClassInst.java,
+       test/regression/ProcessClassStop.java:
+       Fixed line numbers in expected results.
+       
 2003-08-20  Dalibor Topic <[EMAIL PROTECTED]>
 
        * libraries/javalib/kaffe/net/DefaultURLStreamHandlerFactory.java:
Index: kaffe/libraries/clib/native/Class.c
diff -u kaffe/libraries/clib/native/Class.c:1.67 
kaffe/libraries/clib/native/Class.c:1.68
--- kaffe/libraries/clib/native/Class.c:1.67    Sun Aug 10 12:41:08 2003
+++ kaffe/libraries/clib/native/Class.c Thu Aug 21 10:59:30 2003
@@ -782,6 +782,16 @@
        return (0);
 }
 
+/** 
+ * looks up a declared method.
+ * 
+ * @param this class where to start looking
+ * @param name name of method we're looking for
+ * @param arr parameter types of the method
+ * @param declared true if the method is supposed to be declared in this class
+ * 
+ * @return a method, if it can be found. NULL otherwise.
+ */
 Hjava_lang_reflect_Method*
 java_lang_Class_getMethod0(struct Hjava_lang_Class* this, struct Hjava_lang_String* 
name, HArrayOfObject* arr, jboolean declared)
 {
@@ -813,12 +823,7 @@
                }
        }
 
-       /* like SignalError, except that the name of the class that is
-        * not found becomes the error message
-        */
-       throwException((struct Hjava_lang_Throwable*)execute_java_constructor(
-               "java.lang.NoSuchMethodException", 0, 0,
-               "(Ljava/lang/String;)V", name));
+       return NULL;
 }
 
 struct Hjava_lang_reflect_Constructor*
Index: kaffe/libraries/javalib/java/lang/Class.java
diff -u kaffe/libraries/javalib/java/lang/Class.java:1.45 
kaffe/libraries/javalib/java/lang/Class.java:1.46
--- kaffe/libraries/javalib/java/lang/Class.java:1.45   Sat Jul 26 23:00:49 2003
+++ kaffe/libraries/javalib/java/lang/Class.java        Thu Aug 21 10:59:31 2003
@@ -204,7 +204,8 @@
        SecurityManager sm = System.getSecurityManager();
        if (sm != null)
                sm.checkMemberAccess(this, Member.DECLARED);
-       return (getMethod0(name, parameterTypes, true));
+
+       return lookupMethod(name, parameterTypes, true);
 }
 
 public Method[] getDeclaredMethods() throws SecurityException
@@ -264,7 +265,7 @@
                sm.checkMemberAccess(this, Member.PUBLIC );
        if( name.equals("<init>") || name.equals("<clinit>") )
                throw new NoSuchMethodException();
-       return (getMethod0(name, parameterTypes, false));
+       return (lookupMethod(name, parameterTypes, false));
 }
 
 native private Method getMethod0(String name, Class[] args, boolean declared);
@@ -369,6 +370,46 @@
 native public boolean isInterface();
 
 native public boolean isPrimitive();
+
+
+/**
+ * Lookup a method.
+ *
+ * Internal helper method used to combine common method lookup operations into a 
single method.
+ *
+ * @param name method name
+ * @param parameterTypes method's list of parameters
+ * @param declared true if the method is supposed to be declared in this class
+ * @return the method, if it can be found.
+ * @exception NoSuchMethodException if no method can be found
+ * @exception SecurityException if access to the method is denied
+ */
+private Method lookupMethod (String name, Class [] parameterTypes, boolean declared) 
throws NoSuchMethodException, SecurityException {
+
+  Method meth = getMethod0(name, parameterTypes, declared);
+
+  if (meth == null) {
+    StringBuffer buf = new StringBuffer("In class ");
+    buf.append(getName())
+      .append(" there is no method ")
+      .append(name)
+      .append(" (");
+         
+    /* write parameter types */
+    for (int i = 0; i < parameterTypes.length; ++i) {
+      buf.append(parameterTypes[i].getName());
+      if (i < parameterTypes.length - 1) {
+       buf.append(", ");
+      }
+    }
+
+    buf.append(')');
+
+    throw new NoSuchMethodException(buf.toString());
+  }
+
+  return meth;
+}
 
 public Object newInstance() throws InstantiationException, IllegalAccessException {
     if (Modifier.isAbstract(getModifiers()) || isInterface() || isPrimitive()) {
Index: kaffe/test/regression/ProcessClassInst.java
diff -u kaffe/test/regression/ProcessClassInst.java:1.8 
kaffe/test/regression/ProcessClassInst.java:1.9
--- kaffe/test/regression/ProcessClassInst.java:1.8     Sun Jul 27 21:42:26 2003
+++ kaffe/test/regression/ProcessClassInst.java Thu Aug 21 10:59:31 2003
@@ -104,6 +104,6 @@
 java.lang.NoClassDefFoundError: Base
    at java.lang.Class.getConstructor0 (Class.java)
    at java.lang.Class.getDeclaredConstructor (Class.java:174)
-   at java.lang.Class.newInstance (Class.java:379)
+   at java.lang.Class.newInstance (Class.java:420)
    at ProcessClassInst.main (ProcessClassInst.java:72)
 */
Index: kaffe/test/regression/ProcessClassStop.java
diff -u kaffe/test/regression/ProcessClassStop.java:1.7 
kaffe/test/regression/ProcessClassStop.java:1.8
--- kaffe/test/regression/ProcessClassStop.java:1.7     Sun Jul 27 21:42:26 2003
+++ kaffe/test/regression/ProcessClassStop.java Thu Aug 21 10:59:31 2003
@@ -107,6 +107,6 @@
 java.lang.NoClassDefFoundError: Base
    at java.lang.Class.getConstructor0 (Class.java)
    at java.lang.Class.getDeclaredConstructor (Class.java:174)
-   at java.lang.Class.newInstance (Class.java:379)
+   at java.lang.Class.newInstance (Class.java:420)
    at ProcessClassStop.main (ProcessClassStop.java:74)
 */

_______________________________________________
kaffe mailing list
[EMAIL PROTECTED]
http://kaffe.org/cgi-bin/mailman/listinfo/kaffe

Reply via email to