diff --git a/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/callgraph/fieldbased/JSMethodInstructionVisitor.java b/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/callgraph/fieldbased/JSMethodInstructionVisitor.java index 25ea5bee5..d2a280833 100644 --- a/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/callgraph/fieldbased/JSMethodInstructionVisitor.java +++ b/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/callgraph/fieldbased/JSMethodInstructionVisitor.java @@ -55,7 +55,7 @@ public class JSMethodInstructionVisitor extends JSAbstractInstructionVisitor { if(fndef instanceof AstGlobalRead) { AstGlobalRead agr = (AstGlobalRead)fndef; if(agr.getGlobalName().equals("global Function")) { - if(invk.getNumberOfParameters() != 2) + if(invk.getNumberOfPositionalParameters() != 2) return false; // this may be a genuine use of "new Function()", not a declaration/expression if(!symtab.isStringConstant(invk.getUse(1))) diff --git a/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/callgraph/fieldbased/OptimisticCallgraphBuilder.java b/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/callgraph/fieldbased/OptimisticCallgraphBuilder.java index 1b7d82377..d574e0de1 100644 --- a/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/callgraph/fieldbased/OptimisticCallgraphBuilder.java +++ b/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/callgraph/fieldbased/OptimisticCallgraphBuilder.java @@ -103,7 +103,7 @@ public class OptimisticCallgraphBuilder extends FieldBasedCallGraphBuilder { offset = 1; } - for(int i=0;i 1) { + if (invk.getNumberOfPositionalParameters() > 1) { flowgraph.addEdge(cs, factory.makeVarVertex(func, invk.getUse(0))); } } diff --git a/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/ipa/callgraph/ArgumentSpecialization.java b/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/ipa/callgraph/ArgumentSpecialization.java index 2efbf293e..5f1f55c8f 100644 --- a/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/ipa/callgraph/ArgumentSpecialization.java +++ b/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/ipa/callgraph/ArgumentSpecialization.java @@ -135,9 +135,9 @@ public class ArgumentSpecialization { int v = -1; for (SSAAbstractInvokeInstruction x : caller.getIR().getCalls(site)) { if (v == -1) { - v = x.getNumberOfParameters(); + v = x.getNumberOfPositionalParameters(); } else { - if (v != x.getNumberOfParameters()) { + if (v != x.getNumberOfPositionalParameters()) { return baseContext; } } diff --git a/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/ipa/callgraph/JSSSAPropagationCallGraphBuilder.java b/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/ipa/callgraph/JSSSAPropagationCallGraphBuilder.java index 365cf5e3b..2c082c44a 100755 --- a/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/ipa/callgraph/JSSSAPropagationCallGraphBuilder.java +++ b/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/ipa/callgraph/JSSSAPropagationCallGraphBuilder.java @@ -1035,7 +1035,7 @@ public class JSSSAPropagationCallGraphBuilder extends AstSSAPropagationCallGraph } int paramCount = targetST.getParameterValueNumbers().length; - int argCount = instruction.getNumberOfParameters(); + int argCount = instruction.getNumberOfPositionalParameters(); // the first two arguments are the function object and the receiver, neither of which // should become part of the arguments array diff --git a/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/ipa/callgraph/JavaScriptConstructTargetSelector.java b/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/ipa/callgraph/JavaScriptConstructTargetSelector.java index ed50a5ff6..04bfabd55 100644 --- a/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/ipa/callgraph/JavaScriptConstructTargetSelector.java +++ b/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/ipa/callgraph/JavaScriptConstructTargetSelector.java @@ -46,7 +46,7 @@ public class JavaScriptConstructTargetSelector implements MethodTargetSelector { IR callerIR = caller.getIR(); SSAAbstractInvokeInstruction callStmts[] = callerIR.getCalls(site); assert callStmts.length == 1; - int nargs = callStmts[0].getNumberOfParameters(); + int nargs = callStmts[0].getNumberOfPositionalParameters(); return constructors.findOrCreateConstructorMethod(callerIR, callStmts[0], receiver, nargs - 1); } else { return base.getCalleeTarget(caller, site, receiver); diff --git a/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/ipa/callgraph/JavaScriptFunctionDotCallTargetSelector.java b/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/ipa/callgraph/JavaScriptFunctionDotCallTargetSelector.java index c9187f431..585ba4804 100644 --- a/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/ipa/callgraph/JavaScriptFunctionDotCallTargetSelector.java +++ b/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/ipa/callgraph/JavaScriptFunctionDotCallTargetSelector.java @@ -194,7 +194,7 @@ public class JavaScriptFunctionDotCallTargetSelector implements MethodTargetSele IR callerIR = caller.getIR(); SSAAbstractInvokeInstruction callStmts[] = callerIR.getCalls(site); assert callStmts.length == 1; - int nargs = callStmts[0].getNumberOfParameters(); + int nargs = callStmts[0].getNumberOfPositionalParameters(); return nargs; } diff --git a/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/ipa/callgraph/PropertyNameContextSelector.java b/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/ipa/callgraph/PropertyNameContextSelector.java index b9ed63d0c..22843016d 100755 --- a/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/ipa/callgraph/PropertyNameContextSelector.java +++ b/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/ipa/callgraph/PropertyNameContextSelector.java @@ -132,7 +132,7 @@ public class PropertyNameContextSelector implements ContextSelector { SSAAbstractInvokeInstruction inst = caller.getIR().getCalls(site)[0]; DefUse du = caller.getDU(); - for(int i = 0; i < inst.getNumberOfParameters(); i++) { + for(int i = 0; i < inst.getNumberOfPositionalParameters(); i++) { MutableIntSet values = IntSetUtil.make(); values.add(inst.getUse(i)); collectValues(du, du.getDef(inst.getUse(i)), values); diff --git a/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/ipa/callgraph/correlations/EscapeCorrelation.java b/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/ipa/callgraph/correlations/EscapeCorrelation.java index b283b27ea..bf03a6ffe 100644 --- a/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/ipa/callgraph/correlations/EscapeCorrelation.java +++ b/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/ipa/callgraph/correlations/EscapeCorrelation.java @@ -48,7 +48,7 @@ public class EscapeCorrelation extends Correlation { } public int getNumberOfArguments() { - return invoke.getNumberOfParameters() - 2; // deduct one for the function object, one for the receiver + return invoke.getNumberOfPositionalParameters() - 2; // deduct one for the function object, one for the receiver } @Override diff --git a/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/ssa/JavaScriptInvoke.java b/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/ssa/JavaScriptInvoke.java index 9d3656bc5..28d267e26 100644 --- a/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/ssa/JavaScriptInvoke.java +++ b/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/ssa/JavaScriptInvoke.java @@ -80,7 +80,7 @@ public class JavaScriptInvoke extends MultiReturnValueInvokeInstruction { @Override public int getNumberOfUses() { - return getNumberOfParameters(); + return getNumberOfPositionalParameters(); } @Override @@ -126,7 +126,7 @@ public class JavaScriptInvoke extends MultiReturnValueInvokeInstruction { } @Override - public int getNumberOfParameters() { + public int getNumberOfPositionalParameters() { if (params == null) { return 1; } else { diff --git a/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ir/ssa/FixedParametersInvokeInstruction.java b/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ir/ssa/FixedParametersInvokeInstruction.java index 4227a921a..d201dbfd9 100644 --- a/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ir/ssa/FixedParametersInvokeInstruction.java +++ b/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ir/ssa/FixedParametersInvokeInstruction.java @@ -89,7 +89,7 @@ public abstract class FixedParametersInvokeInstruction } @Override - public int getNumberOfParameters() { + public int getNumberOfPositionalParameters() { if (params == null) { return 0; } else { @@ -107,7 +107,7 @@ public abstract class FixedParametersInvokeInstruction @Override public int getNumberOfUses() { - return getNumberOfParameters(); + return getNumberOfPositionalParameters(); } @Override @@ -119,7 +119,7 @@ public abstract class FixedParametersInvokeInstruction @Override public int getUse(int j) { - if (j < getNumberOfParameters()) + if (j < getNumberOfPositionalParameters()) return params[j]; else { return super.getUse(j); diff --git a/com.ibm.wala.core/src/com/ibm/wala/cfg/exc/inter/AnalysisUtil.java b/com.ibm.wala.core/src/com/ibm/wala/cfg/exc/inter/AnalysisUtil.java index 091da3010..d784238ae 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/cfg/exc/inter/AnalysisUtil.java +++ b/com.ibm.wala.core/src/com/ibm/wala/cfg/exc/inter/AnalysisUtil.java @@ -57,7 +57,7 @@ public final class AnalysisUtil { * including the this pointer. */ public static int[] getParameterNumbers(SSAAbstractInvokeInstruction invokeInstruction) { - final int number = invokeInstruction.getNumberOfParameters(); + final int number = invokeInstruction.getNumberOfPositionalParameters(); final int[] parameterNumbers = new int[number]; assert (parameterNumbers.length == invokeInstruction.getNumberOfUses()); diff --git a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/impl/BasicCallGraph.java b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/impl/BasicCallGraph.java index 22f6e674f..87136655b 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/impl/BasicCallGraph.java +++ b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/impl/BasicCallGraph.java @@ -302,10 +302,10 @@ public abstract class BasicCallGraph extends AbstractNumberedGraph im @Override public Set getNodes(MethodReference m) { IMethod im = getClassHierarchy().resolveMethod(m); - if (im == null) { - return Collections.emptySet(); + if (im != null) { + m = im.getReference(); } - Set result = mr2Nodes.get(im.getReference()); + Set result = mr2Nodes.get(m); Set empty = Collections.emptySet(); return (result == null) ? empty : result; } diff --git a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/SSAPropagationCallGraphBuilder.java b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/SSAPropagationCallGraphBuilder.java index bbfb42961..aa76089bd 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/SSAPropagationCallGraphBuilder.java +++ b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/SSAPropagationCallGraphBuilder.java @@ -1617,7 +1617,7 @@ public abstract class SSAPropagationCallGraphBuilder extends PropagationCallGrap // } // } else { // generate contraints from parameter passing - int nUses = instruction.getNumberOfParameters(); + int nUses = instruction.getNumberOfPositionalParameters(); int nExpected = target.getMethod().getNumberOfParameters(); /* @@ -1635,7 +1635,7 @@ public abstract class SSAPropagationCallGraphBuilder extends PropagationCallGrap // TODO: we need much more precise filters than cones in order to handle // the various types of dispatch logic. We need a filter that expresses // "the set of types s.t. x.foo resolves to y.foo." - for (int i = 0; i < instruction.getNumberOfParameters(); i++) { + for (int i = 0; i < instruction.getNumberOfPositionalParameters(); i++) { if (target.getMethod().getParameterType(i).isReferenceType()) { PointerKey formal = getTargetPointerKey(target, i); if (constParams != null && constParams[i] != null) { diff --git a/com.ibm.wala.core/src/com/ibm/wala/ipa/slicer/SDG.java b/com.ibm.wala.core/src/com/ibm/wala/ipa/slicer/SDG.java index fb3d05480..ca97d9d76 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/ipa/slicer/SDG.java +++ b/com.ibm.wala.core/src/com/ibm/wala/ipa/slicer/SDG.java @@ -696,7 +696,7 @@ public class SDG extends AbstractNumberedGraph // don't track reflection into reflective invokes return false; } - for (int i = 0; i < call.getNumberOfParameters(); i++) { + for (int i = 0; i < call.getNumberOfPositionalParameters(); i++) { if (call.getUse(i) == caller.getValueNumber()) { if (callee.getValueNumber() == i + 1) { return true; 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 ca8c5b4c5..96090efe2 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 @@ -186,7 +186,7 @@ public class BypassMethodTargetSelector implements MethodTargetSelector { syntheticMethods.put(m, null); return null; } - SummarizedMethod n = new SummarizedMethod(m, summ, C); + SummarizedMethod n = new SummarizedMethodWithNames(m, summ, C); syntheticMethods.put(m, n); return n; } else { diff --git a/com.ibm.wala.core/src/com/ibm/wala/ipa/summaries/LambdaSummaryClass.java b/com.ibm.wala.core/src/com/ibm/wala/ipa/summaries/LambdaSummaryClass.java index 10f7af87a..922b97d77 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/ipa/summaries/LambdaSummaryClass.java +++ b/com.ibm.wala.core/src/com/ibm/wala/ipa/summaries/LambdaSummaryClass.java @@ -151,7 +151,7 @@ public class LambdaSummaryClass extends SyntheticClass { private Map makeFields() { Map result = HashMapFactory.make(); - for(int i = 0; i < invoke.getNumberOfParameters(); i++) { + for(int i = 0; i < invoke.getNumberOfPositionalParameters(); i++) { final int yuck = i; result.put(Atom.findOrCreateUnicodeAtom("c" + yuck), new IField() { @Override @@ -248,8 +248,8 @@ public class LambdaSummaryClass extends SyntheticClass { MethodSummary summary = new MethodSummary(ref); int inst = 0; - int args = invoke.getNumberOfParameters(), v = args + 1; - for(int i = 0; i < invoke.getNumberOfParameters(); i++) { + int args = invoke.getNumberOfPositionalParameters(), v = args + 1; + for(int i = 0; i < invoke.getNumberOfPositionalParameters(); i++) { Atom f = Atom.findOrCreateUnicodeAtom("c" + i); summary.addStatement(insts.GetInstruction(inst++, v++, 1, getField(f).getReference())); } @@ -273,11 +273,11 @@ public class LambdaSummaryClass extends SyntheticClass { int numParams = getClassHierarchy().resolveMethod(callee).getNumberOfParameters(); int params[] = new int[ numParams ]; - for(int i = isNew? 1: 0; i < invoke.getNumberOfParameters(); i++) { + for(int i = isNew? 1: 0; i < invoke.getNumberOfPositionalParameters(); i++) { params[i] = args + i + 1; } int n = 2; - for(int i = invoke.getNumberOfParameters(); i < numParams; i++) { + for(int i = invoke.getNumberOfPositionalParameters(); i < numParams; i++) { params[i] = n++; } diff --git a/com.ibm.wala.core/src/com/ibm/wala/ipa/summaries/MethodSummary.java b/com.ibm.wala.core/src/com/ibm/wala/ipa/summaries/MethodSummary.java index 6a24542e7..d47b0d5dc 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/ipa/summaries/MethodSummary.java +++ b/com.ibm.wala.core/src/com/ibm/wala/ipa/summaries/MethodSummary.java @@ -20,6 +20,7 @@ import com.ibm.wala.types.MemberReference; import com.ibm.wala.types.MethodReference; import com.ibm.wala.types.TypeReference; import com.ibm.wala.util.collections.HashMapFactory; +import com.ibm.wala.util.strings.Atom; import com.ibm.wala.util.warnings.Warning; /** @@ -69,6 +70,11 @@ public class MethodSummary { */ private boolean isFactory = false; + /** + * Known names for values + */ + private Map valueNames = null; + public MethodSummary(MethodReference method) { if (method == null) { throw new IllegalArgumentException("null method"); @@ -76,6 +82,18 @@ public class MethodSummary { this.method = method; } + public void setValueNames(Map nameTable) { + this.valueNames = nameTable; + } + + public Map getValueNames() { + return valueNames; + } + + public Atom getValue(Integer v) { + return valueNames != null && valueNames.containsKey(v)? valueNames.get(v): null; + } + public int getNumberOfStatements() { return (statements == null ? 0 : statements.size()); } diff --git a/com.ibm.wala.core/src/com/ibm/wala/ipa/summaries/SummarizedMethod.java b/com.ibm.wala.core/src/com/ibm/wala/ipa/summaries/SummarizedMethod.java index f5ca51cf5..2bc776d97 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/ipa/summaries/SummarizedMethod.java +++ b/com.ibm.wala.core/src/com/ibm/wala/ipa/summaries/SummarizedMethod.java @@ -115,4 +115,9 @@ public class SummarizedMethod extends SyntheticMethod { return summary.getParameterType(i); } + @Override + public String getLocalVariableName(int bcIndex, int localNumber) { + return summary.getValue(localNumber).toString(); + } + } diff --git a/com.ibm.wala.core/src/com/ibm/wala/ipa/summaries/SummarizedMethodWithNames.java b/com.ibm.wala.core/src/com/ibm/wala/ipa/summaries/SummarizedMethodWithNames.java index 2de53a0e3..55d52c749 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/ipa/summaries/SummarizedMethodWithNames.java +++ b/com.ibm.wala.core/src/com/ibm/wala/ipa/summaries/SummarizedMethodWithNames.java @@ -73,6 +73,10 @@ public class SummarizedMethodWithNames extends SummarizedMethod { private final MethodSummary summary; private final Map localNames; + public SummarizedMethodWithNames(MethodReference ref, MethodSummary summary, IClass declaringClass) { + this(ref, summary, declaringClass, summary.getValueNames()); + } + public SummarizedMethodWithNames(MethodReference ref, MethodSummary summary, IClass declaringClass, Map localNames) throws NullPointerException { super(ref, summary, declaringClass); diff --git a/com.ibm.wala.core/src/com/ibm/wala/ipa/summaries/XMLMethodSummaryReader.java b/com.ibm.wala.core/src/com/ibm/wala/ipa/summaries/XMLMethodSummaryReader.java index 96f6f46a3..d790be2c2 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/ipa/summaries/XMLMethodSummaryReader.java +++ b/com.ibm.wala.core/src/com/ibm/wala/ipa/summaries/XMLMethodSummaryReader.java @@ -20,6 +20,7 @@ import java.util.HashMap; import java.util.HashSet; import java.util.Map; import java.util.Set; +import java.util.StringTokenizer; import javax.xml.parsers.ParserConfigurationException; import javax.xml.parsers.SAXParser; @@ -183,10 +184,12 @@ public class XMLMethodSummaryReader implements BytecodeConstants { private final static String A_NUM_ARGS = "numArgs"; + private final static String A_PARAM_NAMES = "paramNames"; + private final static String V_NULL = "null"; private final static String V_TRUE = "true"; - + public XMLMethodSummaryReader(InputStream xmlFile, AnalysisScope scope) { super(); if (xmlFile == null) { @@ -924,6 +927,24 @@ public class XMLMethodSummaryReader implements BytecodeConstants { for (int i = 0; i < nParams; i++) { symbolTable.put("arg" + i, new Integer(i + 1)); } + + int pn = 1; + String paramDescString = atts.getValue(A_PARAM_NAMES); + if (paramDescString != null) { + StringTokenizer paramNames = new StringTokenizer(paramDescString); + while (paramNames.hasMoreTokens()) { + symbolTable.put(paramNames.nextToken(), pn++); + } + } + + Map nameTable = HashMapFactory.make(); + for(Map.Entry x : symbolTable.entrySet()) { + if (! x.getKey().startsWith("arg")) { + nameTable.put(x.getValue(), Atom.findOrCreateUnicodeAtom(x.getKey())); + } + } + + governingMethod.setValueNames(nameTable); } /** diff --git a/com.ibm.wala.core/src/com/ibm/wala/ssa/SSAAbstractInvokeInstruction.java b/com.ibm.wala.core/src/com/ibm/wala/ssa/SSAAbstractInvokeInstruction.java index 6503f48d9..15a5ba28c 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/ssa/SSAAbstractInvokeInstruction.java +++ b/com.ibm.wala.core/src/com/ibm/wala/ssa/SSAAbstractInvokeInstruction.java @@ -139,7 +139,7 @@ public abstract class SSAAbstractInvokeInstruction extends SSAInstruction { /** * How many parameters does this call specify? */ - public abstract int getNumberOfParameters(); + public abstract int getNumberOfPositionalParameters(); /** * How many distinct values does this call return? @@ -199,9 +199,9 @@ public abstract class SSAAbstractInvokeInstruction extends SSAInstruction { s.append(" "); s.append(site.getDeclaredTarget().toString()); - if (getNumberOfParameters() > 0) { + if (getNumberOfPositionalParameters() > 0) { s.append(" ").append(getValueString(symbolTable, getUse(0))); - for (int i = 1; i < getNumberOfParameters(); i++) { + for (int i = 1; i < getNumberOfPositionalParameters(); i++) { s.append(",").append(getValueString(symbolTable, getUse(i))); } } diff --git a/com.ibm.wala.core/src/com/ibm/wala/ssa/SSAInvokeInstruction.java b/com.ibm.wala.core/src/com/ibm/wala/ssa/SSAInvokeInstruction.java index 1d5afaf15..57f6f951c 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/ssa/SSAInvokeInstruction.java +++ b/com.ibm.wala.core/src/com/ibm/wala/ssa/SSAInvokeInstruction.java @@ -101,7 +101,7 @@ public abstract class SSAInvokeInstruction extends SSAAbstractInvokeInstruction } @Override - public int getNumberOfParameters() { + public int getNumberOfPositionalParameters() { return getNumberOfUses(); } diff --git a/com.ibm.wala.scandroid/source/org/scandroid/flow/functions/IFDSTaintFlowFunctionProvider.java b/com.ibm.wala.scandroid/source/org/scandroid/flow/functions/IFDSTaintFlowFunctionProvider.java index af58110d2..27b2e86e7 100644 --- a/com.ibm.wala.scandroid/source/org/scandroid/flow/functions/IFDSTaintFlowFunctionProvider.java +++ b/com.ibm.wala.scandroid/source/org/scandroid/flow/functions/IFDSTaintFlowFunctionProvider.java @@ -455,7 +455,7 @@ implements IFlowFunctionMap> { // } final Map parameterMap = HashMapFactory.make(); - for (int i = 0; i < instruction.getNumberOfParameters(); i++) { + for (int i = 0; i < instruction.getNumberOfPositionalParameters(); i++) { Set elements = CodeElement.valueElements(instruction.getUse(i)); for(CodeElement e: elements) { parameterMap.put(e, new LocalElement(i+1)); diff --git a/com.ibm.wala.scandroid/source/org/scandroid/flow/functions/TaintTransferFunctions.java b/com.ibm.wala.scandroid/source/org/scandroid/flow/functions/TaintTransferFunctions.java index 00b015054..8b06333e5 100644 --- a/com.ibm.wala.scandroid/source/org/scandroid/flow/functions/TaintTransferFunctions.java +++ b/com.ibm.wala.scandroid/source/org/scandroid/flow/functions/TaintTransferFunctions.java @@ -179,7 +179,7 @@ public class TaintTransferFunctions implements // build list of actual parameter code elements, and return a // function final int numParams = ((SSAInvokeInstruction) srcInst) - .getNumberOfParameters(); + .getNumberOfPositionalParameters(); List actualParams = new ArrayList<>(numParams); for (int i = 0; i < numParams; i++) { actualParams.add(i, new LocalElement(srcInst.getUse(i))); diff --git a/com.ibm.wala.scandroid/source/org/scandroid/synthmethod/SSAtoXMLVisitor.java b/com.ibm.wala.scandroid/source/org/scandroid/synthmethod/SSAtoXMLVisitor.java index c29add2ab..07e54b39b 100644 --- a/com.ibm.wala.scandroid/source/org/scandroid/synthmethod/SSAtoXMLVisitor.java +++ b/com.ibm.wala.scandroid/source/org/scandroid/synthmethod/SSAtoXMLVisitor.java @@ -333,7 +333,7 @@ public class SSAtoXMLVisitor implements SSAInstruction.IVisitor { elt.setAttribute(XMLSummaryWriter.A_DEF, localName); } - int paramCount = instruction.getNumberOfParameters(); + int paramCount = instruction.getNumberOfPositionalParameters(); for (int i=0; i < paramCount; i++) { String argName = getLocalName(instruction.getUse(i)); elt.setAttribute(XMLSummaryWriter.A_ARG+i, argName);