diff --git a/com.ibm.wala.core.testdata/src/methodLookup/MethodLookupStuff.java b/com.ibm.wala.core.testdata/src/methodLookup/MethodLookupStuff.java new file mode 100644 index 000000000..e8bf7591c --- /dev/null +++ b/com.ibm.wala.core.testdata/src/methodLookup/MethodLookupStuff.java @@ -0,0 +1,15 @@ +package methodLookup; + +public class MethodLookupStuff { + + static class A { + A(int foo) { + } + + A() {} + } + + static class B extends A { + + } +} diff --git a/com.ibm.wala.core.tests/src/com/ibm/wala/core/tests/cha/GetTargetsTest.java b/com.ibm.wala.core.tests/src/com/ibm/wala/core/tests/cha/GetTargetsTest.java index 09a8a0256..9fd45c05f 100644 --- a/com.ibm.wala.core.tests/src/com/ibm/wala/core/tests/cha/GetTargetsTest.java +++ b/com.ibm.wala.core.tests/src/com/ibm/wala/core/tests/cha/GetTargetsTest.java @@ -19,6 +19,7 @@ import org.junit.Test; import com.ibm.wala.classLoader.ClassLoaderFactory; import com.ibm.wala.classLoader.ClassLoaderFactoryImpl; +import com.ibm.wala.classLoader.IClass; import com.ibm.wala.classLoader.IMethod; import com.ibm.wala.core.tests.util.TestConstants; import com.ibm.wala.core.tests.util.WalaTestCase; @@ -28,6 +29,7 @@ import com.ibm.wala.ipa.cha.ClassHierarchyException; import com.ibm.wala.ipa.cha.ClassHierarchyFactory; import com.ibm.wala.types.ClassLoaderReference; import com.ibm.wala.types.MethodReference; +import com.ibm.wala.types.Selector; import com.ibm.wala.types.TypeReference; import com.ibm.wala.util.config.AnalysisScopeReader; import com.ibm.wala.util.io.FileProvider; @@ -96,4 +98,12 @@ public class GetTargetsTest extends WalaTestCase { } Assert.assertEquals(1, c.size()); } + + @Test + public void testConstructorLookup() { + IClass testKlass = cha.lookupClass(TypeReference.findOrCreate(ClassLoaderReference.Application, + "LmethodLookup/MethodLookupStuff$B")); + IMethod m = testKlass.getMethod(Selector.make("(I)V")); + Assert.assertNull(m); + } } diff --git a/com.ibm.wala.core/src/com/ibm/wala/classLoader/BytecodeClass.java b/com.ibm.wala.core/src/com/ibm/wala/classLoader/BytecodeClass.java index c111d1a67..1bca04c10 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/classLoader/BytecodeClass.java +++ b/com.ibm.wala.core/src/com/ibm/wala/classLoader/BytecodeClass.java @@ -453,7 +453,8 @@ public abstract class BytecodeClass implements IClass { } // check parent, caching if found - if (!selector.equals(MethodReference.clinitSelector) && !selector.equals(MethodReference.initSelector)) { + if (!selector.equals(MethodReference.clinitSelector) + && !selector.getName().equals(MethodReference.initAtom)) { IClass superclass = getSuperclass(); if (superclass != null) { IMethod inherit = superclass.getMethod(selector);