]> source.dussan.org Git - javassist.git/commitdiff
fixed a bug reported as JASSIST-246
authorchibash <chiba@javassist.org>
Sun, 24 May 2015 17:37:05 +0000 (02:37 +0900)
committerchibash <chiba@javassist.org>
Sun, 24 May 2015 17:37:05 +0000 (02:37 +0900)
javassist.jar
src/main/javassist/compiler/MemberResolver.java
src/test/javassist/JvstTest5.java
src/test/test5/JIRA246.java [new file with mode: 0644]

index 8fdba885b64f01715e0ec64d914a66e00df60565..11b3aa975ccdf604c77de836964a1b409766bb9f 100644 (file)
Binary files a/javassist.jar and b/javassist.jar differ
index c232ccdab07c23bd8c501108739b63dd9f0657dd..ddbe1be406dc0076bc83e418b0a90a1c5b5586ca 100644 (file)
@@ -139,30 +139,29 @@ public class MemberResolver implements TokenId {
         }
         catch (NotFoundException e) {}
 
-        if (isIntf || Modifier.isAbstract(mod))
-            try {
-                CtClass[] ifs = clazz.getInterfaces();
-                int size = ifs.length;
-                for (int i = 0; i < size; ++i) {
-                    Method r = lookupMethod(ifs[i], methodName,
-                                            argTypes, argDims, argClassNames,
-                                            onlyExact);
+        try {
+            CtClass[] ifs = clazz.getInterfaces();
+            int size = ifs.length;
+            for (int i = 0; i < size; ++i) {
+                Method r = lookupMethod(ifs[i], methodName,
+                        argTypes, argDims, argClassNames,
+                        onlyExact);
+                if (r != null)
+                    return r;
+            }
+
+            if (isIntf) {
+                // finally search java.lang.Object.
+                CtClass pclazz = clazz.getSuperclass();
+                if (pclazz != null) {
+                    Method r = lookupMethod(pclazz, methodName, argTypes,
+                                            argDims, argClassNames, onlyExact);
                     if (r != null)
                         return r;
                 }
-
-                if (isIntf) {
-                    // finally search java.lang.Object.
-                    CtClass pclazz = clazz.getSuperclass();
-                    if (pclazz != null) {
-                        Method r = lookupMethod(pclazz, methodName, argTypes,
-                                                argDims, argClassNames, onlyExact);
-                        if (r != null)
-                            return r;
-                    }
-                }
             }
-            catch (NotFoundException e) {}
+        }
+        catch (NotFoundException e) {}
 
         return maybe;
     }
index 124f585d48f0fcd9142886b17c0524470fffbd22..097dcd4ddd697b7d501efa8c117775d9518cc9fa 100644 (file)
@@ -53,4 +53,18 @@ public class JvstTest5 extends JvstTestRoot {
         Object obj = make(cc.getName());
         assertEquals(10, invoke(obj, "run"));
     }
+
+    public void testJIRA246() throws Exception {
+        CtClass ctClass = sloader.makeClass("test5.JIRA246Test");
+        ctClass.addInterface(sloader.get(test5.JIRA246.Test.class.getName()));
+        String methodBody = "public void test() { defaultMethod(); }";
+        CtMethod ctMethod = CtMethod.make(methodBody, ctClass);
+        ctClass.addMethod(ctMethod);
+    }
+
+    public void testJIRA246b() throws Exception {
+        CtClass ctClass = sloader.get(test5.JIRA246.A.class.getName());
+        String src = "public void id() { get(); }";
+        CtMethod make = CtNewMethod.make(src, ctClass);
+    }
 }
diff --git a/src/test/test5/JIRA246.java b/src/test/test5/JIRA246.java
new file mode 100644 (file)
index 0000000..da23f6e
--- /dev/null
@@ -0,0 +1,21 @@
+package test5;
+
+public class JIRA246 {
+    public interface Test {
+        default void defaultMethod() {
+        }
+        void test();
+    }
+
+    public interface IA {
+        default int get() {
+            return 0;
+        }
+    }
+
+    public static class A implements IA {
+        public int anotherGet() {
+            return 1;
+        }
+    }
+}