PR java/23431
authorrmathew <rmathew@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 5 Sep 2005 14:57:25 +0000 (14:57 +0000)
committerrmathew <rmathew@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 5 Sep 2005 14:57:25 +0000 (14:57 +0000)
* typeck.c (lookup_do): Look up interfaces for the original class,
not the base class.
* parse.y (java_check_regular_methods): Fix diagnostic message for
more restrictive overriding of a method from an interface.

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

gcc/java/ChangeLog
gcc/java/parse.y
gcc/java/typeck.c

index 0ecfd8f..8252aad 100644 (file)
@@ -1,3 +1,11 @@
+2005-09-05  Ranjit Mathew  <rmathew@hotmail.com>
+
+       PR java/23431
+       * typeck.c (lookup_do): Look up interfaces for the original class,
+       not the base class.
+       * parse.y (java_check_regular_methods): Fix diagnostic message for
+       more restrictive overriding of a method from an interface.
+
 2005-08-16  Tom Tromey  <tromey@redhat.com>
 
        * class.c (make_class_data): Always emit JV_STATE_PRELOADING for
index b1de35f..9dd860d 100644 (file)
@@ -6518,7 +6518,7 @@ java_check_regular_methods (tree class_decl)
          tree found_decl = TYPE_NAME (DECL_CONTEXT (found));
          parse_error_context (method_wfl, "Class %qs must override %qs with a public method in order to implement interface %qs",
                               IDENTIFIER_POINTER (DECL_NAME (class_decl)),
-                              lang_printable_name (method, 2),
+                              lang_printable_name (found, 0),
                               IDENTIFIER_POINTER (DECL_NAME (found_decl)));
        }
 
index 8616d0b..8b64ac8 100644 (file)
@@ -842,6 +842,7 @@ lookup_do (tree searched_class, int flags, tree method_name,
           tree signature, tree (*signature_builder) (tree))
 {
   tree method;
+  tree orig_class = searched_class;
     
   if (searched_class == NULL_TREE)
     return NULL_TREE;
@@ -868,7 +869,7 @@ lookup_do (tree searched_class, int flags, tree method_name,
   
   /* If that doesn't work, look in our interfaces.  */
   if (flags & SEARCH_INTERFACE)
-    method = find_method_in_interfaces (searched_class, flags, method_name, 
+    method = find_method_in_interfaces (orig_class, flags, method_name, 
                                        signature, signature_builder);
   
   return method;