From 8bdf08b27dce26c24704bc0cea073177258568e3 Mon Sep 17 00:00:00 2001 From: sjfink Date: Tue, 15 Apr 2008 19:56:50 +0000 Subject: [PATCH] lazy calculation of callee params git-svn-id: https://wala.svn.sourceforge.net/svnroot/wala/trunk@2761 f5eafffb-2e1d-0410-98e4-8ec43c5233c4 --- .../src/com/ibm/wala/ipa/slicer/PDG.java | 36 ++++++++++--------- 1 file changed, 20 insertions(+), 16 deletions(-) diff --git a/com.ibm.wala.core/src/com/ibm/wala/ipa/slicer/PDG.java b/com.ibm.wala.core/src/com/ibm/wala/ipa/slicer/PDG.java index 2f5934a6a..b1032a4b2 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/ipa/slicer/PDG.java +++ b/com.ibm.wala.core/src/com/ibm/wala/ipa/slicer/PDG.java @@ -802,7 +802,7 @@ public class PDG implements NumberedGraph { createSpecialStatements(ir); } - createCalleeParams(ref); + createCalleeParams(); createReturnStatements(); delegate.addNode(new MethodEntryStatement(node)); @@ -845,22 +845,24 @@ public class PDG implements NumberedGraph { * @param ref the set of heap locations which may be read (transitively) by this node. These are logically parameters * in the SDG. */ - private void createCalleeParams(Map> ref) { - ArrayList list = new ArrayList(); - for (int i = 1; i <= node.getMethod().getNumberOfParameters(); i++) { - ParamCallee s = new ParamCallee(node, i); - delegate.addNode(s); - list.add(s); - } - if (!dOptions.isIgnoreHeap()) { - for (PointerKey p : ref.get(node)) { - Statement h = new HeapStatement.HeapParamCallee(node, p); - delegate.addNode(h); - list.add(h); + private void createCalleeParams() { + if (paramCalleeStatements == null) { + ArrayList list = new ArrayList(); + for (int i = 1; i <= node.getMethod().getNumberOfParameters(); i++) { + ParamCallee s = new ParamCallee(node, i); + delegate.addNode(s); + list.add(s); } + if (!dOptions.isIgnoreHeap()) { + for (PointerKey p : ref.get(node)) { + Statement h = new HeapStatement.HeapParamCallee(node, p); + delegate.addNode(h); + list.add(h); + } + } + paramCalleeStatements = new Statement[list.size()]; + list.toArray(paramCalleeStatements); } - paramCalleeStatements = new Statement[list.size()]; - list.toArray(paramCalleeStatements); } /** @@ -968,7 +970,9 @@ public class PDG implements NumberedGraph { } public Statement[] getParamCalleeStatements() { - populate(); + if (paramCalleeStatements == null) { + createCalleeParams(); + } return paramCalleeStatements.clone(); }