From fd47590634ff12f670a816985145e6c00b4dbc2f Mon Sep 17 00:00:00 2001 From: Sam Blackshear Date: Tue, 20 May 2014 09:30:54 -0600 Subject: [PATCH 1/2] Check class of parent variable directly rather than using instanceof check. Needed to get correct behavior for subclasses of ClassHierarchyMethodTargetSelector --- .../com/ibm/wala/ipa/summaries/BypassMethodTargetSelector.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/com.ibm.wala.core/src/com/ibm/wala/ipa/summaries/BypassMethodTargetSelector.java b/com.ibm.wala.core/src/com/ibm/wala/ipa/summaries/BypassMethodTargetSelector.java index 21d6b0a9f..b62230022 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/ipa/summaries/BypassMethodTargetSelector.java +++ b/com.ibm.wala.core/src/com/ibm/wala/ipa/summaries/BypassMethodTargetSelector.java @@ -125,7 +125,8 @@ public class BypassMethodTargetSelector implements MethodTargetSelector { // we want to generate a NoOpSummary for this method. return findOrCreateSyntheticMethod(site.getDeclaredTarget(), site.isStatic()); } - if (parent instanceof ClassHierarchyMethodTargetSelector) { + + if (parent.getClass() == ClassHierarchyMethodTargetSelector.class) { // already checked this case and decided not to bypass return chaTarget; } From 0fba08e58124b56547d70ed7c7825803076bc6f6 Mon Sep 17 00:00:00 2001 From: Sam Blackshear Date: Tue, 20 May 2014 11:50:40 -0600 Subject: [PATCH 2/2] adding comment explaining why instanceof check was replaced --- .../com/ibm/wala/ipa/summaries/BypassMethodTargetSelector.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/com.ibm.wala.core/src/com/ibm/wala/ipa/summaries/BypassMethodTargetSelector.java b/com.ibm.wala.core/src/com/ibm/wala/ipa/summaries/BypassMethodTargetSelector.java index b62230022..bdbb67787 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/ipa/summaries/BypassMethodTargetSelector.java +++ b/com.ibm.wala.core/src/com/ibm/wala/ipa/summaries/BypassMethodTargetSelector.java @@ -126,6 +126,9 @@ public class BypassMethodTargetSelector implements MethodTargetSelector { return findOrCreateSyntheticMethod(site.getDeclaredTarget(), site.isStatic()); } + // not using if (instanceof ClassHierarchyMethodTargetSelector) because + // we want to make sure that getCalleeTarget() is still called if + // parent is a subclass of ClassHierarchyMethodTargetSelector if (parent.getClass() == ClassHierarchyMethodTargetSelector.class) { // already checked this case and decided not to bypass return chaTarget;