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:
sjfink 2007-07-06 22:09:29 +00:00
parent 99a97fb477
commit 39da63410a
49 changed files with 378 additions and 333 deletions

View File

@ -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;

View File

@ -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 {

View File

@ -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 {

View File

@ -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;

View File

@ -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 {

View File

@ -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;
}
}

View File

@ -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) {

View File

@ -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);

View File

@ -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.

View File

@ -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());
}
}
}

View File

@ -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;

View File

@ -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();
default:
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;
}

View File

@ -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);

View File

@ -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;

View File

@ -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]);
}
}

View File

@ -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);

View File

@ -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 {

View File

@ -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;

View File

@ -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 {

View File

@ -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;
/**

View File

@ -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);
}
}
};

View File

@ -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 {

View File

@ -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;

View File

@ -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;
/**

View File

@ -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;
/**

View File

@ -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

View File

@ -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;

View File

@ -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 {

View File

@ -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

View File

@ -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>();

View File

@ -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;
/**

View File

@ -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

View File

@ -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> {

View File

@ -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

View File

@ -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>

View File

@ -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

View File

@ -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> {

View File

@ -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);

View File

@ -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 {

View File

@ -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>();

View File

@ -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

View File

@ -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;

View File

@ -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

View File

@ -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;
/**

View File

@ -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 {

View File

@ -10,7 +10,7 @@
*****************************************************************************/
package com.ibm.wala.cast.types;
import com.ibm.wala.types.*;
import com.ibm.wala.types.TypeName;
public class AstTypeReference {

View File

@ -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 {

View File

@ -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();

View File

@ -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;