Merge remote-tracking branch 'upstream/master'
This commit is contained in:
commit
409ab78e36
|
@ -70,7 +70,7 @@ public class SourceDirCallGraph {
|
|||
// options.setReflectionOptions(ReflectionOptions.NONE);
|
||||
AnalysisCache cache = new AnalysisCacheImpl(AstIRFactory.makeDefaultFactory());
|
||||
//CallGraphBuilder builder = new ZeroCFABuilderFactory().make(options, cache, cha, scope, false);
|
||||
CallGraphBuilder<?> builder = new ZeroOneContainerCFABuilderFactory().make(options, cache, cha, scope, false);
|
||||
CallGraphBuilder<?> builder = new ZeroOneContainerCFABuilderFactory().make(options, cache, cha, scope);
|
||||
System.out.println("building call graph...");
|
||||
CallGraph cg = builder.makeCallGraph(options, null);
|
||||
long end = System.currentTimeMillis();
|
||||
|
|
|
@ -33,7 +33,7 @@ public class ECJClassLoaderFactory extends ClassLoaderFactoryImpl {
|
|||
}
|
||||
|
||||
protected JavaSourceLoaderImpl makeSourceLoader(ClassLoaderReference classLoaderReference, IClassHierarchy cha, IClassLoader parent) {
|
||||
return new ECJSourceLoaderImpl(classLoaderReference, parent, getExclusions(), cha, false);
|
||||
return new ECJSourceLoaderImpl(classLoaderReference, parent, cha, false);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -42,17 +42,16 @@ import com.ibm.wala.cast.java.translator.SourceModuleTranslator;
|
|||
import com.ibm.wala.classLoader.IClassLoader;
|
||||
import com.ibm.wala.ipa.cha.IClassHierarchy;
|
||||
import com.ibm.wala.types.ClassLoaderReference;
|
||||
import com.ibm.wala.util.config.SetOfClasses;
|
||||
|
||||
public class ECJSourceLoaderImpl extends JavaSourceLoaderImpl {
|
||||
private final boolean dump;
|
||||
|
||||
public ECJSourceLoaderImpl(ClassLoaderReference loaderRef, IClassLoader parent, SetOfClasses exclusions, IClassHierarchy cha) {
|
||||
this(loaderRef, parent, exclusions, cha, false);
|
||||
public ECJSourceLoaderImpl(ClassLoaderReference loaderRef, IClassLoader parent, IClassHierarchy cha) {
|
||||
this(loaderRef, parent, cha, false);
|
||||
}
|
||||
|
||||
public ECJSourceLoaderImpl(ClassLoaderReference loaderRef, IClassLoader parent, SetOfClasses exclusions, IClassHierarchy cha, boolean dump) {
|
||||
super(loaderRef, parent, exclusions, cha);
|
||||
public ECJSourceLoaderImpl(ClassLoaderReference loaderRef, IClassLoader parent, IClassHierarchy cha, boolean dump) {
|
||||
super(loaderRef, parent, cha);
|
||||
this.dump = dump;
|
||||
}
|
||||
|
||||
|
|
|
@ -111,7 +111,7 @@ org.eclipse.jdt.core.compiler.problem.unusedImport=error
|
|||
org.eclipse.jdt.core.compiler.problem.unusedLabel=error
|
||||
org.eclipse.jdt.core.compiler.problem.unusedLocal=error
|
||||
org.eclipse.jdt.core.compiler.problem.unusedObjectAllocation=error
|
||||
org.eclipse.jdt.core.compiler.problem.unusedParameter=warning
|
||||
org.eclipse.jdt.core.compiler.problem.unusedParameter=error
|
||||
org.eclipse.jdt.core.compiler.problem.unusedParameterIncludeDocCommentReference=enabled
|
||||
org.eclipse.jdt.core.compiler.problem.unusedParameterWhenImplementingAbstract=disabled
|
||||
org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=disabled
|
||||
|
|
|
@ -23,7 +23,6 @@ import com.ibm.wala.cast.java.ssa.AstJavaInvokeInstruction;
|
|||
import com.ibm.wala.cast.java.ssa.EnclosingObjectReference;
|
||||
import com.ibm.wala.classLoader.IClass;
|
||||
import com.ibm.wala.fixpoint.IVariable;
|
||||
import com.ibm.wala.ipa.cha.IClassHierarchy;
|
||||
import com.ibm.wala.shrikeBT.IBinaryOpInstruction;
|
||||
import com.ibm.wala.ssa.IR;
|
||||
import com.ibm.wala.ssa.SSABinaryOpInstruction;
|
||||
|
@ -98,8 +97,8 @@ public class AstJavaTypeInference extends AstTypeInference {
|
|||
|
||||
}
|
||||
|
||||
public AstJavaTypeInference(IR ir, IClassHierarchy cha, boolean doPrimitives) {
|
||||
super(ir, cha, JavaPrimitiveType.BOOLEAN, doPrimitives);
|
||||
public AstJavaTypeInference(IR ir, boolean doPrimitives) {
|
||||
super(ir, JavaPrimitiveType.BOOLEAN, doPrimitives);
|
||||
}
|
||||
|
||||
IClass getStringClass() {
|
||||
|
|
|
@ -173,6 +173,6 @@ public abstract class JavaSourceAnalysisEngine<I extends InstanceKey> extends Ab
|
|||
|
||||
@Override
|
||||
protected CallGraphBuilder<I> getCallGraphBuilder(IClassHierarchy cha, AnalysisOptions options, IAnalysisCacheView cache) {
|
||||
return new ZeroCFABuilderFactory().make(options, cache, cha, scope, false);
|
||||
return new ZeroCFABuilderFactory().make(options, cache, cha, scope);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -26,7 +26,7 @@ import com.ibm.wala.ipa.cha.IClassHierarchy;
|
|||
*/
|
||||
public class ZeroCFABuilderFactory {
|
||||
|
||||
public CallGraphBuilder make(AnalysisOptions options, IAnalysisCacheView cache, IClassHierarchy cha, AnalysisScope scope, boolean keepPointsTo) {
|
||||
public CallGraphBuilder make(AnalysisOptions options, IAnalysisCacheView cache, IClassHierarchy cha, AnalysisScope scope) {
|
||||
Util.addDefaultSelectors(options, cha);
|
||||
Util.addDefaultBypassLogic(options, scope, Util.class.getClassLoader(), cha);
|
||||
return new AstJavaZeroXCFABuilder(cha, options, cache, null, null, ZeroXInstanceKeys.NONE);
|
||||
|
|
|
@ -25,7 +25,7 @@ import com.ibm.wala.ipa.cha.IClassHierarchy;
|
|||
*/
|
||||
public class ZeroOneContainerCFABuilderFactory {
|
||||
|
||||
public CallGraphBuilder make(AnalysisOptions options, AnalysisCache cache, IClassHierarchy cha, AnalysisScope scope, boolean keepPointsTo) {
|
||||
public CallGraphBuilder make(AnalysisOptions options, AnalysisCache cache, IClassHierarchy cha, AnalysisScope scope) {
|
||||
Util.addDefaultSelectors(options, cha);
|
||||
Util.addDefaultBypassLogic(options, scope, Util.class.getClassLoader(), cha);
|
||||
return new AstJavaZeroOneContainerCFABuilder(cha, options, cache, null, null);
|
||||
|
|
|
@ -96,8 +96,8 @@ public class AstJavaSSAPropagationCallGraphBuilder extends AstSSAPropagationCall
|
|||
//
|
||||
// ///////////////////////////////////////////////////////////////////////////
|
||||
|
||||
protected TypeInference makeTypeInference(IR ir, IClassHierarchy cha) {
|
||||
TypeInference ti = new AstJavaTypeInference(ir, cha, false);
|
||||
protected TypeInference makeTypeInference(IR ir) {
|
||||
TypeInference ti = new AstJavaTypeInference(ir, false);
|
||||
|
||||
if (DEBUG_TYPE_INFERENCE) {
|
||||
System.err.println(("IR of " + ir.getMethod()));
|
||||
|
|
|
@ -46,7 +46,7 @@ public class AstJavaZeroOneContainerCFABuilder extends AstJavaCFABuilder {
|
|||
setContextInterpreter(contextInterpreter);
|
||||
|
||||
ZeroXInstanceKeys zik = makeInstanceKeys(cha, options, contextInterpreter);
|
||||
setInstanceKeys(new JavaScopeMappingInstanceKeys(cha, this, zik));
|
||||
setInstanceKeys(new JavaScopeMappingInstanceKeys(this, zik));
|
||||
|
||||
ContextSelector CCS = makeContainerContextSelector(cha, zik);
|
||||
DelegatingContextSelector DCS = new DelegatingContextSelector(CCS, contextSelector);
|
||||
|
|
|
@ -38,7 +38,7 @@ public class AstJavaZeroXCFABuilder extends AstJavaCFABuilder {
|
|||
|
||||
setContextSelector(contextSelector);
|
||||
|
||||
setInstanceKeys(new JavaScopeMappingInstanceKeys(cha, this, new ZeroXInstanceKeys(options, cha, contextInterpreter,
|
||||
setInstanceKeys(new JavaScopeMappingInstanceKeys(this, new ZeroXInstanceKeys(options, cha, contextInterpreter,
|
||||
instancePolicy)));
|
||||
}
|
||||
|
||||
|
|
|
@ -25,13 +25,12 @@ import com.ibm.wala.ipa.callgraph.CGNode;
|
|||
import com.ibm.wala.ipa.callgraph.propagation.InstanceKey;
|
||||
import com.ibm.wala.ipa.callgraph.propagation.InstanceKeyFactory;
|
||||
import com.ibm.wala.ipa.callgraph.propagation.PropagationCallGraphBuilder;
|
||||
import com.ibm.wala.ipa.cha.IClassHierarchy;
|
||||
import com.ibm.wala.util.collections.HashSetFactory;
|
||||
import com.ibm.wala.util.collections.Pair;
|
||||
|
||||
public class JavaScopeMappingInstanceKeys extends ScopeMappingInstanceKeys {
|
||||
|
||||
public JavaScopeMappingInstanceKeys(IClassHierarchy cha, PropagationCallGraphBuilder builder, InstanceKeyFactory basic) {
|
||||
public JavaScopeMappingInstanceKeys(PropagationCallGraphBuilder builder, InstanceKeyFactory basic) {
|
||||
super(builder, basic);
|
||||
|
||||
}
|
||||
|
|
|
@ -66,7 +66,6 @@ import com.ibm.wala.shrikeCT.AnnotationsReader.ConstantElementValue;
|
|||
import com.ibm.wala.shrikeCT.AnnotationsReader.ElementValue;
|
||||
import com.ibm.wala.shrikeCT.ClassConstants;
|
||||
import com.ibm.wala.ssa.SSAInstruction;
|
||||
import com.ibm.wala.ssa.SSAThrowInstruction;
|
||||
import com.ibm.wala.ssa.SymbolTable;
|
||||
import com.ibm.wala.types.ClassLoaderReference;
|
||||
import com.ibm.wala.types.Descriptor;
|
||||
|
@ -78,7 +77,6 @@ import com.ibm.wala.types.TypeReference;
|
|||
import com.ibm.wala.types.annotations.Annotation;
|
||||
import com.ibm.wala.util.collections.HashMapFactory;
|
||||
import com.ibm.wala.util.collections.HashSetFactory;
|
||||
import com.ibm.wala.util.config.SetOfClasses;
|
||||
import com.ibm.wala.util.debug.Assertions;
|
||||
import com.ibm.wala.util.strings.Atom;
|
||||
|
||||
|
@ -483,14 +481,14 @@ public abstract class JavaSourceLoaderImpl extends ClassLoaderImpl {
|
|||
|
||||
/** BEGIN Custom change: Common superclass is optional */
|
||||
public JavaSourceLoaderImpl(boolean existsCommonSuperClass, ClassLoaderReference loaderRef, IClassLoader parent,
|
||||
SetOfClasses exclusions, IClassHierarchy cha) {
|
||||
IClassHierarchy cha) {
|
||||
super(loaderRef, cha.getScope().getArrayClassLoader(), parent, cha.getScope().getExclusions(), cha);
|
||||
this.existsCommonSuperclass = existsCommonSuperClass;
|
||||
}
|
||||
|
||||
public JavaSourceLoaderImpl(ClassLoaderReference loaderRef, IClassLoader parent, SetOfClasses exclusions, IClassHierarchy cha) {
|
||||
public JavaSourceLoaderImpl(ClassLoaderReference loaderRef, IClassLoader parent, IClassHierarchy cha) {
|
||||
// standard case: we have a common super class
|
||||
this(true, loaderRef, parent, exclusions, cha);
|
||||
this(true, loaderRef, parent, cha);
|
||||
}
|
||||
/** END Custom change: Common superclass is optional */
|
||||
|
||||
|
@ -661,10 +659,6 @@ public abstract class JavaSourceLoaderImpl extends ClassLoaderImpl {
|
|||
public AstLexicalWrite LexicalWrite(int iindex, String definer, String globalName, TypeReference type, int rhs) {
|
||||
return new AstLexicalWrite(iindex, definer, globalName, type, rhs);
|
||||
}
|
||||
|
||||
public SSAThrowInstruction NonExceptingThrowInstruction(int iindex, int exception) {
|
||||
throw new UnsupportedOperationException();
|
||||
}
|
||||
}
|
||||
|
||||
private static final InstructionFactory insts = new InstructionFactory();
|
||||
|
|
|
@ -202,10 +202,6 @@ public class JavaCAst2IRTranslator extends AstTranslator {
|
|||
processExceptions(call, context);
|
||||
}
|
||||
|
||||
protected void doGlobalRead(WalkContext context, int result, String name) {
|
||||
Assertions.UNREACHABLE("doGlobalRead() called for Java code???");
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void doGlobalWrite(WalkContext context, String name, TypeReference type, int rval) {
|
||||
Assertions.UNREACHABLE("doGlobalWrite() called for Java code???");
|
||||
|
|
|
@ -111,7 +111,7 @@ org.eclipse.jdt.core.compiler.problem.unusedImport=error
|
|||
org.eclipse.jdt.core.compiler.problem.unusedLabel=error
|
||||
org.eclipse.jdt.core.compiler.problem.unusedLocal=warning
|
||||
org.eclipse.jdt.core.compiler.problem.unusedObjectAllocation=error
|
||||
org.eclipse.jdt.core.compiler.problem.unusedParameter=warning
|
||||
org.eclipse.jdt.core.compiler.problem.unusedParameter=error
|
||||
org.eclipse.jdt.core.compiler.problem.unusedParameterIncludeDocCommentReference=enabled
|
||||
org.eclipse.jdt.core.compiler.problem.unusedParameterWhenImplementingAbstract=disabled
|
||||
org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=disabled
|
||||
|
|
|
@ -16,12 +16,7 @@ import com.ibm.wala.cast.js.translator.CAstRhinoTranslatorFactory;
|
|||
import com.ibm.wala.classLoader.IMethod;
|
||||
import com.ibm.wala.classLoader.Language;
|
||||
import com.ibm.wala.classLoader.SourceURLModule;
|
||||
import com.ibm.wala.ipa.callgraph.AnalysisCache;
|
||||
import com.ibm.wala.ipa.callgraph.AnalysisCacheImpl;
|
||||
import com.ibm.wala.ipa.callgraph.AnalysisOptions;
|
||||
import com.ibm.wala.ipa.callgraph.AnalysisScope;
|
||||
import com.ibm.wala.ipa.callgraph.Entrypoint;
|
||||
import com.ibm.wala.ipa.callgraph.MethodTargetSelector;
|
||||
import com.ibm.wala.ipa.callgraph.*;
|
||||
import com.ibm.wala.ipa.callgraph.impl.ComposedEntrypoints;
|
||||
import com.ibm.wala.ipa.cha.ClassHierarchyException;
|
||||
import com.ibm.wala.ipa.cha.IClassHierarchy;
|
||||
|
@ -34,7 +29,7 @@ import com.ibm.wala.util.strings.Atom;
|
|||
|
||||
public class Driver {
|
||||
|
||||
public static void addDefaultDispatchLogic(AnalysisOptions options, AnalysisScope scope, IClassHierarchy cha, AnalysisCache cache) {
|
||||
public static void addDefaultDispatchLogic(AnalysisOptions options, IClassHierarchy cha) {
|
||||
com.ibm.wala.ipa.callgraph.impl.Util.addDefaultSelectors(options, cha);
|
||||
|
||||
Map<Atom,MethodTargetSelector> methodTargetSelectors = HashMapFactory.make();
|
||||
|
@ -52,7 +47,7 @@ public class Driver {
|
|||
|
||||
HybridAnalysisScope scope = new HybridAnalysisScope();
|
||||
FileProvider files = new FileProvider();
|
||||
AnalysisScopeReader.read(scope, args[0], files.getFile("Java60RegressionExclusions.txt"), Driver.class.getClassLoader(), files);
|
||||
AnalysisScopeReader.read(scope, args[0], files.getFile("Java60RegressionExclusions.txt"), Driver.class.getClassLoader());
|
||||
|
||||
scope.addToScope(
|
||||
scope.getJavaScriptLoader(),
|
||||
|
@ -81,7 +76,7 @@ public class Driver {
|
|||
|
||||
AnalysisCache cache = new AnalysisCacheImpl(factory);
|
||||
|
||||
addDefaultDispatchLogic(options, scope, cha, cache);
|
||||
addDefaultDispatchLogic(options, cha);
|
||||
|
||||
JavaJavaScriptHybridCallGraphBuilder b = new JavaJavaScriptHybridCallGraphBuilder(cha, options, cache);
|
||||
|
||||
|
|
|
@ -86,7 +86,7 @@ org.eclipse.jdt.core.compiler.problem.reportMethodCanBePotentiallyStatic=ignore
|
|||
org.eclipse.jdt.core.compiler.problem.reportMethodCanBeStatic=error
|
||||
org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled
|
||||
org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=error
|
||||
org.eclipse.jdt.core.compiler.problem.suppressOptionalErrors=disabled
|
||||
org.eclipse.jdt.core.compiler.problem.suppressOptionalErrors=enabled
|
||||
org.eclipse.jdt.core.compiler.problem.suppressWarnings=enabled
|
||||
org.eclipse.jdt.core.compiler.problem.syntacticNullAnalysisForFields=enabled
|
||||
org.eclipse.jdt.core.compiler.problem.syntheticAccessEmulation=ignore
|
||||
|
@ -111,7 +111,7 @@ org.eclipse.jdt.core.compiler.problem.unusedImport=error
|
|||
org.eclipse.jdt.core.compiler.problem.unusedLabel=error
|
||||
org.eclipse.jdt.core.compiler.problem.unusedLocal=error
|
||||
org.eclipse.jdt.core.compiler.problem.unusedObjectAllocation=ignore
|
||||
org.eclipse.jdt.core.compiler.problem.unusedParameter=warning
|
||||
org.eclipse.jdt.core.compiler.problem.unusedParameter=error
|
||||
org.eclipse.jdt.core.compiler.problem.unusedParameterIncludeDocCommentReference=enabled
|
||||
org.eclipse.jdt.core.compiler.problem.unusedParameterWhenImplementingAbstract=disabled
|
||||
org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=disabled
|
||||
|
|
|
@ -16,7 +16,6 @@ import com.ibm.wala.types.TypeReference;
|
|||
|
||||
public class JSPrimitiveType extends PrimitiveType {
|
||||
|
||||
@SuppressWarnings("unused")
|
||||
public static void init() {
|
||||
new JSPrimitiveType(JavaScriptTypes.Undefined, -1);
|
||||
|
||||
|
|
|
@ -34,7 +34,7 @@ import com.ibm.wala.types.TypeReference;
|
|||
public class JSTypeInference extends AstTypeInference {
|
||||
|
||||
public JSTypeInference(IR ir, IClassHierarchy cha) {
|
||||
super(ir, cha, new PointType(cha.lookupClass(JavaScriptTypes.Boolean)), true);
|
||||
super(ir, new PointType(cha.lookupClass(JavaScriptTypes.Boolean)), true);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -83,11 +83,11 @@ public abstract class FieldBasedCallGraphBuilder {
|
|||
this.options = options;
|
||||
this.cache = iAnalysisCacheView;
|
||||
this.constructors = new JavaScriptConstructorFunctions(cha);
|
||||
this.targetSelector = setupMethodTargetSelector(cha, constructors, options);
|
||||
this.targetSelector = setupMethodTargetSelector(constructors, options);
|
||||
this.supportFullPointerAnalysis = supportFullPointerAnalysis;
|
||||
}
|
||||
|
||||
private static MethodTargetSelector setupMethodTargetSelector(IClassHierarchy cha, JavaScriptConstructorFunctions constructors2, AnalysisOptions options) {
|
||||
private static MethodTargetSelector setupMethodTargetSelector(JavaScriptConstructorFunctions constructors2, AnalysisOptions options) {
|
||||
MethodTargetSelector result = new JavaScriptConstructTargetSelector(constructors2, options.getMethodTargetSelector());
|
||||
if (options instanceof JSAnalysisOptions && ((JSAnalysisOptions)options).handleCallApply()) {
|
||||
result = new JavaScriptFunctionApplyTargetSelector(new JavaScriptFunctionDotCallTargetSelector(result));
|
||||
|
|
|
@ -75,7 +75,7 @@ public class OptimisticCallgraphBuilder extends FieldBasedCallGraphBuilder {
|
|||
|
||||
if(newEdge) {
|
||||
// handle it
|
||||
addEdge(flowgraph, edge.fst, edge.snd, monitor);
|
||||
addEdge(flowgraph, edge.fst, edge.snd);
|
||||
|
||||
// special handling of invocations of Function.prototype.call
|
||||
// TODO: since we've just added some edges to the flow graph, its transitive closure will be
|
||||
|
@ -93,7 +93,7 @@ public class OptimisticCallgraphBuilder extends FieldBasedCallGraphBuilder {
|
|||
}
|
||||
|
||||
// add flow corresponding to a new call edge
|
||||
private static void addEdge(FlowGraph flowgraph, CallVertex c, FuncVertex callee, IProgressMonitor monitor) {
|
||||
private static void addEdge(FlowGraph flowgraph, CallVertex c, FuncVertex callee) {
|
||||
VertexFactory factory = flowgraph.getVertexFactory();
|
||||
JavaScriptInvoke invk = c.getInstruction();
|
||||
FuncVertex caller = c.getCaller();
|
||||
|
|
|
@ -111,7 +111,7 @@ public class FlowGraph implements Iterable<Vertex> {
|
|||
public boolean test(Vertex t) {
|
||||
return t.accept(new AbstractVertexVisitor<Boolean>() {
|
||||
@Override
|
||||
public Boolean visitVertex(Vertex vertex) {
|
||||
public Boolean visitVertex() {
|
||||
return true;
|
||||
}
|
||||
|
||||
|
|
|
@ -16,67 +16,67 @@ package com.ibm.wala.cast.js.callgraph.fieldbased.flowgraph.vertices;
|
|||
* @author mschaefer
|
||||
*/
|
||||
public class AbstractVertexVisitor<T> implements VertexVisitor<T> {
|
||||
public T visitVertex(Vertex vertex) {
|
||||
public T visitVertex() {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public T visitVarVertex(VarVertex varVertex) {
|
||||
return visitVertex(varVertex);
|
||||
return visitVertex();
|
||||
}
|
||||
|
||||
@Override
|
||||
public T visitPropVertex(PropVertex propVertex) {
|
||||
return visitVertex(propVertex);
|
||||
return visitVertex();
|
||||
}
|
||||
|
||||
@Override
|
||||
public T visitUnknownVertex(UnknownVertex unknownVertex) {
|
||||
return visitVertex(unknownVertex);
|
||||
return visitVertex();
|
||||
}
|
||||
|
||||
@Override
|
||||
public T visitFuncVertex(FuncVertex funcVertex) {
|
||||
return visitVertex(funcVertex);
|
||||
return visitVertex();
|
||||
}
|
||||
|
||||
@Override
|
||||
public T visitCreationSiteVertex(CreationSiteVertex csVertex) {
|
||||
return visitVertex(csVertex);
|
||||
return visitVertex();
|
||||
}
|
||||
|
||||
@Override
|
||||
public T visitParamVertex(ParamVertex paramVertex) {
|
||||
return visitVertex(paramVertex);
|
||||
return visitVertex();
|
||||
}
|
||||
|
||||
@Override
|
||||
public T visitRetVertex(RetVertex retVertex) {
|
||||
return visitVertex(retVertex);
|
||||
return visitVertex();
|
||||
}
|
||||
|
||||
@Override
|
||||
public T visitArgVertex(ArgVertex argVertex) {
|
||||
return visitVertex(argVertex);
|
||||
return visitVertex();
|
||||
}
|
||||
|
||||
@Override
|
||||
public T visitCalleeVertex(CallVertex calleeVertex) {
|
||||
return visitVertex(calleeVertex);
|
||||
return visitVertex();
|
||||
}
|
||||
|
||||
@Override
|
||||
public T visitLexicalAccessVertex(LexicalVarVertex lexicalAccessVertex) {
|
||||
return visitVertex(lexicalAccessVertex);
|
||||
return visitVertex();
|
||||
}
|
||||
|
||||
@Override
|
||||
public T visitGlobalVertex(GlobalVertex globalVertex) {
|
||||
return visitVertex(globalVertex);
|
||||
return visitVertex();
|
||||
}
|
||||
|
||||
@Override
|
||||
public T visitPrototypeVertex(PrototypeFieldVertex protoVertex) {
|
||||
return visitVertex(protoVertex);
|
||||
return visitVertex();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -189,7 +189,7 @@ public abstract class JavaScriptAnalysisEngine<I extends InstanceKey> extends Ab
|
|||
|
||||
@Override
|
||||
protected CallGraphBuilder<InstanceKey> getCallGraphBuilder(IClassHierarchy cha, AnalysisOptions options, IAnalysisCacheView cache) {
|
||||
return new ZeroCFABuilderFactory().make((JSAnalysisOptions) options, cache, cha, scope, false);
|
||||
return new ZeroCFABuilderFactory().make((JSAnalysisOptions) options, cache, cha);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -14,7 +14,6 @@ import com.ibm.wala.cast.ipa.callgraph.StandardFunctionTargetSelector;
|
|||
import com.ibm.wala.cast.js.ipa.callgraph.JSAnalysisOptions;
|
||||
import com.ibm.wala.cast.js.ipa.callgraph.JSZeroOrOneXCFABuilder;
|
||||
import com.ibm.wala.ipa.callgraph.AnalysisCache;
|
||||
import com.ibm.wala.ipa.callgraph.AnalysisScope;
|
||||
import com.ibm.wala.ipa.callgraph.CallGraphBuilder;
|
||||
import com.ibm.wala.ipa.callgraph.propagation.InstanceKey;
|
||||
import com.ibm.wala.ipa.callgraph.propagation.cfa.ZeroXInstanceKeys;
|
||||
|
@ -27,8 +26,7 @@ import com.ibm.wala.ipa.cha.IClassHierarchy;
|
|||
*/
|
||||
public class OneCFABuilderFactory {
|
||||
|
||||
public CallGraphBuilder<InstanceKey> make(JSAnalysisOptions options, AnalysisCache cache, IClassHierarchy cha, AnalysisScope scope,
|
||||
boolean keepPointsTo) {
|
||||
public CallGraphBuilder<InstanceKey> make(JSAnalysisOptions options, AnalysisCache cache, IClassHierarchy cha) {
|
||||
com.ibm.wala.ipa.callgraph.impl.Util.addDefaultSelectors(options, cha);
|
||||
options.setSelector(new StandardFunctionTargetSelector(cha, options.getMethodTargetSelector()));
|
||||
|
||||
|
|
|
@ -13,7 +13,6 @@ package com.ibm.wala.cast.js.client.impl;
|
|||
import com.ibm.wala.cast.ipa.callgraph.StandardFunctionTargetSelector;
|
||||
import com.ibm.wala.cast.js.ipa.callgraph.JSAnalysisOptions;
|
||||
import com.ibm.wala.cast.js.ipa.callgraph.JSZeroOrOneXCFABuilder;
|
||||
import com.ibm.wala.ipa.callgraph.AnalysisScope;
|
||||
import com.ibm.wala.ipa.callgraph.CallGraphBuilder;
|
||||
import com.ibm.wala.ipa.callgraph.IAnalysisCacheView;
|
||||
import com.ibm.wala.ipa.callgraph.propagation.cfa.ZeroXInstanceKeys;
|
||||
|
@ -26,8 +25,7 @@ import com.ibm.wala.ipa.cha.IClassHierarchy;
|
|||
*/
|
||||
public class ZeroCFABuilderFactory {
|
||||
|
||||
public CallGraphBuilder make(JSAnalysisOptions options, IAnalysisCacheView cache, IClassHierarchy cha, AnalysisScope scope,
|
||||
boolean keepPointsTo) {
|
||||
public CallGraphBuilder make(JSAnalysisOptions options, IAnalysisCacheView cache, IClassHierarchy cha) {
|
||||
com.ibm.wala.ipa.callgraph.impl.Util.addDefaultSelectors(options, cha);
|
||||
options.setSelector(new StandardFunctionTargetSelector(cha, options.getMethodTargetSelector()));
|
||||
|
||||
|
|
|
@ -116,7 +116,7 @@ public class DefaultSourceExtractor extends DomLessSourceExtractor{
|
|||
for (Map.Entry<String, Pair<String, Position>> e : attrs.entrySet()){
|
||||
String attr = e.getKey();
|
||||
String value = e.getValue().fst;
|
||||
writeAttribute(tag, e.getValue().snd, attr, value, "this", varName);
|
||||
writeAttribute(tag, attr, value, "this", varName);
|
||||
}
|
||||
|
||||
if (tag.getName().equalsIgnoreCase("FORM")) {
|
||||
|
@ -143,7 +143,7 @@ public class DefaultSourceExtractor extends DomLessSourceExtractor{
|
|||
}
|
||||
}
|
||||
|
||||
inputElementCallback(tag);
|
||||
inputElementCallback();
|
||||
}
|
||||
|
||||
assert varName != null && !"".equals(varName);
|
||||
|
@ -152,16 +152,16 @@ public class DefaultSourceExtractor extends DomLessSourceExtractor{
|
|||
printlnIndented("parent.appendChild(this);", tag);
|
||||
}
|
||||
|
||||
protected void inputElementCallback(ITag tag) {
|
||||
protected void inputElementCallback() {
|
||||
// this space intentionally left blank
|
||||
}
|
||||
|
||||
protected void writeAttribute(ITag tag, Position pos, String attr, String value, String varName, String varName2) {
|
||||
protected void writeAttribute(ITag tag, String attr, String value, String varName, String varName2) {
|
||||
writePortletAttribute(tag, attr, value, varName);
|
||||
writeEventAttribute(tag, pos, attr, value, varName, varName2);
|
||||
writeEventAttribute(tag, attr, value, varName, varName2);
|
||||
}
|
||||
|
||||
protected void writeEventAttribute(ITag tag, Position pos, String attr, String value, String varName, String varName2){
|
||||
protected void writeEventAttribute(ITag tag, String attr, String value, String varName, String varName2){
|
||||
//There should probably be more checking to see what the attributes are since we allow things like: ; to be used as attributes now.
|
||||
if(attr.length() >= 2 && attr.substring(0,2).equals("on")) {
|
||||
printlnIndented(varName + "." + attr + " = function " + tag.getName().toLowerCase() + "_" + attr + "(event) {" + value + "};", tag);
|
||||
|
|
|
@ -88,11 +88,7 @@ public class DomLessSourceExtractor extends JSSourceExtractor {
|
|||
writeEntrypoint("window.onload();");
|
||||
}
|
||||
|
||||
protected Position makePos(int lineNumber, ITag governingTag) {
|
||||
return makePos(entrypointUrl, lineNumber, governingTag);
|
||||
}
|
||||
|
||||
protected Position makePos(final URL url, final int lineNumber, ITag governingTag) {
|
||||
protected Position makePos(ITag governingTag) {
|
||||
return governingTag.getElementPosition();
|
||||
}
|
||||
|
||||
|
|
|
@ -20,7 +20,6 @@ import com.ibm.wala.ipa.callgraph.MethodTargetSelector;
|
|||
import com.ibm.wala.ipa.cha.IClassHierarchy;
|
||||
import com.ibm.wala.ssa.IR;
|
||||
import com.ibm.wala.ssa.SSAAbstractInvokeInstruction;
|
||||
import com.ibm.wala.types.MethodReference;
|
||||
|
||||
/**
|
||||
* generates instructions to simulate the semantics of JS constructor invocations
|
||||
|
@ -54,11 +53,7 @@ public class JavaScriptConstructTargetSelector implements MethodTargetSelector {
|
|||
}
|
||||
}
|
||||
|
||||
public boolean mightReturnSyntheticMethod(CGNode caller, CallSiteReference site) {
|
||||
return true;
|
||||
}
|
||||
|
||||
public boolean mightReturnSyntheticMethod(MethodReference declaredTarget) {
|
||||
public boolean mightReturnSyntheticMethod() {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -135,7 +135,7 @@ public class JavaScriptFunctionDotCallTargetSelector implements MethodTargetSele
|
|||
return callModels.get(key);
|
||||
}
|
||||
JSInstructionFactory insts = (JSInstructionFactory) receiver.getClassLoader().getInstructionFactory();
|
||||
MethodReference ref = genSyntheticMethodRef(receiver, nargs, key);
|
||||
MethodReference ref = genSyntheticMethodRef(receiver, key);
|
||||
JavaScriptSummary S = new JavaScriptSummary(ref, nargs);
|
||||
|
||||
if(WARN_ABOUT_IMPRECISE_CALLGRAPH && caller.getMethod().getName().toString().contains(SYNTHETIC_CALL_METHOD_PREFIX))
|
||||
|
@ -175,7 +175,7 @@ public class JavaScriptFunctionDotCallTargetSelector implements MethodTargetSele
|
|||
|
||||
public static final String SYNTHETIC_CALL_METHOD_PREFIX = "$$ call_";
|
||||
|
||||
private static MethodReference genSyntheticMethodRef(IClass receiver, int nargs, String key) {
|
||||
private static MethodReference genSyntheticMethodRef(IClass receiver, String key) {
|
||||
Atom atom = Atom.findOrCreateUnicodeAtom(SYNTHETIC_CALL_METHOD_PREFIX + key);
|
||||
Descriptor desc = Descriptor.findOrCreateUTF8(JavaScriptLoader.JS, "()LRoot;");
|
||||
MethodReference ref = MethodReference.findOrCreate(receiver.getReference(), atom, desc);
|
||||
|
|
|
@ -229,14 +229,14 @@ public abstract class CAstRewriterExt extends CAstRewriter<NodePos, NoKey> {
|
|||
enterEntity(root);
|
||||
CAstEntity entity = super.rewrite(root);
|
||||
rewrite_cache.put(root, entity);
|
||||
leaveEntity(root);
|
||||
leaveEntity();
|
||||
entities.pop();
|
||||
return entity;
|
||||
}
|
||||
}
|
||||
|
||||
protected void enterEntity(CAstEntity entity) {}
|
||||
protected void leaveEntity(CAstEntity entity) {}
|
||||
protected void enterEntity(@SuppressWarnings("unused") CAstEntity entity) {}
|
||||
protected void leaveEntity() {}
|
||||
|
||||
public CAstRewriterExt(CAst Ast, boolean recursive, NodePos rootContext) {
|
||||
super(Ast, recursive, rootContext);
|
||||
|
|
|
@ -200,7 +200,7 @@ public class ClosureExtractor extends CAstRewriterExt {
|
|||
}
|
||||
|
||||
@Override
|
||||
protected void leaveEntity(CAstEntity entity) {
|
||||
protected void leaveEntity() {
|
||||
policies.pop();
|
||||
}
|
||||
|
||||
|
@ -210,7 +210,7 @@ public class ClosureExtractor extends CAstRewriterExt {
|
|||
case OPERATOR:
|
||||
return root;
|
||||
case CONSTANT:
|
||||
return copyConstant(root, cfg, context, nodeMap);
|
||||
return copyConstant(root, context, nodeMap);
|
||||
case BLOCK_STMT:
|
||||
return copyBlock(root, cfg, context, nodeMap);
|
||||
case RETURN:
|
||||
|
@ -225,7 +225,7 @@ public class ClosureExtractor extends CAstRewriterExt {
|
|||
}
|
||||
|
||||
/* Constants are not affected by the rewriting, they are just copied. */
|
||||
private CAstNode copyConstant(CAstNode root, CAstControlFlowMap cfg, NodePos context, Map<Pair<CAstNode, NoKey>, CAstNode> nodeMap) {
|
||||
private CAstNode copyConstant(CAstNode root, NodePos context, Map<Pair<CAstNode, NoKey>, CAstNode> nodeMap) {
|
||||
CAstNode newNode = Ast.makeConstant(root.getValue());
|
||||
nodeMap.put(Pair.make(root, context.key()), newNode);
|
||||
return newNode;
|
||||
|
|
|
@ -89,12 +89,12 @@ public class CallGraph2JSON {
|
|||
|
||||
public static void serializeCallSite(AstMethod method, CallSiteReference callsite, Set<IMethod> targets,
|
||||
Map<String, Set<String>> edges) {
|
||||
Set<String> targetNames = MapUtil.findOrCreateSet(edges, ppPos(method, method.getSourcePosition(callsite.getProgramCounter())));
|
||||
Set<String> targetNames = MapUtil.findOrCreateSet(edges, ppPos(method.getSourcePosition(callsite.getProgramCounter())));
|
||||
for(IMethod target : targets) {
|
||||
target = getCallTargetMethod(target);
|
||||
if(!isRealFunction(target))
|
||||
continue;
|
||||
targetNames.add(ppPos((AstMethod)target, ((AstMethod)target).getSourcePosition()));
|
||||
targetNames.add(ppPos(((AstMethod)target).getSourcePosition()));
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -126,7 +126,7 @@ public class CallGraph2JSON {
|
|||
return false;
|
||||
}
|
||||
|
||||
private static String ppPos(AstMethod method, Position pos) {
|
||||
private static String ppPos(Position pos) {
|
||||
String file = pos.getURL().getFile();
|
||||
file = file.substring(file.lastIndexOf('/')+1);
|
||||
|
||||
|
|
|
@ -87,7 +87,7 @@ org.eclipse.jdt.core.compiler.problem.reportMethodCanBePotentiallyStatic=ignore
|
|||
org.eclipse.jdt.core.compiler.problem.reportMethodCanBeStatic=error
|
||||
org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled
|
||||
org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=error
|
||||
org.eclipse.jdt.core.compiler.problem.suppressOptionalErrors=disabled
|
||||
org.eclipse.jdt.core.compiler.problem.suppressOptionalErrors=enabled
|
||||
org.eclipse.jdt.core.compiler.problem.suppressWarnings=enabled
|
||||
org.eclipse.jdt.core.compiler.problem.syntacticNullAnalysisForFields=enabled
|
||||
org.eclipse.jdt.core.compiler.problem.syntheticAccessEmulation=ignore
|
||||
|
@ -112,7 +112,7 @@ org.eclipse.jdt.core.compiler.problem.unusedImport=error
|
|||
org.eclipse.jdt.core.compiler.problem.unusedLabel=error
|
||||
org.eclipse.jdt.core.compiler.problem.unusedLocal=error
|
||||
org.eclipse.jdt.core.compiler.problem.unusedObjectAllocation=error
|
||||
org.eclipse.jdt.core.compiler.problem.unusedParameter=warning
|
||||
org.eclipse.jdt.core.compiler.problem.unusedParameter=error
|
||||
org.eclipse.jdt.core.compiler.problem.unusedParameterIncludeDocCommentReference=enabled
|
||||
org.eclipse.jdt.core.compiler.problem.unusedParameterWhenImplementingAbstract=disabled
|
||||
org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=disabled
|
||||
|
|
|
@ -23,7 +23,6 @@ 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.ipa.cha.IClassHierarchy;
|
||||
import com.ibm.wala.ssa.IR;
|
||||
|
||||
public abstract class AstTypeInference extends TypeInference {
|
||||
|
@ -75,7 +74,7 @@ public abstract class AstTypeInference extends TypeInference {
|
|||
}
|
||||
}
|
||||
|
||||
public AstTypeInference(IR ir, IClassHierarchy cha, TypeAbstraction booleanType, boolean doPrimitives) {
|
||||
public AstTypeInference(IR ir, TypeAbstraction booleanType, boolean doPrimitives) {
|
||||
super(ir, doPrimitives);
|
||||
this.booleanType = booleanType;
|
||||
}
|
||||
|
|
|
@ -17,10 +17,7 @@ import com.ibm.wala.classLoader.CallSiteReference;
|
|||
import com.ibm.wala.classLoader.CodeScanner;
|
||||
import com.ibm.wala.classLoader.IMethod;
|
||||
import com.ibm.wala.classLoader.NewSiteReference;
|
||||
import com.ibm.wala.ipa.callgraph.AnalysisOptions;
|
||||
import com.ibm.wala.ipa.callgraph.CGNode;
|
||||
import com.ibm.wala.ipa.callgraph.Context;
|
||||
import com.ibm.wala.ipa.callgraph.IAnalysisCacheView;
|
||||
import com.ibm.wala.ipa.callgraph.*;
|
||||
import com.ibm.wala.ipa.callgraph.propagation.cfa.ContextInsensitiveSSAInterpreter;
|
||||
import com.ibm.wala.ssa.IR;
|
||||
import com.ibm.wala.util.collections.EmptyIterator;
|
||||
|
@ -37,7 +34,7 @@ public class AstContextInsensitiveSSAContextInterpreter extends ContextInsensiti
|
|||
super(options, cache);
|
||||
}
|
||||
|
||||
public boolean understands(IMethod method, Context context) {
|
||||
public boolean understands(IMethod method) {
|
||||
return method instanceof AstMethod;
|
||||
}
|
||||
|
||||
|
|
|
@ -18,19 +18,8 @@ import java.util.Set;
|
|||
import com.ibm.wala.analysis.reflection.ReflectionContextInterpreter;
|
||||
import com.ibm.wala.cast.ipa.callgraph.AstCallGraph.AstCGNode;
|
||||
import com.ibm.wala.cast.ipa.callgraph.ScopeMappingInstanceKeys.ScopeMappingInstanceKey;
|
||||
import com.ibm.wala.cast.ir.ssa.AstAssertInstruction;
|
||||
import com.ibm.wala.cast.ir.ssa.AstEchoInstruction;
|
||||
import com.ibm.wala.cast.ir.ssa.AstGlobalRead;
|
||||
import com.ibm.wala.cast.ir.ssa.AstGlobalWrite;
|
||||
import com.ibm.wala.cast.ir.ssa.AstIRFactory;
|
||||
import com.ibm.wala.cast.ir.ssa.AstInstructionVisitor;
|
||||
import com.ibm.wala.cast.ir.ssa.AstIsDefinedInstruction;
|
||||
import com.ibm.wala.cast.ir.ssa.AstLexicalAccess;
|
||||
import com.ibm.wala.cast.ir.ssa.*;
|
||||
import com.ibm.wala.cast.ir.ssa.AstLexicalAccess.Access;
|
||||
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.translator.AstTranslator;
|
||||
import com.ibm.wala.cast.loader.AstMethod;
|
||||
import com.ibm.wala.cast.loader.AstMethod.LexicalInformation;
|
||||
|
@ -102,6 +91,7 @@ public abstract class AstSSAPropagationCallGraphBuilder extends SSAPropagationCa
|
|||
* each language can specify whether a particular field name should be stored
|
||||
* in object catalogs or not. By default, always return false.
|
||||
*/
|
||||
@SuppressWarnings("unused")
|
||||
protected boolean isUncataloguedField(IClass type, String fieldName) {
|
||||
return false;
|
||||
}
|
||||
|
@ -357,8 +347,8 @@ public abstract class AstSSAPropagationCallGraphBuilder extends SSAPropagationCa
|
|||
return ((AstPointerKeyFactory) getBuilder().getPointerKeyFactory()).getPointerKeysForReflectedFieldWrite(I, F);
|
||||
}
|
||||
|
||||
private static void visitLexical(AstLexicalAccess instruction, final LexicalOperator op) {
|
||||
op.doLexicalPointerKeys(false);
|
||||
private static void visitLexical(final LexicalOperator op) {
|
||||
op.doLexicalPointerKeys();
|
||||
// I have no idea what the code below does, but commenting it out doesn't
|
||||
// break any regression tests. --MS
|
||||
// if (! checkLexicalInstruction(instruction)) {
|
||||
|
@ -370,7 +360,7 @@ public abstract class AstSSAPropagationCallGraphBuilder extends SSAPropagationCa
|
|||
|
||||
@Override
|
||||
public void visitAstLexicalRead(AstLexicalRead instruction) {
|
||||
visitLexical(instruction, new LexicalOperator((AstCGNode) node, instruction.getAccesses(), true) {
|
||||
visitLexical(new LexicalOperator((AstCGNode) node, instruction.getAccesses(), true) {
|
||||
@Override
|
||||
protected void action(PointerKey lexicalKey, int vn) {
|
||||
PointerKey lval = getPointerKeyForLocal(vn);
|
||||
|
@ -400,7 +390,7 @@ public abstract class AstSSAPropagationCallGraphBuilder extends SSAPropagationCa
|
|||
|
||||
@Override
|
||||
public void visitAstLexicalWrite(AstLexicalWrite instruction) {
|
||||
visitLexical(instruction, new LexicalOperator((AstCGNode) node, instruction.getAccesses(), false) {
|
||||
visitLexical(new LexicalOperator((AstCGNode) node, instruction.getAccesses(), false) {
|
||||
@Override
|
||||
protected void action(PointerKey lexicalKey, int vn) {
|
||||
PointerKey rval = getPointerKeyForLocal(vn);
|
||||
|
@ -618,7 +608,7 @@ public abstract class AstSSAPropagationCallGraphBuilder extends SSAPropagationCa
|
|||
* {@link AstConstraintVisitor#handleRootLexicalReference(String, String, CGNode)}
|
||||
* .
|
||||
*/
|
||||
private void doLexicalPointerKeys(boolean funargsOnly) {
|
||||
private void doLexicalPointerKeys() {
|
||||
for (int i = 0; i < accesses.length; i++) {
|
||||
final String name = accesses[i].variableName;
|
||||
final String definer = accesses[i].variableDefiner;
|
||||
|
@ -640,7 +630,7 @@ public abstract class AstSSAPropagationCallGraphBuilder extends SSAPropagationCa
|
|||
|
||||
@Override
|
||||
public byte evaluate(PointsToSetVariable lhs, PointsToSetVariable rhs) {
|
||||
doLexicalPointerKeys(true);
|
||||
doLexicalPointerKeys();
|
||||
return NOT_CHANGED;
|
||||
}
|
||||
|
||||
|
|
|
@ -81,7 +81,7 @@ public abstract class ScriptEntryPoints implements Iterable<Entrypoint> {
|
|||
|
||||
protected abstract CallSiteReference makeScriptSite(IMethod m, int pc);
|
||||
|
||||
protected boolean keep(IMethod method) {
|
||||
protected boolean keep() {
|
||||
return true;
|
||||
}
|
||||
|
||||
|
@ -93,7 +93,7 @@ public abstract class ScriptEntryPoints implements Iterable<Entrypoint> {
|
|||
IClass cls = classes.next();
|
||||
if (cha.isSubclassOf(cls, scriptType) && !cls.isAbstract()) {
|
||||
for (IMethod method : cls.getDeclaredMethods()) {
|
||||
if (keep(method)) {
|
||||
if (keep()) {
|
||||
ES.add(new ScriptEntryPoint(method));
|
||||
}
|
||||
}
|
||||
|
@ -107,7 +107,7 @@ public abstract class ScriptEntryPoints implements Iterable<Entrypoint> {
|
|||
IClass cls = cha.lookupClass(TypeReference.findOrCreate(scriptType.getClassLoader().getReference(), scriptName));
|
||||
assert cls != null && cha.isSubclassOf(cls, scriptType) && !cls.isAbstract() : String.valueOf(cls) + " for " + scriptName;
|
||||
for (IMethod method : cls.getDeclaredMethods()) {
|
||||
if (keep(method)) {
|
||||
if (keep()) {
|
||||
return new ScriptEntryPoint(method);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -19,7 +19,6 @@ 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.ClassLoaderReference;
|
||||
import com.ibm.wala.types.MethodReference;
|
||||
import com.ibm.wala.types.TypeReference;
|
||||
|
||||
public class StandardFunctionTargetSelector implements MethodTargetSelector {
|
||||
|
@ -67,11 +66,7 @@ public class StandardFunctionTargetSelector implements MethodTargetSelector {
|
|||
}
|
||||
}
|
||||
|
||||
public boolean mightReturnSyntheticMethod(CGNode caller, CallSiteReference site) {
|
||||
return true;
|
||||
}
|
||||
|
||||
public boolean mightReturnSyntheticMethod(MethodReference declaredTarget) {
|
||||
public boolean mightReturnSyntheticMethod() {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -426,7 +426,7 @@ public abstract class AbstractSSAConversion {
|
|||
return newDefs;
|
||||
}
|
||||
|
||||
protected boolean skipRepair(SSAInstruction inst, int index) {
|
||||
protected boolean skipRepair(SSAInstruction inst, @SuppressWarnings("unused") int index) {
|
||||
if (inst == null)
|
||||
return true;
|
||||
for (int i = 0; i < getNumberOfDefs(inst); i++)
|
||||
|
|
|
@ -36,7 +36,7 @@ import com.ibm.wala.types.TypeReference;
|
|||
|
||||
public class AstIRFactory<T extends IMethod> implements IRFactory<T> {
|
||||
|
||||
public ControlFlowGraph<?, ?> makeCFG(final IMethod method, final Context context) {
|
||||
public ControlFlowGraph<?, ?> makeCFG(final IMethod method) {
|
||||
return ((AstMethod) method).getControlFlowGraph();
|
||||
}
|
||||
|
||||
|
@ -63,7 +63,7 @@ public class AstIRFactory<T extends IMethod> implements IRFactory<T> {
|
|||
@Override
|
||||
public ControlFlowGraph makeCFG(IMethod method, Context context) {
|
||||
if (method instanceof AstMethod) {
|
||||
return astFactory.makeCFG(method, context);
|
||||
return astFactory.makeCFG(method);
|
||||
} else {
|
||||
return super.makeCFG(method, context);
|
||||
}
|
||||
|
|
|
@ -245,8 +245,7 @@ public abstract class AstTranslator extends CAstVisitor<AstTranslator.WalkContex
|
|||
* an object literal (e.g., PHP). This method should be overridden to handle
|
||||
* such cases.
|
||||
*/
|
||||
protected void handleUnspecifiedLiteralKey(WalkContext context, CAstNode objectLiteralNode, int unspecifiedLiteralIndex,
|
||||
CAstVisitor<WalkContext> visitor) {
|
||||
protected void handleUnspecifiedLiteralKey() {
|
||||
Assertions.UNREACHABLE();
|
||||
}
|
||||
|
||||
|
@ -409,7 +408,7 @@ public abstract class AstTranslator extends CAstVisitor<AstTranslator.WalkContex
|
|||
/**
|
||||
* generate instructions for a read of a global
|
||||
*/
|
||||
protected int doGlobalRead(CAstNode node, WalkContext context, String name, TypeReference type) {
|
||||
protected int doGlobalRead(@SuppressWarnings("unused") CAstNode node, WalkContext context, String name, TypeReference type) {
|
||||
// Global variables can be treated as lexicals defined in the CG root, or
|
||||
if (treatGlobalsAsLexicallyScoped()) {
|
||||
|
||||
|
@ -450,6 +449,7 @@ public abstract class AstTranslator extends CAstVisitor<AstTranslator.WalkContex
|
|||
/**
|
||||
* generate instructions to check if ref has field, storing answer in result
|
||||
*/
|
||||
@SuppressWarnings("unused")
|
||||
protected void doIsFieldDefined(WalkContext context, int result, int ref, CAstNode field) {
|
||||
Assertions.UNREACHABLE();
|
||||
}
|
||||
|
@ -1945,7 +1945,7 @@ public abstract class AstTranslator extends CAstVisitor<AstTranslator.WalkContex
|
|||
};
|
||||
}
|
||||
|
||||
private Scope makeLocalScope(CAstNode s, final Scope parent) {
|
||||
private Scope makeLocalScope(final Scope parent) {
|
||||
return new AbstractScope(parent) {
|
||||
@Override
|
||||
public ScopeType type() {
|
||||
|
@ -3111,7 +3111,7 @@ public abstract class AstTranslator extends CAstVisitor<AstTranslator.WalkContex
|
|||
}
|
||||
}
|
||||
|
||||
protected String[] makeNameMap(CAstEntity n, Set<Scope> scopes, SSAInstruction[] insts) {
|
||||
protected String[] makeNameMap(CAstEntity n, Set<Scope> scopes, @SuppressWarnings("unused") SSAInstruction[] insts) {
|
||||
// all scopes share the same underlying symtab, which is what
|
||||
// size really refers to.
|
||||
String[] map = new String[scopes.iterator().next().size() + 1];
|
||||
|
@ -3252,7 +3252,7 @@ public abstract class AstTranslator extends CAstVisitor<AstTranslator.WalkContex
|
|||
if (n.getAST() == null) // presumably abstract
|
||||
declareFunction(n, context);
|
||||
else
|
||||
initFunctionEntity(n, context, codeContext);
|
||||
initFunctionEntity(codeContext);
|
||||
return false;
|
||||
}
|
||||
|
||||
|
@ -3270,7 +3270,7 @@ public abstract class AstTranslator extends CAstVisitor<AstTranslator.WalkContex
|
|||
@Override
|
||||
protected boolean visitScriptEntity(CAstEntity n, WalkContext context, WalkContext codeContext, CAstVisitor<WalkContext> visitor) {
|
||||
declareFunction(n, codeContext);
|
||||
initFunctionEntity(n, context, codeContext);
|
||||
initFunctionEntity(codeContext);
|
||||
return false;
|
||||
}
|
||||
|
||||
|
@ -3279,7 +3279,7 @@ public abstract class AstTranslator extends CAstVisitor<AstTranslator.WalkContex
|
|||
closeFunctionEntity(n, context, codeContext);
|
||||
}
|
||||
|
||||
public void initFunctionEntity(final CAstEntity n, WalkContext parentContext, WalkContext functionContext) {
|
||||
public void initFunctionEntity(WalkContext functionContext) {
|
||||
// entry block
|
||||
functionContext.cfg().makeEntryBlock(functionContext.cfg().newBlock(false));
|
||||
// first real block
|
||||
|
@ -3323,7 +3323,7 @@ public abstract class AstTranslator extends CAstVisitor<AstTranslator.WalkContex
|
|||
|
||||
@Override
|
||||
protected WalkContext makeLocalContext(WalkContext context, CAstNode n) {
|
||||
return new LocalContext(context, makeLocalScope(n, context.currentScope()));
|
||||
return new LocalContext(context, makeLocalScope(context.currentScope()));
|
||||
}
|
||||
|
||||
|
||||
|
@ -3935,7 +3935,7 @@ public abstract class AstTranslator extends CAstVisitor<AstTranslator.WalkContex
|
|||
protected void leaveObjectLiteralFieldInit(CAstNode n, int i, WalkContext c, CAstVisitor<WalkContext> visitor) {
|
||||
WalkContext context = c;
|
||||
if (n.getChild(i).getKind() == CAstNode.EMPTY) {
|
||||
handleUnspecifiedLiteralKey(context, n, i, visitor);
|
||||
handleUnspecifiedLiteralKey();
|
||||
}
|
||||
doFieldWrite(context, c.getValue(n.getChild(0)), n.getChild(i), n, c.getValue(n.getChild(i + 1)));
|
||||
}
|
||||
|
@ -4005,7 +4005,7 @@ public abstract class AstTranslator extends CAstVisitor<AstTranslator.WalkContex
|
|||
}
|
||||
|
||||
/* Prereq: a.getKind() == ASSIGN_PRE_OP || a.getKind() == ASSIGN_POST_OP */
|
||||
protected int processAssignOp(CAstNode n, CAstNode v, CAstNode a, int temp, boolean post, WalkContext c) {
|
||||
protected int processAssignOp(CAstNode v, CAstNode a, int temp, WalkContext c) {
|
||||
WalkContext context = c;
|
||||
int rval = c.getValue(v);
|
||||
CAstNode op = a.getChild(2);
|
||||
|
@ -4047,7 +4047,7 @@ public abstract class AstTranslator extends CAstVisitor<AstTranslator.WalkContex
|
|||
int temp = context.currentScope().allocateTempValue();
|
||||
int[] dims = gatherArrayDims(c, n);
|
||||
arrayOpHandler.doArrayRead(context, temp, c.getValue(n.getChild(0)), n, dims);
|
||||
int rval = processAssignOp(n, v, a, temp, !pre, c);
|
||||
int rval = processAssignOp(v, a, temp, c);
|
||||
c.setValue(n, pre ? rval : temp);
|
||||
arrayOpHandler.doArrayWrite(context, c.getValue(n.getChild(0)), n, dims, rval);
|
||||
}
|
||||
|
@ -4065,9 +4065,6 @@ public abstract class AstTranslator extends CAstVisitor<AstTranslator.WalkContex
|
|||
doFieldWrite(context, c.getValue(n.getChild(0)), n.getChild(1), n, rval);
|
||||
}
|
||||
|
||||
protected void processObjectRefAssignOp(CAstNode n, CAstNode v, CAstNode a, WalkContext c) {
|
||||
}
|
||||
|
||||
@Override
|
||||
protected boolean visitObjectRefAssignOp(CAstNode n, CAstNode v, CAstNode a, boolean pre, WalkContext c, CAstVisitor<WalkContext> visitor) { /* empty */
|
||||
return false;
|
||||
|
@ -4078,7 +4075,7 @@ public abstract class AstTranslator extends CAstVisitor<AstTranslator.WalkContex
|
|||
WalkContext context = c;
|
||||
int temp = context.currentScope().allocateTempValue();
|
||||
doFieldRead(context, temp, c.getValue(n.getChild(0)), n.getChild(1), n);
|
||||
int rval = processAssignOp(n, v, a, temp, !pre, c);
|
||||
int rval = processAssignOp(v, a, temp, c);
|
||||
c.setValue(n, pre ? rval : temp);
|
||||
doFieldWrite(context, c.getValue(n.getChild(0)), n.getChild(1), n, rval);
|
||||
}
|
||||
|
@ -4159,7 +4156,7 @@ public abstract class AstTranslator extends CAstVisitor<AstTranslator.WalkContex
|
|||
c.setValue(n, ret);
|
||||
}
|
||||
|
||||
int rval = processAssignOp(n, v, a, temp, !pre, c);
|
||||
int rval = processAssignOp(v, a, temp, c);
|
||||
|
||||
if (pre) {
|
||||
c.setValue(n, rval);
|
||||
|
|
|
@ -133,6 +133,7 @@ public abstract class CAstRewriter<C extends CAstRewriter.RewriteContext<K>, K e
|
|||
* rewritten AST? By default, just uses the original target.
|
||||
*
|
||||
*/
|
||||
@SuppressWarnings("unused")
|
||||
protected CAstNode flowOutTo(Map<Pair<CAstNode, K>, CAstNode> nodeMap, CAstNode oldSource, Object label, CAstNode oldTarget,
|
||||
CAstControlFlowMap orig, CAstSourcePositionMap src) {
|
||||
return oldTarget;
|
||||
|
@ -307,7 +308,7 @@ public abstract class CAstRewriter<C extends CAstRewriter.RewriteContext<K>, K e
|
|||
}
|
||||
}
|
||||
|
||||
protected Map<CAstNode, Collection<CAstEntity>> copyChildren(CAstNode root, Map<Pair<CAstNode, K>, CAstNode> nodeMap,
|
||||
protected Map<CAstNode, Collection<CAstEntity>> copyChildren(@SuppressWarnings("unused") CAstNode root, Map<Pair<CAstNode, K>, CAstNode> nodeMap,
|
||||
Map<CAstNode, Collection<CAstEntity>> children) {
|
||||
final Map<CAstNode, Collection<CAstEntity>> newChildren = new LinkedHashMap<>();
|
||||
|
||||
|
|
|
@ -86,7 +86,7 @@ public abstract class CAstVisitor<C extends CAstVisitor.Context> {
|
|||
* @param context a visitor-specific context in which the unwind was visited
|
||||
* @param n the unwind node
|
||||
*/
|
||||
protected C makeUnwindContext(C context, CAstNode n, CAstVisitor<C> visitor) { return context; }
|
||||
protected C makeUnwindContext(C context, CAstNode n, @SuppressWarnings("unused") CAstVisitor<C> visitor) { return context; }
|
||||
|
||||
private final Map<CAstEntity, CAstEntity> entityParents = HashMapFactory.make();
|
||||
|
||||
|
@ -114,6 +114,7 @@ public abstract class CAstVisitor<C extends CAstVisitor.Context> {
|
|||
* Should invoke super.doVisitEntity() for unprocessed entities.
|
||||
* @return true if entity was handled
|
||||
*/
|
||||
@SuppressWarnings("unused")
|
||||
protected boolean doVisitEntity(CAstEntity n, C context, CAstVisitor<C> visitor) {
|
||||
return false;
|
||||
}
|
||||
|
@ -239,13 +240,13 @@ public abstract class CAstVisitor<C extends CAstVisitor.Context> {
|
|||
* @param context a visitor-specific context
|
||||
* @return true if no further processing is needed
|
||||
*/
|
||||
protected boolean enterEntity(CAstEntity n, C context, CAstVisitor<C> visitor) { return false; }
|
||||
protected boolean enterEntity(CAstEntity n, C context, @SuppressWarnings("unused") CAstVisitor<C> visitor) { return false; }
|
||||
/**
|
||||
* Post-process an entity after visiting it.
|
||||
* @param n the entity to process
|
||||
* @param context a visitor-specific context
|
||||
*/
|
||||
protected void postProcessEntity(CAstEntity n, C context, CAstVisitor<C> visitor) { return; }
|
||||
protected void postProcessEntity(CAstEntity n, C context, @SuppressWarnings("unused") CAstVisitor<C> visitor) { return; }
|
||||
|
||||
/**
|
||||
* Visit any entity. Override only this to change behavior for all entities.
|
||||
|
@ -253,13 +254,13 @@ public abstract class CAstVisitor<C extends CAstVisitor.Context> {
|
|||
* @param context a visitor-specific context
|
||||
* @return true if no further processing is needed
|
||||
*/
|
||||
public boolean visitEntity(CAstEntity n, C context, CAstVisitor<C> visitor) { return false; }
|
||||
public boolean visitEntity(CAstEntity n, C context, @SuppressWarnings("unused") CAstVisitor<C> visitor) { return false; }
|
||||
/**
|
||||
* Leave any entity. Override only this to change behavior for all entities.
|
||||
* @param n the entity to process
|
||||
* @param context a visitor-specific context
|
||||
*/
|
||||
public void leaveEntity(CAstEntity n, C context, CAstVisitor<C> visitor) { return; }
|
||||
public void leaveEntity(CAstEntity n, C context, @SuppressWarnings("unused") CAstVisitor<C> visitor) { return; }
|
||||
|
||||
/**
|
||||
* Visit a File entity.
|
||||
|
@ -371,6 +372,7 @@ public abstract class CAstVisitor<C extends CAstVisitor.Context> {
|
|||
*
|
||||
* @return true if node was handled
|
||||
*/
|
||||
@SuppressWarnings("unused")
|
||||
protected boolean doVisit(CAstNode n, C context, CAstVisitor<C> visitor) {
|
||||
return false;
|
||||
}
|
||||
|
@ -384,7 +386,7 @@ public abstract class CAstVisitor<C extends CAstVisitor.Context> {
|
|||
*
|
||||
* @return true if node was handled
|
||||
*/
|
||||
protected boolean doVisitAssignNodes(CAstNode n, C context, CAstNode v, CAstNode a, CAstVisitor<C> visitor) {
|
||||
protected boolean doVisitAssignNodes() {
|
||||
return false;
|
||||
}
|
||||
|
||||
|
@ -889,7 +891,7 @@ public abstract class CAstVisitor<C extends CAstVisitor.Context> {
|
|||
visitor.leaveNode(n, context, visitor);
|
||||
}
|
||||
|
||||
protected C makeSpecialParentContext(C context, CAstNode n) {
|
||||
protected C makeSpecialParentContext(C context, @SuppressWarnings("unused") CAstNode n) {
|
||||
return context;
|
||||
}
|
||||
|
||||
|
@ -966,7 +968,7 @@ public abstract class CAstVisitor<C extends CAstVisitor.Context> {
|
|||
}
|
||||
|
||||
default: {
|
||||
if (!visitor.doVisitAssignNodes(n, context, v, a, visitor)) {
|
||||
if (!visitor.doVisitAssignNodes()) {
|
||||
if (DEBUG) {
|
||||
System.err.println(("cannot handle assign to kind " + n.getKind()));
|
||||
}
|
||||
|
@ -983,13 +985,13 @@ public abstract class CAstVisitor<C extends CAstVisitor.Context> {
|
|||
* @param c a visitor-specific context
|
||||
* @return true if no further processing is needed
|
||||
*/
|
||||
protected boolean enterNode(CAstNode n, C c, CAstVisitor<C> visitor) { return false; }
|
||||
protected boolean enterNode(CAstNode n, C c, @SuppressWarnings("unused") CAstVisitor<C> visitor) { return false; }
|
||||
/**
|
||||
* Post-process a node after visiting it.
|
||||
* @param n the node to process
|
||||
* @param c a visitor-specific context
|
||||
*/
|
||||
protected void postProcessNode(CAstNode n, C c, CAstVisitor<C> visitor) { return; }
|
||||
protected void postProcessNode(CAstNode n, C c, @SuppressWarnings("unused") CAstVisitor<C> visitor) { return; }
|
||||
|
||||
/**
|
||||
* Visit any node. Override only this to change behavior for all nodes.
|
||||
|
@ -997,13 +999,13 @@ public abstract class CAstVisitor<C extends CAstVisitor.Context> {
|
|||
* @param c a visitor-specific context
|
||||
* @return true if no further processing is needed
|
||||
*/
|
||||
public boolean visitNode(CAstNode n, C c, CAstVisitor<C> visitor) { return false; }
|
||||
public boolean visitNode(CAstNode n, C c, @SuppressWarnings("unused") CAstVisitor<C> visitor) { return false; }
|
||||
/**
|
||||
* Leave any node. Override only this to change behavior for all nodes.
|
||||
* @param n the node to process
|
||||
* @param c a visitor-specific context
|
||||
*/
|
||||
public void leaveNode(CAstNode n, C c, CAstVisitor<C> visitor) { return; }
|
||||
public void leaveNode(CAstNode n, C c, @SuppressWarnings("unused") CAstVisitor<C> visitor) { return; }
|
||||
|
||||
/**
|
||||
* Visit a FunctionExpr node.
|
||||
|
@ -1089,7 +1091,7 @@ public abstract class CAstVisitor<C extends CAstVisitor.Context> {
|
|||
* @param n the node to process
|
||||
* @param c a visitor-specific context
|
||||
*/
|
||||
protected void leaveLoopHeader(CAstNode n, C c, CAstVisitor<C> visitor) { /* empty */ }
|
||||
protected void leaveLoopHeader(CAstNode n, C c, @SuppressWarnings("unused") CAstVisitor<C> visitor) { /* empty */ }
|
||||
/**
|
||||
* Leave a Loop node.
|
||||
* @param n the node to process
|
||||
|
@ -1309,13 +1311,13 @@ public abstract class CAstVisitor<C extends CAstVisitor.Context> {
|
|||
* @param n the node to process
|
||||
* @param c a visitor-specific context
|
||||
*/
|
||||
protected void leaveIfStmtCondition(CAstNode n, C c, CAstVisitor<C> visitor) { /* empty */ }
|
||||
protected void leaveIfStmtCondition(CAstNode n, C c, @SuppressWarnings("unused") CAstVisitor<C> visitor) { /* empty */ }
|
||||
/**
|
||||
* Visit an IfStmt node after processing the true clause.
|
||||
* @param n the node to process
|
||||
* @param c a visitor-specific context
|
||||
*/
|
||||
protected void leaveIfStmtTrueClause(CAstNode n, C c, CAstVisitor<C> visitor) { /* empty */ }
|
||||
protected void leaveIfStmtTrueClause(CAstNode n, C c, @SuppressWarnings("unused") CAstVisitor<C> visitor) { /* empty */ }
|
||||
/**
|
||||
* Leave an IfStmt node.
|
||||
* @param n the node to process
|
||||
|
@ -1334,13 +1336,13 @@ public abstract class CAstVisitor<C extends CAstVisitor.Context> {
|
|||
* @param n the node to process
|
||||
* @param c a visitor-specific context
|
||||
*/
|
||||
protected void leaveIfExprCondition(CAstNode n, C c, CAstVisitor<C> visitor) { /* empty */ }
|
||||
protected void leaveIfExprCondition(CAstNode n, C c, @SuppressWarnings("unused") CAstVisitor<C> visitor) { /* empty */ }
|
||||
/**
|
||||
* Visit an IfExpr node after processing the true clause.
|
||||
* @param n the node to process
|
||||
* @param c a visitor-specific context
|
||||
*/
|
||||
protected void leaveIfExprTrueClause(CAstNode n, C c, CAstVisitor<C> visitor) { /* empty */ }
|
||||
protected void leaveIfExprTrueClause(CAstNode n, C c, @SuppressWarnings("unused") CAstVisitor<C> visitor) { /* empty */ }
|
||||
/**
|
||||
* Leave an IfExpr node.
|
||||
* @param n the node to process
|
||||
|
@ -1373,7 +1375,7 @@ public abstract class CAstVisitor<C extends CAstVisitor.Context> {
|
|||
* @param i the field position that was initialized
|
||||
* @param c a visitor-specific context
|
||||
*/
|
||||
protected void leaveObjectLiteralFieldInit(CAstNode n, int i, C c, CAstVisitor<C> visitor) { /* empty */ }
|
||||
protected void leaveObjectLiteralFieldInit(CAstNode n, int i, C c, @SuppressWarnings("unused") CAstVisitor<C> visitor) { /* empty */ }
|
||||
/**
|
||||
* Leave an ObjectLiteral node.
|
||||
* @param n the node to process
|
||||
|
@ -1392,14 +1394,14 @@ public abstract class CAstVisitor<C extends CAstVisitor.Context> {
|
|||
* @param n the node to process
|
||||
* @param c a visitor-specific context
|
||||
*/
|
||||
protected void leaveArrayLiteralObject(CAstNode n, C c, CAstVisitor<C> visitor) { /* empty */ }
|
||||
protected void leaveArrayLiteralObject(CAstNode n, C c, @SuppressWarnings("unused") CAstVisitor<C> visitor) { /* empty */ }
|
||||
/**
|
||||
* Visit an ArrayLiteral node after processing the {i}th element initializer.
|
||||
* @param n the node to process
|
||||
* @param i the index that was initialized
|
||||
* @param c a visitor-specific context
|
||||
*/
|
||||
protected void leaveArrayLiteralInitElement(CAstNode n, int i, C c, CAstVisitor<C> visitor) { /* empty */ }
|
||||
protected void leaveArrayLiteralInitElement(CAstNode n, int i, C c, @SuppressWarnings("unused") CAstVisitor<C> visitor) { /* empty */ }
|
||||
/**
|
||||
* Leave a ArrayLiteral node.
|
||||
* @param n the node to process
|
||||
|
@ -1440,7 +1442,7 @@ public abstract class CAstVisitor<C extends CAstVisitor.Context> {
|
|||
* @param c a visitor-specific context
|
||||
* @return true if no further processing is needed
|
||||
*/
|
||||
protected boolean visitArrayRefAssign(CAstNode n, CAstNode v, CAstNode a, C c, CAstVisitor<C> visitor) { /* empty */ return false; }
|
||||
protected boolean visitArrayRefAssign(CAstNode n, CAstNode v, CAstNode a, C c, @SuppressWarnings("unused") CAstVisitor<C> visitor) { /* empty */ return false; }
|
||||
/**
|
||||
* Visit an ArrayRef Assignment node after visiting the LHS.
|
||||
* @param n the LHS node to process
|
||||
|
@ -1448,7 +1450,7 @@ public abstract class CAstVisitor<C extends CAstVisitor.Context> {
|
|||
* @param a the assignment node to process
|
||||
* @param c a visitor-specific context
|
||||
*/
|
||||
protected void leaveArrayRefAssign(CAstNode n, CAstNode v, CAstNode a, C c, CAstVisitor<C> visitor) { /* empty */ }
|
||||
protected void leaveArrayRefAssign(CAstNode n, CAstNode v, CAstNode a, C c, @SuppressWarnings("unused") CAstVisitor<C> visitor) { /* empty */ }
|
||||
/**
|
||||
* Visit an ArrayRef Op/Assignment node after visiting the RHS.
|
||||
* @param n the LHS node to process
|
||||
|
@ -1458,7 +1460,7 @@ public abstract class CAstVisitor<C extends CAstVisitor.Context> {
|
|||
* @param c a visitor-specific context
|
||||
* @return true if no further processing is needed
|
||||
*/
|
||||
protected boolean visitArrayRefAssignOp(CAstNode n, CAstNode v, CAstNode a, boolean pre, C c, CAstVisitor<C> visitor) { /* empty */ return false; }
|
||||
protected boolean visitArrayRefAssignOp(CAstNode n, CAstNode v, CAstNode a, boolean pre, C c, @SuppressWarnings("unused") CAstVisitor<C> visitor) { /* empty */ return false; }
|
||||
/**
|
||||
* Visit an ArrayRef Op/Assignment node after visiting the LHS.
|
||||
* @param n the LHS node to process
|
||||
|
@ -1467,7 +1469,7 @@ public abstract class CAstVisitor<C extends CAstVisitor.Context> {
|
|||
* @param pre whether the value before the operation should be used
|
||||
* @param c a visitor-specific context
|
||||
*/
|
||||
protected void leaveArrayRefAssignOp(CAstNode n, CAstNode v, CAstNode a, boolean pre, C c, CAstVisitor<C> visitor) { /* empty */ }
|
||||
protected void leaveArrayRefAssignOp(CAstNode n, CAstNode v, CAstNode a, boolean pre, C c, @SuppressWarnings("unused") CAstVisitor<C> visitor) { /* empty */ }
|
||||
/**
|
||||
* Visit an ObjectRef Assignment node after visiting the RHS.
|
||||
* @param n the LHS node to process
|
||||
|
@ -1476,7 +1478,7 @@ public abstract class CAstVisitor<C extends CAstVisitor.Context> {
|
|||
* @param c a visitor-specific context
|
||||
* @return true if no further processing is needed
|
||||
*/
|
||||
protected boolean visitObjectRefAssign(CAstNode n, CAstNode v, CAstNode a, C c, CAstVisitor<C> visitor) { /* empty */ return false; }
|
||||
protected boolean visitObjectRefAssign(CAstNode n, CAstNode v, CAstNode a, C c, @SuppressWarnings("unused") CAstVisitor<C> visitor) { /* empty */ return false; }
|
||||
/**
|
||||
* Visit an ObjectRef Assignment node after visiting the LHS.
|
||||
* @param n the LHS node to process
|
||||
|
@ -1484,7 +1486,7 @@ public abstract class CAstVisitor<C extends CAstVisitor.Context> {
|
|||
* @param a the assignment node to process
|
||||
* @param c a visitor-specific context
|
||||
*/
|
||||
protected void leaveObjectRefAssign(CAstNode n, CAstNode v, CAstNode a, C c, CAstVisitor<C> visitor) { /* empty */ }
|
||||
protected void leaveObjectRefAssign(CAstNode n, CAstNode v, CAstNode a, C c, @SuppressWarnings("unused") CAstVisitor<C> visitor) { /* empty */ }
|
||||
/**
|
||||
* Visit an ObjectRef Op/Assignment node after visiting the RHS.
|
||||
* @param n the LHS node to process
|
||||
|
@ -1494,7 +1496,7 @@ public abstract class CAstVisitor<C extends CAstVisitor.Context> {
|
|||
* @param c a visitor-specific context
|
||||
* @return true if no further processing is needed
|
||||
*/
|
||||
protected boolean visitObjectRefAssignOp(CAstNode n, CAstNode v, CAstNode a, boolean pre, C c, CAstVisitor<C> visitor) { /* empty */ return false; }
|
||||
protected boolean visitObjectRefAssignOp(CAstNode n, CAstNode v, CAstNode a, boolean pre, C c, @SuppressWarnings("unused") CAstVisitor<C> visitor) { /* empty */ return false; }
|
||||
/**
|
||||
* Visit an ObjectRef Op/Assignment node after visiting the LHS.
|
||||
* @param n the LHS node to process
|
||||
|
@ -1503,7 +1505,7 @@ public abstract class CAstVisitor<C extends CAstVisitor.Context> {
|
|||
* @param pre whether the value before the operation should be used
|
||||
* @param c a visitor-specific context
|
||||
*/
|
||||
protected void leaveObjectRefAssignOp(CAstNode n, CAstNode v, CAstNode a, boolean pre, C c, CAstVisitor<C> visitor) { /* empty */ }
|
||||
protected void leaveObjectRefAssignOp(CAstNode n, CAstNode v, CAstNode a, boolean pre, C c, @SuppressWarnings("unused") CAstVisitor<C> visitor) { /* empty */ }
|
||||
/**
|
||||
* Visit a BlockExpr Assignment node after visiting the RHS.
|
||||
* @param n the LHS node to process
|
||||
|
@ -1512,7 +1514,7 @@ public abstract class CAstVisitor<C extends CAstVisitor.Context> {
|
|||
* @param c a visitor-specific context
|
||||
* @return true if no further processing is needed
|
||||
*/
|
||||
protected boolean visitBlockExprAssign(CAstNode n, CAstNode v, CAstNode a, C c, CAstVisitor<C> visitor) { /* empty */ return false; }
|
||||
protected boolean visitBlockExprAssign(CAstNode n, CAstNode v, CAstNode a, C c, @SuppressWarnings("unused") CAstVisitor<C> visitor) { /* empty */ return false; }
|
||||
/**
|
||||
* Visit a BlockExpr Assignment node after visiting the LHS.
|
||||
* @param n the LHS node to process
|
||||
|
@ -1520,7 +1522,7 @@ public abstract class CAstVisitor<C extends CAstVisitor.Context> {
|
|||
* @param a the assignment node to process
|
||||
* @param c a visitor-specific context
|
||||
*/
|
||||
protected void leaveBlockExprAssign(CAstNode n, CAstNode v, CAstNode a, C c, CAstVisitor<C> visitor) { /* empty */ }
|
||||
protected void leaveBlockExprAssign(CAstNode n, CAstNode v, CAstNode a, C c, @SuppressWarnings("unused") CAstVisitor<C> visitor) { /* empty */ }
|
||||
/**
|
||||
* Visit a BlockExpr Op/Assignment node after visiting the RHS.
|
||||
* @param n the LHS node to process
|
||||
|
@ -1530,7 +1532,7 @@ public abstract class CAstVisitor<C extends CAstVisitor.Context> {
|
|||
* @param c a visitor-specific context
|
||||
* @return true if no further processing is needed
|
||||
*/
|
||||
protected boolean visitBlockExprAssignOp(CAstNode n, CAstNode v, CAstNode a, boolean pre, C c, CAstVisitor<C> visitor) { /* empty */ return false; }
|
||||
protected boolean visitBlockExprAssignOp(CAstNode n, CAstNode v, CAstNode a, boolean pre, C c, @SuppressWarnings("unused") CAstVisitor<C> visitor) { /* empty */ return false; }
|
||||
/**
|
||||
* Visit a BlockExpr Op/Assignment node after visiting the LHS.
|
||||
* @param n the LHS node to process
|
||||
|
@ -1539,7 +1541,7 @@ public abstract class CAstVisitor<C extends CAstVisitor.Context> {
|
|||
* @param pre whether the value before the operation should be used
|
||||
* @param c a visitor-specific context
|
||||
*/
|
||||
protected void leaveBlockExprAssignOp(CAstNode n, CAstNode v, CAstNode a, boolean pre, C c, CAstVisitor<C> visitor) { /* empty */ }
|
||||
protected void leaveBlockExprAssignOp(CAstNode n, CAstNode v, CAstNode a, boolean pre, C c, @SuppressWarnings("unused") CAstVisitor<C> visitor) { /* empty */ }
|
||||
/**
|
||||
* Visit a Var Assignment node after visiting the RHS.
|
||||
* @param n the LHS node to process
|
||||
|
@ -1548,7 +1550,7 @@ public abstract class CAstVisitor<C extends CAstVisitor.Context> {
|
|||
* @param c a visitor-specific context
|
||||
* @return true if no further processing is needed
|
||||
*/
|
||||
protected boolean visitVarAssign(CAstNode n, CAstNode v, CAstNode a, C c, CAstVisitor<C> visitor) { /* empty */ return false; }
|
||||
protected boolean visitVarAssign(CAstNode n, CAstNode v, CAstNode a, C c, @SuppressWarnings("unused") CAstVisitor<C> visitor) { /* empty */ return false; }
|
||||
/**
|
||||
* Visit a Var Assignment node after visiting the LHS.
|
||||
* @param n the LHS node to process
|
||||
|
@ -1556,7 +1558,7 @@ public abstract class CAstVisitor<C extends CAstVisitor.Context> {
|
|||
* @param a the assignment node to process
|
||||
* @param c a visitor-specific context
|
||||
*/
|
||||
protected void leaveVarAssign(CAstNode n, CAstNode v, CAstNode a, C c, CAstVisitor<C> visitor) { /* empty */ }
|
||||
protected void leaveVarAssign(CAstNode n, CAstNode v, CAstNode a, C c, @SuppressWarnings("unused") CAstVisitor<C> visitor) { /* empty */ }
|
||||
/**
|
||||
* Visit a Var Op/Assignment node after visiting the RHS.
|
||||
* @param n the LHS node to process
|
||||
|
@ -1566,7 +1568,7 @@ public abstract class CAstVisitor<C extends CAstVisitor.Context> {
|
|||
* @param c a visitor-specific context
|
||||
* @return true if no further processing is needed
|
||||
*/
|
||||
protected boolean visitVarAssignOp(CAstNode n, CAstNode v, CAstNode a, boolean pre, C c, CAstVisitor<C> visitor) { /* empty */ return false; }
|
||||
protected boolean visitVarAssignOp(CAstNode n, CAstNode v, CAstNode a, boolean pre, C c, @SuppressWarnings("unused") CAstVisitor<C> visitor) { /* empty */ return false; }
|
||||
/**
|
||||
* Visit a Var Op/Assignment node after visiting the LHS.
|
||||
* @param n the LHS node to process
|
||||
|
@ -1575,7 +1577,7 @@ public abstract class CAstVisitor<C extends CAstVisitor.Context> {
|
|||
* @param pre whether the value before the operation should be used
|
||||
* @param c a visitor-specific context
|
||||
*/
|
||||
protected void leaveVarAssignOp(CAstNode n, CAstNode v, CAstNode a, boolean pre, C c, CAstVisitor<C> visitor) { /* empty */ }
|
||||
protected void leaveVarAssignOp(CAstNode n, CAstNode v, CAstNode a, boolean pre, C c, @SuppressWarnings("unused") CAstVisitor<C> visitor) { /* empty */ }
|
||||
/**
|
||||
* Visit a Switch node.
|
||||
* @param n the node to process
|
||||
|
@ -1588,7 +1590,7 @@ public abstract class CAstVisitor<C extends CAstVisitor.Context> {
|
|||
* @param n the node to process
|
||||
* @param c a visitor-specific context
|
||||
*/
|
||||
protected void leaveSwitchValue(CAstNode n, C c, CAstVisitor<C> visitor) { /* empty */ }
|
||||
protected void leaveSwitchValue(CAstNode n, C c, @SuppressWarnings("unused") CAstVisitor<C> visitor) { /* empty */ }
|
||||
/**
|
||||
* Leave a Switch node.
|
||||
* @param n the node to process
|
||||
|
@ -1646,7 +1648,7 @@ public abstract class CAstVisitor<C extends CAstVisitor.Context> {
|
|||
* @param n the node to process
|
||||
* @param c a visitor-specific context
|
||||
*/
|
||||
protected void leaveTryBlock(CAstNode n, C c, CAstVisitor<C> visitor) { /* empty */ }
|
||||
protected void leaveTryBlock(CAstNode n, C c, @SuppressWarnings("unused") CAstVisitor<C> visitor) { /* empty */ }
|
||||
/**
|
||||
* Leave a Try node.
|
||||
* @param n the node to process
|
||||
|
|
|
@ -111,7 +111,7 @@ org.eclipse.jdt.core.compiler.problem.unusedImport=error
|
|||
org.eclipse.jdt.core.compiler.problem.unusedLabel=error
|
||||
org.eclipse.jdt.core.compiler.problem.unusedLocal=warning
|
||||
org.eclipse.jdt.core.compiler.problem.unusedObjectAllocation=error
|
||||
org.eclipse.jdt.core.compiler.problem.unusedParameter=ignore
|
||||
org.eclipse.jdt.core.compiler.problem.unusedParameter=error
|
||||
org.eclipse.jdt.core.compiler.problem.unusedParameterIncludeDocCommentReference=enabled
|
||||
org.eclipse.jdt.core.compiler.problem.unusedParameterWhenImplementingAbstract=disabled
|
||||
org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=disabled
|
||||
|
|
|
@ -223,13 +223,13 @@ public class CallGraphTest extends WalaTestCase {
|
|||
@Test public void testIO() throws ClassHierarchyException, IllegalArgumentException, CancelException, IOException {
|
||||
AnalysisScope scope = CallGraphTestUtil.makeJ2SEAnalysisScope("primordial.txt", CallGraphTestUtil.REGRESSION_EXCLUSIONS);
|
||||
ClassHierarchy cha = ClassHierarchyFactory.make(scope);
|
||||
Iterable<Entrypoint> entrypoints = makePrimordialPublicEntrypoints(scope, cha, "java/io");
|
||||
Iterable<Entrypoint> entrypoints = makePrimordialPublicEntrypoints(cha, "java/io");
|
||||
AnalysisOptions options = CallGraphTestUtil.makeAnalysisOptions(scope, entrypoints);
|
||||
|
||||
CallGraphTestUtil.buildZeroCFA(options, new AnalysisCacheImpl(), cha, scope, false);
|
||||
}
|
||||
|
||||
public static Iterable<Entrypoint> makePrimordialPublicEntrypoints(AnalysisScope scope, ClassHierarchy cha, String pkg) {
|
||||
public static Iterable<Entrypoint> makePrimordialPublicEntrypoints(ClassHierarchy cha, String pkg) {
|
||||
final HashSet<Entrypoint> result = HashSetFactory.make();
|
||||
for (IClass clazz : cha) {
|
||||
|
||||
|
@ -262,7 +262,7 @@ public class CallGraphTest extends WalaTestCase {
|
|||
"Java60RegressionExclusions.txt":
|
||||
"GUIExclusions.txt");
|
||||
ClassHierarchy cha = ClassHierarchyFactory.make(scope);
|
||||
Iterable<Entrypoint> entrypoints = makePrimordialMainEntrypoints(scope, cha);
|
||||
Iterable<Entrypoint> entrypoints = makePrimordialMainEntrypoints(cha);
|
||||
AnalysisOptions options = CallGraphTestUtil.makeAnalysisOptions(scope, entrypoints);
|
||||
|
||||
CallGraphTestUtil.buildZeroCFA(options, new AnalysisCacheImpl(), cha, scope, false);
|
||||
|
@ -288,7 +288,7 @@ public class CallGraphTest extends WalaTestCase {
|
|||
/**
|
||||
* make main entrypoints, even in the primordial loader.
|
||||
*/
|
||||
public static Iterable<Entrypoint> makePrimordialMainEntrypoints(AnalysisScope scope, ClassHierarchy cha) {
|
||||
public static Iterable<Entrypoint> makePrimordialMainEntrypoints(ClassHierarchy cha) {
|
||||
final Atom mainMethod = Atom.findOrCreateAsciiAtom("main");
|
||||
final HashSet<Entrypoint> result = HashSetFactory.make();
|
||||
for (IClass klass : cha) {
|
||||
|
|
|
@ -77,7 +77,7 @@ public class ScopeFileCallGraph {
|
|||
System.out.println(Warnings.asString());
|
||||
Warnings.clear();
|
||||
AnalysisOptions options = new AnalysisOptions();
|
||||
Iterable<Entrypoint> entrypoints = entryClass != null ? makePublicEntrypoints(scope, cha, entryClass) : Util.makeMainEntrypoints(scope, cha, mainClass);
|
||||
Iterable<Entrypoint> entrypoints = entryClass != null ? makePublicEntrypoints(cha, entryClass) : Util.makeMainEntrypoints(scope, cha, mainClass);
|
||||
options.setEntrypoints(entrypoints);
|
||||
// you can dial down reflection handling if you like
|
||||
// options.setReflectionOptions(ReflectionOptions.NONE);
|
||||
|
@ -97,7 +97,7 @@ public class ScopeFileCallGraph {
|
|||
System.out.println(CallGraphStats.getStats(cg));
|
||||
}
|
||||
|
||||
private static Iterable<Entrypoint> makePublicEntrypoints(AnalysisScope scope, IClassHierarchy cha, String entryClass) {
|
||||
private static Iterable<Entrypoint> makePublicEntrypoints(IClassHierarchy cha, String entryClass) {
|
||||
Collection<Entrypoint> result = new ArrayList<>();
|
||||
IClass klass = cha.lookupClass(TypeReference.findOrCreate(ClassLoaderReference.Application,
|
||||
StringStuff.deployment2CanonicalTypeString(entryClass)));
|
||||
|
|
|
@ -96,7 +96,7 @@ org.eclipse.jdt.core.compiler.problem.reportMethodCanBePotentiallyStatic=ignore
|
|||
org.eclipse.jdt.core.compiler.problem.reportMethodCanBeStatic=error
|
||||
org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled
|
||||
org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=error
|
||||
org.eclipse.jdt.core.compiler.problem.suppressOptionalErrors=disabled
|
||||
org.eclipse.jdt.core.compiler.problem.suppressOptionalErrors=enabled
|
||||
org.eclipse.jdt.core.compiler.problem.suppressWarnings=enabled
|
||||
org.eclipse.jdt.core.compiler.problem.syntacticNullAnalysisForFields=disabled
|
||||
org.eclipse.jdt.core.compiler.problem.syntheticAccessEmulation=ignore
|
||||
|
@ -121,7 +121,7 @@ org.eclipse.jdt.core.compiler.problem.unusedImport=error
|
|||
org.eclipse.jdt.core.compiler.problem.unusedLabel=error
|
||||
org.eclipse.jdt.core.compiler.problem.unusedLocal=warning
|
||||
org.eclipse.jdt.core.compiler.problem.unusedObjectAllocation=ignore
|
||||
org.eclipse.jdt.core.compiler.problem.unusedParameter=ignore
|
||||
org.eclipse.jdt.core.compiler.problem.unusedParameter=error
|
||||
org.eclipse.jdt.core.compiler.problem.unusedParameterIncludeDocCommentReference=enabled
|
||||
org.eclipse.jdt.core.compiler.problem.unusedParameterWhenImplementingAbstract=disabled
|
||||
org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=disabled
|
||||
|
|
|
@ -40,7 +40,7 @@ public class IntraproceduralNullPointerAnalysis {
|
|||
final NullPointerFrameWork<ISSABasicBlock> problem = new NullPointerFrameWork<ISSABasicBlock>(
|
||||
cfg, ir);
|
||||
this.solver = new NullPointerSolver<ISSABasicBlock>(problem, maxVarNum,
|
||||
paramValNum, ir, cfg.entry());
|
||||
ir, cfg.entry());
|
||||
try {
|
||||
this.solver.solve(NO_PROGRESS_MONITOR);
|
||||
} catch (final CancelException e) {
|
||||
|
|
|
@ -245,7 +245,7 @@ public class CloneInterpreter implements SSAContextInterpreter {
|
|||
|
||||
public Set getCaughtExceptions(CGNode node) {
|
||||
SSAInstruction[] statements = getIR(node).getInstructions();
|
||||
return CodeScanner.getCaughtExceptions(node.getMethod().getDeclaringClass().getClassLoader().getLanguage(), statements);
|
||||
return CodeScanner.getCaughtExceptions(statements);
|
||||
}
|
||||
|
||||
public boolean hasObjectArrayLoad(CGNode node) {
|
||||
|
|
|
@ -66,7 +66,7 @@ public class GetMethodContextSelector implements ContextSelector {
|
|||
*/
|
||||
@Override
|
||||
public Context getCalleeTarget(CGNode caller,CallSiteReference site,IMethod callee,InstanceKey[] receiver) {
|
||||
if (receiver != null && receiver.length > 0 && mayUnderstand(caller, site, callee, receiver[0])) {
|
||||
if (receiver != null && receiver.length > 0 && mayUnderstand(callee, receiver[0])) {
|
||||
if (DEBUG) {
|
||||
System.out.print("site := " + site + ", receiver := " + receiver[0]);
|
||||
}
|
||||
|
@ -147,7 +147,7 @@ public class GetMethodContextSelector implements ContextSelector {
|
|||
* This object understands a dispatch to {@link java.lang.Class#getMethod(String, Class...)}
|
||||
* or {@link java.lang.Class#getDeclaredMethod} when the receiver is a type constant.
|
||||
*/
|
||||
private static boolean mayUnderstand(CGNode caller,CallSiteReference site,IMethod targetMethod,InstanceKey instance) {
|
||||
private static boolean mayUnderstand(IMethod targetMethod,InstanceKey instance) {
|
||||
return UNDERSTOOD_METHOD_REFS.contains(targetMethod.getReference())
|
||||
&& getTypeConstant(instance) != null;
|
||||
}
|
||||
|
|
|
@ -50,7 +50,7 @@ class JavaLangClassContextSelector implements ContextSelector {
|
|||
*/
|
||||
@Override
|
||||
public Context getCalleeTarget(CGNode caller, CallSiteReference site, IMethod callee, InstanceKey[] receiver) {
|
||||
if (receiver != null && receiver.length > 0 && mayUnderstand(caller, site, callee, receiver[0])) {
|
||||
if (receiver != null && receiver.length > 0 && mayUnderstand(callee, receiver[0])) {
|
||||
return new JavaTypeContext(new PointType(getTypeConstant(receiver[0])));
|
||||
}
|
||||
return null;
|
||||
|
@ -82,7 +82,7 @@ class JavaLangClassContextSelector implements ContextSelector {
|
|||
/**
|
||||
* This object may understand a dispatch to Class.getContructor when the receiver is a type constant.
|
||||
*/
|
||||
private static boolean mayUnderstand(CGNode caller, CallSiteReference site, IMethod targetMethod, InstanceKey instance) {
|
||||
private static boolean mayUnderstand(IMethod targetMethod, InstanceKey instance) {
|
||||
return UNDERSTOOD_METHOD_REFS.contains(targetMethod.getReference()) && getTypeConstant(instance) != null;
|
||||
}
|
||||
|
||||
|
|
|
@ -49,7 +49,7 @@ class ReflectiveInvocationSelector implements ContextSelector {
|
|||
*/
|
||||
@Override
|
||||
public Context getCalleeTarget(CGNode caller, CallSiteReference site, IMethod callee, InstanceKey[] receiver) {
|
||||
if (receiver == null || receiver.length == 0 || !mayUnderstand(caller, site, callee, receiver[0])) {
|
||||
if (receiver == null || receiver.length == 0 || !mayUnderstand(callee, receiver[0])) {
|
||||
return null;
|
||||
}
|
||||
IR ir = caller.getIR();
|
||||
|
@ -105,7 +105,7 @@ class ReflectiveInvocationSelector implements ContextSelector {
|
|||
/**
|
||||
* This object may understand a dispatch to Constructor.newInstance().
|
||||
*/
|
||||
private static boolean mayUnderstand(CGNode caller, CallSiteReference site, IMethod targetMethod, InstanceKey instance) {
|
||||
private static boolean mayUnderstand(IMethod targetMethod, InstanceKey instance) {
|
||||
if (instance instanceof ConstantKey) {
|
||||
if (targetMethod.getReference().equals(ReflectiveInvocationInterpreter.METHOD_INVOKE) ||
|
||||
isConstructorConstant(instance)
|
||||
|
|
|
@ -82,7 +82,7 @@ public class ControlDependenceGraph<T> extends AbstractNumberedGraph<T> {
|
|||
for (Iterator<? extends T> ss = cfg.getSuccNodes(x); ss.hasNext();) {
|
||||
T s = ss.next();
|
||||
if (RDF.isDominatedBy(s, y)) {
|
||||
labels.add(makeEdgeLabel(x, y, s));
|
||||
labels.add(makeEdgeLabel(s));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -92,7 +92,7 @@ public class ControlDependenceGraph<T> extends AbstractNumberedGraph<T> {
|
|||
return controlDependence;
|
||||
}
|
||||
|
||||
protected Object makeEdgeLabel(T x, T y, T s) {
|
||||
protected Object makeEdgeLabel(T s) {
|
||||
return s;
|
||||
}
|
||||
|
||||
|
|
|
@ -137,7 +137,7 @@ public class IntraprocNullPointerAnalysis<T extends ISSABasicBlock> {
|
|||
final NullPointerFrameWork<T> problem = new NullPointerFrameWork<T>(cfg, ir);
|
||||
final int[] paramValNum = ir.getParameterValueNumbers();
|
||||
|
||||
solver = new NullPointerSolver<T>(problem, maxVarNum, paramValNum, cfg.entry(), ir, initialState);
|
||||
solver = new NullPointerSolver<T>(problem, maxVarNum, cfg.entry(), ir, initialState);
|
||||
|
||||
solver.solve(progress);
|
||||
|
||||
|
|
|
@ -28,11 +28,11 @@ public class NullPointerSolver<B extends ISSABasicBlock> extends DataflowSolver<
|
|||
private final B entry;
|
||||
private final IR ir;
|
||||
|
||||
public NullPointerSolver(NullPointerFrameWork<B> problem, int maxVarNum, int[] paramVarNum, IR ir, B entry) {
|
||||
this(problem, maxVarNum, paramVarNum, entry, ir, ParameterState.createDefault(ir.getMethod()));
|
||||
public NullPointerSolver(NullPointerFrameWork<B> problem, int maxVarNum, IR ir, B entry) {
|
||||
this(problem, maxVarNum, entry, ir, ParameterState.createDefault(ir.getMethod()));
|
||||
}
|
||||
|
||||
public NullPointerSolver(NullPointerFrameWork<B> problem, int maxVarNum, int[] paramVarNum, B entry, IR ir, ParameterState initialState) {
|
||||
public NullPointerSolver(NullPointerFrameWork<B> problem, int maxVarNum, B entry, IR ir, ParameterState initialState) {
|
||||
super(problem);
|
||||
this.maxVarNum = maxVarNum;
|
||||
this.parameterState = initialState;
|
||||
|
|
|
@ -320,7 +320,7 @@ public class ClassLoaderImpl implements IClassLoader {
|
|||
JarInputStream s = new JarInputStream(new ByteArrayInputStream(jarFileContents), false);
|
||||
JarEntry entry = null;
|
||||
while ((entry = s.getNextJarEntry()) != null) {
|
||||
byte[] entryBytes = getEntryBytes(entry, entrySizesForFile.get(entry.getName()), s);
|
||||
byte[] entryBytes = getEntryBytes(entrySizesForFile.get(entry.getName()), s);
|
||||
if (entryBytes == null) {
|
||||
return null;
|
||||
}
|
||||
|
@ -345,7 +345,7 @@ public class ClassLoaderImpl implements IClassLoader {
|
|||
return result;
|
||||
}
|
||||
|
||||
private static byte[] getEntryBytes(JarEntry entry, Long size, InputStream is) throws IOException {
|
||||
private static byte[] getEntryBytes(Long size, InputStream is) throws IOException {
|
||||
if (size == null) {
|
||||
return null;
|
||||
}
|
||||
|
|
|
@ -148,7 +148,7 @@ public class CodeScanner {
|
|||
}
|
||||
if (m.isSynthetic()) {
|
||||
SyntheticMethod sm = (SyntheticMethod) m;
|
||||
return getCaughtExceptions(m.getDeclaringClass().getClassLoader().getLanguage(), sm.getStatements());
|
||||
return getCaughtExceptions(sm.getStatements());
|
||||
} else {
|
||||
return getShrikeBTCaughtExceptions((ShrikeCTMethod) m);
|
||||
}
|
||||
|
@ -245,7 +245,7 @@ public class CodeScanner {
|
|||
* @return {@link Set}<{@link TypeReference}>
|
||||
* @throws IllegalArgumentException if statements == null
|
||||
*/
|
||||
public static Set<TypeReference> getCaughtExceptions(final Language l, SSAInstruction[] statements) throws IllegalArgumentException {
|
||||
public static Set<TypeReference> getCaughtExceptions(SSAInstruction[] statements) throws IllegalArgumentException {
|
||||
if (statements == null) {
|
||||
throw new IllegalArgumentException("statements == null");
|
||||
}
|
||||
|
|
|
@ -464,7 +464,7 @@ public final class ShrikeCTMethod extends ShrikeBTMethod implements IBytecodeMet
|
|||
final ClassLoaderReference clRef = getDeclaringClass().getClassLoader().getReference();
|
||||
return TypeAnnotation.getTypeAnnotationsFromReader(
|
||||
r,
|
||||
TypeAnnotation.targetConverterAtMethodInfo(clRef, this),
|
||||
TypeAnnotation.targetConverterAtMethodInfo(clRef),
|
||||
clRef
|
||||
);
|
||||
}
|
||||
|
|
|
@ -410,7 +410,7 @@ public final class ShrikeClass extends JVMClass<IClassLoader> {
|
|||
final ClassLoaderReference clRef = getClassLoader().getReference();
|
||||
return TypeAnnotation.getTypeAnnotationsFromReader(
|
||||
r,
|
||||
TypeAnnotation.targetConverterAtFieldInfo(clRef),
|
||||
TypeAnnotation.targetConverterAtFieldInfo(),
|
||||
clRef
|
||||
);
|
||||
}
|
||||
|
|
|
@ -38,7 +38,7 @@ public class ShrikeIRFactory implements IRFactory<IBytecodeMethod> {
|
|||
|
||||
public final static boolean buildLocalMap = true;
|
||||
|
||||
public ControlFlowGraph makeCFG(final IBytecodeMethod method, Context C) {
|
||||
public ControlFlowGraph makeCFG(final IBytecodeMethod method) {
|
||||
return ShrikeCFG.make(method);
|
||||
}
|
||||
|
||||
|
@ -54,7 +54,7 @@ public class ShrikeIRFactory implements IRFactory<IBytecodeMethod> {
|
|||
} catch (InvalidClassFileException e) {
|
||||
throw new WalaRuntimeException("bad method bytecodes", e);
|
||||
}
|
||||
final ShrikeCFG shrikeCFG = (ShrikeCFG) makeCFG(method, C);
|
||||
final ShrikeCFG shrikeCFG = (ShrikeCFG) makeCFG(method);
|
||||
|
||||
final SymbolTable symbolTable = new SymbolTable(method.getNumberOfParameters());
|
||||
final SSAInstruction[] newInstrs = new SSAInstruction[shrikeInstructions.length];
|
||||
|
|
|
@ -271,7 +271,7 @@ public class SyntheticMethod implements IMethod {
|
|||
* @param options options governing SSA construction
|
||||
*/
|
||||
@Deprecated
|
||||
public SSAInstruction[] getStatements(SSAOptions options) {
|
||||
public SSAInstruction[] getStatements(@SuppressWarnings("unused") SSAOptions options) {
|
||||
return NO_STATEMENTS;
|
||||
}
|
||||
|
||||
|
|
|
@ -41,13 +41,6 @@ public class IdentityFlowFunctions<T> implements IFlowFunctionMap<T> {
|
|||
return IdentityFlowFunction.identity();
|
||||
}
|
||||
|
||||
/*
|
||||
* @see com.ibm.wala.dataflow.IFDS.IFlowFunctionMap#getReturnFlowFunction(java.lang.Object, java.lang.Object, java.lang.Object)
|
||||
*/
|
||||
public IFlowFunction getReturnFlowFunction(T src, T dest) {
|
||||
return IdentityFlowFunction.identity();
|
||||
}
|
||||
|
||||
/*
|
||||
* @see com.ibm.wala.dataflow.IFDS.IFlowFunctionMap#getCallToReturnFlowFunction(java.lang.Object, java.lang.Object)
|
||||
*/
|
||||
|
|
|
@ -61,7 +61,7 @@ public class PartiallyBalancedTabulationSolver<T, P, F> extends TabulationSolver
|
|||
T fakeEntry = problem.getFakeEntry(retSite);
|
||||
PathEdge<T> seed = PathEdge.createPathEdge(fakeEntry, d3, retSite, d3);
|
||||
addSeed(seed);
|
||||
newUnbalancedExplodedReturnEdge(s_p, i, n, j, seed);
|
||||
newUnbalancedExplodedReturnEdge(s_p, i, n, j);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
|
@ -95,7 +95,8 @@ public class PartiallyBalancedTabulationSolver<T, P, F> extends TabulationSolver
|
|||
* So, we added a new seed callerSeed (to some return site) in the caller. To be overridden
|
||||
* in subclasses.
|
||||
*/
|
||||
protected void newUnbalancedExplodedReturnEdge(T s_p, int i, T n, int j, PathEdge<T> callerSeed) {
|
||||
@SuppressWarnings("unused")
|
||||
protected void newUnbalancedExplodedReturnEdge(T s_p, int i, T n, int j) {
|
||||
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1055,6 +1055,7 @@ public class TabulationSolver<T, P, F> {
|
|||
* @return set of d1 s.t. (n1,d1) -> (n2,d2) is recorded as a summary edge, or null if none found
|
||||
* @throws UnsupportedOperationException unconditionally
|
||||
*/
|
||||
@SuppressWarnings("unused")
|
||||
public IntSet getSummarySources(T n2, int d2, T n1) throws UnsupportedOperationException {
|
||||
throw new UnsupportedOperationException("not currently supported. be careful");
|
||||
// LocalSummaryEdges summaries = summaryEdges.get(supergraph.getProcOf(n1));
|
||||
|
@ -1093,6 +1094,7 @@ public class TabulationSolver<T, P, F> {
|
|||
* this function to record call-to-return flow.
|
||||
*
|
||||
*/
|
||||
@SuppressWarnings("unused")
|
||||
protected void newNormalExplodedEdge(PathEdge<T> edge, T m, int d3) {
|
||||
|
||||
}
|
||||
|
@ -1103,6 +1105,7 @@ public class TabulationSolver<T, P, F> {
|
|||
* <calleeEntry, d3> was created. To be overridden in subclasses.
|
||||
*
|
||||
*/
|
||||
@SuppressWarnings("unused")
|
||||
protected void newCallExplodedEdge(PathEdge<T> edge, T calleeEntry, int d3) {
|
||||
|
||||
}
|
||||
|
@ -1114,6 +1117,7 @@ public class TabulationSolver<T, P, F> {
|
|||
* course, there is a call edge <c, d4> -> <s_p, d1>. Finally, we have a
|
||||
* return edge <e_p, d2> -> <returnSite, d5>.
|
||||
*/
|
||||
@SuppressWarnings("unused")
|
||||
protected void newSummaryEdge(PathEdge<T> edgeToCallSite, PathEdge<T> calleeSummaryEdge, T returnSite, int d5) {
|
||||
|
||||
}
|
||||
|
|
|
@ -262,7 +262,7 @@ public abstract class AbstractDemandFlowGraph extends AbstractFlowGraph {
|
|||
}
|
||||
|
||||
DefUse du = node.getDU();
|
||||
addNodeInstructionConstraints(node, ir, du);
|
||||
addNodeInstructionConstraints(node, ir);
|
||||
addNodePassthruExceptionConstraints(node, ir);
|
||||
addNodeConstantConstraints(node, ir);
|
||||
}
|
||||
|
@ -270,7 +270,7 @@ public abstract class AbstractDemandFlowGraph extends AbstractFlowGraph {
|
|||
/**
|
||||
* Add pointer flow constraints based on instructions in a given node
|
||||
*/
|
||||
protected void addNodeInstructionConstraints(CGNode node, IR ir, DefUse du) {
|
||||
protected void addNodeInstructionConstraints(CGNode node, IR ir) {
|
||||
FlowStatementVisitor v = makeVisitor(node);
|
||||
ControlFlowGraph<SSAInstruction, ISSABasicBlock> cfg = ir.getControlFlowGraph();
|
||||
for (ISSABasicBlock b : cfg) {
|
||||
|
|
|
@ -52,15 +52,14 @@ public class PABasedMemoryAccessMap implements MemoryAccessMap {
|
|||
private final Map<PointerKey, Set<Statement>> invRef;
|
||||
|
||||
public PABasedMemoryAccessMap(CallGraph cg, PointerAnalysis<InstanceKey> pa) {
|
||||
this(cg, pa, new SDG<InstanceKey>(cg, pa, DataDependenceOptions.NO_BASE_NO_HEAP_NO_EXCEPTIONS, ControlDependenceOptions.NONE));
|
||||
this(pa, new SDG<InstanceKey>(cg, pa, DataDependenceOptions.NO_BASE_NO_HEAP_NO_EXCEPTIONS, ControlDependenceOptions.NONE));
|
||||
}
|
||||
|
||||
public PABasedMemoryAccessMap(CallGraph cg, PointerAnalysis<InstanceKey> pa, SDG<InstanceKey> sdg) {
|
||||
this(cg, pa, CISlicer.scanForMod(sdg, pa, true, ModRef.make()), CISlicer.scanForRef(sdg, pa));
|
||||
public PABasedMemoryAccessMap(PointerAnalysis<InstanceKey> pa, SDG<InstanceKey> sdg) {
|
||||
this(pa, CISlicer.scanForMod(sdg, pa, true, ModRef.make()), CISlicer.scanForRef(sdg, pa));
|
||||
}
|
||||
|
||||
public PABasedMemoryAccessMap(CallGraph cg, PointerAnalysis<InstanceKey> pa, Map<Statement, Set<PointerKey>> mod,
|
||||
Map<Statement, Set<PointerKey>> ref) {
|
||||
public PABasedMemoryAccessMap(PointerAnalysis<InstanceKey> pa, Map<Statement, Set<PointerKey>> mod, Map<Statement, Set<PointerKey>> ref) {
|
||||
if (pa == null) {
|
||||
throw new IllegalArgumentException("null pa");
|
||||
}
|
||||
|
|
|
@ -16,7 +16,6 @@ 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.MethodReference;
|
||||
import com.ibm.wala.types.TypeReference;
|
||||
|
||||
/**
|
||||
|
@ -74,14 +73,7 @@ public class ClassHierarchyMethodTargetSelector implements MethodTargetSelector
|
|||
return classHierarchy.resolveMethod(klass, call.getDeclaredTarget().getSelector());
|
||||
}
|
||||
|
||||
public boolean mightReturnSyntheticMethod(CGNode caller, CallSiteReference site) {
|
||||
return false;
|
||||
}
|
||||
|
||||
/*
|
||||
* @see com.ibm.wala.ipa.callgraph.MethodTargetSelector#mightReturnSyntheticMethod(com.ibm.wala.types.MethodReference)
|
||||
*/
|
||||
public boolean mightReturnSyntheticMethod(MethodReference declaredTarget) {
|
||||
public boolean mightReturnSyntheticMethod() {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -18,7 +18,6 @@ import com.ibm.wala.classLoader.NewSiteReference;
|
|||
import com.ibm.wala.ipa.callgraph.CGNode;
|
||||
import com.ibm.wala.ipa.callgraph.CallGraph;
|
||||
import com.ibm.wala.ipa.cha.IClassHierarchy;
|
||||
import com.ibm.wala.ssa.IR;
|
||||
import com.ibm.wala.ssa.SSAInstruction;
|
||||
import com.ibm.wala.types.TypeReference;
|
||||
import com.ibm.wala.util.Predicate;
|
||||
|
@ -83,7 +82,7 @@ public final class ConcreteTypeKey implements InstanceKey {
|
|||
* @return a set of ConcreteTypeKeys that represent the exceptions the PEI may throw.
|
||||
* @throws IllegalArgumentException if pei is null
|
||||
*/
|
||||
public static InstanceKey[] getInstanceKeysForPEI(SSAInstruction pei, IR ir, IClassHierarchy cha) {
|
||||
public static InstanceKey[] getInstanceKeysForPEI(SSAInstruction pei, IClassHierarchy cha) {
|
||||
if (pei == null) {
|
||||
throw new IllegalArgumentException("pei is null");
|
||||
}
|
||||
|
|
|
@ -281,7 +281,7 @@ public abstract class PropagationCallGraphBuilder implements CallGraphBuilder<In
|
|||
return callGraph;
|
||||
}
|
||||
|
||||
protected PropagationSystem makeSystem(AnalysisOptions options) {
|
||||
protected PropagationSystem makeSystem(@SuppressWarnings("unused") AnalysisOptions options) {
|
||||
return new PropagationSystem(callGraph, pointerKeyFactory, instanceKeyFactory);
|
||||
}
|
||||
|
||||
|
@ -859,7 +859,7 @@ public abstract class PropagationCallGraphBuilder implements CallGraphBuilder<In
|
|||
if (DEBUG_ARRAY_LOAD) {
|
||||
System.err.println("ArrayLoad add assign: " + dVal + " " + p);
|
||||
}
|
||||
sideEffect.b |= system.newFieldRead(dVal, assignOperator, p, object);
|
||||
sideEffect.b |= system.newFieldRead(dVal, assignOperator, p);
|
||||
}
|
||||
};
|
||||
if (priorInstances != null) {
|
||||
|
@ -952,9 +952,9 @@ public abstract class PropagationCallGraphBuilder implements CallGraphBuilder<In
|
|||
|
||||
// note that the following is idempotent
|
||||
if (isJavaLangObject(contents)) {
|
||||
sideEffect |= system.newFieldWrite(p, assignOperator, pVal, object);
|
||||
sideEffect |= system.newFieldWrite(p, assignOperator, pVal);
|
||||
} else {
|
||||
sideEffect |= system.newFieldWrite(p, filterOperator, pVal, object);
|
||||
sideEffect |= system.newFieldWrite(p, filterOperator, pVal);
|
||||
}
|
||||
}
|
||||
byte sideEffectMask = sideEffect ? (byte) SIDE_EFFECT_MASK : 0;
|
||||
|
@ -1037,7 +1037,7 @@ public abstract class PropagationCallGraphBuilder implements CallGraphBuilder<In
|
|||
String S = "Getfield add constraint " + dVal + " " + p;
|
||||
System.err.println(S);
|
||||
}
|
||||
sideEffect.b |= system.newFieldRead(dVal, assignOperator, p, object);
|
||||
sideEffect.b |= system.newFieldRead(dVal, assignOperator, p);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1156,7 +1156,7 @@ public abstract class PropagationCallGraphBuilder implements CallGraphBuilder<In
|
|||
String S = "Putfield add constraint " + p + " " + pVal;
|
||||
System.err.println(S);
|
||||
}
|
||||
sideEffect.b |= system.newFieldWrite(p, assign, pVal, object);
|
||||
sideEffect.b |= system.newFieldWrite(p, assign, pVal);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -390,14 +390,14 @@ public class PropagationSystem extends DefaultFixedPointSolver<PointsToSetVariab
|
|||
/**
|
||||
* @return true iff the system changes
|
||||
*/
|
||||
public boolean newFieldWrite(PointerKey lhs, UnaryOperator<PointsToSetVariable> op, PointerKey rhs, PointerKey container) {
|
||||
public boolean newFieldWrite(PointerKey lhs, UnaryOperator<PointsToSetVariable> op, PointerKey rhs) {
|
||||
return newConstraint(lhs, op, rhs);
|
||||
}
|
||||
|
||||
/**
|
||||
* @return true iff the system changes
|
||||
*/
|
||||
public boolean newFieldRead(PointerKey lhs, UnaryOperator<PointsToSetVariable> op, PointerKey rhs, PointerKey container) {
|
||||
public boolean newFieldRead(PointerKey lhs, UnaryOperator<PointsToSetVariable> op, PointerKey rhs) {
|
||||
return newConstraint(lhs, op, rhs);
|
||||
}
|
||||
|
||||
|
|
|
@ -269,6 +269,7 @@ public abstract class SSAPropagationCallGraphBuilder extends PropagationCallGrap
|
|||
* Hook for aubclasses to add pointer flow constraints based on values in a given node
|
||||
* @throws CancelException
|
||||
*/
|
||||
@SuppressWarnings("unused")
|
||||
protected void addNodeValueConstraints(CGNode node, IProgressMonitor monitor) throws CancelException {
|
||||
|
||||
}
|
||||
|
@ -566,7 +567,7 @@ public abstract class SSAPropagationCallGraphBuilder extends PropagationCallGrap
|
|||
}
|
||||
}
|
||||
|
||||
protected IntSet getParamObjects(int paramIndex, int rhsi) {
|
||||
protected IntSet getParamObjects(int paramIndex, @SuppressWarnings("unused") int rhsi) {
|
||||
int paramVn = call.getUse(paramIndex);
|
||||
PointerKey var = getPointerKeyForLocal(caller, paramVn);
|
||||
IntSet s = system.findOrCreatePointsToSet(var).getValue();
|
||||
|
@ -1731,7 +1732,7 @@ public abstract class SSAPropagationCallGraphBuilder extends PropagationCallGrap
|
|||
}
|
||||
}
|
||||
|
||||
private byte cpa(PointsToSetVariable lhs, final PointsToSetVariable[] rhs) {
|
||||
private byte cpa(final PointsToSetVariable[] rhs) {
|
||||
final MutableBoolean changed = new MutableBoolean();
|
||||
for(int rhsIndex = 0; rhsIndex < rhs.length; rhsIndex++) {
|
||||
final int y = rhsIndex;
|
||||
|
@ -1791,7 +1792,7 @@ public abstract class SSAPropagationCallGraphBuilder extends PropagationCallGrap
|
|||
public byte evaluate(PointsToSetVariable lhs, final PointsToSetVariable[] rhs) {
|
||||
assert dispatchIndices.length >= rhs.length : "bad operator at " + call;
|
||||
|
||||
return cpa(lhs, rhs);
|
||||
return cpa(rhs);
|
||||
|
||||
/*
|
||||
// did evaluating the dispatch operation add a new possible target
|
||||
|
@ -2007,8 +2008,8 @@ public abstract class SSAPropagationCallGraphBuilder extends PropagationCallGrap
|
|||
}
|
||||
}
|
||||
|
||||
protected void iterateCrossProduct(final CGNode caller, final SSAAbstractInvokeInstruction call, IntSet parameters,
|
||||
final InstanceKey[][] invariants, final VoidFunction<InstanceKey[]> f) {
|
||||
protected void iterateCrossProduct(final CGNode caller, final SSAAbstractInvokeInstruction call, final InstanceKey[][] invariants,
|
||||
final VoidFunction<InstanceKey[]> f) {
|
||||
new CrossProductRec(invariants, call, caller, f).rec(0, 0);
|
||||
}
|
||||
|
||||
|
@ -2035,7 +2036,7 @@ public abstract class SSAPropagationCallGraphBuilder extends PropagationCallGrap
|
|||
}
|
||||
}
|
||||
};
|
||||
iterateCrossProduct(caller, instruction, params, invs, f);
|
||||
iterateCrossProduct(caller, instruction, invs, f);
|
||||
return targets;
|
||||
}
|
||||
|
||||
|
@ -2069,7 +2070,7 @@ public abstract class SSAPropagationCallGraphBuilder extends PropagationCallGrap
|
|||
return true;
|
||||
}
|
||||
|
||||
protected InterestingVisitor makeInterestingVisitor(CGNode node, int vn) {
|
||||
protected InterestingVisitor makeInterestingVisitor(@SuppressWarnings("unused") CGNode node, int vn) {
|
||||
return new InterestingVisitor(vn);
|
||||
}
|
||||
|
||||
|
|
|
@ -17,7 +17,6 @@ import com.ibm.wala.ipa.callgraph.Context;
|
|||
import com.ibm.wala.ipa.callgraph.ContextItem;
|
||||
import com.ibm.wala.ipa.callgraph.ContextKey;
|
||||
import com.ibm.wala.ipa.callgraph.ContextSelector;
|
||||
import com.ibm.wala.ipa.cha.IClassHierarchy;
|
||||
import com.ibm.wala.types.Selector;
|
||||
import com.ibm.wala.util.intset.IntSet;
|
||||
import com.ibm.wala.util.intset.IntSetUtil;
|
||||
|
@ -30,7 +29,7 @@ public class TargetMethodContextSelector implements ContextSelector {
|
|||
|
||||
private final Selector selector;
|
||||
|
||||
public TargetMethodContextSelector(Selector selector, IClassHierarchy cha) {
|
||||
public TargetMethodContextSelector(Selector selector) {
|
||||
this.selector = selector;
|
||||
}
|
||||
|
||||
|
|
|
@ -112,7 +112,7 @@ public class ContainerContextSelector implements ContextSelector {
|
|||
if (keys != null && keys.length > 0 && keys[0] != null) {
|
||||
receiver = keys[0];
|
||||
}
|
||||
if (mayUnderstand(caller, site, callee, receiver)) {
|
||||
if (mayUnderstand(site, callee, receiver)) {
|
||||
if (DEBUG) {
|
||||
System.err.println("May Understand: " + callee + " recv " + receiver);
|
||||
}
|
||||
|
@ -270,7 +270,7 @@ public class ContainerContextSelector implements ContextSelector {
|
|||
return (n == null) ? null : n.getContext();
|
||||
}
|
||||
|
||||
public boolean mayUnderstand(CGNode caller, CallSiteReference site, IMethod targetMethod, InstanceKey receiver) {
|
||||
public boolean mayUnderstand(CallSiteReference site, IMethod targetMethod, InstanceKey receiver) {
|
||||
if (targetMethod == null) {
|
||||
throw new IllegalArgumentException("targetMethod is null");
|
||||
}
|
||||
|
|
|
@ -158,18 +158,18 @@ public abstract class AbstractRTABuilder extends PropagationCallGraphBuilder {
|
|||
private void addFieldConstraints(CGNode node) {
|
||||
for (Iterator it = getRTAContextInterpreter().iterateFieldsRead(node); it.hasNext();) {
|
||||
FieldReference f = (FieldReference) it.next();
|
||||
processFieldAccess(node, f);
|
||||
processFieldAccess(f);
|
||||
}
|
||||
for (Iterator it = getRTAContextInterpreter().iterateFieldsWritten(node); it.hasNext();) {
|
||||
FieldReference f = (FieldReference) it.next();
|
||||
processFieldAccess(node, f);
|
||||
processFieldAccess(f);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Is s is a getstatic or putstatic, then potentially add the relevant <clinit>to the newMethod set.
|
||||
*/
|
||||
private void processFieldAccess(CGNode node, FieldReference f) {
|
||||
private void processFieldAccess(FieldReference f) {
|
||||
if (DEBUG) {
|
||||
System.err.println(("processFieldAccess: " + f));
|
||||
}
|
||||
|
|
|
@ -206,7 +206,7 @@ public class TypeBasedHeapModel implements HeapModel {
|
|||
return iKeyFactory.getInstanceKeyForConstant(type, S);
|
||||
}
|
||||
|
||||
public String getStringConstantForInstanceKey(InstanceKey I) throws UnimplementedError {
|
||||
public String getStringConstantForInstanceKey() throws UnimplementedError {
|
||||
Assertions.UNREACHABLE();
|
||||
return null;
|
||||
}
|
||||
|
|
|
@ -177,7 +177,7 @@ public class PDG<T extends InstanceKey> implements NumberedGraph<Statement> {
|
|||
isPopulated = true;
|
||||
|
||||
Map<SSAInstruction, Integer> instructionIndices = computeInstructionIndices(ir);
|
||||
createNodes(ref, cOptions, ir);
|
||||
createNodes(ref, ir);
|
||||
createScalarEdges(cOptions, ir, instructionIndices);
|
||||
}
|
||||
}
|
||||
|
@ -880,7 +880,7 @@ public class PDG<T extends InstanceKey> implements NumberedGraph<Statement> {
|
|||
/**
|
||||
* Create all nodes in this PDG. Each node is a Statement.
|
||||
*/
|
||||
private void createNodes(Map<CGNode, OrdinalSet<PointerKey>> ref, ControlDependenceOptions cOptions, IR ir) {
|
||||
private void createNodes(Map<CGNode, OrdinalSet<PointerKey>> ref, IR ir) {
|
||||
|
||||
if (ir != null) {
|
||||
createNormalStatements(ir, ref);
|
||||
|
|
|
@ -68,6 +68,7 @@ public class ReachabilityFunctions<T> implements IFlowFunctionMap<T> {
|
|||
return FLOW_REACHES;
|
||||
}
|
||||
|
||||
@SuppressWarnings("unused")
|
||||
public IFlowFunction getReturnFlowFunction(T src, T dest) {
|
||||
return FLOW_REACHES;
|
||||
}
|
||||
|
|
|
@ -46,7 +46,7 @@ class SDGSupergraph implements ISupergraph<Statement, PDG<? extends InstanceKey>
|
|||
return null;
|
||||
}
|
||||
|
||||
public Object[] getEntry(Statement n) {
|
||||
public Object[] getEntry() {
|
||||
Assertions.UNREACHABLE();
|
||||
return null;
|
||||
}
|
||||
|
|
|
@ -19,7 +19,7 @@ import com.ibm.wala.ssa.SSAOptions;
|
|||
|
||||
public class SyntheticIRFactory implements IRFactory<SyntheticMethod> {
|
||||
|
||||
public ControlFlowGraph makeCFG(SyntheticMethod method, Context C) {
|
||||
public ControlFlowGraph makeCFG(SyntheticMethod method) {
|
||||
if (method == null) {
|
||||
throw new IllegalArgumentException("method is null");
|
||||
}
|
||||
|
|
|
@ -35,14 +35,14 @@ public class DefaultIRFactory implements IRFactory<IMethod> {
|
|||
* @see com.ibm.wala.ssa.IRFactory#makeCFG(com.ibm.wala.classLoader.IMethod, com.ibm.wala.ipa.callgraph.Context,
|
||||
* com.ibm.wala.ipa.cha.IClassHierarchy, com.ibm.wala.util.warnings.WarningSet)
|
||||
*/
|
||||
public ControlFlowGraph makeCFG(IMethod method, Context c) throws IllegalArgumentException {
|
||||
public ControlFlowGraph makeCFG(IMethod method, @SuppressWarnings("unused") Context c) throws IllegalArgumentException {
|
||||
if (method == null) {
|
||||
throw new IllegalArgumentException("method cannot be null");
|
||||
}
|
||||
if (method.isSynthetic()) {
|
||||
return syntheticFactory.makeCFG((SyntheticMethod) method, c);
|
||||
return syntheticFactory.makeCFG((SyntheticMethod) method);
|
||||
} else if (method instanceof IBytecodeMethod) {
|
||||
return shrikeFactory.makeCFG((IBytecodeMethod) method, c);
|
||||
return shrikeFactory.makeCFG((IBytecodeMethod) method);
|
||||
} else {
|
||||
Assertions.UNREACHABLE();
|
||||
return null;
|
||||
|
|
|
@ -248,7 +248,7 @@ public abstract class SSAInstruction {
|
|||
/**
|
||||
* @return value number representing the jth use in this instruction. -1 means TOP (i.e., the value doesn't matter)
|
||||
*/
|
||||
public int getUse(int j) throws UnsupportedOperationException {
|
||||
public int getUse(@SuppressWarnings("unused") int j) throws UnsupportedOperationException {
|
||||
throw new UnsupportedOperationException();
|
||||
}
|
||||
|
||||
|
|
|
@ -816,7 +816,7 @@ public class TypeAnnotation {
|
|||
}
|
||||
|
||||
// TODO: method is currently unused, but we may want to use it if we decide to resolve generic signature indices here
|
||||
public static TypeAnnotationTargetConverter targetConverterAtMethodInfo(final ClassLoaderReference clRef, final IBytecodeMethod method) {
|
||||
public static TypeAnnotationTargetConverter targetConverterAtMethodInfo(final ClassLoaderReference clRef) {
|
||||
return new TypeAnnotationTargetConverter() {
|
||||
@Override
|
||||
public TypeAnnotationTarget visitTypeParameterTarget(com.ibm.wala.shrikeCT.TypeAnnotationsReader.TypeParameterTarget target) {
|
||||
|
@ -944,7 +944,7 @@ public class TypeAnnotation {
|
|||
};
|
||||
}
|
||||
|
||||
public static TypeAnnotationTargetConverter targetConverterAtFieldInfo(final ClassLoaderReference clRef) {
|
||||
public static TypeAnnotationTargetConverter targetConverterAtFieldInfo() {
|
||||
return new TypeAnnotationTargetConverter() {
|
||||
@Override
|
||||
public TypeAnnotationTarget visitTypeParameterTarget(com.ibm.wala.shrikeCT.TypeAnnotationsReader.TypeParameterTarget target) {
|
||||
|
|
|
@ -80,7 +80,7 @@ public class ProgressMaster implements IProgressMonitor {
|
|||
|
||||
public synchronized void reset() {
|
||||
killNanny();
|
||||
setCanceled(false);
|
||||
setCanceled();
|
||||
timedOut = false;
|
||||
tooMuchMemory = false;
|
||||
}
|
||||
|
@ -118,7 +118,7 @@ public class ProgressMaster implements IProgressMonitor {
|
|||
return delegate.isCanceled() || timedOut || tooMuchMemory;
|
||||
}
|
||||
|
||||
public void setCanceled(boolean value) {
|
||||
public void setCanceled() {
|
||||
killNanny();
|
||||
}
|
||||
|
||||
|
@ -131,7 +131,7 @@ public class ProgressMaster implements IProgressMonitor {
|
|||
|
||||
@Override
|
||||
public void cancel() {
|
||||
setCanceled(true);
|
||||
setCanceled();
|
||||
}
|
||||
/** END Custom change: subtasks and canceling */
|
||||
@Override
|
||||
|
|
|
@ -50,12 +50,11 @@ public class AnalysisScopeReader {
|
|||
*/
|
||||
public static AnalysisScope readJavaScope(String scopeFileName, File exclusionsFile, ClassLoader javaLoader) throws IOException {
|
||||
AnalysisScope scope = AnalysisScope.createJavaAnalysisScope();
|
||||
return read(scope, scopeFileName, exclusionsFile, javaLoader, new FileProvider());
|
||||
return read(scope, scopeFileName, exclusionsFile, javaLoader);
|
||||
}
|
||||
|
||||
|
||||
public static AnalysisScope read(AnalysisScope scope, String scopeFileName, File exclusionsFile, ClassLoader javaLoader,
|
||||
FileProvider fp) throws IOException {
|
||||
public static AnalysisScope read(AnalysisScope scope, String scopeFileName, File exclusionsFile, ClassLoader javaLoader) throws IOException {
|
||||
BufferedReader r = null;
|
||||
try {
|
||||
// Now reading from jar is included in WALA, but we can't use their version, because they load from
|
||||
|
@ -99,8 +98,7 @@ public class AnalysisScopeReader {
|
|||
return scope;
|
||||
}
|
||||
|
||||
protected static AnalysisScope read(AnalysisScope scope, final URI scopeFileURI, final File exclusionsFile, ClassLoader javaLoader,
|
||||
FileProvider fp) throws IOException {
|
||||
protected static AnalysisScope read(AnalysisScope scope, final URI scopeFileURI, final File exclusionsFile, ClassLoader javaLoader) throws IOException {
|
||||
BufferedReader r = null;
|
||||
try {
|
||||
String line;
|
||||
|
|
|
@ -609,6 +609,7 @@ public class TypeSafeInstructionFactory {
|
|||
return insts.PhiInstruction(iindex, result.getNumber(), aParams);
|
||||
}
|
||||
|
||||
@SuppressWarnings("unused")
|
||||
private static boolean isSuperclassOf(final TypeReference superClass, final TypeReference subClass) {
|
||||
return true; // TODO
|
||||
}
|
||||
|
|
|
@ -41,7 +41,7 @@ public class CgPanel extends JSplitPane{
|
|||
this.setLeftComponent(new JScrollPane(tree));
|
||||
|
||||
|
||||
final IrAndSourceViewer irViewer = new IrAndSourceViewer(cg);
|
||||
final IrAndSourceViewer irViewer = new IrAndSourceViewer();
|
||||
this.setRightComponent(irViewer.getComponent());
|
||||
|
||||
tree.addTreeSelectionListener(new TreeSelectionListener() {
|
||||
|
|
|
@ -19,7 +19,6 @@ import javax.swing.JSplitPane;
|
|||
|
||||
import com.ibm.wala.classLoader.IClassLoader;
|
||||
import com.ibm.wala.classLoader.IMethod;
|
||||
import com.ibm.wala.ipa.callgraph.CallGraph;
|
||||
import com.ibm.wala.ssa.IR;
|
||||
import com.ibm.wala.viz.viewer.IrViewer.SelectedPcListner;
|
||||
|
||||
|
@ -30,9 +29,6 @@ public class IrAndSourceViewer {
|
|||
|
||||
private IR ir;
|
||||
|
||||
public IrAndSourceViewer(CallGraph cg) {
|
||||
}
|
||||
|
||||
public Component getComponent() {
|
||||
|
||||
|
||||
|
|
|
@ -97,7 +97,7 @@ public class PaPanel extends JSplitPane {
|
|||
this.setRightComponent(rightPanel);
|
||||
fullName = new JTextField("");
|
||||
rightPanel.add(fullName, BorderLayout.PAGE_START);
|
||||
irViewer = new IrAndSourceViewer(cg);
|
||||
irViewer = new IrAndSourceViewer();
|
||||
rightPanel.add(irViewer.getComponent(), BorderLayout.CENTER);
|
||||
|
||||
heapTree.addTreeExpansionListener(new TreeExpansionListener() {
|
||||
|
|
|
@ -87,7 +87,7 @@ org.eclipse.jdt.core.compiler.problem.reportMethodCanBePotentiallyStatic=ignore
|
|||
org.eclipse.jdt.core.compiler.problem.reportMethodCanBeStatic=error
|
||||
org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled
|
||||
org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=error
|
||||
org.eclipse.jdt.core.compiler.problem.suppressOptionalErrors=disabled
|
||||
org.eclipse.jdt.core.compiler.problem.suppressOptionalErrors=enabled
|
||||
org.eclipse.jdt.core.compiler.problem.suppressWarnings=enabled
|
||||
org.eclipse.jdt.core.compiler.problem.syntacticNullAnalysisForFields=enabled
|
||||
org.eclipse.jdt.core.compiler.problem.syntheticAccessEmulation=ignore
|
||||
|
@ -112,7 +112,7 @@ org.eclipse.jdt.core.compiler.problem.unusedImport=error
|
|||
org.eclipse.jdt.core.compiler.problem.unusedLabel=error
|
||||
org.eclipse.jdt.core.compiler.problem.unusedLocal=warning
|
||||
org.eclipse.jdt.core.compiler.problem.unusedObjectAllocation=error
|
||||
org.eclipse.jdt.core.compiler.problem.unusedParameter=warning
|
||||
org.eclipse.jdt.core.compiler.problem.unusedParameter=error
|
||||
org.eclipse.jdt.core.compiler.problem.unusedParameterIncludeDocCommentReference=enabled
|
||||
org.eclipse.jdt.core.compiler.problem.unusedParameterWhenImplementingAbstract=disabled
|
||||
org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=disabled
|
||||
|
|
|
@ -87,7 +87,7 @@ org.eclipse.jdt.core.compiler.problem.reportMethodCanBePotentiallyStatic=error
|
|||
org.eclipse.jdt.core.compiler.problem.reportMethodCanBeStatic=error
|
||||
org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled
|
||||
org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=error
|
||||
org.eclipse.jdt.core.compiler.problem.suppressOptionalErrors=disabled
|
||||
org.eclipse.jdt.core.compiler.problem.suppressOptionalErrors=enabled
|
||||
org.eclipse.jdt.core.compiler.problem.suppressWarnings=enabled
|
||||
org.eclipse.jdt.core.compiler.problem.syntacticNullAnalysisForFields=enabled
|
||||
org.eclipse.jdt.core.compiler.problem.syntheticAccessEmulation=ignore
|
||||
|
@ -112,7 +112,7 @@ org.eclipse.jdt.core.compiler.problem.unusedImport=error
|
|||
org.eclipse.jdt.core.compiler.problem.unusedLabel=error
|
||||
org.eclipse.jdt.core.compiler.problem.unusedLocal=error
|
||||
org.eclipse.jdt.core.compiler.problem.unusedObjectAllocation=error
|
||||
org.eclipse.jdt.core.compiler.problem.unusedParameter=warning
|
||||
org.eclipse.jdt.core.compiler.problem.unusedParameter=error
|
||||
org.eclipse.jdt.core.compiler.problem.unusedParameterIncludeDocCommentReference=enabled
|
||||
org.eclipse.jdt.core.compiler.problem.unusedParameterWhenImplementingAbstract=disabled
|
||||
org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=disabled
|
||||
|
|
|
@ -74,6 +74,6 @@ public class JDTJavaIRTests extends JavaIRTests {
|
|||
|
||||
@Override
|
||||
protected <I extends InstanceKey> AbstractAnalysisEngine<I> getAnalysisEngine(final String[] mainClassDescriptors, Collection<String> sources, List<String> libs) {
|
||||
return JDTJavaTest.makeAnalysisEngine(mainClassDescriptors, sources, libs, project);
|
||||
return JDTJavaTest.makeAnalysisEngine(mainClassDescriptors, project);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -45,10 +45,10 @@ public abstract class JDTJavaTest extends IRTests {
|
|||
|
||||
@Override
|
||||
protected <I extends InstanceKey> AbstractAnalysisEngine<I> getAnalysisEngine(final String[] mainClassDescriptors, Collection<String> sources, List<String> libs) {
|
||||
return makeAnalysisEngine(mainClassDescriptors, sources, libs, project);
|
||||
return makeAnalysisEngine(mainClassDescriptors, project);
|
||||
}
|
||||
|
||||
static <I extends InstanceKey> AbstractAnalysisEngine<I> makeAnalysisEngine(final String[] mainClassDescriptors, Collection<String> sources, List<String> libs, ZippedProjectData project) {
|
||||
static <I extends InstanceKey> AbstractAnalysisEngine<I> makeAnalysisEngine(final String[] mainClassDescriptors, ZippedProjectData project) {
|
||||
AbstractAnalysisEngine<I> engine;
|
||||
engine = new JDTJavaSourceAnalysisEngine<I>(project.projectName) {
|
||||
{
|
||||
|
|
|
@ -33,7 +33,7 @@ final class TypeInferenceAssertion implements IRAssertion {
|
|||
@Override
|
||||
public void check(CallGraph cg) {
|
||||
IR ir = getIR(cg, typeName, "main", "[Ljava/lang/String;", "V");
|
||||
AstJavaTypeInference inference = new AstJavaTypeInference(ir, cg.getClassHierarchy(), true);
|
||||
AstJavaTypeInference inference = new AstJavaTypeInference(ir, true);
|
||||
|
||||
for (SSAInstruction instr : Iterator2Iterable.make(ir.iterateAllInstructions())) {
|
||||
// Check defs
|
||||
|
|
|
@ -108,7 +108,7 @@ public class JDTJavaSourceAnalysisEngine<I extends InstanceKey> extends EclipseP
|
|||
@Override
|
||||
protected CallGraphBuilder<I> getCallGraphBuilder(IClassHierarchy cha,
|
||||
AnalysisOptions options, IAnalysisCacheView cache) {
|
||||
return new ZeroCFABuilderFactory().make(options, cache, cha, scope, false);
|
||||
return new ZeroCFABuilderFactory().make(options, cache, cha, scope);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -74,6 +74,6 @@ public class JDTClassLoaderFactory extends ClassLoaderFactoryImpl {
|
|||
}
|
||||
|
||||
protected JavaSourceLoaderImpl makeSourceLoader(ClassLoaderReference classLoaderReference, IClassHierarchy cha, IClassLoader parent) {
|
||||
return new JDTSourceLoaderImpl(classLoaderReference, parent, getExclusions(), cha, dump);
|
||||
return new JDTSourceLoaderImpl(classLoaderReference, parent, cha, dump);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -42,17 +42,16 @@ import com.ibm.wala.cast.java.translator.SourceModuleTranslator;
|
|||
import com.ibm.wala.classLoader.IClassLoader;
|
||||
import com.ibm.wala.ipa.cha.IClassHierarchy;
|
||||
import com.ibm.wala.types.ClassLoaderReference;
|
||||
import com.ibm.wala.util.config.SetOfClasses;
|
||||
|
||||
public class JDTSourceLoaderImpl extends JavaSourceLoaderImpl {
|
||||
private final boolean dump;
|
||||
|
||||
public JDTSourceLoaderImpl(ClassLoaderReference loaderRef, IClassLoader parent, SetOfClasses exclusions, IClassHierarchy cha) {
|
||||
this(loaderRef, parent, exclusions, cha, false);
|
||||
public JDTSourceLoaderImpl(ClassLoaderReference loaderRef, IClassLoader parent, IClassHierarchy cha) {
|
||||
this(loaderRef, parent, cha, false);
|
||||
}
|
||||
|
||||
public JDTSourceLoaderImpl(ClassLoaderReference loaderRef, IClassLoader parent, SetOfClasses exclusions, IClassHierarchy cha, boolean dump) {
|
||||
super(loaderRef, parent, exclusions, cha);
|
||||
public JDTSourceLoaderImpl(ClassLoaderReference loaderRef, IClassLoader parent, IClassHierarchy cha, boolean dump) {
|
||||
super(loaderRef, parent, cha);
|
||||
this.dump = dump;
|
||||
}
|
||||
|
||||
|
|
|
@ -88,7 +88,7 @@ public class JavaEclipseProjectPath extends EclipseProjectPath<IClasspathEntry,
|
|||
break;
|
||||
}
|
||||
case IClasspathEntry.CPE_PROJECT: {
|
||||
resolveProjectPathEntry(loader, includeSource, entry.getPath());
|
||||
resolveProjectPathEntry(includeSource, entry.getPath());
|
||||
break;
|
||||
}
|
||||
case IClasspathEntry.CPE_CONTAINER: {
|
||||
|
|
|
@ -115,7 +115,7 @@ public class EclipseJavaScriptAnalysisEngine<I extends InstanceKey> extends Ecli
|
|||
@Override
|
||||
protected CallGraphBuilder<I> getCallGraphBuilder(IClassHierarchy cha,
|
||||
AnalysisOptions options, IAnalysisCacheView cache) {
|
||||
return new ZeroCFABuilderFactory().make((JSAnalysisOptions)options, cache, cha, scope, false);
|
||||
return new ZeroCFABuilderFactory().make((JSAnalysisOptions)options, cache, cha);
|
||||
}
|
||||
|
||||
public Pair<JSCallGraph, PointerAnalysis<ObjectVertex>> getFieldBasedCallGraph() throws CancelException {
|
||||
|
|
|
@ -86,7 +86,7 @@ org.eclipse.jdt.core.compiler.problem.reportMethodCanBePotentiallyStatic=ignore
|
|||
org.eclipse.jdt.core.compiler.problem.reportMethodCanBeStatic=error
|
||||
org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled
|
||||
org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=error
|
||||
org.eclipse.jdt.core.compiler.problem.suppressOptionalErrors=disabled
|
||||
org.eclipse.jdt.core.compiler.problem.suppressOptionalErrors=enabled
|
||||
org.eclipse.jdt.core.compiler.problem.suppressWarnings=enabled
|
||||
org.eclipse.jdt.core.compiler.problem.syntacticNullAnalysisForFields=enabled
|
||||
org.eclipse.jdt.core.compiler.problem.syntheticAccessEmulation=ignore
|
||||
|
@ -111,7 +111,7 @@ org.eclipse.jdt.core.compiler.problem.unusedImport=error
|
|||
org.eclipse.jdt.core.compiler.problem.unusedLabel=error
|
||||
org.eclipse.jdt.core.compiler.problem.unusedLocal=error
|
||||
org.eclipse.jdt.core.compiler.problem.unusedObjectAllocation=error
|
||||
org.eclipse.jdt.core.compiler.problem.unusedParameter=ignore
|
||||
org.eclipse.jdt.core.compiler.problem.unusedParameter=error
|
||||
org.eclipse.jdt.core.compiler.problem.unusedParameterIncludeDocCommentReference=enabled
|
||||
org.eclipse.jdt.core.compiler.problem.unusedParameterWhenImplementingAbstract=disabled
|
||||
org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=disabled
|
||||
|
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue