From 2d0309022b4317f91969d2a55fd24a6bb769fe26 Mon Sep 17 00:00:00 2001 From: egeay Date: Tue, 16 Jan 2007 21:49:02 +0000 Subject: [PATCH] Fixed "getMethod(Selector)" for the case where in an abstract class a method references a method of its implemented interface(s). git-svn-id: https://wala.svn.sourceforge.net/svnroot/wala/trunk@583 f5eafffb-2e1d-0410-98e4-8ec43c5233c4 --- .../src/com/ibm/wala/classLoader/ShrikeClass.java | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/com.ibm.wala.core/src/com/ibm/wala/classLoader/ShrikeClass.java b/com.ibm.wala.core/src/com/ibm/wala/classLoader/ShrikeClass.java index fe6115cda..f40f372a1 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/classLoader/ShrikeClass.java +++ b/com.ibm.wala.core/src/com/ibm/wala/classLoader/ShrikeClass.java @@ -503,16 +503,17 @@ public final class ShrikeClass implements IClass { // didn't find it yet. special logic for interfaces try { - if (isInterface()) { + if (isInterface() || isAbstract()) { + final Iterator it = (isInterface()) ? getAllAncestorInterfaces().iterator() : + getAllImplementedInterfaces().iterator(); // try each superinterface - for (Iterator it = getAllAncestorInterfaces().iterator(); it.hasNext();) { + while (it.hasNext()) { IClass k = (IClass) it.next(); result = k.getMethod(selector); if (result != null) { return result; } } - } } catch (ClassHierarchyException e) { e.printStackTrace(); @@ -757,7 +758,7 @@ public final class ShrikeClass implements IClass { public void clearSoftCaches() { // toss optional information from each method. if (methodMap != null) { - for (Iterator it = getDeclaredMethods().iterator(); it.hasNext();) { + for (Iterator it = getDeclaredMethods().iterator(); it.hasNext();) { ShrikeCTMethod m = (ShrikeCTMethod) it.next(); m.clearCaches(); }