From 8005b665b9c6e77adef323ce691053c3a50e627e Mon Sep 17 00:00:00 2001 From: Julian Dolby Date: Mon, 30 Apr 2018 19:09:59 -0400 Subject: [PATCH] flexibility in how to model constants --- .../wala/cast/ipa/callgraph/DelegatingAstPointerKeys.java | 4 ++-- .../src/com/ibm/wala/classLoader/Language.java | 3 +++ .../src/com/ibm/wala/classLoader/LanguageImpl.java | 7 +++++++ 3 files changed, 12 insertions(+), 2 deletions(-) diff --git a/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ipa/callgraph/DelegatingAstPointerKeys.java b/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ipa/callgraph/DelegatingAstPointerKeys.java index 8cffa1e27..40351f009 100644 --- a/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ipa/callgraph/DelegatingAstPointerKeys.java +++ b/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ipa/callgraph/DelegatingAstPointerKeys.java @@ -106,8 +106,8 @@ public class DelegatingAstPointerKeys implements AstPointerKeyFactory { protected PointerKey getInstanceFieldPointerKeyForConstant(InstanceKey I, ConstantKey F) { Object v = F.getValue(); // FIXME: current only constant string are handled - if (v instanceof String) { - IField f = I.getConcreteType().getField(Atom.findOrCreateUnicodeAtom((String) v)); + if (I.getConcreteType().getClassLoader().getLanguage().modelConstant(v)) { + IField f = I.getConcreteType().getField(Atom.findOrCreateUnicodeAtom(String.valueOf(v))); return getPointerKeyForInstanceField(I, f); } return null; diff --git a/com.ibm.wala.core/src/com/ibm/wala/classLoader/Language.java b/com.ibm.wala.core/src/com/ibm/wala/classLoader/Language.java index 88c9a4fd9..1ceb63be4 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/classLoader/Language.java +++ b/com.ibm.wala.core/src/com/ibm/wala/classLoader/Language.java @@ -154,4 +154,7 @@ public interface Language { AbstractRootMethod getFakeRootMethod(IClassHierarchy cha, AnalysisOptions options, IAnalysisCacheView cache); InducedCFG makeInducedCFG(SSAInstruction[] instructions, IMethod method, Context context); + + boolean modelConstant(Object o); + } diff --git a/com.ibm.wala.core/src/com/ibm/wala/classLoader/LanguageImpl.java b/com.ibm.wala.core/src/com/ibm/wala/classLoader/LanguageImpl.java index 71a9b507f..d74c62492 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/classLoader/LanguageImpl.java +++ b/com.ibm.wala.core/src/com/ibm/wala/classLoader/LanguageImpl.java @@ -74,4 +74,11 @@ public abstract class LanguageImpl implements Language { InducedCFG makeInducedCFG(SSAInstruction[] instructions, IMethod method, Context context) { return new InducedCFG(instructions, method, context); } + + @Override + public boolean modelConstant(Object o) { + return o instanceof String; + } + + }