massive overhaul of Warnings management
git-svn-id: https://wala.svn.sourceforge.net/svnroot/wala/trunk@1390 f5eafffb-2e1d-0410-98e4-8ec43c5233c4
This commit is contained in:
parent
99a97fb477
commit
39da63410a
|
@ -10,8 +10,19 @@
|
|||
*****************************************************************************/
|
||||
package com.ibm.wala.cast.analysis.typeInference;
|
||||
|
||||
import com.ibm.wala.analysis.typeInference.*;
|
||||
import com.ibm.wala.cast.ir.ssa.*;
|
||||
import com.ibm.wala.analysis.typeInference.ConeType;
|
||||
import com.ibm.wala.analysis.typeInference.TypeAbstraction;
|
||||
import com.ibm.wala.analysis.typeInference.TypeInference;
|
||||
import com.ibm.wala.cast.ir.ssa.AstAssertInstruction;
|
||||
import com.ibm.wala.cast.ir.ssa.AstGlobalRead;
|
||||
import com.ibm.wala.cast.ir.ssa.AstGlobalWrite;
|
||||
import com.ibm.wala.cast.ir.ssa.AstInstructionVisitor;
|
||||
import com.ibm.wala.cast.ir.ssa.AstIsDefinedInstruction;
|
||||
import com.ibm.wala.cast.ir.ssa.AstLexicalRead;
|
||||
import com.ibm.wala.cast.ir.ssa.AstLexicalWrite;
|
||||
import com.ibm.wala.cast.ir.ssa.EachElementGetInstruction;
|
||||
import com.ibm.wala.cast.ir.ssa.EachElementHasNextInstruction;
|
||||
import com.ibm.wala.cast.ir.ssa.NonExceptingThrowInstruction;
|
||||
import com.ibm.wala.ipa.cha.IClassHierarchy;
|
||||
import com.ibm.wala.ssa.IR;
|
||||
|
||||
|
|
|
@ -10,7 +10,7 @@
|
|||
*****************************************************************************/
|
||||
package com.ibm.wala.cast.ipa.callgraph;
|
||||
|
||||
import com.ibm.wala.ipa.callgraph.propagation.cfa.*;
|
||||
import com.ibm.wala.ipa.callgraph.propagation.cfa.CFAPointerKeys;
|
||||
|
||||
public class AstCFAPointerKeys extends DelegatingAstPointerKeys {
|
||||
|
||||
|
|
|
@ -22,7 +22,6 @@ import com.ibm.wala.ipa.callgraph.Context;
|
|||
import com.ibm.wala.ipa.callgraph.propagation.cfa.ContextInsensitiveSSAInterpreter;
|
||||
import com.ibm.wala.ssa.IR;
|
||||
import com.ibm.wala.util.collections.EmptyIterator;
|
||||
import com.ibm.wala.util.warnings.WarningSet;
|
||||
|
||||
public class AstContextInsensitiveSSAContextInterpreter
|
||||
extends ContextInsensitiveSSAInterpreter
|
||||
|
@ -37,7 +36,7 @@ public class AstContextInsensitiveSSAContextInterpreter
|
|||
}
|
||||
|
||||
public Iterator<NewSiteReference> iterateNewSites(CGNode N) {
|
||||
IR ir = getIR(N, new WarningSet());
|
||||
IR ir = getIR(N);
|
||||
if (ir == null) {
|
||||
return EmptyIterator.instance();
|
||||
} else {
|
||||
|
@ -46,7 +45,7 @@ public class AstContextInsensitiveSSAContextInterpreter
|
|||
}
|
||||
|
||||
public Iterator<CallSiteReference> iterateCallSites(CGNode N) {
|
||||
IR ir = getIR(N, new WarningSet());
|
||||
IR ir = getIR(N);
|
||||
if (ir == null) {
|
||||
return EmptyIterator.instance();
|
||||
} else {
|
||||
|
|
|
@ -10,7 +10,7 @@
|
|||
*****************************************************************************/
|
||||
package com.ibm.wala.cast.ipa.callgraph;
|
||||
|
||||
import com.ibm.wala.ipa.callgraph.propagation.*;
|
||||
import com.ibm.wala.ipa.callgraph.propagation.AbstractPointerKey;
|
||||
|
||||
public class AstGlobalPointerKey extends AbstractPointerKey {
|
||||
private final String globalName;
|
||||
|
|
|
@ -10,9 +10,11 @@
|
|||
*****************************************************************************/
|
||||
package com.ibm.wala.cast.ipa.callgraph;
|
||||
|
||||
import com.ibm.wala.ipa.callgraph.propagation.*;
|
||||
import java.util.Iterator;
|
||||
|
||||
import java.util.*;
|
||||
import com.ibm.wala.ipa.callgraph.propagation.InstanceKey;
|
||||
import com.ibm.wala.ipa.callgraph.propagation.PointerKey;
|
||||
import com.ibm.wala.ipa.callgraph.propagation.PointerKeyFactory;
|
||||
|
||||
public interface AstPointerKeyFactory extends PointerKeyFactory {
|
||||
|
||||
|
|
|
@ -35,7 +35,8 @@ import com.ibm.wala.cast.ir.ssa.AstLexicalAccess.Access;
|
|||
import com.ibm.wala.cast.ir.translator.AstTranslator;
|
||||
import com.ibm.wala.cast.loader.AstMethod;
|
||||
import com.ibm.wala.cast.loader.AstMethod.LexicalInformation;
|
||||
import com.ibm.wala.classLoader.*;
|
||||
import com.ibm.wala.classLoader.CallSiteReference;
|
||||
import com.ibm.wala.classLoader.IMethod;
|
||||
import com.ibm.wala.fixedpoint.impl.AbstractOperator;
|
||||
import com.ibm.wala.fixedpoint.impl.UnaryOperator;
|
||||
import com.ibm.wala.fixpoint.IVariable;
|
||||
|
@ -45,8 +46,23 @@ import com.ibm.wala.ipa.callgraph.CGNode;
|
|||
import com.ibm.wala.ipa.callgraph.CallGraph;
|
||||
import com.ibm.wala.ipa.callgraph.ReflectionSpecification;
|
||||
import com.ibm.wala.ipa.callgraph.impl.ExplicitCallGraph;
|
||||
import com.ibm.wala.ipa.callgraph.propagation.*;
|
||||
import com.ibm.wala.ipa.callgraph.propagation.cfa.*;
|
||||
import com.ibm.wala.ipa.callgraph.propagation.AbstractFieldPointerKey;
|
||||
import com.ibm.wala.ipa.callgraph.propagation.InstanceKey;
|
||||
import com.ibm.wala.ipa.callgraph.propagation.InstanceKeyFactory;
|
||||
import com.ibm.wala.ipa.callgraph.propagation.LocalPointerKey;
|
||||
import com.ibm.wala.ipa.callgraph.propagation.PointerAnalysis;
|
||||
import com.ibm.wala.ipa.callgraph.propagation.PointerAnalysisImpl;
|
||||
import com.ibm.wala.ipa.callgraph.propagation.PointerFlowGraph;
|
||||
import com.ibm.wala.ipa.callgraph.propagation.PointerFlowGraphFactory;
|
||||
import com.ibm.wala.ipa.callgraph.propagation.PointerKey;
|
||||
import com.ibm.wala.ipa.callgraph.propagation.PointerKeyFactory;
|
||||
import com.ibm.wala.ipa.callgraph.propagation.PointsToMap;
|
||||
import com.ibm.wala.ipa.callgraph.propagation.PointsToSetVariable;
|
||||
import com.ibm.wala.ipa.callgraph.propagation.PropagationCallGraphBuilder;
|
||||
import com.ibm.wala.ipa.callgraph.propagation.SSAContextInterpreter;
|
||||
import com.ibm.wala.ipa.callgraph.propagation.SSAPropagationCallGraphBuilder;
|
||||
import com.ibm.wala.ipa.callgraph.propagation.cfa.DefaultSSAInterpreter;
|
||||
import com.ibm.wala.ipa.callgraph.propagation.cfa.DelegatingSSAContextInterpreter;
|
||||
import com.ibm.wala.ipa.cha.IClassHierarchy;
|
||||
import com.ibm.wala.ssa.DefUse;
|
||||
import com.ibm.wala.ssa.IR;
|
||||
|
@ -58,13 +74,12 @@ import com.ibm.wala.util.collections.EmptyIterator;
|
|||
import com.ibm.wala.util.collections.Pair;
|
||||
import com.ibm.wala.util.debug.Assertions;
|
||||
import com.ibm.wala.util.debug.Trace;
|
||||
import com.ibm.wala.util.graph.*;
|
||||
import com.ibm.wala.util.graph.Graph;
|
||||
import com.ibm.wala.util.graph.traverse.NumberedDFSDiscoverTimeIterator;
|
||||
import com.ibm.wala.util.intset.IntSetAction;
|
||||
import com.ibm.wala.util.intset.IntSetUtil;
|
||||
import com.ibm.wala.util.intset.MutableIntSet;
|
||||
import com.ibm.wala.util.intset.MutableMapping;
|
||||
import com.ibm.wala.util.warnings.WarningSet;
|
||||
|
||||
public abstract class AstSSAPropagationCallGraphBuilder extends SSAPropagationCallGraphBuilder {
|
||||
|
||||
|
@ -86,17 +101,17 @@ public abstract class AstSSAPropagationCallGraphBuilder extends SSAPropagationCa
|
|||
//
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
|
||||
protected AstSSAPropagationCallGraphBuilder(IClassHierarchy cha, WarningSet warnings, AnalysisOptions options,
|
||||
protected AstSSAPropagationCallGraphBuilder(IClassHierarchy cha, AnalysisOptions options,
|
||||
PointerKeyFactory pointerKeyFactory) {
|
||||
super(cha, warnings, options, pointerKeyFactory);
|
||||
super(cha, options, pointerKeyFactory);
|
||||
}
|
||||
|
||||
public SSAContextInterpreter makeDefaultContextInterpreters(SSAContextInterpreter appContextInterpreter, AnalysisOptions options,
|
||||
IClassHierarchy cha, ReflectionSpecification reflect, WarningSet warnings) {
|
||||
SSAContextInterpreter c = new DefaultSSAInterpreter(options, warnings);
|
||||
IClassHierarchy cha, ReflectionSpecification reflect) {
|
||||
SSAContextInterpreter c = new DefaultSSAInterpreter(options);
|
||||
c = new DelegatingSSAContextInterpreter(new AstContextInsensitiveSSAContextInterpreter(options), c);
|
||||
|
||||
c = new DelegatingSSAContextInterpreter(new FactoryBypassInterpreter(options, reflect, warnings), c);
|
||||
c = new DelegatingSSAContextInterpreter(new FactoryBypassInterpreter(options, reflect), c);
|
||||
|
||||
if (appContextInterpreter == null)
|
||||
return c;
|
||||
|
@ -369,7 +384,7 @@ public abstract class AstSSAPropagationCallGraphBuilder extends SSAPropagationCa
|
|||
if (lexicalKey instanceof LocalPointerKey) {
|
||||
CGNode lnode = ((LocalPointerKey) lexicalKey).getNode();
|
||||
int lvn = ((LocalPointerKey) lexicalKey).getValueNumber();
|
||||
IR lir = getBuilder().getCFAContextInterpreter().getIR(lnode, getWarnings());
|
||||
IR lir = getBuilder().getCFAContextInterpreter().getIR(lnode);
|
||||
SymbolTable lsymtab = lir.getSymbolTable();
|
||||
DefUse ldu = getOptions().getSSACache().findOrCreateDU(lir, lnode.getContext());
|
||||
if (contentsAreInvariant(lsymtab, ldu, lvn)) {
|
||||
|
@ -655,7 +670,7 @@ public abstract class AstSSAPropagationCallGraphBuilder extends SSAPropagationCa
|
|||
final Set<CGNode> result = new HashSet<CGNode>();
|
||||
PointerKey F = getBuilder().getPointerKeyForLocal(opNode, 1);
|
||||
|
||||
IR ir = getBuilder().getCFAContextInterpreter().getIR(opNode, getWarnings());
|
||||
IR ir = getBuilder().getCFAContextInterpreter().getIR(opNode);
|
||||
SymbolTable symtab = ir.getSymbolTable();
|
||||
DefUse du = getOptions().getSSACache().findOrCreateDU(ir, opNode.getContext());
|
||||
if (contentsAreInvariant(symtab, du, 1)) {
|
||||
|
@ -705,8 +720,8 @@ public abstract class AstSSAPropagationCallGraphBuilder extends SSAPropagationCa
|
|||
if (name.equals(names[i].fst) && definer.equals(names[i].snd)) {
|
||||
int vn = LI.getExitExposedUses()[i];
|
||||
if (vn > 0) {
|
||||
IR ir = getBuilder().getCFAContextInterpreter().getIR(definingNode, getWarnings());
|
||||
DefUse du = getBuilder().getCFAContextInterpreter().getDU(definingNode, getWarnings());
|
||||
IR ir = getBuilder().getCFAContextInterpreter().getIR(definingNode);
|
||||
DefUse du = getBuilder().getCFAContextInterpreter().getDU(definingNode);
|
||||
SymbolTable st = ir.getSymbolTable();
|
||||
|
||||
PointerKey rhs = getBuilder().getPointerKeyForLocal(definingNode, vn);
|
||||
|
@ -777,7 +792,7 @@ public abstract class AstSSAPropagationCallGraphBuilder extends SSAPropagationCa
|
|||
}
|
||||
|
||||
else if (M instanceof AstMethod) {
|
||||
AstIR ir = (AstIR) getBuilder().getCFAContextInterpreter().getIR(n, getWarnings());
|
||||
AstIR ir = (AstIR) getBuilder().getCFAContextInterpreter().getIR(n);
|
||||
int pc = callSite.getProgramCounter();
|
||||
LexicalInformation L = ((AstMethod) M).lexicalInfo;
|
||||
|
||||
|
@ -838,7 +853,7 @@ public abstract class AstSSAPropagationCallGraphBuilder extends SSAPropagationCa
|
|||
if (L == null)
|
||||
return null;
|
||||
|
||||
AstIR ir = (AstIR) getBuilder().getCFAContextInterpreter().getIR(n, getWarnings());
|
||||
AstIR ir = (AstIR) getBuilder().getCFAContextInterpreter().getIR(n);
|
||||
int pc = callSite.getProgramCounter();
|
||||
AbstractLexicalInvoke I = (AbstractLexicalInvoke) ir.getInstructions()[pc];
|
||||
|
||||
|
@ -908,9 +923,9 @@ public abstract class AstSSAPropagationCallGraphBuilder extends SSAPropagationCa
|
|||
}
|
||||
|
||||
private void newFieldOperation(CGNode opNode, final int objVn, final int fieldsVn, final boolean isLoadOperation, final ReflectedFieldAction action) {
|
||||
IR ir = getBuilder().getCFAContextInterpreter().getIR(opNode, getWarnings());
|
||||
IR ir = getBuilder().getCFAContextInterpreter().getIR(opNode);
|
||||
SymbolTable symtab = ir.getSymbolTable();
|
||||
DefUse du = getBuilder().getCFAContextInterpreter().getDU(opNode, getWarnings());
|
||||
DefUse du = getBuilder().getCFAContextInterpreter().getDU(opNode);
|
||||
PointerKey objKey = getBuilder().getPointerKeyForLocal(opNode, objVn);
|
||||
final PointerKey fieldKey = getBuilder().getPointerKeyForLocal(opNode, fieldsVn);
|
||||
|
||||
|
@ -1139,9 +1154,9 @@ public abstract class AstSSAPropagationCallGraphBuilder extends SSAPropagationCa
|
|||
}
|
||||
|
||||
protected void newFieldWrite(CGNode opNode, int objVn, int fieldsVn, int rhsVn) {
|
||||
IR ir = getBuilder().getCFAContextInterpreter().getIR(opNode, getWarnings());
|
||||
IR ir = getBuilder().getCFAContextInterpreter().getIR(opNode);
|
||||
SymbolTable symtab = ir.getSymbolTable();
|
||||
DefUse du = getBuilder().getCFAContextInterpreter().getDU(opNode, getWarnings());
|
||||
DefUse du = getBuilder().getCFAContextInterpreter().getDU(opNode);
|
||||
PointerKey rhsKey = getBuilder().getPointerKeyForLocal(opNode, rhsVn);
|
||||
if (contentsAreInvariant(symtab, du, rhsVn)) {
|
||||
system.recordImplicitPointsToSet(rhsKey);
|
||||
|
@ -1174,7 +1189,7 @@ public abstract class AstSSAPropagationCallGraphBuilder extends SSAPropagationCa
|
|||
|
||||
} catch (RuntimeException e) {
|
||||
System.err.println("error: " + e);
|
||||
System.err.println(getBuilder().getCFAContextInterpreter().getIR(opNode, getWarnings()));
|
||||
System.err.println(getBuilder().getCFAContextInterpreter().getIR(opNode));
|
||||
throw e;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -34,7 +34,6 @@ import com.ibm.wala.types.TypeReference;
|
|||
import com.ibm.wala.util.Atom;
|
||||
import com.ibm.wala.util.collections.HashMapFactory;
|
||||
import com.ibm.wala.util.collections.HashSetFactory;
|
||||
import com.ibm.wala.util.warnings.WarningSet;
|
||||
|
||||
/**
|
||||
* A CallGraph implementation adapted to work for graphs that contain code
|
||||
|
@ -118,10 +117,10 @@ public class CrossLanguageCallGraph extends AstCallGraph {
|
|||
return root.addCheckcast(type, rv);
|
||||
}
|
||||
|
||||
public SSANewInstruction addAllocation(TypeReference type, WarningSet warnings) {
|
||||
public SSANewInstruction addAllocation(TypeReference type) {
|
||||
Atom language = type.getClassLoader().getLanguage();
|
||||
AbstractRootMethod root = getLanguageRoot(language);
|
||||
return root.addAllocation(type, warnings);
|
||||
return root.addAllocation(type);
|
||||
}
|
||||
|
||||
public SSAInvokeInstruction addInvocation(int[] params, CallSiteReference site) {
|
||||
|
|
|
@ -10,13 +10,15 @@
|
|||
*****************************************************************************/
|
||||
package com.ibm.wala.cast.ipa.callgraph;
|
||||
|
||||
import com.ibm.wala.classLoader.*;
|
||||
import com.ibm.wala.ipa.callgraph.*;
|
||||
import com.ibm.wala.ipa.callgraph.propagation.*;
|
||||
import com.ibm.wala.util.Atom;
|
||||
import com.ibm.wala.util.warnings.*;
|
||||
import java.util.Map;
|
||||
|
||||
import java.util.*;
|
||||
import com.ibm.wala.classLoader.CallSiteReference;
|
||||
import com.ibm.wala.classLoader.IMethod;
|
||||
import com.ibm.wala.ipa.callgraph.CGNode;
|
||||
import com.ibm.wala.ipa.callgraph.Context;
|
||||
import com.ibm.wala.ipa.callgraph.ContextSelector;
|
||||
import com.ibm.wala.ipa.callgraph.propagation.InstanceKey;
|
||||
import com.ibm.wala.util.Atom;
|
||||
|
||||
/**
|
||||
* A ContextSelector implementation adapted to work for analysi across
|
||||
|
@ -66,11 +68,6 @@ public class CrossLanguageContextSelector implements ContextSelector {
|
|||
return getSelector(site).mayUnderstand(caller, site, targetMethod, instance);
|
||||
}
|
||||
|
||||
public void setWarnings(WarningSet newWarnings) {
|
||||
for(Iterator ss = languageSelectors.values().iterator(); ss.hasNext(); ) {
|
||||
((ContextSelector)ss.next()).setWarnings(newWarnings);
|
||||
}
|
||||
}
|
||||
|
||||
public boolean allSitesDispatchIdentically(CGNode node, CallSiteReference site) {
|
||||
return getSelector(site).allSitesDispatchIdentically(node, site);
|
||||
|
|
|
@ -10,12 +10,15 @@
|
|||
*****************************************************************************/
|
||||
package com.ibm.wala.cast.ipa.callgraph;
|
||||
|
||||
import com.ibm.wala.classLoader.*;
|
||||
import com.ibm.wala.ipa.callgraph.*;
|
||||
import com.ibm.wala.types.*;
|
||||
import com.ibm.wala.util.Atom;
|
||||
import java.util.Map;
|
||||
|
||||
import java.util.*;
|
||||
import com.ibm.wala.classLoader.CallSiteReference;
|
||||
import com.ibm.wala.classLoader.IClass;
|
||||
import com.ibm.wala.classLoader.IMethod;
|
||||
import com.ibm.wala.ipa.callgraph.CGNode;
|
||||
import com.ibm.wala.ipa.callgraph.MethodTargetSelector;
|
||||
import com.ibm.wala.types.MethodReference;
|
||||
import com.ibm.wala.util.Atom;
|
||||
|
||||
/**
|
||||
* A MethodTargetSelector implementation that supports multiple languages.
|
||||
|
|
|
@ -26,61 +26,43 @@ import com.ibm.wala.ssa.SSACFG.BasicBlock;
|
|||
import com.ibm.wala.util.Atom;
|
||||
import com.ibm.wala.util.graph.Graph;
|
||||
import com.ibm.wala.util.intset.MutableMapping;
|
||||
import com.ibm.wala.util.warnings.WarningSet;
|
||||
|
||||
public abstract class CrossLanguageSSAPropagationCallGraphBuilder
|
||||
extends AstSSAPropagationCallGraphBuilder
|
||||
{
|
||||
public abstract class CrossLanguageSSAPropagationCallGraphBuilder extends AstSSAPropagationCallGraphBuilder {
|
||||
|
||||
public interface PointerVisitorFactory {
|
||||
PointerFlowGraph.InstructionVisitor make (PointerAnalysis pa,
|
||||
CallGraph cg,
|
||||
Graph<PointerKey> delegate,
|
||||
CGNode node,
|
||||
IR ir,
|
||||
BasicBlock bb);
|
||||
PointerFlowGraph.InstructionVisitor make(PointerAnalysis pa, CallGraph cg, Graph<PointerKey> delegate, CGNode node, IR ir,
|
||||
BasicBlock bb);
|
||||
}
|
||||
|
||||
private final TargetLanguageSelector<ConstraintVisitor, ExplicitCallGraph.ExplicitNode>
|
||||
visitors;
|
||||
private final TargetLanguageSelector<ConstraintVisitor, ExplicitCallGraph.ExplicitNode> visitors;
|
||||
|
||||
private final TargetLanguageSelector<InterestingVisitor, Integer>
|
||||
interesting;
|
||||
private final TargetLanguageSelector<InterestingVisitor, Integer> interesting;
|
||||
|
||||
protected abstract TargetLanguageSelector<ConstraintVisitor, ExplicitCallGraph.ExplicitNode>
|
||||
makeMainVisitorSelector();
|
||||
protected abstract TargetLanguageSelector<ConstraintVisitor, ExplicitCallGraph.ExplicitNode> makeMainVisitorSelector();
|
||||
|
||||
protected abstract TargetLanguageSelector<InterestingVisitor, Integer>
|
||||
makeInterestingVisitorSelector();
|
||||
protected abstract TargetLanguageSelector<InterestingVisitor, Integer> makeInterestingVisitorSelector();
|
||||
|
||||
protected abstract TargetLanguageSelector<PointerVisitorFactory, CGNode>
|
||||
makePointerVisitorSelector(CrossLanguagePointerFlowGraph analysis);
|
||||
protected abstract TargetLanguageSelector<PointerVisitorFactory, CGNode> makePointerVisitorSelector(
|
||||
CrossLanguagePointerFlowGraph analysis);
|
||||
|
||||
protected abstract TargetLanguageSelector<AstImplicitPointsToSetVisitor, LocalPointerKey>
|
||||
makeImplicitVisitorSelector(CrossLanguagePointerAnalysisImpl analysis);
|
||||
protected abstract TargetLanguageSelector<AstImplicitPointsToSetVisitor, LocalPointerKey> makeImplicitVisitorSelector(
|
||||
CrossLanguagePointerAnalysisImpl analysis);
|
||||
|
||||
protected abstract TargetLanguageSelector<AbstractRootMethod, CrossLanguageCallGraph>
|
||||
makeRootNodeSelector();
|
||||
protected abstract TargetLanguageSelector<AbstractRootMethod, CrossLanguageCallGraph> makeRootNodeSelector();
|
||||
|
||||
protected CrossLanguageSSAPropagationCallGraphBuilder(
|
||||
IClassHierarchy cha,
|
||||
WarningSet warnings,
|
||||
AnalysisOptions options,
|
||||
PointerKeyFactory pointerKeyFactory)
|
||||
{
|
||||
super(cha, warnings, options, pointerKeyFactory);
|
||||
protected CrossLanguageSSAPropagationCallGraphBuilder(IClassHierarchy cha, AnalysisOptions options,
|
||||
PointerKeyFactory pointerKeyFactory) {
|
||||
super(cha, options, pointerKeyFactory);
|
||||
visitors = makeMainVisitorSelector();
|
||||
interesting = makeInterestingVisitorSelector();
|
||||
}
|
||||
|
||||
protected ExplicitCallGraph createEmptyCallGraph(IClassHierarchy cha, AnalysisOptions options) {
|
||||
return new CrossLanguageCallGraph(makeRootNodeSelector(),
|
||||
cha,
|
||||
options);
|
||||
return new CrossLanguageCallGraph(makeRootNodeSelector(), cha, options);
|
||||
}
|
||||
|
||||
protected static Atom getLanguage(CGNode node) {
|
||||
return node.getMethod().getReference().getDeclaringClass().getClassLoader().getLanguage();
|
||||
return node.getMethod().getReference().getDeclaringClass().getClassLoader().getLanguage();
|
||||
}
|
||||
|
||||
protected InterestingVisitor makeInterestingVisitor(CGNode node, int vn) {
|
||||
|
@ -91,17 +73,10 @@ public abstract class CrossLanguageSSAPropagationCallGraphBuilder
|
|||
return visitors.get(getLanguage(node), node);
|
||||
}
|
||||
|
||||
protected static class CrossLanguagePointerFlowGraph
|
||||
extends AstPointerFlowGraph
|
||||
{
|
||||
private final TargetLanguageSelector<PointerVisitorFactory, CGNode>
|
||||
pointerVisitors;
|
||||
protected static class CrossLanguagePointerFlowGraph extends AstPointerFlowGraph {
|
||||
private final TargetLanguageSelector<PointerVisitorFactory, CGNode> pointerVisitors;
|
||||
|
||||
protected CrossLanguagePointerFlowGraph(
|
||||
CrossLanguageSSAPropagationCallGraphBuilder builder,
|
||||
PointerAnalysis pa,
|
||||
CallGraph cg)
|
||||
{
|
||||
protected CrossLanguagePointerFlowGraph(CrossLanguageSSAPropagationCallGraphBuilder builder, PointerAnalysis pa, CallGraph cg) {
|
||||
super(pa, cg);
|
||||
this.pointerVisitors = builder.makePointerVisitorSelector(this);
|
||||
}
|
||||
|
@ -114,55 +89,28 @@ public abstract class CrossLanguageSSAPropagationCallGraphBuilder
|
|||
public PointerFlowGraphFactory getPointerFlowGraphFactory() {
|
||||
return new PointerFlowGraphFactory() {
|
||||
public PointerFlowGraph make(PointerAnalysis pa, CallGraph cg) {
|
||||
return new CrossLanguagePointerFlowGraph(
|
||||
CrossLanguageSSAPropagationCallGraphBuilder.this,
|
||||
pa,
|
||||
cg);
|
||||
return new CrossLanguagePointerFlowGraph(CrossLanguageSSAPropagationCallGraphBuilder.this, pa, cg);
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
protected PropagationSystem makeSystem(AnalysisOptions options) {
|
||||
return new PropagationSystem(callGraph,
|
||||
pointerKeyFactory,
|
||||
instanceKeyFactory,
|
||||
options.getSupportRefinement(),
|
||||
getWarnings()) {
|
||||
public PointerAnalysis
|
||||
makePointerAnalysis(PropagationCallGraphBuilder builder)
|
||||
{
|
||||
assert builder == CrossLanguageSSAPropagationCallGraphBuilder.this;
|
||||
return new CrossLanguagePointerAnalysisImpl(
|
||||
CrossLanguageSSAPropagationCallGraphBuilder.this,
|
||||
cg,
|
||||
pointsToMap,
|
||||
instanceKeys,
|
||||
pointerKeyFactory,
|
||||
instanceKeyFactory);
|
||||
return new PropagationSystem(callGraph, pointerKeyFactory, instanceKeyFactory, options.getSupportRefinement()) {
|
||||
public PointerAnalysis makePointerAnalysis(PropagationCallGraphBuilder builder) {
|
||||
assert builder == CrossLanguageSSAPropagationCallGraphBuilder.this;
|
||||
return new CrossLanguagePointerAnalysisImpl(CrossLanguageSSAPropagationCallGraphBuilder.this, cg, pointsToMap,
|
||||
instanceKeys, pointerKeyFactory, instanceKeyFactory);
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
protected static class CrossLanguagePointerAnalysisImpl
|
||||
extends AstPointerAnalysisImpl
|
||||
{
|
||||
private final TargetLanguageSelector<AstImplicitPointsToSetVisitor, LocalPointerKey>
|
||||
implicitVisitors;
|
||||
protected static class CrossLanguagePointerAnalysisImpl extends AstPointerAnalysisImpl {
|
||||
private final TargetLanguageSelector<AstImplicitPointsToSetVisitor, LocalPointerKey> implicitVisitors;
|
||||
|
||||
protected CrossLanguagePointerAnalysisImpl(
|
||||
CrossLanguageSSAPropagationCallGraphBuilder builder,
|
||||
CallGraph cg,
|
||||
PointsToMap pointsToMap,
|
||||
MutableMapping<InstanceKey> instanceKeys,
|
||||
PointerKeyFactory pointerKeys,
|
||||
InstanceKeyFactory iKeyFactory)
|
||||
{
|
||||
super(builder,
|
||||
cg,
|
||||
pointsToMap,
|
||||
instanceKeys,
|
||||
pointerKeys,
|
||||
iKeyFactory);
|
||||
protected CrossLanguagePointerAnalysisImpl(CrossLanguageSSAPropagationCallGraphBuilder builder, CallGraph cg,
|
||||
PointsToMap pointsToMap, MutableMapping<InstanceKey> instanceKeys, PointerKeyFactory pointerKeys,
|
||||
InstanceKeyFactory iKeyFactory) {
|
||||
super(builder, cg, pointsToMap, instanceKeys, pointerKeys, iKeyFactory);
|
||||
this.implicitVisitors = builder.makeImplicitVisitorSelector(this);
|
||||
}
|
||||
|
||||
|
@ -172,13 +120,9 @@ public abstract class CrossLanguageSSAPropagationCallGraphBuilder
|
|||
}
|
||||
|
||||
protected void customInit() {
|
||||
for(Iterator roots =
|
||||
((CrossLanguageCallGraph)callGraph).getLanguageRoots();
|
||||
roots.hasNext(); )
|
||||
{
|
||||
markDiscovered( (CGNode) roots.next() );
|
||||
for (Iterator roots = ((CrossLanguageCallGraph) callGraph).getLanguageRoots(); roots.hasNext();) {
|
||||
markDiscovered((CGNode) roots.next());
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
|
|
@ -10,13 +10,24 @@
|
|||
*****************************************************************************/
|
||||
package com.ibm.wala.cast.ipa.callgraph;
|
||||
|
||||
import com.ibm.wala.classLoader.*;
|
||||
import com.ibm.wala.ipa.callgraph.*;
|
||||
import com.ibm.wala.ipa.callgraph.propagation.*;
|
||||
import com.ibm.wala.util.*;
|
||||
import com.ibm.wala.util.collections.*;
|
||||
import java.util.HashMap;
|
||||
import java.util.HashSet;
|
||||
import java.util.Iterator;
|
||||
import java.util.LinkedList;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
|
||||
import java.util.*;
|
||||
import com.ibm.wala.classLoader.IField;
|
||||
import com.ibm.wala.ipa.callgraph.CGNode;
|
||||
import com.ibm.wala.ipa.callgraph.propagation.ConcreteTypeKey;
|
||||
import com.ibm.wala.ipa.callgraph.propagation.ConstantKey;
|
||||
import com.ibm.wala.ipa.callgraph.propagation.FilteredPointerKey;
|
||||
import com.ibm.wala.ipa.callgraph.propagation.InstanceKey;
|
||||
import com.ibm.wala.ipa.callgraph.propagation.PointerKey;
|
||||
import com.ibm.wala.ipa.callgraph.propagation.PointerKeyFactory;
|
||||
import com.ibm.wala.util.Atom;
|
||||
import com.ibm.wala.util.collections.NonNullSingletonIterator;
|
||||
|
||||
public class DelegatingAstPointerKeys implements AstPointerKeyFactory {
|
||||
private final PointerKeyFactory base;
|
||||
|
|
|
@ -22,103 +22,82 @@ import com.ibm.wala.ipa.callgraph.Context;
|
|||
import com.ibm.wala.ipa.callgraph.ContextSelector;
|
||||
import com.ibm.wala.ipa.callgraph.propagation.InstanceKey;
|
||||
import com.ibm.wala.ipa.cha.IClassHierarchy;
|
||||
import com.ibm.wala.types.*;
|
||||
import com.ibm.wala.types.ClassLoaderReference;
|
||||
import com.ibm.wala.types.Descriptor;
|
||||
import com.ibm.wala.types.MethodReference;
|
||||
import com.ibm.wala.types.TypeName;
|
||||
import com.ibm.wala.types.TypeReference;
|
||||
import com.ibm.wala.util.Atom;
|
||||
import com.ibm.wala.util.debug.*;
|
||||
import com.ibm.wala.util.warnings.WarningSet;
|
||||
import com.ibm.wala.util.debug.Assertions;
|
||||
import com.ibm.wala.util.debug.Trace;
|
||||
|
||||
public class MiscellaneousHacksContextSelector implements ContextSelector
|
||||
{
|
||||
public class MiscellaneousHacksContextSelector implements ContextSelector {
|
||||
|
||||
private final Set<MethodReference> methodsToSpecialize;
|
||||
|
||||
private final ContextSelector specialPolicy;
|
||||
|
||||
private final ContextSelector basePolicy;
|
||||
|
||||
public MiscellaneousHacksContextSelector(ContextSelector special,
|
||||
ContextSelector base,
|
||||
IClassHierarchy cha,
|
||||
String[][] descriptors)
|
||||
{
|
||||
public MiscellaneousHacksContextSelector(ContextSelector special, ContextSelector base, IClassHierarchy cha,
|
||||
String[][] descriptors) {
|
||||
basePolicy = base;
|
||||
specialPolicy = special;
|
||||
methodsToSpecialize = new HashSet<MethodReference>();
|
||||
for(int i = 0; i < descriptors.length; i++) {
|
||||
for (int i = 0; i < descriptors.length; i++) {
|
||||
String[] descr = descriptors[i];
|
||||
switch (descr.length) {
|
||||
|
||||
// loader name, loader language, classname, method name, method descr
|
||||
case 5: {
|
||||
MethodReference ref =
|
||||
MethodReference.findOrCreate(
|
||||
TypeReference.findOrCreate(
|
||||
new ClassLoaderReference(
|
||||
Atom.findOrCreateUnicodeAtom( descr[0] ),
|
||||
Atom.findOrCreateUnicodeAtom( descr[1] )),
|
||||
TypeName.string2TypeName( descr[2] ) ),
|
||||
Atom.findOrCreateUnicodeAtom( descr[3] ),
|
||||
Descriptor.findOrCreateUTF8( descr[4] ));
|
||||
MethodReference ref = MethodReference.findOrCreate(TypeReference.findOrCreate(new ClassLoaderReference(Atom
|
||||
.findOrCreateUnicodeAtom(descr[0]), Atom.findOrCreateUnicodeAtom(descr[1])), TypeName.string2TypeName(descr[2])), Atom
|
||||
.findOrCreateUnicodeAtom(descr[3]), Descriptor.findOrCreateUTF8(descr[4]));
|
||||
|
||||
if (cha.resolveMethod( ref ) != null) {
|
||||
methodsToSpecialize.add( cha.resolveMethod( ref ).getReference() );
|
||||
} else {
|
||||
methodsToSpecialize.add( ref );
|
||||
}
|
||||
break;
|
||||
if (cha.resolveMethod(ref) != null) {
|
||||
methodsToSpecialize.add(cha.resolveMethod(ref).getReference());
|
||||
} else {
|
||||
methodsToSpecialize.add(ref);
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
// classname, method name, method descr
|
||||
// classname, method name, method descr
|
||||
case 3: {
|
||||
MethodReference ref =
|
||||
MethodReference.findOrCreate(
|
||||
TypeReference.findOrCreate(
|
||||
new ClassLoaderReference(
|
||||
Atom.findOrCreateUnicodeAtom("Application"),
|
||||
ClassLoaderReference.Java),
|
||||
TypeName.string2TypeName( descr[0] ) ),
|
||||
Atom.findOrCreateUnicodeAtom( descr[1] ),
|
||||
Descriptor.findOrCreateUTF8( descr[2] ));
|
||||
MethodReference ref = MethodReference.findOrCreate(TypeReference.findOrCreate(new ClassLoaderReference(Atom
|
||||
.findOrCreateUnicodeAtom("Application"), ClassLoaderReference.Java), TypeName.string2TypeName(descr[0])), Atom
|
||||
.findOrCreateUnicodeAtom(descr[1]), Descriptor.findOrCreateUTF8(descr[2]));
|
||||
|
||||
methodsToSpecialize.add( cha.resolveMethod( ref ).getReference() );
|
||||
break;
|
||||
methodsToSpecialize.add(cha.resolveMethod(ref).getReference());
|
||||
break;
|
||||
}
|
||||
|
||||
// loader name, classname, meaning all methods of that class
|
||||
// loader name, classname, meaning all methods of that class
|
||||
case 2: {
|
||||
IClass klass =
|
||||
cha.lookupClass(
|
||||
TypeReference.findOrCreate(
|
||||
new ClassLoaderReference(
|
||||
Atom.findOrCreateUnicodeAtom( descr[0] ),
|
||||
ClassLoaderReference.Java),
|
||||
TypeName.string2TypeName( descr[1] ) ) );
|
||||
IClass klass = cha.lookupClass(TypeReference.findOrCreate(new ClassLoaderReference(Atom.findOrCreateUnicodeAtom(descr[0]),
|
||||
ClassLoaderReference.Java), TypeName.string2TypeName(descr[1])));
|
||||
|
||||
for(Iterator M = klass.getDeclaredMethods().iterator(); M.hasNext(); ) {
|
||||
methodsToSpecialize.add( ((IMethod)M.next()).getReference() );
|
||||
}
|
||||
for (Iterator M = klass.getDeclaredMethods().iterator(); M.hasNext();) {
|
||||
methodsToSpecialize.add(((IMethod) M.next()).getReference());
|
||||
}
|
||||
|
||||
break;
|
||||
break;
|
||||
}
|
||||
|
||||
// classname, meaning all methods of that class
|
||||
// classname, meaning all methods of that class
|
||||
case 1: {
|
||||
IClass klass =
|
||||
cha.lookupClass(
|
||||
TypeReference.findOrCreate(
|
||||
new ClassLoaderReference(
|
||||
Atom.findOrCreateUnicodeAtom("Application"),
|
||||
ClassLoaderReference.Java),
|
||||
TypeName.string2TypeName( descr[0] ) ) );
|
||||
IClass klass = cha.lookupClass(TypeReference.findOrCreate(new ClassLoaderReference(Atom
|
||||
.findOrCreateUnicodeAtom("Application"), ClassLoaderReference.Java), TypeName.string2TypeName(descr[0])));
|
||||
|
||||
for(Iterator M = klass.getDeclaredMethods().iterator(); M.hasNext(); ) {
|
||||
methodsToSpecialize.add( ((IMethod)M.next()).getReference() );
|
||||
}
|
||||
for (Iterator M = klass.getDeclaredMethods().iterator(); M.hasNext();) {
|
||||
methodsToSpecialize.add(((IMethod) M.next()).getReference());
|
||||
}
|
||||
|
||||
break;
|
||||
break;
|
||||
}
|
||||
|
||||
default:
|
||||
Assertions.UNREACHABLE();
|
||||
Assertions.UNREACHABLE();
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -126,21 +105,15 @@ public class MiscellaneousHacksContextSelector implements ContextSelector
|
|||
}
|
||||
|
||||
public Context getCalleeTarget(CGNode caller, CallSiteReference site, IMethod callee, InstanceKey receiver) {
|
||||
if (methodsToSpecialize.contains( site.getDeclaredTarget() )
|
||||
||
|
||||
methodsToSpecialize.contains( callee.getReference() ) )
|
||||
{
|
||||
if (methodsToSpecialize.contains(site.getDeclaredTarget()) || methodsToSpecialize.contains(callee.getReference())) {
|
||||
return specialPolicy.getCalleeTarget(caller, site, callee, receiver);
|
||||
} else {
|
||||
return basePolicy.getCalleeTarget(caller, site, callee, receiver);
|
||||
}
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see com.ibm.wala.ipa.callgraph.ContextSelector#contextIsIrrelevant(com.ibm.wala.ipa.callgraph.CGNode, com.ibm.wala.classLoader.CallSiteReference)
|
||||
*/
|
||||
public boolean contextIsIrrelevant(CGNode node, CallSiteReference site) {
|
||||
return basePolicy.contextIsIrrelevant(node,site);
|
||||
return basePolicy.contextIsIrrelevant(node, site);
|
||||
}
|
||||
|
||||
public int getBoundOnNumberOfTargets(CGNode caller, CallSiteReference reference, IMethod targetMethod) {
|
||||
|
@ -151,10 +124,6 @@ public class MiscellaneousHacksContextSelector implements ContextSelector
|
|||
return true;
|
||||
}
|
||||
|
||||
public void setWarnings(WarningSet newWarnings) {
|
||||
// no-op, not bound to warnings
|
||||
}
|
||||
|
||||
public boolean allSitesDispatchIdentically(CGNode node, CallSiteReference site) {
|
||||
return false;
|
||||
}
|
||||
|
|
|
@ -19,12 +19,11 @@ import com.ibm.wala.classLoader.CallSiteReference;
|
|||
import com.ibm.wala.classLoader.IClass;
|
||||
import com.ibm.wala.classLoader.IMethod;
|
||||
import com.ibm.wala.ipa.callgraph.Entrypoint;
|
||||
import com.ibm.wala.ipa.callgraph.impl.*;
|
||||
import com.ibm.wala.ipa.callgraph.impl.AbstractRootMethod;
|
||||
import com.ibm.wala.ipa.cha.IClassHierarchy;
|
||||
import com.ibm.wala.ssa.SSAAbstractInvokeInstruction;
|
||||
import com.ibm.wala.types.TypeReference;
|
||||
import com.ibm.wala.util.debug.Assertions;
|
||||
import com.ibm.wala.util.warnings.WarningSet;
|
||||
|
||||
public abstract class ScriptEntryPoints implements Iterable<Entrypoint> {
|
||||
|
||||
|
@ -46,17 +45,17 @@ public abstract class ScriptEntryPoints implements Iterable<Entrypoint> {
|
|||
return 1;
|
||||
}
|
||||
|
||||
public SSAAbstractInvokeInstruction addCall(AbstractRootMethod m, WarningSet warnings) {
|
||||
public SSAAbstractInvokeInstruction addCall(AbstractRootMethod m){
|
||||
CallSiteReference site = makeSite(0);
|
||||
|
||||
if (site == null) {
|
||||
return null;
|
||||
}
|
||||
|
||||
int functionVn = makeArgument(m, 0, warnings);
|
||||
int functionVn = makeArgument(m, 0);
|
||||
int paramVns[] = new int[getNumberOfParameters() - 1];
|
||||
for (int j = 0; j < paramVns.length; j++) {
|
||||
paramVns[j] = makeArgument(m, j + 1, warnings);
|
||||
paramVns[j] = makeArgument(m, j + 1);
|
||||
}
|
||||
|
||||
return ((ScriptFakeRoot) m).addDirectCall(functionVn, paramVns, site);
|
||||
|
|
|
@ -10,11 +10,17 @@
|
|||
*****************************************************************************/
|
||||
package com.ibm.wala.cast.ipa.callgraph;
|
||||
|
||||
import com.ibm.wala.cast.types.*;
|
||||
import com.ibm.wala.classLoader.*;
|
||||
import com.ibm.wala.ipa.callgraph.*;
|
||||
import com.ibm.wala.cast.types.AstMethodReference;
|
||||
import com.ibm.wala.cast.types.AstTypeReference;
|
||||
import com.ibm.wala.classLoader.CallSiteReference;
|
||||
import com.ibm.wala.classLoader.IClass;
|
||||
import com.ibm.wala.classLoader.IMethod;
|
||||
import com.ibm.wala.ipa.callgraph.CGNode;
|
||||
import com.ibm.wala.ipa.callgraph.MethodTargetSelector;
|
||||
import com.ibm.wala.ipa.cha.IClassHierarchy;
|
||||
import com.ibm.wala.types.*;
|
||||
import com.ibm.wala.types.ClassLoaderReference;
|
||||
import com.ibm.wala.types.MethodReference;
|
||||
import com.ibm.wala.types.TypeReference;
|
||||
|
||||
public class StandardFunctionTargetSelector implements MethodTargetSelector {
|
||||
private final IClassHierarchy cha;
|
||||
|
|
|
@ -10,17 +10,21 @@
|
|||
*****************************************************************************/
|
||||
package com.ibm.wala.cast.ipa.callgraph;
|
||||
|
||||
import com.ibm.wala.classLoader.*;
|
||||
import com.ibm.wala.ipa.callgraph.*;
|
||||
import com.ibm.wala.ipa.callgraph.propagation.*;
|
||||
import com.ibm.wala.ssa.*;
|
||||
import java.io.File;
|
||||
import java.net.MalformedURLException;
|
||||
import java.net.URL;
|
||||
import java.util.Iterator;
|
||||
|
||||
import com.ibm.wala.classLoader.SourceFileModule;
|
||||
import com.ibm.wala.ipa.callgraph.CGNode;
|
||||
import com.ibm.wala.ipa.callgraph.CallGraph;
|
||||
import com.ibm.wala.ipa.callgraph.propagation.PointerAnalysis;
|
||||
import com.ibm.wala.ipa.callgraph.propagation.PointerKey;
|
||||
import com.ibm.wala.ipa.callgraph.propagation.PropagationCallGraphBuilder;
|
||||
import com.ibm.wala.ssa.IR;
|
||||
import com.ibm.wala.util.debug.Assertions;
|
||||
import com.ibm.wala.util.debug.Trace;
|
||||
|
||||
import java.io.*;
|
||||
import java.net.*;
|
||||
import java.util.*;
|
||||
|
||||
public class Util {
|
||||
|
||||
public static SourceFileModule makeSourceModule(URL script, String dir, String name) {
|
||||
|
@ -47,7 +51,7 @@ public class Util {
|
|||
for (Iterator x = CG.iterator(); x.hasNext();) {
|
||||
CGNode N = (CGNode) x.next();
|
||||
Trace.println("\nIR of node " + N);
|
||||
IR ir = N.getIR(builder.getWarnings());
|
||||
IR ir = N.getIR();
|
||||
if (ir != null) {
|
||||
Trace.println(ir);
|
||||
} else {
|
||||
|
@ -59,27 +63,25 @@ public class Util {
|
|||
for (Iterator x = PA.getPointerKeys().iterator(); x.hasNext();) {
|
||||
PointerKey n = (PointerKey) x.next();
|
||||
try {
|
||||
Trace.println(n + " --> " + PA.getPointsToSet(n));
|
||||
Trace.println(n + " --> " + PA.getPointsToSet(n));
|
||||
} catch (Throwable e) {
|
||||
Trace.println("error computing set for " + n);
|
||||
Trace.println("error computing set for " + n);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static SourceFileModule[] handleFileNames(String[] fileNameArgs) {
|
||||
SourceFileModule[] fileNames = new SourceFileModule[ fileNameArgs.length ];
|
||||
for(int i = 0; i < fileNameArgs.length; i++) {
|
||||
SourceFileModule[] fileNames = new SourceFileModule[fileNameArgs.length];
|
||||
for (int i = 0; i < fileNameArgs.length; i++) {
|
||||
if (new File(fileNameArgs[i]).exists()) {
|
||||
try {
|
||||
fileNames[i] =
|
||||
Util.makeSourceModule(
|
||||
new URL("file:"+fileNameArgs[i]), fileNameArgs[i]);
|
||||
} catch (MalformedURLException e) {
|
||||
Assertions.UNREACHABLE( e.toString() );
|
||||
}
|
||||
try {
|
||||
fileNames[i] = Util.makeSourceModule(new URL("file:" + fileNameArgs[i]), fileNameArgs[i]);
|
||||
} catch (MalformedURLException e) {
|
||||
Assertions.UNREACHABLE(e.toString());
|
||||
}
|
||||
} else {
|
||||
URL url = Util.class.getClassLoader().getResource(fileNameArgs[i]);
|
||||
fileNames[i] = Util.makeSourceModule(url, fileNameArgs[i]);
|
||||
URL url = Util.class.getClassLoader().getResource(fileNameArgs[i]);
|
||||
fileNames[i] = Util.makeSourceModule(url, fileNameArgs[i]);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -35,7 +35,6 @@ import com.ibm.wala.util.collections.ComposedIterator;
|
|||
import com.ibm.wala.util.collections.HashMapFactory;
|
||||
import com.ibm.wala.util.collections.HashSetFactory;
|
||||
import com.ibm.wala.util.debug.Assertions;
|
||||
import com.ibm.wala.util.warnings.WarningSet;
|
||||
|
||||
/**
|
||||
* This class hierarchy represents a family of disjoint class hierarchies, one
|
||||
|
@ -223,7 +222,7 @@ public class CrossLanguageClassHierarchy implements IClassHierarchy {
|
|||
this.hierarchies = hierarchies;
|
||||
}
|
||||
|
||||
public static CrossLanguageClassHierarchy make(AnalysisScope scope, ClassLoaderFactory factory, WarningSet warnings,
|
||||
public static CrossLanguageClassHierarchy make(AnalysisScope scope, ClassLoaderFactory factory,
|
||||
Map languageMap) throws ClassHierarchyException {
|
||||
Set<Atom> languages = HashSetFactory.make();
|
||||
for (Iterator ldrs = scope.getLoaders().iterator(); ldrs.hasNext();) {
|
||||
|
@ -235,7 +234,7 @@ public class CrossLanguageClassHierarchy implements IClassHierarchy {
|
|||
Atom l = (Atom) ls.next();
|
||||
Language L = (Language) languageMap.get(l);
|
||||
assert L != null : l.toString();
|
||||
hierarchies.put(l, ClassHierarchy.make(scope, factory, warnings, L));
|
||||
hierarchies.put(l, ClassHierarchy.make(scope, factory, L));
|
||||
}
|
||||
|
||||
return new CrossLanguageClassHierarchy(scope, factory, hierarchies);
|
||||
|
|
|
@ -10,11 +10,20 @@
|
|||
*****************************************************************************/
|
||||
package com.ibm.wala.cast.ir.cfg;
|
||||
|
||||
import com.ibm.wala.cast.ir.ssa.*;
|
||||
import com.ibm.wala.cfg.*;
|
||||
import com.ibm.wala.classLoader.*;
|
||||
import com.ibm.wala.ipa.callgraph.*;
|
||||
import com.ibm.wala.ssa.*;
|
||||
import com.ibm.wala.cast.ir.ssa.AstAssertInstruction;
|
||||
import com.ibm.wala.cast.ir.ssa.AstGlobalRead;
|
||||
import com.ibm.wala.cast.ir.ssa.AstGlobalWrite;
|
||||
import com.ibm.wala.cast.ir.ssa.AstInstructionVisitor;
|
||||
import com.ibm.wala.cast.ir.ssa.AstIsDefinedInstruction;
|
||||
import com.ibm.wala.cast.ir.ssa.AstLexicalRead;
|
||||
import com.ibm.wala.cast.ir.ssa.AstLexicalWrite;
|
||||
import com.ibm.wala.cast.ir.ssa.EachElementGetInstruction;
|
||||
import com.ibm.wala.cast.ir.ssa.EachElementHasNextInstruction;
|
||||
import com.ibm.wala.cast.ir.ssa.NonExceptingThrowInstruction;
|
||||
import com.ibm.wala.cfg.InducedCFG;
|
||||
import com.ibm.wala.classLoader.IMethod;
|
||||
import com.ibm.wala.ipa.callgraph.Context;
|
||||
import com.ibm.wala.ssa.SSAInstruction;
|
||||
|
||||
public class AstInducedCFG extends InducedCFG {
|
||||
|
||||
|
|
|
@ -10,14 +10,17 @@
|
|||
*****************************************************************************/
|
||||
package com.ibm.wala.cast.ir.cfg;
|
||||
|
||||
import com.ibm.wala.cfg.*;
|
||||
import java.util.Collection;
|
||||
|
||||
import com.ibm.wala.cfg.ControlFlowGraph;
|
||||
import com.ibm.wala.cfg.IBasicBlock;
|
||||
import com.ibm.wala.classLoader.IMethod;
|
||||
import com.ibm.wala.shrikeBT.IInstruction;
|
||||
import com.ibm.wala.util.graph.*;
|
||||
import com.ibm.wala.util.graph.AbstractNumberedGraph;
|
||||
import com.ibm.wala.util.graph.EdgeManager;
|
||||
import com.ibm.wala.util.graph.NodeManager;
|
||||
import com.ibm.wala.util.intset.BitVector;
|
||||
|
||||
import java.util.*;
|
||||
|
||||
public class DelegatingCFG extends AbstractNumberedGraph<IBasicBlock> implements ControlFlowGraph {
|
||||
|
||||
protected final ControlFlowGraph parent;
|
||||
|
|
|
@ -10,10 +10,11 @@
|
|||
*****************************************************************************/
|
||||
package com.ibm.wala.cast.ir.cfg;
|
||||
|
||||
import com.ibm.wala.cfg.*;
|
||||
import com.ibm.wala.util.debug.Assertions;
|
||||
import java.util.Iterator;
|
||||
|
||||
import java.util.*;
|
||||
import com.ibm.wala.cfg.ControlFlowGraph;
|
||||
import com.ibm.wala.cfg.IBasicBlock;
|
||||
import com.ibm.wala.util.debug.Assertions;
|
||||
|
||||
public class Util {
|
||||
|
||||
|
|
|
@ -13,7 +13,9 @@ package com.ibm.wala.cast.ir.ssa;
|
|||
|
||||
import com.ibm.wala.cast.ir.ssa.AstLexicalAccess.Access;
|
||||
import com.ibm.wala.classLoader.CallSiteReference;
|
||||
import com.ibm.wala.ssa.*;
|
||||
import com.ibm.wala.ssa.SSAAbstractInvokeInstruction;
|
||||
import com.ibm.wala.ssa.SymbolTable;
|
||||
import com.ibm.wala.ssa.ValueDecorator;
|
||||
import com.ibm.wala.util.debug.Assertions;
|
||||
|
||||
/**
|
||||
|
|
|
@ -30,7 +30,6 @@ import com.ibm.wala.ssa.SymbolTable;
|
|||
import com.ibm.wala.ssa.SSACFG.ExceptionHandlerBasicBlock;
|
||||
import com.ibm.wala.types.TypeReference;
|
||||
import com.ibm.wala.util.debug.Assertions;
|
||||
import com.ibm.wala.util.warnings.WarningSet;
|
||||
|
||||
public class AstIRFactory implements IRFactory {
|
||||
private final boolean keepIR;
|
||||
|
@ -42,7 +41,7 @@ public class AstIRFactory implements IRFactory {
|
|||
this.keptIRs = (keepIR) ? new HashMap<IMethod, IR>() : null;
|
||||
}
|
||||
|
||||
public ControlFlowGraph makeCFG(final IMethod method, final Context context, final WarningSet warnings) {
|
||||
public ControlFlowGraph makeCFG(final IMethod method, final Context context) {
|
||||
return ((AstMethod) method).getControlFlowGraph();
|
||||
}
|
||||
|
||||
|
@ -95,7 +94,7 @@ public class AstIRFactory implements IRFactory {
|
|||
}
|
||||
}
|
||||
|
||||
public IR makeIR(final IMethod method, final Context context, final SSAOptions options, final WarningSet warnings) {
|
||||
public IR makeIR(final IMethod method, final Context context, final SSAOptions options) {
|
||||
Assertions._assert(method instanceof AstMethod, method.toString());
|
||||
if (keepIR) {
|
||||
if (keptIRs.containsKey(method)) {
|
||||
|
@ -106,7 +105,7 @@ public class AstIRFactory implements IRFactory {
|
|||
AbstractCFG oldCfg = ((AstMethod) method).cfg;
|
||||
SSAInstruction[] instrs = (SSAInstruction[]) oldCfg.getInstructions();
|
||||
|
||||
IR newIR = new AstIR((AstMethod) method, instrs, ((AstMethod) method).symtab, new SSACFG(method, oldCfg, instrs, warnings),
|
||||
IR newIR = new AstIR((AstMethod) method, instrs, ((AstMethod) method).symtab, new SSACFG(method, oldCfg, instrs),
|
||||
options);
|
||||
|
||||
if (keepIR) {
|
||||
|
@ -120,19 +119,19 @@ public class AstIRFactory implements IRFactory {
|
|||
return new DefaultIRFactory() {
|
||||
private final AstIRFactory astFactory = new AstIRFactory(keepAstIRs);
|
||||
|
||||
public IR makeIR(IMethod method, Context context, SSAOptions options, WarningSet warnings) {
|
||||
public IR makeIR(IMethod method, Context context, SSAOptions options) {
|
||||
if (method instanceof AstMethod) {
|
||||
return astFactory.makeIR(method, context, options, warnings);
|
||||
return astFactory.makeIR(method, context, options);
|
||||
} else {
|
||||
return super.makeIR(method, context, options, warnings);
|
||||
return super.makeIR(method, context, options);
|
||||
}
|
||||
}
|
||||
|
||||
public ControlFlowGraph makeCFG(IMethod method, Context context, WarningSet warnings) {
|
||||
public ControlFlowGraph makeCFG(IMethod method, Context context) {
|
||||
if (method instanceof AstMethod) {
|
||||
return astFactory.makeCFG(method, context, warnings);
|
||||
return astFactory.makeCFG(method, context);
|
||||
} else {
|
||||
return super.makeCFG(method, context, warnings);
|
||||
return super.makeCFG(method, context);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
|
|
@ -10,7 +10,7 @@
|
|||
*****************************************************************************/
|
||||
package com.ibm.wala.cast.ir.ssa;
|
||||
|
||||
import com.ibm.wala.ssa.*;
|
||||
import com.ibm.wala.ssa.SSAInstruction;
|
||||
|
||||
public interface AstInstructionVisitor extends SSAInstruction.IVisitor {
|
||||
|
||||
|
|
|
@ -1,10 +1,14 @@
|
|||
package com.ibm.wala.cast.ir.ssa;
|
||||
|
||||
import com.ibm.wala.ssa.*;
|
||||
import com.ibm.wala.types.*;
|
||||
import com.ibm.wala.util.debug.Assertions;
|
||||
import java.util.Collection;
|
||||
import java.util.Collections;
|
||||
|
||||
import java.util.*;
|
||||
import com.ibm.wala.ssa.SSAInstruction;
|
||||
import com.ibm.wala.ssa.SymbolTable;
|
||||
import com.ibm.wala.ssa.ValueDecorator;
|
||||
import com.ibm.wala.types.FieldReference;
|
||||
import com.ibm.wala.types.TypeReference;
|
||||
import com.ibm.wala.util.debug.Assertions;
|
||||
|
||||
public class AstIsDefinedInstruction extends SSAInstruction {
|
||||
private final FieldReference fieldRef;
|
||||
|
|
|
@ -10,7 +10,9 @@
|
|||
*****************************************************************************/
|
||||
package com.ibm.wala.cast.ir.ssa;
|
||||
|
||||
import com.ibm.wala.ssa.*;
|
||||
import com.ibm.wala.ssa.SSAInstruction;
|
||||
import com.ibm.wala.ssa.SymbolTable;
|
||||
import com.ibm.wala.ssa.ValueDecorator;
|
||||
import com.ibm.wala.util.debug.Assertions;
|
||||
|
||||
/**
|
||||
|
|
|
@ -10,7 +10,9 @@
|
|||
*****************************************************************************/
|
||||
package com.ibm.wala.cast.ir.ssa;
|
||||
|
||||
import com.ibm.wala.ssa.*;
|
||||
import com.ibm.wala.ssa.SSAInstruction;
|
||||
import com.ibm.wala.ssa.SymbolTable;
|
||||
import com.ibm.wala.ssa.ValueDecorator;
|
||||
import com.ibm.wala.util.debug.Assertions;
|
||||
|
||||
/**
|
||||
|
|
|
@ -11,8 +11,8 @@
|
|||
package com.ibm.wala.cast.ir.ssa;
|
||||
|
||||
import com.ibm.wala.cast.ir.ssa.AstLexicalAccess.Access;
|
||||
import com.ibm.wala.classLoader.*;
|
||||
import com.ibm.wala.ssa.*;
|
||||
import com.ibm.wala.classLoader.CallSiteReference;
|
||||
import com.ibm.wala.ssa.SSAInstruction;
|
||||
|
||||
/**
|
||||
* This abstract instruction extends the abstract lexical invoke with
|
||||
|
|
|
@ -22,13 +22,31 @@ import java.util.Map;
|
|||
import java.util.Set;
|
||||
import java.util.Stack;
|
||||
|
||||
import com.ibm.wala.cast.ir.ssa.*;
|
||||
import com.ibm.wala.cast.ir.ssa.AssignInstruction;
|
||||
import com.ibm.wala.cast.ir.ssa.AstAssertInstruction;
|
||||
import com.ibm.wala.cast.ir.ssa.AstConstants;
|
||||
import com.ibm.wala.cast.ir.ssa.AstGlobalRead;
|
||||
import com.ibm.wala.cast.ir.ssa.AstGlobalWrite;
|
||||
import com.ibm.wala.cast.ir.ssa.AstIsDefinedInstruction;
|
||||
import com.ibm.wala.cast.ir.ssa.AstLexicalAccess;
|
||||
import com.ibm.wala.cast.ir.ssa.AstLexicalRead;
|
||||
import com.ibm.wala.cast.ir.ssa.AstLexicalWrite;
|
||||
import com.ibm.wala.cast.ir.ssa.EachElementGetInstruction;
|
||||
import com.ibm.wala.cast.ir.ssa.EachElementHasNextInstruction;
|
||||
import com.ibm.wala.cast.ir.ssa.AstLexicalAccess.Access;
|
||||
import com.ibm.wala.cast.loader.AstMethod.DebuggingInformation;
|
||||
import com.ibm.wala.cast.loader.AstMethod.LexicalInformation;
|
||||
import com.ibm.wala.cast.tree.*;
|
||||
import com.ibm.wala.cast.tree.CAstControlFlowMap;
|
||||
import com.ibm.wala.cast.tree.CAstEntity;
|
||||
import com.ibm.wala.cast.tree.CAstNode;
|
||||
import com.ibm.wala.cast.tree.CAstSourcePositionMap;
|
||||
import com.ibm.wala.cast.tree.CAstSymbol;
|
||||
import com.ibm.wala.cast.tree.CAstType;
|
||||
import com.ibm.wala.cast.tree.CAstSourcePositionMap.Position;
|
||||
import com.ibm.wala.cast.tree.impl.*;
|
||||
import com.ibm.wala.cast.tree.impl.CAstCloner;
|
||||
import com.ibm.wala.cast.tree.impl.CAstImpl;
|
||||
import com.ibm.wala.cast.tree.impl.CAstOperator;
|
||||
import com.ibm.wala.cast.tree.impl.CAstRewriter;
|
||||
import com.ibm.wala.cast.tree.visit.CAstVisitor;
|
||||
import com.ibm.wala.cast.types.AstTypeReference;
|
||||
import com.ibm.wala.cast.util.CAstPrinter;
|
||||
|
|
|
@ -10,10 +10,10 @@
|
|||
*****************************************************************************/
|
||||
package com.ibm.wala.cast.ir.translator;
|
||||
|
||||
import com.ibm.wala.classLoader.*;
|
||||
import java.io.IOException;
|
||||
import java.util.Set;
|
||||
|
||||
import java.io.*;
|
||||
import java.util.*;
|
||||
import com.ibm.wala.classLoader.ModuleEntry;
|
||||
|
||||
public interface TranslatorToIR {
|
||||
|
||||
|
|
|
@ -10,7 +10,9 @@
|
|||
*****************************************************************************/
|
||||
package com.ibm.wala.cast.tree;
|
||||
|
||||
import java.util.*;
|
||||
import java.util.Collection;
|
||||
import java.util.Iterator;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* The assumption is that abstract syntax trees pertain to particular
|
||||
|
|
|
@ -13,7 +13,8 @@
|
|||
*/
|
||||
package com.ibm.wala.cast.tree;
|
||||
|
||||
import java.util.*;
|
||||
import java.util.HashSet;
|
||||
import java.util.Set;
|
||||
|
||||
public class CAstQualifier {
|
||||
public static final Set/* <CAstQualifier> */<CAstQualifier>sQualifiers = new HashSet<CAstQualifier>();
|
||||
|
|
|
@ -10,8 +10,9 @@
|
|||
*****************************************************************************/
|
||||
package com.ibm.wala.cast.tree;
|
||||
|
||||
import java.io.*;
|
||||
import java.net.*;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.net.URL;
|
||||
import java.util.Iterator;
|
||||
|
||||
/**
|
||||
|
|
|
@ -10,7 +10,8 @@
|
|||
*****************************************************************************/
|
||||
package com.ibm.wala.cast.tree;
|
||||
|
||||
import java.io.*;
|
||||
import java.io.IOException;
|
||||
import java.io.Reader;
|
||||
|
||||
/**
|
||||
* Encapsulates a translator from source files to CAstEntities. This
|
||||
|
|
|
@ -19,7 +19,7 @@ import com.ibm.wala.cast.tree.CAstEntity;
|
|||
import com.ibm.wala.cast.tree.CAstNode;
|
||||
import com.ibm.wala.cast.tree.CAstNodeTypeMap;
|
||||
import com.ibm.wala.cast.tree.CAstSourcePositionMap;
|
||||
import com.ibm.wala.util.debug.*;
|
||||
import com.ibm.wala.util.debug.Assertions;
|
||||
|
||||
public class CAstCloner extends CAstRewriter<Object> {
|
||||
|
||||
|
|
|
@ -10,12 +10,13 @@
|
|||
*****************************************************************************/
|
||||
package com.ibm.wala.cast.tree.impl;
|
||||
|
||||
import com.ibm.wala.cast.tree.*;
|
||||
import java.util.NoSuchElementException;
|
||||
|
||||
import com.ibm.wala.cast.tree.CAst;
|
||||
import com.ibm.wala.cast.tree.CAstNode;
|
||||
import com.ibm.wala.cast.util.CAstPrinter;
|
||||
import com.ibm.wala.util.debug.Assertions;
|
||||
|
||||
import java.util.NoSuchElementException;
|
||||
|
||||
/**
|
||||
* An implementation of CAst, i.e. a simple factory for creating capa
|
||||
* ast nodes. This class simply creates generic nodes with a kind
|
||||
|
|
|
@ -13,9 +13,11 @@
|
|||
*/
|
||||
package com.ibm.wala.cast.tree.impl;
|
||||
|
||||
import com.ibm.wala.cast.tree.*;
|
||||
import java.util.HashMap;
|
||||
|
||||
import java.util.*;
|
||||
import com.ibm.wala.cast.tree.CAstNode;
|
||||
import com.ibm.wala.cast.tree.CAstNodeTypeMap;
|
||||
import com.ibm.wala.cast.tree.CAstType;
|
||||
|
||||
public class CAstNodeTypeMapRecorder
|
||||
extends HashMap <CAstNode,CAstType>
|
||||
|
|
|
@ -10,10 +10,10 @@
|
|||
*****************************************************************************/
|
||||
package com.ibm.wala.cast.tree.impl;
|
||||
|
||||
import com.ibm.wala.cast.tree.*;
|
||||
|
||||
import java.util.NoSuchElementException;
|
||||
|
||||
import com.ibm.wala.cast.tree.CAstNode;
|
||||
|
||||
/**
|
||||
* Various operators that are built in to many languages, and hence
|
||||
* perhaps deserve special notice in capa ast interface. There is no
|
||||
|
|
|
@ -10,10 +10,22 @@
|
|||
*****************************************************************************/
|
||||
package com.ibm.wala.cast.tree.impl;
|
||||
|
||||
import com.ibm.wala.cast.tree.*;
|
||||
import com.ibm.wala.util.collections.*;
|
||||
import java.util.Collection;
|
||||
import java.util.HashMap;
|
||||
import java.util.HashSet;
|
||||
import java.util.Iterator;
|
||||
import java.util.LinkedHashMap;
|
||||
import java.util.LinkedHashSet;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
|
||||
import java.util.*;
|
||||
import com.ibm.wala.cast.tree.CAst;
|
||||
import com.ibm.wala.cast.tree.CAstControlFlowMap;
|
||||
import com.ibm.wala.cast.tree.CAstEntity;
|
||||
import com.ibm.wala.cast.tree.CAstNode;
|
||||
import com.ibm.wala.cast.tree.CAstNodeTypeMap;
|
||||
import com.ibm.wala.cast.tree.CAstSourcePositionMap;
|
||||
import com.ibm.wala.util.collections.EmptyIterator;
|
||||
|
||||
public abstract class CAstRewriter<RewriteContext> {
|
||||
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
package com.ibm.wala.cast.tree.impl;
|
||||
|
||||
import com.ibm.wala.cast.tree.*;
|
||||
import com.ibm.wala.cast.tree.CAst;
|
||||
|
||||
public interface CAstRewriterFactory<Context> {
|
||||
public CAstRewriter<Context> createCAstRewriter(CAst ast);
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
package com.ibm.wala.cast.tree.impl;
|
||||
|
||||
import com.ibm.wala.cast.tree.*;
|
||||
import com.ibm.wala.cast.tree.CAstSymbol;
|
||||
|
||||
public class CAstSymbolImpl implements CAstSymbol {
|
||||
|
||||
|
|
|
@ -13,9 +13,12 @@
|
|||
*/
|
||||
package com.ibm.wala.cast.tree.impl;
|
||||
|
||||
import com.ibm.wala.cast.tree.*;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
import java.util.*;
|
||||
import com.ibm.wala.cast.tree.CAstReference;
|
||||
import com.ibm.wala.cast.tree.CAstType;
|
||||
import com.ibm.wala.cast.tree.CAstTypeDictionary;
|
||||
|
||||
public class CAstTypeDictionaryImpl implements CAstTypeDictionary {
|
||||
private final Map/*<ASTType,CAstType>*/<Object, CAstType> fMap= new HashMap<Object, CAstType>();
|
||||
|
|
|
@ -10,7 +10,7 @@
|
|||
*****************************************************************************/
|
||||
package com.ibm.wala.cast.tree.impl;
|
||||
|
||||
import com.ibm.wala.cast.tree.*;
|
||||
import com.ibm.wala.cast.tree.CAstNode;
|
||||
|
||||
/**
|
||||
* An implementation of CAst, i.e. a simple factory for creating capa
|
||||
|
|
|
@ -10,9 +10,16 @@
|
|||
*****************************************************************************/
|
||||
package com.ibm.wala.cast.tree.impl;
|
||||
|
||||
import com.ibm.wala.cast.tree.*;
|
||||
import java.util.Collection;
|
||||
import java.util.Iterator;
|
||||
import java.util.Map;
|
||||
|
||||
import java.util.*;
|
||||
import com.ibm.wala.cast.tree.CAstControlFlowMap;
|
||||
import com.ibm.wala.cast.tree.CAstEntity;
|
||||
import com.ibm.wala.cast.tree.CAstNode;
|
||||
import com.ibm.wala.cast.tree.CAstNodeTypeMap;
|
||||
import com.ibm.wala.cast.tree.CAstSourcePositionMap;
|
||||
import com.ibm.wala.cast.tree.CAstType;
|
||||
|
||||
public class DelegatingEntity implements CAstEntity {
|
||||
private final CAstEntity base;
|
||||
|
|
|
@ -10,13 +10,17 @@
|
|||
*****************************************************************************/
|
||||
package com.ibm.wala.cast.tree.visit;
|
||||
|
||||
import com.ibm.wala.cast.tree.*;
|
||||
import java.util.Collection;
|
||||
import java.util.HashMap;
|
||||
import java.util.Iterator;
|
||||
import java.util.Map;
|
||||
|
||||
import com.ibm.wala.cast.tree.CAstEntity;
|
||||
import com.ibm.wala.cast.tree.CAstNode;
|
||||
import com.ibm.wala.cast.util.CAstPrinter;
|
||||
import com.ibm.wala.util.debug.Assertions;
|
||||
import com.ibm.wala.util.debug.Trace;
|
||||
|
||||
import java.util.*;
|
||||
|
||||
/**
|
||||
* @author Igor Peshansky
|
||||
* Ripped out of Julian's AstTranslator
|
||||
|
|
|
@ -10,7 +10,8 @@
|
|||
*****************************************************************************/
|
||||
package com.ibm.wala.cast.tree.visit;
|
||||
|
||||
import com.ibm.wala.cast.tree.*;
|
||||
import com.ibm.wala.cast.tree.CAstEntity;
|
||||
import com.ibm.wala.cast.tree.CAstNode;
|
||||
import com.ibm.wala.util.debug.Assertions;
|
||||
|
||||
/**
|
||||
|
|
|
@ -10,7 +10,10 @@
|
|||
*****************************************************************************/
|
||||
package com.ibm.wala.cast.types;
|
||||
|
||||
import com.ibm.wala.types.*;
|
||||
import com.ibm.wala.types.Descriptor;
|
||||
import com.ibm.wala.types.MethodReference;
|
||||
import com.ibm.wala.types.Selector;
|
||||
import com.ibm.wala.types.TypeReference;
|
||||
import com.ibm.wala.util.Atom;
|
||||
|
||||
public class AstMethodReference {
|
||||
|
|
|
@ -10,7 +10,7 @@
|
|||
*****************************************************************************/
|
||||
package com.ibm.wala.cast.types;
|
||||
|
||||
import com.ibm.wala.types.*;
|
||||
import com.ibm.wala.types.TypeName;
|
||||
|
||||
public class AstTypeReference {
|
||||
|
||||
|
|
|
@ -10,11 +10,14 @@
|
|||
*****************************************************************************/
|
||||
package com.ibm.wala.cast.util;
|
||||
|
||||
import com.ibm.wala.cast.tree.*;
|
||||
import com.ibm.wala.util.collections.*;
|
||||
import com.ibm.wala.util.graph.traverse.*;
|
||||
import java.util.HashMap;
|
||||
import java.util.Iterator;
|
||||
import java.util.Map;
|
||||
|
||||
import java.util.*;
|
||||
import com.ibm.wala.cast.tree.CAstNode;
|
||||
import com.ibm.wala.util.collections.Filter;
|
||||
import com.ibm.wala.util.collections.FilterIterator;
|
||||
import com.ibm.wala.util.graph.traverse.DFSDiscoverTimeIterator;
|
||||
|
||||
public class CAstFunctions {
|
||||
|
||||
|
|
|
@ -10,10 +10,15 @@
|
|||
*****************************************************************************/
|
||||
package com.ibm.wala.cast.util;
|
||||
|
||||
import com.ibm.wala.cast.tree.*;
|
||||
import java.io.IOException;
|
||||
import java.io.StringWriter;
|
||||
import java.io.Writer;
|
||||
import java.util.Collection;
|
||||
import java.util.Iterator;
|
||||
|
||||
import java.io.*;
|
||||
import java.util.*;
|
||||
import com.ibm.wala.cast.tree.CAstEntity;
|
||||
import com.ibm.wala.cast.tree.CAstNode;
|
||||
import com.ibm.wala.cast.tree.CAstSourcePositionMap;
|
||||
|
||||
public class CAstPrinter {
|
||||
private static CAstPrinter instance= new CAstPrinter();
|
||||
|
|
|
@ -10,11 +10,14 @@
|
|||
*****************************************************************************/
|
||||
package com.ibm.wala.cast.util;
|
||||
|
||||
import com.ibm.wala.cast.tree.CAstSourcePositionMap.Position;
|
||||
import com.ibm.wala.cast.tree.impl.*;
|
||||
import java.io.BufferedReader;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.io.InputStreamReader;
|
||||
import java.net.URL;
|
||||
|
||||
import java.io.*;
|
||||
import java.net.*;
|
||||
import com.ibm.wala.cast.tree.CAstSourcePositionMap.Position;
|
||||
import com.ibm.wala.cast.tree.impl.AbstractSourcePosition;
|
||||
|
||||
public class SourceBuffer {
|
||||
private String[] lines;
|
||||
|
|
Loading…
Reference in New Issue