Browse Source

fixed a bug reported as JASSIST-246

tags/rel_3_20_0_ga
chibash 9 years ago
parent
commit
efae59551e

BIN
javassist.jar View File


+ 19
- 20
src/main/javassist/compiler/MemberResolver.java View 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;
}

+ 14
- 0
src/test/javassist/JvstTest5.java View 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);
}
}

+ 21
- 0
src/test/test5/JIRA246.java View File

@@ -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;
}
}
}

Loading…
Cancel
Save