From 7c1ec7d18a7262ac1a3c5a0631c6617c01f1e965 Mon Sep 17 00:00:00 2001 From: Ben Liblit Date: Mon, 13 Mar 2017 12:44:30 -0500 Subject: [PATCH 1/6] Ignore a "lib" subdirectory that Maven creates This arises at some point during "mvn compile install". I'm not sure exactly when, but it's definitely automated, and therefore not appropriate to track in git. --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index 5fbcf5b32..994408011 100644 --- a/.gitignore +++ b/.gitignore @@ -12,6 +12,7 @@ com.ibm.wala.cast.java.polyglot/lib/ com.ibm.wala.cast.java.test.data/src/JLex/ com.ibm.wala.cast.java.test/testdata/ com.ibm.wala.cast.js.html.nu_validator/lib/ +com.ibm.wala.cast.js.nodejs/lib/ com.ibm.wala.cast.js.rhino.test/*.dump com.ibm.wala.cast.js.rhino.test/*.html* com.ibm.wala.cast.js.rhino.test/2009_swine_flu_outbreak From 8fd41c148f5dc36a76e4d7656f0ad4fc91b428d9 Mon Sep 17 00:00:00 2001 From: Raffi Khatchadourian Date: Mon, 13 Mar 2017 16:17:39 -0400 Subject: [PATCH 2/6] Use IAnalysisCacheView instead of AnalysisCache. It seems that some additional types need to be changed due to d24519e97497e24fe8e4495331a649343905694b. This may not be inclusive, however. --- .../src/com/ibm/wala/ipa/callgraph/impl/Util.java | 8 ++++---- .../propagation/cfa/ZeroXContainerCFABuilder.java | 4 ++-- .../ipa/callgraph/propagation/rta/AbstractRTABuilder.java | 3 ++- .../ipa/callgraph/propagation/rta/BasicRTABuilder.java | 3 ++- 4 files changed, 10 insertions(+), 8 deletions(-) diff --git a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/impl/Util.java b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/impl/Util.java index a964ad53b..9722566a3 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/impl/Util.java +++ b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/impl/Util.java @@ -317,7 +317,7 @@ public class Util { * @param cha governing class hierarchy * @param scope representation of the analysis scope */ - public static CallGraphBuilder makeRTABuilder(AnalysisOptions options, AnalysisCache cache, IClassHierarchy cha, + public static CallGraphBuilder makeRTABuilder(AnalysisOptions options, IAnalysisCacheView cache, IClassHierarchy cha, AnalysisScope scope) { addDefaultSelectors(options, cha); @@ -432,7 +432,7 @@ public class Util { * @return a 0-CFA Call Graph Builder augmented with extra logic for containers * @throws IllegalArgumentException if options is null */ - public static SSAPropagationCallGraphBuilder makeZeroContainerCFABuilder(AnalysisOptions options, AnalysisCache cache, + public static SSAPropagationCallGraphBuilder makeZeroContainerCFABuilder(AnalysisOptions options, IAnalysisCacheView cache, IClassHierarchy cha, AnalysisScope scope) { if (options == null) { @@ -453,12 +453,12 @@ public class Util { * @return a 0-1-CFA Call Graph Builder augmented with extra logic for containers * @throws IllegalArgumentException if options is null */ - public static SSAPropagationCallGraphBuilder makeZeroOneContainerCFABuilder(AnalysisOptions options, AnalysisCache cache, + public static SSAPropagationCallGraphBuilder makeZeroOneContainerCFABuilder(AnalysisOptions options, IAnalysisCacheView cache, IClassHierarchy cha, AnalysisScope scope) { return makeZeroOneContainerCFABuilder(options, cache, cha, scope, null, null); } - public static SSAPropagationCallGraphBuilder makeZeroOneContainerCFABuilder(AnalysisOptions options, AnalysisCache cache, + public static SSAPropagationCallGraphBuilder makeZeroOneContainerCFABuilder(AnalysisOptions options, IAnalysisCacheView cache, IClassHierarchy cha, AnalysisScope scope, ContextSelector appSelector, SSAContextInterpreter appInterpreter) { if (options == null) { diff --git a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/cfa/ZeroXContainerCFABuilder.java b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/cfa/ZeroXContainerCFABuilder.java index 785a159a2..d18ee90d2 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/cfa/ZeroXContainerCFABuilder.java +++ b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/cfa/ZeroXContainerCFABuilder.java @@ -10,9 +10,9 @@ *******************************************************************************/ package com.ibm.wala.ipa.callgraph.propagation.cfa; -import com.ibm.wala.ipa.callgraph.AnalysisCache; import com.ibm.wala.ipa.callgraph.AnalysisOptions; import com.ibm.wala.ipa.callgraph.ContextSelector; +import com.ibm.wala.ipa.callgraph.IAnalysisCacheView; import com.ibm.wala.ipa.callgraph.impl.DelegatingContextSelector; import com.ibm.wala.ipa.callgraph.propagation.SSAContextInterpreter; import com.ibm.wala.ipa.cha.IClassHierarchy; @@ -29,7 +29,7 @@ public class ZeroXContainerCFABuilder extends ZeroXCFABuilder { * @param appContextInterpreter application-specific logic to interpret a method in context * @throws IllegalArgumentException if options is null */ - public ZeroXContainerCFABuilder(IClassHierarchy cha, AnalysisOptions options, AnalysisCache cache, + public ZeroXContainerCFABuilder(IClassHierarchy cha, AnalysisOptions options, IAnalysisCacheView cache, ContextSelector appContextSelector, SSAContextInterpreter appContextInterpreter, int instancePolicy) { super(cha, options, cache, appContextSelector, appContextInterpreter, instancePolicy); diff --git a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/rta/AbstractRTABuilder.java b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/rta/AbstractRTABuilder.java index ea68aa645..2d78b3dc7 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/rta/AbstractRTABuilder.java +++ b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/rta/AbstractRTABuilder.java @@ -24,6 +24,7 @@ import com.ibm.wala.ipa.callgraph.AnalysisCache; import com.ibm.wala.ipa.callgraph.AnalysisOptions; import com.ibm.wala.ipa.callgraph.CGNode; import com.ibm.wala.ipa.callgraph.ContextSelector; +import com.ibm.wala.ipa.callgraph.IAnalysisCacheView; import com.ibm.wala.ipa.callgraph.impl.DefaultContextSelector; import com.ibm.wala.ipa.callgraph.impl.DelegatingContextSelector; import com.ibm.wala.ipa.callgraph.impl.Everywhere; @@ -97,7 +98,7 @@ public abstract class AbstractRTABuilder extends PropagationCallGraphBuilder { TypeReference.findOrCreate(ClassLoaderReference.Primordial, "Ljava/lang/ExceptionInInitializerError"), TypeReference.findOrCreate(ClassLoaderReference.Primordial, "Ljava/lang/NullPointerException") }; - protected AbstractRTABuilder(IClassHierarchy cha, AnalysisOptions options, AnalysisCache cache, + protected AbstractRTABuilder(IClassHierarchy cha, AnalysisOptions options, IAnalysisCacheView cache, ContextSelector appContextSelector, SSAContextInterpreter appContextInterpreter) { super(cha, options, cache, new DefaultPointerKeyFactory()); setInstanceKeys(new ClassBasedInstanceKeys(options, cha)); diff --git a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/rta/BasicRTABuilder.java b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/rta/BasicRTABuilder.java index da30a01d7..0f3e4bd7c 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/rta/BasicRTABuilder.java +++ b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/rta/BasicRTABuilder.java @@ -23,6 +23,7 @@ import com.ibm.wala.ipa.callgraph.AnalysisCache; import com.ibm.wala.ipa.callgraph.AnalysisOptions; import com.ibm.wala.ipa.callgraph.CGNode; import com.ibm.wala.ipa.callgraph.ContextSelector; +import com.ibm.wala.ipa.callgraph.IAnalysisCacheView; import com.ibm.wala.ipa.callgraph.impl.ExplicitCallGraph; import com.ibm.wala.ipa.callgraph.impl.ExplicitCallGraph.ExplicitNode; import com.ibm.wala.ipa.callgraph.propagation.InstanceKey; @@ -41,7 +42,7 @@ import com.ibm.wala.util.intset.MutableIntSet; */ public class BasicRTABuilder extends AbstractRTABuilder { - public BasicRTABuilder(IClassHierarchy cha, AnalysisOptions options, AnalysisCache cache, ContextSelector contextSelector, + public BasicRTABuilder(IClassHierarchy cha, AnalysisOptions options, IAnalysisCacheView cache, ContextSelector contextSelector, SSAContextInterpreter contextInterpreter) { super(cha, options, cache, contextSelector, contextInterpreter); } From fde65340d22f153914343a33bbaf6f5497ce67f4 Mon Sep 17 00:00:00 2001 From: Ben Liblit Date: Wed, 15 Mar 2017 00:04:21 -0500 Subject: [PATCH 3/6] Fix 132 Eclipse warnings about using raw generic types --- .../client/ECJJavaSourceAnalysisEngine.java | 2 +- .../java/ecj/util/SourceDirCallGraph.java | 2 +- .../jdt/JDTJava2CAstTranslator.java | 29 +++-- .../translator/jdt/JDTTypeDictionary.java | 2 +- .../jdt/ecj/ECJSourceModuleTranslator.java | 6 +- .../javaonepointfive/AnonymousGenerics.java | 2 +- .../src/javaonepointfive/BasicsGenerics.java | 2 +- .../com/ibm/wala/cast/java/test/IRTests.java | 2 +- .../ibm/wala/cast/java/test/JavaIRTests.java | 2 +- .../java/client/JavaSourceAnalysisEngine.java | 2 +- .../cast/java/ipa/modref/AstJavaModRef.java | 2 +- .../cast/java/ipa/slicer/AstJavaSlicer.java | 4 +- .../cast/js/test/TestJavaScriptSlicer.java | 3 +- .../js/client/JavaScriptAnalysisEngine.java | 2 +- .../cast/js/ipa/modref/JavaScriptModRef.java | 2 +- .../com/ibm/wala/cast/js/vis/JsPaPanel.java | 2 +- .../ibm/wala/cast/ipa/modref/AstModRef.java | 2 +- .../wala/core/tests/slicer/SlicerTest.java | 102 +++++++++++------- .../analysis/SimpleThreadEscapeAnalysis.java | 4 +- .../com/ibm/wala/examples/drivers/PDFSDG.java | 9 +- .../ibm/wala/examples/drivers/PDFSlice.java | 12 ++- .../analysis/pointers/BasicHeapGraph.java | 4 +- .../wala/client/AbstractAnalysisEngine.java | 12 +-- .../com/ibm/wala/client/AnalysisEngine.java | 2 +- .../demandpa/util/PABasedMemoryAccessMap.java | 6 +- .../ibm/wala/escape/FILiveObjectAnalysis.java | 4 +- .../ibm/wala/escape/TrivialMethodEscape.java | 4 +- .../propagation/AbstractPointerAnalysis.java | 6 +- .../PropagationCallGraphBuilder.java | 2 +- .../propagation/ReflectionHandler.java | 3 +- .../src/com/ibm/wala/ipa/modref/ModRef.java | 6 +- .../ibm/wala/ipa/slicer/HeapReachingDefs.java | 12 +-- .../src/com/ibm/wala/ipa/slicer/ISDG.java | 3 +- .../src/com/ibm/wala/ipa/slicer/PDG.java | 6 +- .../src/com/ibm/wala/ipa/slicer/SDG.java | 16 +-- .../ibm/wala/ipa/slicer/SDGSupergraph.java | 37 +++---- .../src/com/ibm/wala/ipa/slicer/Slicer.java | 23 ++-- .../com/ibm/wala/ipa/slicer/thin/CISDG.java | 2 +- .../ibm/wala/ipa/slicer/thin/CISlicer.java | 22 ++-- .../ibm/wala/ipa/slicer/thin/ThinSlicer.java | 4 +- .../ibm/wala/util/ssa/ParameterAccessor.java | 4 +- .../ibm/wala/util/ssa/SSAValueManager.java | 6 +- .../util/ssa/TypeSafeInstructionFactory.java | 4 +- .../src/com/ibm/wala/viz/viewer/ChaPanel.java | 4 +- .../src/com/ibm/wala/viz/viewer/IrViewer.java | 6 +- .../src/com/ibm/wala/viz/viewer/PaPanel.java | 2 +- .../com/ibm/wala/viz/viewer/SourceViewer.java | 6 +- .../dalvik/drivers/APKCallGraphDriver.java | 2 +- .../DefaultInstantiationBehavior.java | 12 +-- .../parameters/FlatInstantiator.java | 2 +- .../androidModel/parameters/Instantiator.java | 2 +- .../LoadedInstantiationBehavior.java | 10 +- .../parameters/SpecializedInstantiator.java | 2 +- .../cfa/IntentContextSelector.java | 2 +- .../callgraph/propagation/cfa/IntentMap.java | 2 +- .../wala/cast/java/test/ECJJavaIRTest.java | 5 +- .../wala/cast/java/test/JDTJavaIRTests.java | 3 +- .../ibm/wala/cast/java/test/JDTJavaTest.java | 9 +- .../client/JDTJavaSourceAnalysisEngine.java | 2 +- .../EclipseJavaScriptAnalysisEngine.java | 2 +- .../js/client/EclipseWebAnalysisEngine.java | 3 +- .../wala/examples/drivers/SWTPointsTo.java | 2 +- .../client/EclipseProjectAnalysisEngine.java | 2 +- .../src/com/ibm/wala/ide/ui/IFDSExplorer.java | 4 +- .../ibm/wala/ide/ui/ViewIFDSLocalAction.java | 6 +- 65 files changed, 256 insertions(+), 217 deletions(-) diff --git a/com.ibm.wala.cast.java.ecj/src/com/ibm/wala/cast/java/client/ECJJavaSourceAnalysisEngine.java b/com.ibm.wala.cast.java.ecj/src/com/ibm/wala/cast/java/client/ECJJavaSourceAnalysisEngine.java index 2fdd0c950..63067dd9f 100644 --- a/com.ibm.wala.cast.java.ecj/src/com/ibm/wala/cast/java/client/ECJJavaSourceAnalysisEngine.java +++ b/com.ibm.wala.cast.java.ecj/src/com/ibm/wala/cast/java/client/ECJJavaSourceAnalysisEngine.java @@ -15,7 +15,7 @@ import com.ibm.wala.classLoader.ClassLoaderFactory; import com.ibm.wala.ipa.callgraph.propagation.InstanceKey; import com.ibm.wala.util.config.SetOfClasses; -public class ECJJavaSourceAnalysisEngine extends JavaSourceAnalysisEngine { +public class ECJJavaSourceAnalysisEngine extends JavaSourceAnalysisEngine { @Override protected ClassLoaderFactory getClassLoaderFactory(SetOfClasses exclusions) { diff --git a/com.ibm.wala.cast.java.ecj/src/com/ibm/wala/cast/java/ecj/util/SourceDirCallGraph.java b/com.ibm.wala.cast.java.ecj/src/com/ibm/wala/cast/java/ecj/util/SourceDirCallGraph.java index 0449578ba..090b4724a 100644 --- a/com.ibm.wala.cast.java.ecj/src/com/ibm/wala/cast/java/ecj/util/SourceDirCallGraph.java +++ b/com.ibm.wala.cast.java.ecj/src/com/ibm/wala/cast/java/ecj/util/SourceDirCallGraph.java @@ -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, false); System.out.println("building call graph..."); CallGraph cg = builder.makeCallGraph(options, null); long end = System.currentTimeMillis(); diff --git a/com.ibm.wala.cast.java.ecj/src/com/ibm/wala/cast/java/translator/jdt/JDTJava2CAstTranslator.java b/com.ibm.wala.cast.java.ecj/src/com/ibm/wala/cast/java/translator/jdt/JDTJava2CAstTranslator.java index fd2cb3818..6028b132c 100644 --- a/com.ibm.wala.cast.java.ecj/src/com/ibm/wala/cast/java/translator/jdt/JDTJava2CAstTranslator.java +++ b/com.ibm.wala.cast.java.ecj/src/com/ibm/wala/cast/java/translator/jdt/JDTJava2CAstTranslator.java @@ -348,7 +348,7 @@ public abstract class JDTJava2CAstTranslator { } @Override - public Iterator getScopedEntities(CAstNode construct) { + public Iterator getScopedEntities(CAstNode construct) { Assertions.UNREACHABLE("Non-AST-bearing entity (ClassEntity) asked for scoped entities related to a given AST node"); return null; } @@ -387,7 +387,7 @@ public abstract class JDTJava2CAstTranslator { } @Override - public Collection getQualifiers() { + public Collection getQualifiers() { return fQuals; } @@ -419,8 +419,8 @@ public abstract class JDTJava2CAstTranslator { * @param context * @return */ - private CAstEntity createClassDeclaration(ASTNode n, List/* */bodyDecls, - List/* EnumConstantDeclaration */enumConstants, ITypeBinding typeBinding, String name, int modifiers, + private CAstEntity createClassDeclaration(ASTNode n, List bodyDecls, + List enumConstants, ITypeBinding typeBinding, String name, int modifiers, boolean isInterface, boolean isAnnotation, WalkContext context) { final List memberEntities = new ArrayList<>(); @@ -863,7 +863,7 @@ public abstract class JDTJava2CAstTranslator { } @Override - public Iterator getScopedEntities(CAstNode construct) { + public Iterator getScopedEntities(CAstNode construct) { if (fEntities.containsKey(construct)) { return (fEntities.get(construct)).iterator(); } else { @@ -930,8 +930,7 @@ public abstract class JDTJava2CAstTranslator { // from CodeBodyEntity fEntities = new LinkedHashMap<>(); - for (Iterator keys = entities.keySet().iterator(); keys.hasNext();) { - CAstNode key = (CAstNode) keys.next(); + for (CAstNode key : entities.keySet()) { fEntities.put(key, Collections.singleton(entities.get(key))); } @@ -1038,7 +1037,7 @@ public abstract class JDTJava2CAstTranslator { } @Override - public Collection getQualifiers() { + public Collection getQualifiers() { if (fDecl == null) return JDT2CAstUtils.mapModifiersToQualifiers(Modifier.STATIC, false, false); // static init else @@ -1208,7 +1207,7 @@ public abstract class JDTJava2CAstTranslator { } @Override - public Iterator getScopedEntities(CAstNode construct) { + public Iterator getScopedEntities(CAstNode construct) { return EmptyIterator.instance(); } @@ -1251,7 +1250,7 @@ public abstract class JDTJava2CAstTranslator { } @Override - public Collection getQualifiers() { + public Collection getQualifiers() { return quals; } @@ -1332,7 +1331,7 @@ public abstract class JDTJava2CAstTranslator { eltNodes[idx++] = makeNode(context, fFactory, n, CAstNode.NEW, fFactory.makeConstant(newTypeRef), fFactory.makeConstant(n .expressions().size())); - for (Iterator iter = n.expressions().iterator(); iter.hasNext(); idx++) { + for (Iterator iter = n.expressions().iterator(); iter.hasNext(); idx++) { Expression element = (Expression) iter.next(); eltNodes[idx] = visitNode(element, context); if (eltNodes[idx] == null) @@ -1347,7 +1346,7 @@ public abstract class JDTJava2CAstTranslator { .getAnonymousClassDeclaration(), context); } - private CAstNode createClassInstanceCreation(ASTNode nn, List/* Expression or CAstNode */arguments, IMethodBinding ctorBinding, + private CAstNode createClassInstanceCreation(ASTNode nn, List arguments, IMethodBinding ctorBinding, Expression qual, AnonymousClassDeclaration anonDecl, WalkContext context) { // a new instruction is actually two things: a NEW object and a CALL to a constructor CAstNode newNode; @@ -1419,7 +1418,7 @@ public abstract class JDTJava2CAstTranslator { argNodes[idx++] = fFactory.makeConstant(callSiteRef); // rest of args - for (Iterator iter = arguments.iterator(); iter.hasNext();) { + for (Iterator iter = arguments.iterator(); iter.hasNext();) { Object arg = iter.next(); argNodes[idx++] = (arg instanceof CAstNode) ? ((CAstNode) arg) : visitNode((Expression) arg, context); } @@ -1533,7 +1532,7 @@ public abstract class JDTJava2CAstTranslator { } private CAstNode createMethodInvocation(ASTNode pos, IMethodBinding methodBinding, CAstNode target, - List/* Expression or CAstNode */arguments, WalkContext context) { + List arguments, WalkContext context) { // MethodMethodInstance methodInstance = n.methodInstance(); boolean isStatic = (methodBinding.getModifiers() & Modifier.STATIC) != 0; ITypeBinding methodOwner = methodBinding.getDeclaringClass(); @@ -1592,7 +1591,7 @@ public abstract class JDTJava2CAstTranslator { * @param arguments * @param context */ - private void populateArguments(CAstNode[] children, IMethodBinding methodBinding, List/* CAstNode or Expression */arguments, + private void populateArguments(CAstNode[] children, IMethodBinding methodBinding, List arguments, WalkContext context) { int nFormals = methodBinding.getParameterTypes().length; assert children.length == nFormals + 2; diff --git a/com.ibm.wala.cast.java.ecj/src/com/ibm/wala/cast/java/translator/jdt/JDTTypeDictionary.java b/com.ibm.wala.cast.java.ecj/src/com/ibm/wala/cast/java/translator/jdt/JDTTypeDictionary.java index c5ba56c5a..b6052e671 100644 --- a/com.ibm.wala.cast.java.ecj/src/com/ibm/wala/cast/java/translator/jdt/JDTTypeDictionary.java +++ b/com.ibm.wala.cast.java.ecj/src/com/ibm/wala/cast/java/translator/jdt/JDTTypeDictionary.java @@ -161,7 +161,7 @@ public class JDTTypeDictionary extends CAstTypeDictionaryImpl { @Override @SuppressWarnings("unchecked") - public Collection getSupertypes() { + public Collection getSupertypes() { if (fSuperTypes == null) { buildSuperTypes(); } diff --git a/com.ibm.wala.cast.java.ecj/src/com/ibm/wala/cast/java/translator/jdt/ecj/ECJSourceModuleTranslator.java b/com.ibm.wala.cast.java.ecj/src/com/ibm/wala/cast/java/translator/jdt/ecj/ECJSourceModuleTranslator.java index 0a9ce1d07..e9196a142 100644 --- a/com.ibm.wala.cast.java.ecj/src/com/ibm/wala/cast/java/translator/jdt/ecj/ECJSourceModuleTranslator.java +++ b/com.ibm.wala.cast.java.ecj/src/com/ibm/wala/cast/java/translator/jdt/ecj/ECJSourceModuleTranslator.java @@ -90,7 +90,7 @@ public class ECJSourceModuleTranslator implements SourceModuleTranslator { @Override public void acceptAST(String source, CompilationUnit ast) { - JDTJava2CAstTranslator jdt2cast = makeCAstTranslator(ast, source); + JDTJava2CAstTranslator jdt2cast = makeCAstTranslator(ast, source); final Java2IRTranslator java2ir = makeIRTranslator(); java2ir.translate(sourceMap.get(source), jdt2cast.translateToCAst()); @@ -188,7 +188,7 @@ public class ECJSourceModuleTranslator implements SourceModuleTranslator { final ASTParser parser = ASTParser.newParser(AST.JLS8); parser.setResolveBindings(true); parser.setEnvironment(libs, this.sources, null, false); - Hashtable options = JavaCore.getOptions(); + Hashtable options = JavaCore.getOptions(); options.put(JavaCore.COMPILER_SOURCE, "1.8"); parser.setCompilerOptions(options); parser.createASTs(sourceFiles, null, new String[0], new ECJAstToIR(sourceMap), new NullProgressMonitor()); @@ -198,7 +198,7 @@ public class ECJSourceModuleTranslator implements SourceModuleTranslator { return new Java2IRTranslator(sourceLoader); } - protected JDTJava2CAstTranslator makeCAstTranslator(CompilationUnit cu, String fullPath) { + protected JDTJava2CAstTranslator makeCAstTranslator(CompilationUnit cu, String fullPath) { return new JDTJava2CAstTranslator(sourceLoader, cu, fullPath, false, dump) { @Override public Position makePosition(int start, int end) { diff --git a/com.ibm.wala.cast.java.test.data/src/javaonepointfive/AnonymousGenerics.java b/com.ibm.wala.cast.java.test.data/src/javaonepointfive/AnonymousGenerics.java index 85ce14520..50f8c3ffb 100644 --- a/com.ibm.wala.cast.java.test.data/src/javaonepointfive/AnonymousGenerics.java +++ b/com.ibm.wala.cast.java.test.data/src/javaonepointfive/AnonymousGenerics.java @@ -85,7 +85,7 @@ public class AnonymousGenerics { globalEconomy = ops.nullary(); System.out.println(globalEconomy); - Ops hack = ops; + Ops hack = ops; hack.unary("whatever"); hack.nullary(); hack = strQuadrupler; diff --git a/com.ibm.wala.cast.java.test.data/src/javaonepointfive/BasicsGenerics.java b/com.ibm.wala.cast.java.test.data/src/javaonepointfive/BasicsGenerics.java index a411030bc..8a1f1ce21 100644 --- a/com.ibm.wala.cast.java.test.data/src/javaonepointfive/BasicsGenerics.java +++ b/com.ibm.wala.cast.java.test.data/src/javaonepointfive/BasicsGenerics.java @@ -43,7 +43,7 @@ import java.util.Iterator; public class BasicsGenerics { static ArrayList strs = new ArrayList(); - static ArrayList ints = new ArrayList(); + static ArrayList ints = new ArrayList<>(); public BasicsGenerics() { strs.add("Coucou, monde!"); diff --git a/com.ibm.wala.cast.java.test/src/com/ibm/wala/cast/java/test/IRTests.java b/com.ibm.wala.cast.java.test/src/com/ibm/wala/cast/java/test/IRTests.java index 20ae878a7..2799e1a93 100644 --- a/com.ibm.wala.cast.java.test/src/com/ibm/wala/cast/java/test/IRTests.java +++ b/com.ibm.wala.cast.java.test/src/com/ibm/wala/cast/java/test/IRTests.java @@ -346,7 +346,7 @@ public abstract class IRTests { return new String[] { "L" + pkgName + "/" + getTestName().substring(4) }; } - protected abstract AbstractAnalysisEngine getAnalysisEngine(String[] mainClassDescriptors, Collection sources, List libs); + protected abstract AbstractAnalysisEngine getAnalysisEngine(String[] mainClassDescriptors, Collection sources, List libs); public Pair> runTest(Collection sources, List libs, String[] mainClassDescriptors, List ca, boolean assertReachable) throws IllegalArgumentException, CancelException, IOException { diff --git a/com.ibm.wala.cast.java.test/src/com/ibm/wala/cast/java/test/JavaIRTests.java b/com.ibm.wala.cast.java.test/src/com/ibm/wala/cast/java/test/JavaIRTests.java index 72fdbfefb..fc598dcb1 100644 --- a/com.ibm.wala.cast.java.test/src/com/ibm/wala/cast/java/test/JavaIRTests.java +++ b/com.ibm.wala.cast.java.test/src/com/ibm/wala/cast/java/test/JavaIRTests.java @@ -615,7 +615,7 @@ public abstract class JavaIRTests extends IRTests { // test partial slice MethodReference sliceRootRef = getSliceRootReference("MiniaturSliceBug", "validNonDispatchedCall", "(LIntWrapper;)V"); Set roots = cg.getNodes(sliceRootRef); - Pair, SDG> y = AstJavaSlicer.computeAssertionSlice(cg, pa, roots, false); + Pair,SDG> y = AstJavaSlicer.computeAssertionSlice(cg, pa, roots, false); Collection slice = y.fst; SlicerTest.dumpSlice(slice); Assert.assertEquals(0, SlicerTest.countAllocations(slice)); diff --git a/com.ibm.wala.cast.java/src/com/ibm/wala/cast/java/client/JavaSourceAnalysisEngine.java b/com.ibm.wala.cast.java/src/com/ibm/wala/cast/java/client/JavaSourceAnalysisEngine.java index 2513552f2..c050081c1 100644 --- a/com.ibm.wala.cast.java/src/com/ibm/wala/cast/java/client/JavaSourceAnalysisEngine.java +++ b/com.ibm.wala.cast.java/src/com/ibm/wala/cast/java/client/JavaSourceAnalysisEngine.java @@ -173,7 +173,7 @@ public abstract class JavaSourceAnalysisEngine extends Ab } @Override - protected CallGraphBuilder getCallGraphBuilder(IClassHierarchy cha, AnalysisOptions options, IAnalysisCacheView cache) { + protected CallGraphBuilder getCallGraphBuilder(IClassHierarchy cha, AnalysisOptions options, IAnalysisCacheView cache) { return new ZeroCFABuilderFactory().make(options, cache, cha, scope, false); } } diff --git a/com.ibm.wala.cast.java/src/com/ibm/wala/cast/java/ipa/modref/AstJavaModRef.java b/com.ibm.wala.cast.java/src/com/ibm/wala/cast/java/ipa/modref/AstJavaModRef.java index 7b66d167a..96a2d6532 100644 --- a/com.ibm.wala.cast.java/src/com/ibm/wala/cast/java/ipa/modref/AstJavaModRef.java +++ b/com.ibm.wala.cast.java/src/com/ibm/wala/cast/java/ipa/modref/AstJavaModRef.java @@ -48,7 +48,7 @@ public class AstJavaModRef extends AstModRef { @Override protected RefVisitor makeRefVisitor(CGNode n, Collection result, PointerAnalysis pa, ExtendedHeapModel h) { - return new AstJavaRefVisitor(n, result, pa, h); + return new AstJavaRefVisitor<>(n, result, pa, h); } protected static class AstJavaModVisitor diff --git a/com.ibm.wala.cast.java/src/com/ibm/wala/cast/java/ipa/slicer/AstJavaSlicer.java b/com.ibm.wala.cast.java/src/com/ibm/wala/cast/java/ipa/slicer/AstJavaSlicer.java index e14b64241..f7476f433 100644 --- a/com.ibm.wala.cast.java/src/com/ibm/wala/cast/java/ipa/slicer/AstJavaSlicer.java +++ b/com.ibm.wala.cast.java/src/com/ibm/wala/cast/java/ipa/slicer/AstJavaSlicer.java @@ -108,10 +108,10 @@ public class AstJavaSlicer extends Slicer { }); } - public static Pair, SDG> computeAssertionSlice(CallGraph CG, PointerAnalysis pa, + public static Pair, SDG> computeAssertionSlice(CallGraph CG, PointerAnalysis pa, Collection partialRoots, boolean multiThreadedCode) throws IllegalArgumentException, CancelException { CallGraph pcg = PartialCallGraph.make(CG, new LinkedHashSet<>(partialRoots)); - SDG sdg = new SDG(pcg, pa, new AstJavaModRef(), DataDependenceOptions.FULL, ControlDependenceOptions.FULL); + SDG sdg = new SDG<>(pcg, pa, new AstJavaModRef<>(), DataDependenceOptions.FULL, ControlDependenceOptions.FULL); //System.err.println(("SDG:\n" + sdg)); Set stmts = gatherAssertions(CG, partialRoots); if (multiThreadedCode) { diff --git a/com.ibm.wala.cast.js.test/harness-src/com/ibm/wala/cast/js/test/TestJavaScriptSlicer.java b/com.ibm.wala.cast.js.test/harness-src/com/ibm/wala/cast/js/test/TestJavaScriptSlicer.java index f1dbca52a..c2b30d2a2 100644 --- a/com.ibm.wala.cast.js.test/harness-src/com/ibm/wala/cast/js/test/TestJavaScriptSlicer.java +++ b/com.ibm.wala.cast.js.test/harness-src/com/ibm/wala/cast/js/test/TestJavaScriptSlicer.java @@ -23,6 +23,7 @@ import com.ibm.wala.classLoader.CallSiteReference; import com.ibm.wala.core.tests.slicer.SlicerTest; import com.ibm.wala.ipa.callgraph.CGNode; import com.ibm.wala.ipa.callgraph.CallGraph; +import com.ibm.wala.ipa.callgraph.propagation.InstanceKey; import com.ibm.wala.ipa.slicer.NormalStatement; import com.ibm.wala.ipa.slicer.SDG; import com.ibm.wala.ipa.slicer.Slicer; @@ -75,7 +76,7 @@ public abstract class TestJavaScriptSlicer extends TestJSCallGraphShape { JSCFABuilder B = JSCallGraphBuilderUtil.makeScriptCGBuilder("tests", file); CallGraph CG = B.makeCallGraph(B.getOptions()); - SDG sdg = new SDG(CG, B.getPointerAnalysis(), new JavaScriptModRef(), data, ctrl); + SDG sdg = new SDG<>(CG, B.getPointerAnalysis(), new JavaScriptModRef<>(), data, ctrl); final Collection ss = findTargetStatement(CG); Collection result = Slicer.computeBackwardSlice(sdg, ss); diff --git a/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/client/JavaScriptAnalysisEngine.java b/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/client/JavaScriptAnalysisEngine.java index 8eed55a54..17a203e16 100644 --- a/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/client/JavaScriptAnalysisEngine.java +++ b/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/client/JavaScriptAnalysisEngine.java @@ -194,7 +194,7 @@ public abstract class JavaScriptAnalysisEngine extends Ab public static class PropagationJavaScriptAnalysisEngine extends JavaScriptAnalysisEngine { @Override - protected CallGraphBuilder getCallGraphBuilder(IClassHierarchy cha, AnalysisOptions options, IAnalysisCacheView cache) { + protected CallGraphBuilder getCallGraphBuilder(IClassHierarchy cha, AnalysisOptions options, IAnalysisCacheView cache) { return new ZeroCFABuilderFactory().make((JSAnalysisOptions) options, cache, cha, scope, false); } } diff --git a/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/ipa/modref/JavaScriptModRef.java b/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/ipa/modref/JavaScriptModRef.java index b74db7d88..aec1d0e2a 100644 --- a/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/ipa/modref/JavaScriptModRef.java +++ b/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/ipa/modref/JavaScriptModRef.java @@ -100,7 +100,7 @@ public class JavaScriptModRef extends AstModRef { @Override protected RefVisitor makeRefVisitor(CGNode n, Collection result, PointerAnalysis pa, ExtendedHeapModel h) { - return new JavaScriptRefVisitor(n, result, pa, h); + return new JavaScriptRefVisitor<>(n, result, pa, h); } protected static class JavaScriptModVisitor extends AstModVisitor implements JSInstructionVisitor { diff --git a/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/vis/JsPaPanel.java b/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/vis/JsPaPanel.java index 0e1ba9854..1bc52f5b8 100644 --- a/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/vis/JsPaPanel.java +++ b/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/vis/JsPaPanel.java @@ -43,7 +43,7 @@ public class JsPaPanel extends PaPanel { } private void initDataStructures(PointerAnalysis pa) { - HeapGraph heapGraph = pa.getHeapGraph(); + HeapGraph heapGraph = pa.getHeapGraph(); OrdinalSetMapping instanceKeyMapping = pa.getInstanceKeyMapping(); for (Object n : heapGraph){ if (heapGraph.getPredNodeCount(n) == 0){ diff --git a/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ipa/modref/AstModRef.java b/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ipa/modref/AstModRef.java index deaea6562..ca22d3a71 100644 --- a/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ipa/modref/AstModRef.java +++ b/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ipa/modref/AstModRef.java @@ -151,7 +151,7 @@ public class AstModRef extends ModRef { @Override protected ModVisitor makeModVisitor(CGNode n, Collection result, PointerAnalysis pa, ExtendedHeapModel h, boolean ignoreAllocHeapDefs) { - return new AstModVisitor(n, result, (AstHeapModel)h, pa); + return new AstModVisitor<>(n, result, (AstHeapModel)h, pa); } } diff --git a/com.ibm.wala.core.tests/src/com/ibm/wala/core/tests/slicer/SlicerTest.java b/com.ibm.wala.core.tests/src/com/ibm/wala/core/tests/slicer/SlicerTest.java index ffd54222d..531c215a7 100644 --- a/com.ibm.wala.core.tests/src/com/ibm/wala/core/tests/slicer/SlicerTest.java +++ b/com.ibm.wala.core.tests/src/com/ibm/wala/core/tests/slicer/SlicerTest.java @@ -36,6 +36,8 @@ import com.ibm.wala.ipa.callgraph.ContextSelector; import com.ibm.wala.ipa.callgraph.Entrypoint; import com.ibm.wala.ipa.callgraph.impl.PartialCallGraph; import com.ibm.wala.ipa.callgraph.impl.Util; +import com.ibm.wala.ipa.callgraph.propagation.InstanceKey; +import com.ibm.wala.ipa.callgraph.propagation.PointerAnalysis; import com.ibm.wala.ipa.callgraph.propagation.SSAContextInterpreter; import com.ibm.wala.ipa.callgraph.propagation.SSAPropagationCallGraphBuilder; import com.ibm.wala.ipa.callgraph.propagation.cfa.ZeroXInstanceKeys; @@ -112,8 +114,9 @@ public class SlicerTest { Statement s = findCallTo(main, "println"); System.err.println("Statement: " + s); // compute a data slice - Collection computeBackwardSlice = Slicer.computeBackwardSlice(s, cg, builder.getPointerAnalysis(), - DataDependenceOptions.FULL, ControlDependenceOptions.NONE); + final PointerAnalysis pointerAnalysis = builder.getPointerAnalysis(); + Collection computeBackwardSlice = Slicer.computeBackwardSlice(s, cg, pointerAnalysis, + InstanceKey.class, DataDependenceOptions.FULL, ControlDependenceOptions.NONE); Collection slice = computeBackwardSlice; dumpSlice(slice); @@ -142,8 +145,9 @@ public class SlicerTest { Statement s = findCallTo(main, "println"); System.err.println("Statement: " + s); // compute a data slice - Collection computeBackwardSlice = Slicer.computeBackwardSlice(s, cg, builder.getPointerAnalysis(), - DataDependenceOptions.FULL, ControlDependenceOptions.NONE); + final PointerAnalysis pointerAnalysis = builder.getPointerAnalysis(); + Collection computeBackwardSlice = Slicer.computeBackwardSlice(s, cg, pointerAnalysis, + InstanceKey.class, DataDependenceOptions.FULL, ControlDependenceOptions.NONE); Collection slice = computeBackwardSlice; dumpSlice(slice); @@ -166,7 +170,8 @@ public class SlicerTest { Statement s = findCallTo(main, "doNothing"); System.err.println("Statement: " + s); // compute a data slice - Collection slice = Slicer.computeBackwardSlice(s, cg, builder.getPointerAnalysis(), DataDependenceOptions.FULL, + final PointerAnalysis pointerAnalysis = builder.getPointerAnalysis(); + Collection slice = Slicer.computeBackwardSlice(s, cg, pointerAnalysis, InstanceKey.class, DataDependenceOptions.FULL, ControlDependenceOptions.NONE); dumpSlice(slice); Assert.assertEquals(slice.toString(), 1, countAllocations(slice)); @@ -189,7 +194,8 @@ public class SlicerTest { s = PDFSlice.getReturnStatementForCall(s); System.err.println("Statement: " + s); // compute a data slice - Collection slice = Slicer.computeForwardSlice(s, cg, builder.getPointerAnalysis(), DataDependenceOptions.FULL, + final PointerAnalysis pointerAnalysis = builder.getPointerAnalysis(); + Collection slice = Slicer.computeForwardSlice(s, cg, pointerAnalysis, InstanceKey.class, DataDependenceOptions.FULL, ControlDependenceOptions.NONE); dumpSlice(slice); Assert.assertEquals(slice.toString(), 4, slice.size()); @@ -212,8 +218,9 @@ public class SlicerTest { s = PDFSlice.getReturnStatementForCall(s); System.err.println("Statement: " + s); // compute a data slice - Collection slice = Slicer.computeForwardSlice(s, cg, builder.getPointerAnalysis(), DataDependenceOptions.FULL, - ControlDependenceOptions.NONE); + final PointerAnalysis pointerAnalysis = builder.getPointerAnalysis(); + Collection slice = Slicer.computeForwardSlice(s, cg, pointerAnalysis, InstanceKey.class, + DataDependenceOptions.FULL, ControlDependenceOptions.NONE); dumpSlice(slice); Assert.assertEquals(slice.toString(), 7, slice.size()); } @@ -241,8 +248,9 @@ public class SlicerTest { Statement s = findFirstAllocation(main); System.err.println("Statement: " + s); // compute a data slice - Collection slice = Slicer.computeForwardSlice(s, cg, builder.getPointerAnalysis(), DataDependenceOptions.FULL, - ControlDependenceOptions.NONE); + final PointerAnalysis pointerAnalysis = builder.getPointerAnalysis(); + Collection slice = Slicer.computeForwardSlice(s, cg, pointerAnalysis, InstanceKey.class, + DataDependenceOptions.FULL, ControlDependenceOptions.NONE); dumpSlice(slice); } @@ -269,12 +277,13 @@ public class SlicerTest { Statement s = findCallToDoNothing(process); System.err.println("Statement: " + s); // compute a backward slice, with data dependence and no exceptional control dependence - Collection slice = Slicer.computeBackwardSlice(s, cg, builder.getPointerAnalysis(), DataDependenceOptions.FULL, + final PointerAnalysis pointerAnalysis = builder.getPointerAnalysis(); + Collection slice = Slicer.computeBackwardSlice(s, cg, pointerAnalysis, InstanceKey.class, DataDependenceOptions.FULL, ControlDependenceOptions.NO_EXCEPTIONAL_EDGES); dumpSlice(slice); Assert.assertEquals(4, countInvokes(slice)); // should only get 4 statements total when ignoring control dependences completely - slice = Slicer.computeBackwardSlice(s, cg, builder.getPointerAnalysis(), DataDependenceOptions.FULL, + slice = Slicer.computeBackwardSlice(s, cg, pointerAnalysis, InstanceKey.class, DataDependenceOptions.FULL, ControlDependenceOptions.NONE); Assert.assertEquals(slice.toString(), 4, slice.size()); } @@ -296,7 +305,8 @@ public class SlicerTest { Statement s = findCallToDoNothing(main); System.err.println("Statement: " + s); // compute a data slice - Collection slice = Slicer.computeBackwardSlice(s, cg, builder.getPointerAnalysis(), DataDependenceOptions.NONE, + final PointerAnalysis pointerAnalysis = builder.getPointerAnalysis(); + Collection slice = Slicer.computeBackwardSlice(s, cg, pointerAnalysis, InstanceKey.class, DataDependenceOptions.NONE, ControlDependenceOptions.FULL); dumpSlice(slice); Assert.assertEquals(slice.toString(), 2, countConditionals(slice)); @@ -319,7 +329,8 @@ public class SlicerTest { Statement s = findCallToDoNothing(main); System.err.println("Statement: " + s); // compute a data slice - Collection slice = Slicer.computeBackwardSlice(s, cg, builder.getPointerAnalysis(), DataDependenceOptions.NONE, + final PointerAnalysis pointerAnalysis = builder.getPointerAnalysis(); + Collection slice = Slicer.computeBackwardSlice(s, cg, pointerAnalysis, InstanceKey.class, DataDependenceOptions.NONE, ControlDependenceOptions.FULL); dumpSlice(slice); Assert.assertEquals(slice.toString(), 1, countConditionals(slice)); @@ -342,7 +353,8 @@ public class SlicerTest { Statement s = findCallToDoNothing(main); System.err.println("Statement: " + s); // compute a data slice - Collection slice = Slicer.computeBackwardSlice(s, cg, builder.getPointerAnalysis(), DataDependenceOptions.NONE, + final PointerAnalysis pointerAnalysis = builder.getPointerAnalysis(); + Collection slice = Slicer.computeBackwardSlice(s, cg, pointerAnalysis, InstanceKey.class, DataDependenceOptions.NONE, ControlDependenceOptions.FULL); dumpSlice(slice); Assert.assertEquals(slice.toString(), 0, countConditionals(slice)); @@ -366,14 +378,15 @@ public class SlicerTest { System.err.println("Statement: " + s); // compute a no-data slice - Collection slice = Slicer.computeBackwardSlice(s, cg, builder.getPointerAnalysis(), DataDependenceOptions.NONE, + final PointerAnalysis pointerAnalysis = builder.getPointerAnalysis(); + Collection slice = Slicer.computeBackwardSlice(s, cg, pointerAnalysis, InstanceKey.class, DataDependenceOptions.NONE, ControlDependenceOptions.FULL); dumpSlice(slice); Assert.assertEquals(0, countConditionals(slice)); // compute a full slice - slice = Slicer.computeBackwardSlice(s, cg, builder.getPointerAnalysis(), DataDependenceOptions.FULL, - ControlDependenceOptions.FULL); + slice = Slicer.computeBackwardSlice(s, cg, pointerAnalysis, InstanceKey.class, + DataDependenceOptions.FULL, ControlDependenceOptions.FULL); dumpSlice(slice); Assert.assertEquals(slice.toString(), 1, countConditionals(slice)); } @@ -396,8 +409,9 @@ public class SlicerTest { System.err.println("Statement: " + s); // compute a no-data slice - Collection slice = Slicer.computeForwardSlice(s, cg, builder.getPointerAnalysis(), DataDependenceOptions.NONE, - ControlDependenceOptions.NO_EXCEPTIONAL_EDGES); + final PointerAnalysis pointerAnalysis = builder.getPointerAnalysis(); + Collection slice = Slicer.computeForwardSlice(s, cg, pointerAnalysis, InstanceKey.class, + DataDependenceOptions.NONE, ControlDependenceOptions.NO_EXCEPTIONAL_EDGES); dumpSlice(slice); Assert.assertTrue(slice.toString(), slice.size() > 1); } @@ -420,8 +434,9 @@ public class SlicerTest { System.err.println("Statement: " + s); // compute a no-data slice - Collection slice = Slicer.computeForwardSlice(s, cg, builder.getPointerAnalysis(), DataDependenceOptions.NONE, - ControlDependenceOptions.NO_EXCEPTIONAL_EDGES); + final PointerAnalysis pointerAnalysis = builder.getPointerAnalysis(); + Collection slice = Slicer.computeForwardSlice(s, cg, pointerAnalysis, InstanceKey.class, + DataDependenceOptions.NONE, ControlDependenceOptions.NO_EXCEPTIONAL_EDGES); dumpSlice(slice); Assert.assertEquals(slice.toString(), 2, countInvokes(slice)); } @@ -443,7 +458,8 @@ public class SlicerTest { Statement s = findCallToDoNothing(main); System.err.println("Statement: " + s); // compute a data slice - Collection slice = Slicer.computeBackwardSlice(s, cg, builder.getPointerAnalysis(), DataDependenceOptions.FULL, + final PointerAnalysis pointerAnalysis = builder.getPointerAnalysis(); + Collection slice = Slicer.computeBackwardSlice(s, cg, pointerAnalysis, InstanceKey.class, DataDependenceOptions.FULL, ControlDependenceOptions.NONE); dumpSlice(slice); Assert.assertEquals(slice.toString(), 1, countAllocations(slice)); @@ -466,7 +482,8 @@ public class SlicerTest { Statement s = findCallToDoNothing(main); System.err.println("Statement: " + s); // compute a data slice - Collection slice = Slicer.computeBackwardSlice(s, cg, builder.getPointerAnalysis(), DataDependenceOptions.FULL, + final PointerAnalysis pointerAnalysis = builder.getPointerAnalysis(); + Collection slice = Slicer.computeBackwardSlice(s, cg, pointerAnalysis, InstanceKey.class, DataDependenceOptions.FULL, ControlDependenceOptions.NONE); dumpSlice(slice); Assert.assertEquals(slice.toString(), 2, countAllocations(slice)); @@ -490,7 +507,8 @@ public class SlicerTest { Statement s = findCallToDoNothing(main); System.err.println("Statement: " + s); // compute a data slice - Collection slice = Slicer.computeBackwardSlice(s, cg, builder.getPointerAnalysis(), DataDependenceOptions.FULL, + final PointerAnalysis pointerAnalysis = builder.getPointerAnalysis(); + Collection slice = Slicer.computeBackwardSlice(s, cg, pointerAnalysis, InstanceKey.class, DataDependenceOptions.FULL, ControlDependenceOptions.NONE); dumpSlice(slice); Assert.assertEquals(slice.toString(), 2, countAllocations(slice)); @@ -516,15 +534,16 @@ public class SlicerTest { // compute normal data slice // compute a data slice - Collection slice = Slicer.computeBackwardSlice(s, cg, builder.getPointerAnalysis(), DataDependenceOptions.FULL, + final PointerAnalysis pointerAnalysis = builder.getPointerAnalysis(); + Collection slice = Slicer.computeBackwardSlice(s, cg, pointerAnalysis, InstanceKey.class, DataDependenceOptions.FULL, ControlDependenceOptions.NONE); dumpSlice(slice); Assert.assertEquals(3, countAllocations(slice)); Assert.assertEquals(2, countPutfields(slice)); // compute thin slice .. ignore base pointers - Collection computeBackwardSlice = Slicer.computeBackwardSlice(s, cg, builder.getPointerAnalysis(), - DataDependenceOptions.NO_BASE_PTRS, ControlDependenceOptions.NONE); + Collection computeBackwardSlice = Slicer.computeBackwardSlice(s, cg, pointerAnalysis, + InstanceKey.class, DataDependenceOptions.NO_BASE_PTRS, ControlDependenceOptions.NONE); slice = computeBackwardSlice; dumpSlice(slice); Assert.assertEquals(slice.toString(), 2, countAllocations(slice)); @@ -548,7 +567,8 @@ public class SlicerTest { Statement s = findCallToDoNothing(main); System.err.println("Statement: " + s); // compute a data slice - Collection slice = Slicer.computeBackwardSlice(s, cg, builder.getPointerAnalysis(), DataDependenceOptions.FULL, + final PointerAnalysis pointerAnalysis = builder.getPointerAnalysis(); + Collection slice = Slicer.computeBackwardSlice(s, cg, pointerAnalysis, InstanceKey.class, DataDependenceOptions.FULL, ControlDependenceOptions.NONE); dumpSlice(slice); Assert.assertEquals(slice.toString(), 1, countAllocations(slice)); @@ -573,7 +593,8 @@ public class SlicerTest { Statement s = findCallToDoNothing(main); System.err.println("Statement: " + s); // compute a data slice - Collection slice = Slicer.computeBackwardSlice(s, cg, builder.getPointerAnalysis(), DataDependenceOptions.FULL, + final PointerAnalysis pointerAnalysis = builder.getPointerAnalysis(); + Collection slice = Slicer.computeBackwardSlice(s, cg, pointerAnalysis, InstanceKey.class, DataDependenceOptions.FULL, ControlDependenceOptions.NONE); dumpSlice(slice); Assert.assertEquals(slice.toString(), 2, countAllocations(slice)); @@ -597,7 +618,8 @@ public class SlicerTest { System.err.println("Statement: " + s); // compute a data slice - Collection slice = Slicer.computeBackwardSlice(s, cg, builder.getPointerAnalysis(), DataDependenceOptions.FULL, + final PointerAnalysis pointerAnalysis = builder.getPointerAnalysis(); + Collection slice = Slicer.computeBackwardSlice(s, cg, pointerAnalysis, InstanceKey.class, DataDependenceOptions.FULL, ControlDependenceOptions.NONE); dumpSlice(slice); Assert.assertEquals(slice.toString(), 3, countAllocations(slice)); @@ -624,8 +646,9 @@ public class SlicerTest { System.err.println("Statement: " + s); // compute full slice - Collection slice = Slicer.computeBackwardSlice(s, pcg, builder.getPointerAnalysis(), DataDependenceOptions.FULL, - ControlDependenceOptions.FULL); + final PointerAnalysis pointerAnalysis = builder.getPointerAnalysis(); + Collection slice = Slicer.computeBackwardSlice(s, pcg, pointerAnalysis, InstanceKey.class, + DataDependenceOptions.FULL, ControlDependenceOptions.FULL); dumpSlice(slice); Assert.assertEquals(slice.toString(), 0, countAllocations(slice)); Assert.assertEquals(slice.toString(), 1, countPutfields(slice)); @@ -665,8 +688,9 @@ public class SlicerTest { Statement s = findCallToDoNothing(test); System.err.println("Statement: " + s); - Collection slice = Slicer.computeBackwardSlice(s, pcg, builder.getPointerAnalysis(), DataDependenceOptions.FULL, - ControlDependenceOptions.NONE); + final PointerAnalysis pointerAnalysis = builder.getPointerAnalysis(); + Collection slice = Slicer.computeBackwardSlice(s, pcg, pointerAnalysis, InstanceKey.class, + DataDependenceOptions.FULL, ControlDependenceOptions.NONE); dumpSlice(slice); Assert.assertEquals(slice.toString(), 1, countAllocations(slice)); Assert.assertEquals(slice.toString(), 1, countPutfields(slice)); @@ -688,7 +712,8 @@ public class SlicerTest { Statement s = findCallToDoNothing(main); System.err.println("Statement: " + s); // compute a data slice - Collection slice = Slicer.computeBackwardSlice(s, cg, builder.getPointerAnalysis(), DataDependenceOptions.FULL, + final PointerAnalysis pointerAnalysis = builder.getPointerAnalysis(); + Collection slice = Slicer.computeBackwardSlice(s, cg, pointerAnalysis, InstanceKey.class, DataDependenceOptions.FULL, ControlDependenceOptions.NONE); dumpSlice(slice); Assert.assertEquals(slice.toString(), 1, countApplicationAllocations(slice)); @@ -733,7 +758,7 @@ public class SlicerTest { CallGraphBuilder builder = Util.makeZeroOneCFABuilder(options, new AnalysisCacheImpl(), cha, scope); CallGraph cg = builder.makeCallGraph(options, null); - SDG sdg = new SDG(cg, builder.getPointerAnalysis(), DataDependenceOptions.NO_BASE_NO_HEAP, ControlDependenceOptions.FULL); + SDG sdg = new SDG<>(cg, builder.getPointerAnalysis(), InstanceKey.class, DataDependenceOptions.NO_BASE_NO_HEAP, ControlDependenceOptions.FULL); GraphIntegrity.check(sdg); } @@ -754,7 +779,8 @@ public class SlicerTest { Statement s = findCallToDoNothing(main); System.err.println("Statement: " + s); - Collection slice = Slicer.computeBackwardSlice(s, cg, builder.getPointerAnalysis(), DataDependenceOptions.FULL, + final PointerAnalysis pointerAnalysis = builder.getPointerAnalysis(); + Collection slice = Slicer.computeBackwardSlice(s, cg, pointerAnalysis, InstanceKey.class, DataDependenceOptions.FULL, ControlDependenceOptions.NO_EXCEPTIONAL_EDGES); dumpSlice(slice); } diff --git a/com.ibm.wala.core.tests/src/com/ibm/wala/examples/analysis/SimpleThreadEscapeAnalysis.java b/com.ibm.wala.core.tests/src/com/ibm/wala/examples/analysis/SimpleThreadEscapeAnalysis.java index 027b3a8df..9e798b0a3 100644 --- a/com.ibm.wala.core.tests/src/com/ibm/wala/examples/analysis/SimpleThreadEscapeAnalysis.java +++ b/com.ibm.wala.core.tests/src/com/ibm/wala/examples/analysis/SimpleThreadEscapeAnalysis.java @@ -76,7 +76,7 @@ import com.ibm.wala.util.intset.OrdinalSet; * * @author Julian Dolby */ -public class SimpleThreadEscapeAnalysis extends AbstractAnalysisEngine { +public class SimpleThreadEscapeAnalysis extends AbstractAnalysisEngine { private final Set applicationJarFiles; @@ -91,7 +91,7 @@ public class SimpleThreadEscapeAnalysis extends AbstractAnalysisEngine { } @Override - protected CallGraphBuilder getCallGraphBuilder(IClassHierarchy cha, AnalysisOptions options, IAnalysisCacheView cache) { + protected CallGraphBuilder getCallGraphBuilder(IClassHierarchy cha, AnalysisOptions options, IAnalysisCacheView cache) { return Util.makeZeroCFABuilder(options, cache, cha, scope); } diff --git a/com.ibm.wala.core.tests/src/com/ibm/wala/examples/drivers/PDFSDG.java b/com.ibm.wala.core.tests/src/com/ibm/wala/examples/drivers/PDFSDG.java index 87fa08bdd..267826854 100644 --- a/com.ibm.wala.core.tests/src/com/ibm/wala/examples/drivers/PDFSDG.java +++ b/com.ibm.wala.core.tests/src/com/ibm/wala/examples/drivers/PDFSDG.java @@ -23,6 +23,8 @@ import com.ibm.wala.ipa.callgraph.CallGraph; import com.ibm.wala.ipa.callgraph.CallGraphBuilder; import com.ibm.wala.ipa.callgraph.Entrypoint; import com.ibm.wala.ipa.callgraph.impl.Util; +import com.ibm.wala.ipa.callgraph.propagation.InstanceKey; +import com.ibm.wala.ipa.callgraph.propagation.PointerAnalysis; import com.ibm.wala.ipa.cha.ClassHierarchy; import com.ibm.wala.ipa.cha.ClassHierarchyFactory; import com.ibm.wala.ipa.slicer.HeapStatement; @@ -126,9 +128,10 @@ public class PDFSDG { Iterable entrypoints = com.ibm.wala.ipa.callgraph.impl.Util.makeMainEntrypoints(scope, cha, mainClass); AnalysisOptions options = CallGraphTestUtil.makeAnalysisOptions(scope, entrypoints); - CallGraphBuilder builder = Util.makeZeroOneCFABuilder(options, new AnalysisCacheImpl(), cha, scope); + CallGraphBuilder builder = Util.makeZeroOneCFABuilder(options, new AnalysisCacheImpl(), cha, scope); CallGraph cg = builder.makeCallGraph(options,null); - SDG sdg = new SDG(cg, builder.getPointerAnalysis(), dOptions, cOptions); + final PointerAnalysis pointerAnalysis = builder.getPointerAnalysis(); + SDG sdg = new SDG<>(cg, pointerAnalysis, InstanceKey.class, dOptions, cOptions); try { GraphIntegrity.check(sdg); } catch (UnsoundGraphException e1) { @@ -161,7 +164,7 @@ public class PDFSDG { } } - private static Graph pruneSDG(final SDG sdg) { + private static Graph pruneSDG(final SDG sdg) { Predicate f = new Predicate() { @Override public boolean test(Statement s) { if (s.getNode().equals(sdg.getCallGraph().getFakeRootNode())) { diff --git a/com.ibm.wala.core.tests/src/com/ibm/wala/examples/drivers/PDFSlice.java b/com.ibm.wala.core.tests/src/com/ibm/wala/examples/drivers/PDFSlice.java index eee86ce39..fb0e85bf7 100644 --- a/com.ibm.wala.core.tests/src/com/ibm/wala/examples/drivers/PDFSlice.java +++ b/com.ibm.wala.core.tests/src/com/ibm/wala/examples/drivers/PDFSlice.java @@ -26,6 +26,8 @@ import com.ibm.wala.ipa.callgraph.CallGraph; import com.ibm.wala.ipa.callgraph.CallGraphBuilder; import com.ibm.wala.ipa.callgraph.Entrypoint; import com.ibm.wala.ipa.callgraph.impl.Util; +import com.ibm.wala.ipa.callgraph.propagation.InstanceKey; +import com.ibm.wala.ipa.callgraph.propagation.PointerAnalysis; import com.ibm.wala.ipa.cha.ClassHierarchy; import com.ibm.wala.ipa.cha.ClassHierarchyFactory; import com.ibm.wala.ipa.slicer.HeapStatement; @@ -157,7 +159,7 @@ public class PDFSlice { // CallGraphBuilder builder = Util.makeZeroOneCFABuilder(options, new // AnalysisCache(), cha, scope); CallGraph cg = builder.makeCallGraph(options, null); - SDG sdg = new SDG(cg, builder.getPointerAnalysis(), dOptions, cOptions); + SDG sdg = new SDG<>(cg, builder.getPointerAnalysis(), InstanceKey.class, dOptions, cOptions); // find the call statement of interest CGNode callerNode = SlicerTest.findMethod(cg, srcCaller); @@ -167,12 +169,14 @@ public class PDFSlice { // compute the slice as a collection of statements Collection slice = null; if (goBackward) { - slice = Slicer.computeBackwardSlice(s, cg, builder.getPointerAnalysis(), dOptions, cOptions); + final PointerAnalysis pointerAnalysis = builder.getPointerAnalysis(); + slice = Slicer.computeBackwardSlice(s, cg, pointerAnalysis, InstanceKey.class, dOptions, cOptions); } else { // for forward slices ... we actually slice from the return value of // calls. s = getReturnStatementForCall(s); - slice = Slicer.computeForwardSlice(s, cg, builder.getPointerAnalysis(), dOptions, cOptions); + final PointerAnalysis pointerAnalysis = builder.getPointerAnalysis(); + slice = Slicer.computeForwardSlice(s, cg, pointerAnalysis, InstanceKey.class, dOptions, cOptions); } SlicerTest.dumpSlice(slice); @@ -244,7 +248,7 @@ public class PDFSlice { /** * return a view of the sdg restricted to the statements in the slice */ - public static Graph pruneSDG(SDG sdg, final Collection slice) { + public static Graph pruneSDG(SDG sdg, final Collection slice) { Predicate f = new Predicate() { @Override public boolean test(Statement o) { return slice.contains(o); diff --git a/com.ibm.wala.core/src/com/ibm/wala/analysis/pointers/BasicHeapGraph.java b/com.ibm.wala.core/src/com/ibm/wala/analysis/pointers/BasicHeapGraph.java index 700ebb42a..35c8cf6bf 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/analysis/pointers/BasicHeapGraph.java +++ b/com.ibm.wala.core/src/com/ibm/wala/analysis/pointers/BasicHeapGraph.java @@ -99,12 +99,12 @@ public class BasicHeapGraph extends HeapGraphImpl { @Override public int getNumber(Object N) { if (N instanceof PointerKey) { - return pointerKeys.getMappedIndex((PointerKey) N); + return pointerKeys.getMappedIndex(N); } else { if (!(N instanceof InstanceKey)) { Assertions.UNREACHABLE(N.getClass().toString()); } - int inumber = P.getInstanceKeyMapping().getMappedIndex((InstanceKey) N); + int inumber = P.getInstanceKeyMapping().getMappedIndex(N); return (inumber == -1) ? -1 : inumber + pointerKeys.getMaximumIndex() + 1; } } diff --git a/com.ibm.wala.core/src/com/ibm/wala/client/AbstractAnalysisEngine.java b/com.ibm.wala.core/src/com/ibm/wala/client/AbstractAnalysisEngine.java index a7d6f83eb..b28738416 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/client/AbstractAnalysisEngine.java +++ b/com.ibm.wala.core/src/com/ibm/wala/client/AbstractAnalysisEngine.java @@ -79,7 +79,7 @@ public abstract class AbstractAnalysisEngine implements A /** * The modules to analyze */ - protected Collection moduleFiles; + protected Collection moduleFiles; /** * A representation of the analysis scope @@ -133,11 +133,11 @@ public abstract class AbstractAnalysisEngine implements A } }; - protected abstract CallGraphBuilder getCallGraphBuilder(IClassHierarchy cha, AnalysisOptions options, IAnalysisCacheView cache2); + protected abstract CallGraphBuilder getCallGraphBuilder(IClassHierarchy cha, AnalysisOptions options, IAnalysisCacheView cache2); protected CallGraphBuilder buildCallGraph(IClassHierarchy cha, AnalysisOptions options, boolean savePointerAnalysis, IProgressMonitor monitor) throws IllegalArgumentException, CancelException { - CallGraphBuilder builder = getCallGraphBuilder(cha, options, cache); + CallGraphBuilder builder = getCallGraphBuilder(cha, options, cache); cg = builder.makeCallGraph(options, monitor); @@ -149,7 +149,7 @@ public abstract class AbstractAnalysisEngine implements A } @Override - public void setModuleFiles(Collection moduleFiles) { + public void setModuleFiles(Collection moduleFiles) { this.moduleFiles = moduleFiles; } @@ -272,8 +272,8 @@ public abstract class AbstractAnalysisEngine implements A return heapGraph; } - public SDG getSDG(DataDependenceOptions data, ControlDependenceOptions ctrl) { - return new SDG(getCallGraph(), getPointerAnalysis(), data, ctrl); + public SDG getSDG(Class instanceKeyClass, DataDependenceOptions data, ControlDependenceOptions ctrl) { + return new SDG(getCallGraph(), getPointerAnalysis(), instanceKeyClass, data, ctrl); } public String getExclusionsFile() { diff --git a/com.ibm.wala.core/src/com/ibm/wala/client/AnalysisEngine.java b/com.ibm.wala.core/src/com/ibm/wala/client/AnalysisEngine.java index cbf965dea..6318f24da 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/client/AnalysisEngine.java +++ b/com.ibm.wala.core/src/com/ibm/wala/client/AnalysisEngine.java @@ -26,7 +26,7 @@ public interface AnalysisEngine { * * @param moduleFiles A non-null Collection of module files: (EARFile, WARFile, ApplicationClientFile, EJBJarFile). */ - void setModuleFiles(Collection moduleFiles); + void setModuleFiles(Collection moduleFiles); /** * Specify the jar files that represent the standard J2SE libraries diff --git a/com.ibm.wala.core/src/com/ibm/wala/demandpa/util/PABasedMemoryAccessMap.java b/com.ibm.wala.core/src/com/ibm/wala/demandpa/util/PABasedMemoryAccessMap.java index c55b589e0..3451991e1 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/demandpa/util/PABasedMemoryAccessMap.java +++ b/com.ibm.wala.core/src/com/ibm/wala/demandpa/util/PABasedMemoryAccessMap.java @@ -52,11 +52,11 @@ public class PABasedMemoryAccessMap implements MemoryAccessMap { private final Map> invRef; public PABasedMemoryAccessMap(CallGraph cg, PointerAnalysis pa) { - this(cg, pa, new SDG(cg, pa, DataDependenceOptions.NO_BASE_NO_HEAP_NO_EXCEPTIONS, ControlDependenceOptions.NONE)); + this(cg, pa, new SDG(cg, pa, InstanceKey.class, DataDependenceOptions.NO_BASE_NO_HEAP_NO_EXCEPTIONS, ControlDependenceOptions.NONE)); } - public PABasedMemoryAccessMap(CallGraph cg, PointerAnalysis pa, SDG sdg) { - this(cg, pa, CISlicer.scanForMod(sdg, pa, true, ModRef.make()), CISlicer.scanForRef(sdg, pa)); + public PABasedMemoryAccessMap(CallGraph cg, PointerAnalysis pa, SDG sdg) { + this(cg, pa, CISlicer.scanForMod(sdg, pa, true, ModRef.make(InstanceKey.class)), CISlicer.scanForRef(sdg, pa)); } public PABasedMemoryAccessMap(CallGraph cg, PointerAnalysis pa, Map> mod, diff --git a/com.ibm.wala.core/src/com/ibm/wala/escape/FILiveObjectAnalysis.java b/com.ibm.wala.core/src/com/ibm/wala/escape/FILiveObjectAnalysis.java index d09d61f9d..e19fbacc9 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/escape/FILiveObjectAnalysis.java +++ b/com.ibm.wala.core/src/com/ibm/wala/escape/FILiveObjectAnalysis.java @@ -48,7 +48,7 @@ public class FILiveObjectAnalysis implements ILiveObjectAnalysis { /** * Graph view of pointer analysis results */ - private final HeapGraph heapGraph; + private final HeapGraph heapGraph; /** * Cached map from InstanceKey -> Set @@ -68,7 +68,7 @@ public class FILiveObjectAnalysis implements ILiveObjectAnalysis { /** * */ - public FILiveObjectAnalysis(CallGraph callGraph, HeapGraph heapGraph, boolean expensiveIntraproceduralAnalysis) { + public FILiveObjectAnalysis(CallGraph callGraph, HeapGraph heapGraph, boolean expensiveIntraproceduralAnalysis) { super(); this.callGraph = callGraph; this.heapGraph = heapGraph; diff --git a/com.ibm.wala.core/src/com/ibm/wala/escape/TrivialMethodEscape.java b/com.ibm.wala.core/src/com/ibm/wala/escape/TrivialMethodEscape.java index 878312be8..16487f188 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/escape/TrivialMethodEscape.java +++ b/com.ibm.wala.core/src/com/ibm/wala/escape/TrivialMethodEscape.java @@ -40,7 +40,7 @@ public class TrivialMethodEscape implements IMethodEscapeAnalysis, INodeEscapeAn /** * Heap graph representation of pointer analysis */ - private final HeapGraph hg; + private final HeapGraph hg; /** * Governing call graph @@ -51,7 +51,7 @@ public class TrivialMethodEscape implements IMethodEscapeAnalysis, INodeEscapeAn * @param hg Heap graph representation of pointer analysis * @param cg governing call graph */ - public TrivialMethodEscape(CallGraph cg, HeapGraph hg) { + public TrivialMethodEscape(CallGraph cg, HeapGraph hg) { this.hg = hg; this.cg = cg; } diff --git a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/AbstractPointerAnalysis.java b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/AbstractPointerAnalysis.java index c9f022e7b..fc18f5380 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/AbstractPointerAnalysis.java +++ b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/AbstractPointerAnalysis.java @@ -27,7 +27,7 @@ public abstract class AbstractPointerAnalysis implements PointerAnalysis heapGraph; /** * Governing call graph. */ @@ -44,9 +44,9 @@ public abstract class AbstractPointerAnalysis implements PointerAnalysis getHeapGraph() { if (heapGraph == null) { - heapGraph = new BasicHeapGraph(this, cg); + heapGraph = new BasicHeapGraph(this, cg); } return heapGraph; } diff --git a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/PropagationCallGraphBuilder.java b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/PropagationCallGraphBuilder.java index 5294ebd71..f3656d714 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/PropagationCallGraphBuilder.java +++ b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/PropagationCallGraphBuilder.java @@ -58,7 +58,7 @@ import com.ibm.wala.util.warnings.Warnings; * TODO: This implementation currently keeps all points to sets live ... even those for local variables that do not span * interprocedural boundaries. This may be too space-inefficient .. we can consider recomputing local sets on demand. */ -public abstract class PropagationCallGraphBuilder implements CallGraphBuilder { +public abstract class PropagationCallGraphBuilder implements CallGraphBuilder { private final static boolean DEBUG_ALL = false; final static boolean DEBUG_ASSIGN = DEBUG_ALL | false; diff --git a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/ReflectionHandler.java b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/ReflectionHandler.java index 2a83cd970..d1065a777 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/ReflectionHandler.java +++ b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/ReflectionHandler.java @@ -62,8 +62,7 @@ public class ReflectionHandler { if (VERBOSE) { System.err.println("Slice " + st); } - Collection slice = Slicer.computeForwardSlice(st, builder.callGraph, null, DataDependenceOptions.REFLECTION, - ControlDependenceOptions.NONE); + Collection slice = Slicer.computeForwardSlice(st, builder.callGraph, null, null, DataDependenceOptions.REFLECTION, ControlDependenceOptions.NONE); if (VERBOSE) { for (Statement x : slice) { System.err.println(" " + x); diff --git a/com.ibm.wala.core/src/com/ibm/wala/ipa/modref/ModRef.java b/com.ibm.wala.core/src/com/ibm/wala/ipa/modref/ModRef.java index c2759b7a1..d22644e91 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/ipa/modref/ModRef.java +++ b/com.ibm.wala.core/src/com/ibm/wala/ipa/modref/ModRef.java @@ -44,8 +44,8 @@ import com.ibm.wala.util.intset.OrdinalSet; */ public class ModRef { - public static ModRef make() { - return new ModRef(); + public static ModRef make(Class klass) { + return new ModRef(); } protected ModRef() { @@ -344,7 +344,7 @@ public class ModRef { protected ModVisitor makeModVisitor(CGNode n, Collection result, PointerAnalysis pa, ExtendedHeapModel h, boolean ignoreAllocHeapDefs) { - return new ModVisitor(n, result, h, pa, ignoreAllocHeapDefs); + return new ModVisitor(n, result, h, pa, ignoreAllocHeapDefs); } /** diff --git a/com.ibm.wala.core/src/com/ibm/wala/ipa/slicer/HeapReachingDefs.java b/com.ibm.wala.core/src/com/ibm/wala/ipa/slicer/HeapReachingDefs.java index 36d0ea438..1ea9e115a 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/ipa/slicer/HeapReachingDefs.java +++ b/com.ibm.wala.core/src/com/ibm/wala/ipa/slicer/HeapReachingDefs.java @@ -71,11 +71,11 @@ public class HeapReachingDefs { private static final boolean VERBOSE = false; - private final ModRef modRef; + private final ModRef modRef; private final ExtendedHeapModel heapModel; - public HeapReachingDefs(ModRef modRef, ExtendedHeapModel heapModel) { + public HeapReachingDefs(ModRef modRef, ExtendedHeapModel heapModel) { this.modRef = modRef; this.heapModel = heapModel; } @@ -180,7 +180,7 @@ public class HeapReachingDefs { * For each pointerKey, which statements may def it */ private Map initPointerKeyMod(OrdinalSetMapping domain, CGNode node, ExtendedHeapModel h, - PointerAnalysis pa) { + PointerAnalysis pa) { Map pointerKeyMod = HashMapFactory.make(); for (Statement s : domain) { switch (s.getKind()) { @@ -419,7 +419,7 @@ public class HeapReachingDefs { return true; } - private Collection getMod(Statement s, CGNode n, ExtendedHeapModel h, PointerAnalysis pa, HeapExclusions exclusions) { + private Collection getMod(Statement s, CGNode n, ExtendedHeapModel h, PointerAnalysis pa, HeapExclusions exclusions) { switch (s.getKind()) { case NORMAL: NormalStatement ns = (NormalStatement) s; @@ -480,7 +480,7 @@ public class HeapReachingDefs { private final OrdinalSetMapping domain; - private final PointerAnalysis pa; + private final PointerAnalysis pa; private final Map ssaInstructionIndex2Statement; @@ -492,7 +492,7 @@ public class HeapReachingDefs { */ private final IBinaryNaturalRelation heapReturnCaller = new BasicNaturalRelation(); - public RD(CGNode node, ExplodedControlFlowGraph cfg, PointerAnalysis pa2, OrdinalSetMapping domain, + public RD(CGNode node, ExplodedControlFlowGraph cfg, PointerAnalysis pa2, OrdinalSetMapping domain, Map ssaInstructionIndex2Statement, HeapExclusions exclusions) { this.node = node; this.cfg = cfg; diff --git a/com.ibm.wala.core/src/com/ibm/wala/ipa/slicer/ISDG.java b/com.ibm.wala.core/src/com/ibm/wala/ipa/slicer/ISDG.java index 8681a6135..f6519d4ff 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/ipa/slicer/ISDG.java +++ b/com.ibm.wala.core/src/com/ibm/wala/ipa/slicer/ISDG.java @@ -13,6 +13,7 @@ package com.ibm.wala.ipa.slicer; import java.util.Iterator; import com.ibm.wala.ipa.callgraph.CGNode; +import com.ibm.wala.ipa.callgraph.propagation.InstanceKey; import com.ibm.wala.ipa.cha.IClassHierarchyDweller; import com.ibm.wala.ipa.slicer.Slicer.ControlDependenceOptions; import com.ibm.wala.util.graph.NumberedGraph; @@ -31,7 +32,7 @@ public interface ISDG extends NumberedGraph, IClassHierarchyDweller { /** * Get the program dependence graph constructed for a particular node. */ - PDG getPDG(CGNode node); + PDG getPDG(CGNode node); /** * Iterate over the nodes which have been discovered so far, but do NOT eagerly construct the entire graph. diff --git a/com.ibm.wala.core/src/com/ibm/wala/ipa/slicer/PDG.java b/com.ibm.wala.core/src/com/ibm/wala/ipa/slicer/PDG.java index 6bb974151..7ac64441c 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/ipa/slicer/PDG.java +++ b/com.ibm.wala.core/src/com/ibm/wala/ipa/slicer/PDG.java @@ -117,7 +117,7 @@ public class PDG implements NumberedGraph { private final CallGraph cg; - private final ModRef modRef; + private final ModRef modRef; private final Map> ref; @@ -133,7 +133,7 @@ public class PDG implements NumberedGraph { */ public PDG(final CGNode node, PointerAnalysis pa, Map> mod, Map> ref, DataDependenceOptions dOptions, ControlDependenceOptions cOptions, - HeapExclusions exclusions, CallGraph cg, ModRef modRef) { + HeapExclusions exclusions, CallGraph cg, ModRef modRef) { this(node, pa, mod, ref, dOptions, cOptions, exclusions, cg, modRef, false); } @@ -145,7 +145,7 @@ public class PDG implements NumberedGraph { */ public PDG(final CGNode node, PointerAnalysis pa, Map> mod, Map> ref, DataDependenceOptions dOptions, ControlDependenceOptions cOptions, - HeapExclusions exclusions, CallGraph cg, ModRef modRef, boolean ignoreAllocHeapDefs) { + HeapExclusions exclusions, CallGraph cg, ModRef modRef, boolean ignoreAllocHeapDefs) { super(); if (node == null) { diff --git a/com.ibm.wala.core/src/com/ibm/wala/ipa/slicer/SDG.java b/com.ibm.wala.core/src/com/ibm/wala/ipa/slicer/SDG.java index 59493a6ef..47bcedbd2 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/ipa/slicer/SDG.java +++ b/com.ibm.wala.core/src/com/ibm/wala/ipa/slicer/SDG.java @@ -83,7 +83,7 @@ public class SDG extends AbstractNumberedGraph /** * keeps track of PDG for each call graph node */ - private final Map pdgMap = HashMapFactory.make(); + private final Map> pdgMap = HashMapFactory.make(); /** * governs data dependence edges in the graph @@ -115,23 +115,23 @@ public class SDG extends AbstractNumberedGraph */ private final HeapExclusions heapExclude; - private final ModRef modRef; + private final ModRef modRef; /** * Have we eagerly populated all nodes of this SDG? */ private boolean eagerComputed = false; - public SDG(final CallGraph cg, PointerAnalysis pa, DataDependenceOptions dOptions, ControlDependenceOptions cOptions) { - this(cg, pa, ModRef.make(), dOptions, cOptions, null); + public SDG(final CallGraph cg, PointerAnalysis pa, Class instanceKeyClass, DataDependenceOptions dOptions, ControlDependenceOptions cOptions) { + this(cg, pa, ModRef.make(instanceKeyClass), dOptions, cOptions, null); } - public SDG(final CallGraph cg, PointerAnalysis pa, ModRef modRef, DataDependenceOptions dOptions, + public SDG(final CallGraph cg, PointerAnalysis pa, ModRef modRef, DataDependenceOptions dOptions, ControlDependenceOptions cOptions) { this(cg, pa, modRef, dOptions, cOptions, null); } - public SDG(CallGraph cg, PointerAnalysis pa, ModRef modRef, DataDependenceOptions dOptions, ControlDependenceOptions cOptions, + public SDG(CallGraph cg, PointerAnalysis pa, ModRef modRef, DataDependenceOptions dOptions, ControlDependenceOptions cOptions, HeapExclusions heapExclude) throws IllegalArgumentException { super(); if (dOptions == null) { @@ -179,7 +179,7 @@ public class SDG extends AbstractNumberedGraph private void addPDGStatementNodes(CGNode node) { if (!statementsAdded.contains(node)) { statementsAdded.add(node); - PDG pdg = getPDG(node); + PDG pdg = getPDG(node); for (Iterator it = pdg.iterator(); it.hasNext();) { addNode(it.next()); } @@ -796,7 +796,7 @@ public class SDG extends AbstractNumberedGraph @Override public PDG getPDG(CGNode node) { - PDG result = pdgMap.get(node); + PDG result = pdgMap.get(node); if (result == null) { result = new PDG(node, pa, mod, ref, dOptions, cOptions, heapExclude, cg, modRef); pdgMap.put(node, result); diff --git a/com.ibm.wala.core/src/com/ibm/wala/ipa/slicer/SDGSupergraph.java b/com.ibm.wala.core/src/com/ibm/wala/ipa/slicer/SDGSupergraph.java index b0cbb3e98..17dbfd023 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/ipa/slicer/SDGSupergraph.java +++ b/com.ibm.wala.core/src/com/ibm/wala/ipa/slicer/SDGSupergraph.java @@ -14,6 +14,7 @@ import java.util.Iterator; import com.ibm.wala.dataflow.IFDS.ISupergraph; import com.ibm.wala.ipa.callgraph.CGNode; +import com.ibm.wala.ipa.callgraph.propagation.InstanceKey; import com.ibm.wala.ipa.slicer.Slicer.ControlDependenceOptions; import com.ibm.wala.ssa.SSAAbstractInvokeInstruction; import com.ibm.wala.util.Predicate; @@ -26,7 +27,7 @@ import com.ibm.wala.util.intset.IntSet; /** * A wrapper around an SDG to make it look like a supergraph for tabulation. */ -class SDGSupergraph implements ISupergraph { +class SDGSupergraph implements ISupergraph> { private final ISDG sdg; @@ -41,7 +42,7 @@ class SDGSupergraph implements ISupergraph { } @Override - public Graph getProcedureGraph() { + public Graph> getProcedureGraph() { Assertions.UNREACHABLE(); return null; } @@ -64,24 +65,24 @@ class SDGSupergraph implements ISupergraph { * @see com.ibm.wala.dataflow.IFDS.ISupergraph#getCallSites(java.lang.Object) */ @Override - public Iterator getCallSites(Statement r, PDG callee) { + public Iterator getCallSites(Statement r, PDG callee) { switch (r.getKind()) { case EXC_RET_CALLER: { ExceptionalReturnCaller n = (ExceptionalReturnCaller) r; SSAAbstractInvokeInstruction call = n.getInstruction(); - PDG pdg = getProcOf(r); + PDG pdg = getProcOf(r); return pdg.getCallStatements(call).iterator(); } case NORMAL_RET_CALLER: { NormalReturnCaller n = (NormalReturnCaller) r; SSAAbstractInvokeInstruction call = n.getInstruction(); - PDG pdg = getProcOf(r); + PDG pdg = getProcOf(r); return pdg.getCallStatements(call).iterator(); } case HEAP_RET_CALLER: { HeapStatement.HeapReturnCaller n = (HeapStatement.HeapReturnCaller) r; SSAAbstractInvokeInstruction call = n.getCall(); - PDG pdg = getProcOf(r); + PDG pdg = getProcOf(r); return pdg.getCallStatements(call).iterator(); } default: @@ -97,7 +98,7 @@ class SDGSupergraph implements ISupergraph { public Iterator getCalledNodes(Statement call) { switch (call.getKind()) { case NORMAL: - Predicate f = new Predicate() { + Predicate f = new Predicate() { @Override public boolean test(Object o) { Statement s = (Statement) o; return isEntry(s); @@ -117,7 +118,7 @@ class SDGSupergraph implements ISupergraph { * @see com.ibm.wala.dataflow.IFDS.ISupergraph#getEntriesForProcedure(java.lang.Object) */ @Override - public Statement[] getEntriesForProcedure(PDG procedure) { + public Statement[] getEntriesForProcedure(PDG procedure) { Statement[] normal = procedure.getParamCalleeStatements(); Statement[] result = new Statement[normal.length + 1]; result[0] = new MethodEntryStatement(procedure.getCallGraphNode()); @@ -129,7 +130,7 @@ class SDGSupergraph implements ISupergraph { * @see com.ibm.wala.dataflow.IFDS.ISupergraph#getExitsForProcedure(java.lang.Object) */ @Override - public Statement[] getExitsForProcedure(PDG procedure) { + public Statement[] getExitsForProcedure(PDG procedure) { Statement[] normal = procedure.getReturnStatements(); Statement[] result = new Statement[normal.length + 1]; result[0] = new MethodExitStatement(procedure.getCallGraphNode()); @@ -141,7 +142,7 @@ class SDGSupergraph implements ISupergraph { * @see com.ibm.wala.dataflow.IFDS.ISupergraph#getLocalBlock(java.lang.Object, int) */ @Override - public Statement getLocalBlock(PDG procedure, int i) { + public Statement getLocalBlock(PDG procedure, int i) { return procedure.getNode(i); } @@ -150,7 +151,7 @@ class SDGSupergraph implements ISupergraph { */ @Override public int getLocalBlockNumber(Statement n) { - PDG pdg = getProcOf(n); + PDG pdg = getProcOf(n); return pdg.getNumber(n); } @@ -171,7 +172,7 @@ class SDGSupergraph implements ISupergraph { * @see com.ibm.wala.dataflow.IFDS.ISupergraph#getNumberOfBlocks(java.lang.Object) */ @Override - public int getNumberOfBlocks(PDG procedure) { + public int getNumberOfBlocks(PDG procedure) { Assertions.UNREACHABLE(); return 0; } @@ -180,9 +181,9 @@ class SDGSupergraph implements ISupergraph { * @see com.ibm.wala.dataflow.IFDS.ISupergraph#getProcOf(java.lang.Object) */ @Override - public PDG getProcOf(Statement n) { + public PDG getProcOf(Statement n) { CGNode node = n.getNode(); - PDG result = sdg.getPDG(node); + PDG result = sdg.getPDG(node); if (result == null) { Assertions.UNREACHABLE("panic: " + n + " " + node); } @@ -193,24 +194,24 @@ class SDGSupergraph implements ISupergraph { * @see com.ibm.wala.dataflow.IFDS.ISupergraph#getReturnSites(java.lang.Object) */ @Override - public Iterator getReturnSites(Statement call, PDG callee) { + public Iterator getReturnSites(Statement call, PDG callee) { switch (call.getKind()) { case PARAM_CALLER: { ParamCaller n = (ParamCaller) call; SSAAbstractInvokeInstruction st = n.getInstruction(); - PDG pdg = getProcOf(call); + PDG pdg = getProcOf(call); return pdg.getCallerReturnStatements(st).iterator(); } case HEAP_PARAM_CALLER: { HeapStatement.HeapParamCaller n = (HeapStatement.HeapParamCaller) call; SSAAbstractInvokeInstruction st = n.getCall(); - PDG pdg = getProcOf(call); + PDG pdg = getProcOf(call); return pdg.getCallerReturnStatements(st).iterator(); } case NORMAL: { NormalStatement n = (NormalStatement) call; SSAAbstractInvokeInstruction st = (SSAAbstractInvokeInstruction) n.getInstruction(); - PDG pdg = getProcOf(call); + PDG pdg = getProcOf(call); return pdg.getCallerReturnStatements(st).iterator(); } default: diff --git a/com.ibm.wala.core/src/com/ibm/wala/ipa/slicer/Slicer.java b/com.ibm.wala.core/src/com/ibm/wala/ipa/slicer/Slicer.java index 7e834ab86..170feb0aa 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/ipa/slicer/Slicer.java +++ b/com.ibm.wala.core/src/com/ibm/wala/ipa/slicer/Slicer.java @@ -130,9 +130,9 @@ public class Slicer { * @return the backward slice of s. * @throws CancelException */ - public static Collection computeBackwardSlice(Statement s, CallGraph cg, PointerAnalysis pa, - DataDependenceOptions dOptions, ControlDependenceOptions cOptions) throws IllegalArgumentException, CancelException { - return computeSlice(new SDG(cg, pa, ModRef.make(), dOptions, cOptions), Collections.singleton(s), true); + public static Collection computeBackwardSlice(Statement s, CallGraph cg, PointerAnalysis pa, + Class instanceKeyClass, DataDependenceOptions dOptions, ControlDependenceOptions cOptions) throws IllegalArgumentException, CancelException { + return computeSlice(new SDG(cg, pa, ModRef.make(instanceKeyClass), dOptions, cOptions), Collections.singleton(s), true); } /** @@ -140,9 +140,10 @@ public class Slicer { * @return the forward slice of s. * @throws CancelException */ - public static Collection computeForwardSlice(Statement s, CallGraph cg, PointerAnalysis pa, + public static Collection computeForwardSlice(Statement s, CallGraph cg, + PointerAnalysis pa, Class instanceKeyClass, DataDependenceOptions dOptions, ControlDependenceOptions cOptions) throws IllegalArgumentException, CancelException { - return computeSlice(new SDG(cg, pa, ModRef.make(), dOptions, cOptions), Collections.singleton(s), false); + return computeSlice(new SDG(cg, pa, ModRef.make(instanceKeyClass), dOptions, cOptions), Collections.singleton(s), false); } /** @@ -200,9 +201,9 @@ public class Slicer { SliceProblem p = makeSliceProblem(roots, sdg, backward); - PartiallyBalancedTabulationSolver solver = PartiallyBalancedTabulationSolver + PartiallyBalancedTabulationSolver, Object> solver = PartiallyBalancedTabulationSolver .createPartiallyBalancedTabulationSolver(p, null); - TabulationResult tr = solver.solve(); + TabulationResult, Object> tr = solver.solve(); Collection slice = tr.getSupergraphNodesReached(); @@ -228,18 +229,18 @@ public class Slicer { */ public static Collection computeBackwardSlice(Statement s, CallGraph cg, PointerAnalysis pointerAnalysis) throws IllegalArgumentException, CancelException { - return computeBackwardSlice(s, cg, pointerAnalysis, DataDependenceOptions.FULL, ControlDependenceOptions.FULL); + return computeBackwardSlice(s, cg, pointerAnalysis, InstanceKey.class, DataDependenceOptions.FULL, ControlDependenceOptions.FULL); } /** * Tabulation problem representing slicing * */ - public static class SliceProblem implements PartiallyBalancedTabulationProblem { + public static class SliceProblem implements PartiallyBalancedTabulationProblem, Object> { private final Collection roots; - private final ISupergraph supergraph; + private final ISupergraph> supergraph; private final SliceFunctions f; @@ -282,7 +283,7 @@ public class Slicer { * @see com.ibm.wala.dataflow.IFDS.TabulationProblem#getSupergraph() */ @Override - public ISupergraph getSupergraph() { + public ISupergraph> getSupergraph() { return supergraph; } diff --git a/com.ibm.wala.core/src/com/ibm/wala/ipa/slicer/thin/CISDG.java b/com.ibm.wala.core/src/com/ibm/wala/ipa/slicer/thin/CISDG.java index b8783692a..5e8aa37dd 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/ipa/slicer/thin/CISDG.java +++ b/com.ibm.wala.core/src/com/ibm/wala/ipa/slicer/thin/CISDG.java @@ -123,7 +123,7 @@ public class CISDG implements ISDG { } @Override - public PDG getPDG(CGNode node) { + public PDG getPDG(CGNode node) { Assertions.UNREACHABLE(); return noHeap.getPDG(node); } diff --git a/com.ibm.wala.core/src/com/ibm/wala/ipa/slicer/thin/CISlicer.java b/com.ibm.wala.core/src/com/ibm/wala/ipa/slicer/thin/CISlicer.java index a72f95d88..5ebaef926 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/ipa/slicer/thin/CISlicer.java +++ b/com.ibm.wala.core/src/com/ibm/wala/ipa/slicer/thin/CISlicer.java @@ -53,10 +53,10 @@ public class CISlicer { private final Graph depGraph; public CISlicer(CallGraph cg, PointerAnalysis pa, DataDependenceOptions dOptions, ControlDependenceOptions cOptions) { - this(cg, pa, ModRef.make(), dOptions, cOptions); + this(cg, pa, ModRef.make(InstanceKey.class), dOptions, cOptions); } - public CISlicer(CallGraph cg, PointerAnalysis pa, ModRef modRef, DataDependenceOptions dOptions, ControlDependenceOptions cOptions) + public CISlicer(CallGraph cg, PointerAnalysis pa, ModRef modRef, DataDependenceOptions dOptions, ControlDependenceOptions cOptions) throws IllegalArgumentException { if (dOptions == null) { throw new IllegalArgumentException("dOptions == null"); @@ -65,7 +65,7 @@ public class CISlicer { throw new IllegalArgumentException("Heap data dependences requested in CISlicer!"); } - SDG sdg = new SDG(cg, pa, modRef, dOptions, cOptions, null); + SDG sdg = new SDG<>(cg, pa, modRef, dOptions, cOptions, null); Map> mod = scanForMod(sdg, pa, modRef); Map> ref = scanForRef(sdg, pa, modRef); @@ -74,7 +74,7 @@ public class CISlicer { } - public CISlicer(final SDG sdg, final PointerAnalysis pa, final ModRef modRef) { + public CISlicer(final SDG sdg, final PointerAnalysis pa, final ModRef modRef) { Map> mod = scanForMod(sdg, pa, modRef); Map> ref = scanForRef(sdg, pa, modRef); @@ -94,24 +94,24 @@ public class CISlicer { /** * Compute the set of pointer keys each statement mods */ - public static Map> scanForMod(SDG sdg, PointerAnalysis pa) { - return scanForMod(sdg, pa, false, ModRef.make()); + public static Map> scanForMod(SDG sdg, PointerAnalysis pa) { + return scanForMod(sdg, pa, false, ModRef.make(InstanceKey.class)); } /** * Compute the set of pointer keys each statement refs */ - public static Map> scanForRef(SDG sdg, PointerAnalysis pa) { + public static Map> scanForRef(SDG sdg, PointerAnalysis pa) { if (sdg == null) { throw new IllegalArgumentException("null sdg"); } - return scanForRef(sdg, pa, ModRef.make()); + return scanForRef(sdg, pa, ModRef.make(InstanceKey.class)); } /** * Compute the set of pointer keys each statement mods */ - public static Map> scanForMod(SDG sdg, PointerAnalysis pa, ModRef modRef) { + public static Map> scanForMod(SDG sdg, PointerAnalysis pa, ModRef modRef) { return scanForMod(sdg, pa, false, modRef); } @@ -119,7 +119,7 @@ public class CISlicer { * Compute the set of pointer keys each statement mods. Be careful to avoid eager PDG construction here! That means .. don't * iterate over SDG statements! */ - public static Map> scanForMod(SDG sdg, PointerAnalysis pa, boolean ignoreAllocHeapDefs, ModRef modRef) { + public static Map> scanForMod(SDG sdg, PointerAnalysis pa, boolean ignoreAllocHeapDefs, ModRef modRef) { if (pa == null) { throw new IllegalArgumentException("null pa"); } @@ -147,7 +147,7 @@ public class CISlicer { * Compute the set of PointerKeys each statement refs.Be careful to avoid eager PDG construction here! That means .. don't iterate * over SDG statements! */ - public static Map> scanForRef(SDG sdg, PointerAnalysis pa, ModRef modRef) { + public static Map> scanForRef(SDG sdg, PointerAnalysis pa, ModRef modRef) { if (pa == null) { throw new IllegalArgumentException("null pa"); } diff --git a/com.ibm.wala.core/src/com/ibm/wala/ipa/slicer/thin/ThinSlicer.java b/com.ibm.wala.core/src/com/ibm/wala/ipa/slicer/thin/ThinSlicer.java index d96d60703..fe98d058a 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/ipa/slicer/thin/ThinSlicer.java +++ b/com.ibm.wala.core/src/com/ibm/wala/ipa/slicer/thin/ThinSlicer.java @@ -31,10 +31,10 @@ import com.ibm.wala.ipa.slicer.Slicer.DataDependenceOptions; public class ThinSlicer extends CISlicer { public ThinSlicer(CallGraph cg, PointerAnalysis pa) { - this(cg, pa, ModRef.make()); + this(cg, pa, ModRef.make(InstanceKey.class)); } - public ThinSlicer(CallGraph cg, PointerAnalysis pa, ModRef modRef) { + public ThinSlicer(CallGraph cg, PointerAnalysis pa, ModRef modRef) { super(cg, pa, modRef, DataDependenceOptions.NO_HEAP, ControlDependenceOptions.NONE); } } diff --git a/com.ibm.wala.core/src/com/ibm/wala/util/ssa/ParameterAccessor.java b/com.ibm.wala.core/src/com/ibm/wala/util/ssa/ParameterAccessor.java index da82f9726..3e8671cdf 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/util/ssa/ParameterAccessor.java +++ b/com.ibm.wala.core/src/com/ibm/wala/util/ssa/ParameterAccessor.java @@ -839,7 +839,7 @@ public class ParameterAccessor { } final List all = all(); - final List allExctends = new ArrayList(); + final List allExctends = new ArrayList<>(); IClass searchType = null; final IClassLoader[] allLoaders = cha.getLoaders(); @@ -908,7 +908,7 @@ public class ParameterAccessor { final IClass searchType = cha.lookupClass(tRef); final List all = all(); - final List allExctends = new ArrayList(); + final List allExctends = new ArrayList<>(); if (searchType == null) { throw new IllegalStateException("Could not find the IClass of " + tRef); diff --git a/com.ibm.wala.core/src/com/ibm/wala/util/ssa/SSAValueManager.java b/com.ibm.wala.core/src/com/ibm/wala/util/ssa/SSAValueManager.java index 816147350..4339d2460 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/util/ssa/SSAValueManager.java +++ b/com.ibm.wala.core/src/com/ibm/wala/util/ssa/SSAValueManager.java @@ -176,7 +176,7 @@ public class SSAValueManager { throw new IllegalStateException("The parameter " + value + " using Key " + value.key + " has already been allocated"); } else { info("New variable in management: {}", value); - final Managed param = new Managed(value, value.key); + final Managed param = new Managed<>(value, value.key); param.status = ValueStatus.ALLOCATED; param.setInScope = currentScope; param.setBy = setBy; @@ -276,7 +276,7 @@ public class SSAValueManager { } final SSAValue var = new SSAValue(nextLocal++, type, this.forMethod, key); - final Managed param = new Managed(var, key); + final Managed param = new Managed<>(var, key); param.status = ValueStatus.FREE; param.setInScope = currentScope; @@ -321,7 +321,7 @@ public class SSAValueManager { } final SSAValue var = new SSAValue(nextLocal++, type, this.forMethod, key); - final Managed param = new Managed(var, key); + final Managed param = new Managed<>(var, key); param.status = ValueStatus.UNALLOCATED; param.setInScope = currentScope; diff --git a/com.ibm.wala.core/src/com/ibm/wala/util/ssa/TypeSafeInstructionFactory.java b/com.ibm.wala.core/src/com/ibm/wala/util/ssa/TypeSafeInstructionFactory.java index 97931f8cb..8738928ab 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/util/ssa/TypeSafeInstructionFactory.java +++ b/com.ibm.wala.core/src/com/ibm/wala/util/ssa/TypeSafeInstructionFactory.java @@ -121,7 +121,7 @@ public class TypeSafeInstructionFactory { throw new IllegalArgumentException("The parameter exception may not be null"); } if (params == null) { - params = Collections.EMPTY_LIST; + params = Collections.emptyList(); } if (site == null) { throw new IllegalArgumentException("The CallSite may not be null"); @@ -230,7 +230,7 @@ public class TypeSafeInstructionFactory { throw new IllegalArgumentException("The parameter exception may not be null"); } if (params == null) { - params = Collections.EMPTY_LIST; + params = Collections.emptyList(); } if (site == null) { throw new IllegalArgumentException("The CallSite may not be null"); diff --git a/com.ibm.wala.core/src/com/ibm/wala/viz/viewer/ChaPanel.java b/com.ibm.wala.core/src/com/ibm/wala/viz/viewer/ChaPanel.java index 07c8e02ba..38b8f434d 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/viz/viewer/ChaPanel.java +++ b/com.ibm.wala.core/src/com/ibm/wala/viz/viewer/ChaPanel.java @@ -39,8 +39,8 @@ public class ChaPanel extends JSplitPane { JTree tree = buildTree(); this.setLeftComponent(new JScrollPane(tree)); - final DefaultListModel methodListModel = new DefaultListModel(); - JList methodList = new JList(methodListModel); + final DefaultListModel methodListModel = new DefaultListModel<>(); + JList methodList = new JList(methodListModel); this.setRightComponent(methodList); tree.addTreeSelectionListener(new TreeSelectionListener(){ diff --git a/com.ibm.wala.core/src/com/ibm/wala/viz/viewer/IrViewer.java b/com.ibm.wala.core/src/com/ibm/wala/viz/viewer/IrViewer.java index 14871d72f..3af0ce267 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/viz/viewer/IrViewer.java +++ b/com.ibm.wala.core/src/com/ibm/wala/viz/viewer/IrViewer.java @@ -33,8 +33,8 @@ import com.ibm.wala.util.collections.HashMapFactory; public class IrViewer extends JPanel{ private JTextField methodName; - private DefaultListModel irLineList = new DefaultListModel(); - private JList irLines; + private DefaultListModel irLineList = new DefaultListModel<>(); + private JList irLines; // mapping from ir viewer list line to source code line number. private Map lineToPosition = null; @@ -50,7 +50,7 @@ public class IrViewer extends JPanel{ public IrViewer() { super(new BorderLayout()); - irLines = new JList(irLineList); + irLines = new JList(irLineList); methodName = new JTextField("IR"); this.add(methodName, BorderLayout.PAGE_START); this.add(new JScrollPane(irLines, ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED, diff --git a/com.ibm.wala.core/src/com/ibm/wala/viz/viewer/PaPanel.java b/com.ibm.wala.core/src/com/ibm/wala/viz/viewer/PaPanel.java index 745db2ede..7cd5208ac 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/viz/viewer/PaPanel.java +++ b/com.ibm.wala.core/src/com/ibm/wala/viz/viewer/PaPanel.java @@ -167,7 +167,7 @@ public class PaPanel extends JSplitPane { } private void initDataStructures(PointerAnalysis pa) { - HeapGraph heapGraph = pa.getHeapGraph(); + HeapGraph heapGraph = pa.getHeapGraph(); OrdinalSetMapping instanceKeyMapping = pa.getInstanceKeyMapping(); for (Object n : heapGraph){ if (heapGraph.getPredNodeCount(n) == 0){ // considering only roots of the heap graph. diff --git a/com.ibm.wala.core/src/com/ibm/wala/viz/viewer/SourceViewer.java b/com.ibm.wala.core/src/com/ibm/wala/viz/viewer/SourceViewer.java index 3745dc366..67fc9f01e 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/viz/viewer/SourceViewer.java +++ b/com.ibm.wala.core/src/com/ibm/wala/viz/viewer/SourceViewer.java @@ -25,13 +25,13 @@ import javax.swing.JTextField; public class SourceViewer extends JPanel{ private URL sourceURL; private JTextField sourceCodeLocation; - private DefaultListModel sourceCodeLinesList = new DefaultListModel(); - private JList sourceCodeLines; + private DefaultListModel sourceCodeLinesList = new DefaultListModel<>(); + private JList sourceCodeLines; public SourceViewer() { super(new BorderLayout()); sourceURL = null; - sourceCodeLines = new JList(sourceCodeLinesList); + sourceCodeLines = new JList(sourceCodeLinesList); sourceCodeLocation = new JTextField("Source code"); this.add(sourceCodeLocation, BorderLayout.PAGE_START); this.add(new JScrollPane(sourceCodeLines), BorderLayout.CENTER); diff --git a/com.ibm.wala.dalvik.test/source/com/ibm/wala/dalvik/drivers/APKCallGraphDriver.java b/com.ibm.wala.dalvik.test/source/com/ibm/wala/dalvik/drivers/APKCallGraphDriver.java index cd577981e..91232a80f 100644 --- a/com.ibm.wala.dalvik.test/source/com/ibm/wala/dalvik/drivers/APKCallGraphDriver.java +++ b/com.ibm.wala.dalvik.test/source/com/ibm/wala/dalvik/drivers/APKCallGraphDriver.java @@ -109,7 +109,7 @@ public class APKCallGraphDriver { CG = DalvikCallGraphTestBase.makeAPKCallGraph(libs(), null, apk.getAbsolutePath(), pm, ReflectionOptions.NONE); System.err.println("Analyzed " + apk + " in " + (System.currentTimeMillis() - time)); - System.err.println(new SDG(CG.fst, CG.snd, DataDependenceOptions.NO_BASE_NO_HEAP_NO_EXCEPTIONS, ControlDependenceOptions.NONE)); + System.err.println(new SDG<>(CG.fst, CG.snd, InstanceKey.class, DataDependenceOptions.NO_BASE_NO_HEAP_NO_EXCEPTIONS, ControlDependenceOptions.NONE)); if (dumpIR) { for(CGNode n : CG.fst) { diff --git a/com.ibm.wala.dalvik/src/com/ibm/wala/dalvik/ipa/callgraph/androidModel/parameters/DefaultInstantiationBehavior.java b/com.ibm.wala.dalvik/src/com/ibm/wala/dalvik/ipa/callgraph/androidModel/parameters/DefaultInstantiationBehavior.java index d98b14573..e666cc4c0 100644 --- a/com.ibm.wala.dalvik/src/com/ibm/wala/dalvik/ipa/callgraph/androidModel/parameters/DefaultInstantiationBehavior.java +++ b/com.ibm.wala.dalvik/src/com/ibm/wala/dalvik/ipa/callgraph/androidModel/parameters/DefaultInstantiationBehavior.java @@ -103,7 +103,7 @@ public class DefaultInstantiationBehavior extends IInstantiationBehavior impleme @Override public boolean equals(Object o) { if (o instanceof BehaviorKey) { - BehaviorKey other = (BehaviorKey) o; + BehaviorKey other = (BehaviorKey) o; return base.equals(other.base); } else { return false; @@ -122,7 +122,7 @@ public class DefaultInstantiationBehavior extends IInstantiationBehavior impleme } - private final Map behaviours = new HashMap<>(); + private final Map, BehviourValue> behaviours = new HashMap<>(); private final transient IClassHierarchy cha; public DefaultInstantiationBehavior(final IClassHierarchy cha) { @@ -350,8 +350,8 @@ public class DefaultInstantiationBehavior extends IInstantiationBehavior impleme if (this.serializationIncludesCache) { stream.writeObject(this.behaviours); } else { - final Map strippedBehaviours = new HashMap<>(); - for (final BehaviorKey key : this.behaviours.keySet()) { + final Map, BehviourValue> strippedBehaviours = new HashMap<>(); + for (final BehaviorKey key : this.behaviours.keySet()) { final BehviourValue val = this.behaviours.get(key); if (! val.isCached() ) { strippedBehaviours.put(key, val); @@ -368,11 +368,11 @@ public class DefaultInstantiationBehavior extends IInstantiationBehavior impleme * hard-coded behaviors don't get mixed with loaded ones. It may be deserialized but using a * LoadedInstantiationBehavior instead may be a better way (as it starts in an empty state) */ - private void readObject(java.io.ObjectInputStream stream) + private void readObject(java.io.ObjectInputStream stream) throws IOException, ClassNotFoundException { DefaultInstantiationBehavior.this.behaviours.clear(); - this.behaviours.putAll((Map) stream.readObject()); + this.behaviours.putAll((Map, BehviourValue>) stream.readObject()); } } diff --git a/com.ibm.wala.dalvik/src/com/ibm/wala/dalvik/ipa/callgraph/androidModel/parameters/FlatInstantiator.java b/com.ibm.wala.dalvik/src/com/ibm/wala/dalvik/ipa/callgraph/androidModel/parameters/FlatInstantiator.java index 3d2e27c25..a213104ce 100644 --- a/com.ibm.wala.dalvik/src/com/ibm/wala/dalvik/ipa/callgraph/androidModel/parameters/FlatInstantiator.java +++ b/com.ibm.wala.dalvik/src/com/ibm/wala/dalvik/ipa/callgraph/androidModel/parameters/FlatInstantiator.java @@ -683,7 +683,7 @@ public class FlatInstantiator implements IInstantiator { } } if (instantiatorArgs[2] != null) { - final Set seen = (Set) instantiatorArgs[2]; + final Set seen = (Set) instantiatorArgs[2]; if (! seen.isEmpty()) { final Object o = seen.iterator().next(); if (! (o instanceof SSAValue)) { diff --git a/com.ibm.wala.dalvik/src/com/ibm/wala/dalvik/ipa/callgraph/androidModel/parameters/Instantiator.java b/com.ibm.wala.dalvik/src/com/ibm/wala/dalvik/ipa/callgraph/androidModel/parameters/Instantiator.java index 3b8719349..a228207e1 100644 --- a/com.ibm.wala.dalvik/src/com/ibm/wala/dalvik/ipa/callgraph/androidModel/parameters/Instantiator.java +++ b/com.ibm.wala.dalvik/src/com/ibm/wala/dalvik/ipa/callgraph/androidModel/parameters/Instantiator.java @@ -676,7 +676,7 @@ public class Instantiator implements IInstantiator { "got: " + instantiatorArgs[2].getClass()); } if (instantiatorArgs[2] != null) { - final Set seen = (Set) instantiatorArgs[2]; + final Set seen = (Set) instantiatorArgs[2]; if (! seen.isEmpty()) { final Object o = seen.iterator().next(); if (! (o instanceof SSAValue)) { diff --git a/com.ibm.wala.dalvik/src/com/ibm/wala/dalvik/ipa/callgraph/androidModel/parameters/LoadedInstantiationBehavior.java b/com.ibm.wala.dalvik/src/com/ibm/wala/dalvik/ipa/callgraph/androidModel/parameters/LoadedInstantiationBehavior.java index f7cfe39c8..61e67ac65 100644 --- a/com.ibm.wala.dalvik/src/com/ibm/wala/dalvik/ipa/callgraph/androidModel/parameters/LoadedInstantiationBehavior.java +++ b/com.ibm.wala.dalvik/src/com/ibm/wala/dalvik/ipa/callgraph/androidModel/parameters/LoadedInstantiationBehavior.java @@ -105,7 +105,7 @@ public class LoadedInstantiationBehavior extends IInstantiationBehavior implemen @Override public boolean equals(Object o) { if (o instanceof BehaviorKey) { - BehaviorKey other = (BehaviorKey) o; + BehaviorKey other = (BehaviorKey) o; return base.equals(other.base); } else { return false; @@ -124,7 +124,7 @@ public class LoadedInstantiationBehavior extends IInstantiationBehavior implemen } private InstanceBehavior defaultBehavior = null; - private final Map behaviours = new HashMap<>(); + private final Map, BehviourValue> behaviours = new HashMap<>(); private final IClassHierarchy cha; public LoadedInstantiationBehavior(IClassHierarchy cha) { @@ -304,8 +304,8 @@ public class LoadedInstantiationBehavior extends IInstantiationBehavior implemen if (this.serializationIncludesCache) { stream.writeObject(this.behaviours); } else { - final Map strippedBehaviours = new HashMap<>(); - for (final BehaviorKey key : this.behaviours.keySet()) { + final Map, BehviourValue> strippedBehaviours = new HashMap<>(); + for (final BehaviorKey key : this.behaviours.keySet()) { final BehviourValue val = this.behaviours.get(key); if (! val.isCached() ) { strippedBehaviours.put(key, val); @@ -319,7 +319,7 @@ public class LoadedInstantiationBehavior extends IInstantiationBehavior implemen throws IOException, ClassNotFoundException { this.behaviours.clear(); - this.behaviours.putAll( (Map) stream.readObject()); + this.behaviours.putAll((Map, BehviourValue>) stream.readObject()); } diff --git a/com.ibm.wala.dalvik/src/com/ibm/wala/dalvik/ipa/callgraph/androidModel/parameters/SpecializedInstantiator.java b/com.ibm.wala.dalvik/src/com/ibm/wala/dalvik/ipa/callgraph/androidModel/parameters/SpecializedInstantiator.java index 9847f99bf..e9e5e5c97 100644 --- a/com.ibm.wala.dalvik/src/com/ibm/wala/dalvik/ipa/callgraph/androidModel/parameters/SpecializedInstantiator.java +++ b/com.ibm.wala.dalvik/src/com/ibm/wala/dalvik/ipa/callgraph/androidModel/parameters/SpecializedInstantiator.java @@ -281,7 +281,7 @@ public class SpecializedInstantiator extends FlatInstantiator { } } if (instantiatorArgs[2] != null) { - final Set seen = (Set) instantiatorArgs[2]; + final Set seen = (Set) instantiatorArgs[2]; if (! seen.isEmpty()) { final Object o = seen.iterator().next(); if (! (o instanceof SSAValue)) { diff --git a/com.ibm.wala.dalvik/src/com/ibm/wala/dalvik/ipa/callgraph/propagation/cfa/IntentContextSelector.java b/com.ibm.wala.dalvik/src/com/ibm/wala/dalvik/ipa/callgraph/propagation/cfa/IntentContextSelector.java index acff93a7b..0de4639c7 100644 --- a/com.ibm.wala.dalvik/src/com/ibm/wala/dalvik/ipa/callgraph/propagation/cfa/IntentContextSelector.java +++ b/com.ibm.wala.dalvik/src/com/ibm/wala/dalvik/ipa/callgraph/propagation/cfa/IntentContextSelector.java @@ -169,7 +169,7 @@ public class IntentContextSelector implements ContextSelector { final Intent intent; { // Extract target-Service as intent if (param instanceof ConstantKey) { - final String target = (String) ((ConstantKey)param).getValue(); + final String target = (String) ((ConstantKey)param).getValue(); intent = new Intent(target) { @Override public Intent.IntentType getType() { diff --git a/com.ibm.wala.dalvik/src/com/ibm/wala/dalvik/ipa/callgraph/propagation/cfa/IntentMap.java b/com.ibm.wala.dalvik/src/com/ibm/wala/dalvik/ipa/callgraph/propagation/cfa/IntentMap.java index 5bfc09e2f..4bfe98ca3 100644 --- a/com.ibm.wala.dalvik/src/com/ibm/wala/dalvik/ipa/callgraph/propagation/cfa/IntentMap.java +++ b/com.ibm.wala.dalvik/src/com/ibm/wala/dalvik/ipa/callgraph/propagation/cfa/IntentMap.java @@ -203,7 +203,7 @@ import com.ibm.wala.util.strings.StringStuff; final String action; { if (actionKey instanceof ConstantKey) { - final Object actionO = ((ConstantKey)actionKey).getValue(); + final Object actionO = ((ConstantKey) actionKey).getValue(); if (actionO instanceof String) { action = StringStuff.deployment2CanonicalTypeString((String) actionO); } else if (actionO instanceof IClass) { diff --git a/com.ibm.wala.ide.jdt.test/source/com/ibm/wala/cast/java/test/ECJJavaIRTest.java b/com.ibm.wala.ide.jdt.test/source/com/ibm/wala/cast/java/test/ECJJavaIRTest.java index cd1abfe9f..b92e064a3 100644 --- a/com.ibm.wala.ide.jdt.test/source/com/ibm/wala/cast/java/test/ECJJavaIRTest.java +++ b/com.ibm.wala.ide.jdt.test/source/com/ibm/wala/cast/java/test/ECJJavaIRTest.java @@ -17,6 +17,7 @@ import com.ibm.wala.core.tests.callGraph.CallGraphTestUtil; import com.ibm.wala.ipa.callgraph.AnalysisScope; import com.ibm.wala.ipa.callgraph.Entrypoint; import com.ibm.wala.ipa.callgraph.impl.Util; +import com.ibm.wala.ipa.callgraph.propagation.InstanceKey; import com.ibm.wala.ipa.cha.IClassHierarchy; public class ECJJavaIRTest extends JavaIRTests { @@ -26,8 +27,8 @@ public class ECJJavaIRTest extends JavaIRTests { } @Override - protected AbstractAnalysisEngine getAnalysisEngine(final String[] mainClassDescriptors, Collection sources, List libs) { - JavaSourceAnalysisEngine engine = new ECJJavaSourceAnalysisEngine() { + protected AbstractAnalysisEngine getAnalysisEngine(final String[] mainClassDescriptors, Collection sources, List libs) { + JavaSourceAnalysisEngine engine = new ECJJavaSourceAnalysisEngine() { @Override protected Iterable makeDefaultEntrypoints(AnalysisScope scope, IClassHierarchy cha) { return Util.makeMainEntrypoints(JavaSourceAnalysisScope.SOURCE, cha, mainClassDescriptors); diff --git a/com.ibm.wala.ide.jdt.test/source/com/ibm/wala/cast/java/test/JDTJavaIRTests.java b/com.ibm.wala.ide.jdt.test/source/com/ibm/wala/cast/java/test/JDTJavaIRTests.java index c30e4bc4a..6a657c237 100644 --- a/com.ibm.wala.ide.jdt.test/source/com/ibm/wala/cast/java/test/JDTJavaIRTests.java +++ b/com.ibm.wala.ide.jdt.test/source/com/ibm/wala/cast/java/test/JDTJavaIRTests.java @@ -44,6 +44,7 @@ import java.util.List; import com.ibm.wala.cast.java.jdt.test.Activator; import com.ibm.wala.client.AbstractAnalysisEngine; import com.ibm.wala.ide.tests.util.EclipseTestUtil.ZippedProjectData; +import com.ibm.wala.ipa.callgraph.propagation.InstanceKey; public class JDTJavaIRTests extends JavaIRTests { @@ -72,7 +73,7 @@ public class JDTJavaIRTests extends JavaIRTests { } @Override - protected AbstractAnalysisEngine getAnalysisEngine(final String[] mainClassDescriptors, Collection sources, List libs) { + protected AbstractAnalysisEngine getAnalysisEngine(final String[] mainClassDescriptors, Collection sources, List libs) { return JDTJavaTest.makeAnalysisEngine(mainClassDescriptors, sources, libs, project); } } diff --git a/com.ibm.wala.ide.jdt.test/source/com/ibm/wala/cast/java/test/JDTJavaTest.java b/com.ibm.wala.ide.jdt.test/source/com/ibm/wala/cast/java/test/JDTJavaTest.java index fd4e6ef4f..2dc4eb103 100644 --- a/com.ibm.wala.ide.jdt.test/source/com/ibm/wala/cast/java/test/JDTJavaTest.java +++ b/com.ibm.wala.ide.jdt.test/source/com/ibm/wala/cast/java/test/JDTJavaTest.java @@ -25,6 +25,7 @@ import com.ibm.wala.ide.tests.util.EclipseTestUtil.ZippedProjectData; import com.ibm.wala.ipa.callgraph.AnalysisScope; import com.ibm.wala.ipa.callgraph.Entrypoint; import com.ibm.wala.ipa.callgraph.impl.Util; +import com.ibm.wala.ipa.callgraph.propagation.InstanceKey; import com.ibm.wala.ipa.cha.IClassHierarchy; import com.ibm.wala.util.io.TemporaryFile; @@ -45,14 +46,14 @@ public abstract class JDTJavaTest extends IRTests { } @Override - protected AbstractAnalysisEngine getAnalysisEngine(final String[] mainClassDescriptors, Collection sources, List libs) { + protected AbstractAnalysisEngine getAnalysisEngine(final String[] mainClassDescriptors, Collection sources, List libs) { return makeAnalysisEngine(mainClassDescriptors, sources, libs, project); } - static AbstractAnalysisEngine makeAnalysisEngine(final String[] mainClassDescriptors, Collection sources, List libs, ZippedProjectData project) { - AbstractAnalysisEngine engine; + static AbstractAnalysisEngine makeAnalysisEngine(final String[] mainClassDescriptors, Collection sources, List libs, ZippedProjectData project) { + AbstractAnalysisEngine engine; try { - engine = new JDTJavaSourceAnalysisEngine(project.projectName) { + engine = new JDTJavaSourceAnalysisEngine(project.projectName) { { setDump(Boolean.parseBoolean(System.getProperty("wala.cast.dump", "false"))); } diff --git a/com.ibm.wala.ide.jdt/source/com/ibm/wala/cast/java/client/JDTJavaSourceAnalysisEngine.java b/com.ibm.wala.ide.jdt/source/com/ibm/wala/cast/java/client/JDTJavaSourceAnalysisEngine.java index 7824337e0..a4ea33c5e 100644 --- a/com.ibm.wala.ide.jdt/source/com/ibm/wala/cast/java/client/JDTJavaSourceAnalysisEngine.java +++ b/com.ibm.wala.ide.jdt/source/com/ibm/wala/cast/java/client/JDTJavaSourceAnalysisEngine.java @@ -107,7 +107,7 @@ public class JDTJavaSourceAnalysisEngine extends EclipseP } @Override - protected CallGraphBuilder getCallGraphBuilder(IClassHierarchy cha, + protected CallGraphBuilder getCallGraphBuilder(IClassHierarchy cha, AnalysisOptions options, IAnalysisCacheView cache) { return new ZeroCFABuilderFactory().make(options, cache, cha, scope, false); } diff --git a/com.ibm.wala.ide.jsdt/source/com/ibm/wala/cast/js/client/EclipseJavaScriptAnalysisEngine.java b/com.ibm.wala.ide.jsdt/source/com/ibm/wala/cast/js/client/EclipseJavaScriptAnalysisEngine.java index 5a53551cf..addbb06be 100644 --- a/com.ibm.wala.ide.jsdt/source/com/ibm/wala/cast/js/client/EclipseJavaScriptAnalysisEngine.java +++ b/com.ibm.wala.ide.jsdt/source/com/ibm/wala/cast/js/client/EclipseJavaScriptAnalysisEngine.java @@ -114,7 +114,7 @@ public class EclipseJavaScriptAnalysisEngine extends Ecli } @Override - protected CallGraphBuilder getCallGraphBuilder(IClassHierarchy cha, + protected CallGraphBuilder getCallGraphBuilder(IClassHierarchy cha, AnalysisOptions options, IAnalysisCacheView cache) { return new ZeroCFABuilderFactory().make((JSAnalysisOptions)options, cache, cha, scope, false); } diff --git a/com.ibm.wala.ide.jsdt/source/com/ibm/wala/cast/js/client/EclipseWebAnalysisEngine.java b/com.ibm.wala.ide.jsdt/source/com/ibm/wala/cast/js/client/EclipseWebAnalysisEngine.java index 536b2ec54..5d61d500e 100644 --- a/com.ibm.wala.ide.jsdt/source/com/ibm/wala/cast/js/client/EclipseWebAnalysisEngine.java +++ b/com.ibm.wala.ide.jsdt/source/com/ibm/wala/cast/js/client/EclipseWebAnalysisEngine.java @@ -22,13 +22,14 @@ import com.ibm.wala.ide.util.EclipseWebProjectPath; import com.ibm.wala.ide.util.JavaScriptEclipseProjectPath; import com.ibm.wala.ipa.callgraph.AnalysisScope; import com.ibm.wala.ipa.callgraph.Entrypoint; +import com.ibm.wala.ipa.callgraph.propagation.InstanceKey; import com.ibm.wala.ipa.callgraph.propagation.PointerAnalysis; import com.ibm.wala.util.CancelException; import com.ibm.wala.util.collections.HashSetFactory; import com.ibm.wala.util.collections.Pair; import com.ibm.wala.util.config.SetOfClasses; -public class EclipseWebAnalysisEngine extends EclipseJavaScriptAnalysisEngine { +public class EclipseWebAnalysisEngine extends EclipseJavaScriptAnalysisEngine { private final Set> models = HashSetFactory.make(); diff --git a/com.ibm.wala.ide.tests/src/com/ibm/wala/examples/drivers/SWTPointsTo.java b/com.ibm.wala.ide.tests/src/com/ibm/wala/examples/drivers/SWTPointsTo.java index 353e3073f..e268e87e5 100644 --- a/com.ibm.wala.ide.tests/src/com/ibm/wala/examples/drivers/SWTPointsTo.java +++ b/com.ibm.wala.ide.tests/src/com/ibm/wala/examples/drivers/SWTPointsTo.java @@ -98,6 +98,6 @@ public class SWTPointsTo { System.err.println(pointerAnalysis); - return new BasicHeapGraph(pointerAnalysis, cg); + return new BasicHeapGraph<>(pointerAnalysis, cg); } } diff --git a/com.ibm.wala.ide/src/com/ibm/wala/ide/client/EclipseProjectAnalysisEngine.java b/com.ibm.wala.ide/src/com/ibm/wala/ide/client/EclipseProjectAnalysisEngine.java index 5e930cc98..f35c19be3 100644 --- a/com.ibm.wala.ide/src/com/ibm/wala/ide/client/EclipseProjectAnalysisEngine.java +++ b/com.ibm.wala.ide/src/com/ibm/wala/ide/client/EclipseProjectAnalysisEngine.java @@ -50,7 +50,7 @@ abstract public class EclipseProjectAnalysisEngine ext abstract protected EclipseProjectPath createProjectPath(P project) throws IOException, CoreException; @Override - abstract protected CallGraphBuilder getCallGraphBuilder(IClassHierarchy cha, AnalysisOptions options, IAnalysisCacheView cache); + abstract protected CallGraphBuilder getCallGraphBuilder(IClassHierarchy cha, AnalysisOptions options, IAnalysisCacheView cache); abstract protected AnalysisScope makeAnalysisScope(); diff --git a/com.ibm.wala.ide/src/com/ibm/wala/ide/ui/IFDSExplorer.java b/com.ibm.wala.ide/src/com/ibm/wala/ide/ui/IFDSExplorer.java index 17a8a9ec8..29522de10 100644 --- a/com.ibm.wala.ide/src/com/ibm/wala/ide/ui/IFDSExplorer.java +++ b/com.ibm.wala.ide/src/com/ibm/wala/ide/ui/IFDSExplorer.java @@ -52,7 +52,7 @@ public class IFDSExplorer { viewIFDS(r, roots, null); } - public static void viewIFDS(TabulationResult r, Collection roots, NodeDecorator labels) + public static void viewIFDS(TabulationResult r, Collection roots, NodeDecorator labels) throws WalaException { Properties p = null; try { @@ -65,7 +65,7 @@ public class IFDSExplorer { viewIFDS(r, roots, labels, scratch); } - public static void viewIFDS(TabulationResult r, Collection roots, NodeDecorator labels, + public static void viewIFDS(TabulationResult r, Collection roots, NodeDecorator labels, String scratchDirectory) throws WalaException { if (r == null) { throw new IllegalArgumentException("r is null"); diff --git a/com.ibm.wala.ide/src/com/ibm/wala/ide/ui/ViewIFDSLocalAction.java b/com.ibm.wala.ide/src/com/ibm/wala/ide/ui/ViewIFDSLocalAction.java index a73ff567e..47c65f2ba 100644 --- a/com.ibm.wala.ide/src/com/ibm/wala/ide/ui/ViewIFDSLocalAction.java +++ b/com.ibm.wala.ide/src/com/ibm/wala/ide/ui/ViewIFDSLocalAction.java @@ -69,10 +69,10 @@ public class ViewIFDSLocalAction extends Action { */ private final String pdfViewExe; - private final NodeDecorator labels; + private final NodeDecorator labels; public ViewIFDSLocalAction(SWTTreeViewer viewer, TabulationResult result, String pdfFile, String dotFile, String dotExe, - String pdfViewExe, NodeDecorator labels) { + String pdfViewExe, NodeDecorator labels) { if (result == null) { throw new IllegalArgumentException("null result"); } @@ -101,7 +101,7 @@ public class ViewIFDSLocalAction extends Action { setText("View Local Supergraph"); } - private static class Labels implements NodeDecorator { + private static class Labels implements NodeDecorator { private TabulationResult result; Labels(TabulationResult result) { From c382934933ede6620b5b58223b0307bd0057068f Mon Sep 17 00:00:00 2001 From: Ben Liblit Date: Wed, 15 Mar 2017 11:20:40 -0500 Subject: [PATCH 4/6] Fix an Eclipse warning about an unchecked cast --- .../src/com/ibm/wala/ipa/callgraph/impl/BasicCallGraph.java | 4 ++-- .../com/ibm/wala/ipa/callgraph/impl/ExplicitCallGraph.java | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/impl/BasicCallGraph.java b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/impl/BasicCallGraph.java index cfdb6bd6a..df0dfd11f 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/impl/BasicCallGraph.java +++ b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/impl/BasicCallGraph.java @@ -136,8 +136,8 @@ public abstract class BasicCallGraph extends AbstractNumberedGraph im return result; } - protected NodeImpl getNode(Key K) { - return (NodeImpl) nodes.get(K); + protected CGNode getNode(Key K) { + return nodes.get(K); } @Override diff --git a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/impl/ExplicitCallGraph.java b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/impl/ExplicitCallGraph.java index b1d76b08d..05f8ca6de 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/impl/ExplicitCallGraph.java +++ b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/impl/ExplicitCallGraph.java @@ -121,7 +121,7 @@ public class ExplicitCallGraph extends BasicCallGraph imp throw new IllegalArgumentException("null context"); } Key k = new Key(method, context); - NodeImpl result = getNode(k); + CGNode result = getNode(k); if (result == null) { if (maxNumberOfNodes == -1 || getNumberOfNodes() < maxNumberOfNodes) { result = makeNode(method, context); From e56686ddf5513b0d3f0fb00d8163e736ebb5d878 Mon Sep 17 00:00:00 2001 From: Ben Liblit Date: Wed, 15 Mar 2017 11:22:13 -0500 Subject: [PATCH 5/6] Suppress a few Eclipse warnings about unchecked casts These are all ones that we cannot really fix statically. --- .../wala/cast/js/ipa/callgraph/PropertyNameContextSelector.java | 1 + .../androidModel/parameters/DefaultInstantiationBehavior.java | 1 + .../ipa/callgraph/androidModel/parameters/FlatInstantiator.java | 1 + .../ipa/callgraph/androidModel/parameters/Instantiator.java | 1 + .../androidModel/parameters/LoadedInstantiationBehavior.java | 1 + .../androidModel/parameters/SpecializedInstantiator.java | 1 + 6 files changed, 6 insertions(+) diff --git a/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/ipa/callgraph/PropertyNameContextSelector.java b/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/ipa/callgraph/PropertyNameContextSelector.java index bd81436dc..8eff8f52c 100755 --- a/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/ipa/callgraph/PropertyNameContextSelector.java +++ b/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/ipa/callgraph/PropertyNameContextSelector.java @@ -205,6 +205,7 @@ public class PropertyNameContextSelector implements ContextSelector { if (PROPNAME_MARKER.equals(caller.getContext().get(PROPNAME_KEY))) { if (!identifyDependentParameters(caller, site).isEmpty()) { // use a MarkerForInContext to clone based on the InstanceKey used in the caller context + @SuppressWarnings("unchecked") InstanceKey callerIk = ((ContextItem.Value)caller.getContext().get(INSTANCE_KEY_KEY)).getValue(); return new MarkerForInContext(baseContext, callerIk); } else { diff --git a/com.ibm.wala.dalvik/src/com/ibm/wala/dalvik/ipa/callgraph/androidModel/parameters/DefaultInstantiationBehavior.java b/com.ibm.wala.dalvik/src/com/ibm/wala/dalvik/ipa/callgraph/androidModel/parameters/DefaultInstantiationBehavior.java index e666cc4c0..d649a6b26 100644 --- a/com.ibm.wala.dalvik/src/com/ibm/wala/dalvik/ipa/callgraph/androidModel/parameters/DefaultInstantiationBehavior.java +++ b/com.ibm.wala.dalvik/src/com/ibm/wala/dalvik/ipa/callgraph/androidModel/parameters/DefaultInstantiationBehavior.java @@ -368,6 +368,7 @@ public class DefaultInstantiationBehavior extends IInstantiationBehavior impleme * hard-coded behaviors don't get mixed with loaded ones. It may be deserialized but using a * LoadedInstantiationBehavior instead may be a better way (as it starts in an empty state) */ + @SuppressWarnings("unchecked") private void readObject(java.io.ObjectInputStream stream) throws IOException, ClassNotFoundException { diff --git a/com.ibm.wala.dalvik/src/com/ibm/wala/dalvik/ipa/callgraph/androidModel/parameters/FlatInstantiator.java b/com.ibm.wala.dalvik/src/com/ibm/wala/dalvik/ipa/callgraph/androidModel/parameters/FlatInstantiator.java index a213104ce..d603c387b 100644 --- a/com.ibm.wala.dalvik/src/com/ibm/wala/dalvik/ipa/callgraph/androidModel/parameters/FlatInstantiator.java +++ b/com.ibm.wala.dalvik/src/com/ibm/wala/dalvik/ipa/callgraph/androidModel/parameters/FlatInstantiator.java @@ -662,6 +662,7 @@ public class FlatInstantiator implements IInstantiator { /** * Satisfy the interface. */ + @SuppressWarnings("unchecked") public int createInstance(TypeReference type, Object... instantiatorArgs) { // public SSAValue createInstance(final TypeReference T, final boolean asManaged, VariableKey key, Set seen) { if (! (instantiatorArgs[0] instanceof Boolean)) { diff --git a/com.ibm.wala.dalvik/src/com/ibm/wala/dalvik/ipa/callgraph/androidModel/parameters/Instantiator.java b/com.ibm.wala.dalvik/src/com/ibm/wala/dalvik/ipa/callgraph/androidModel/parameters/Instantiator.java index a228207e1..6aac763ca 100644 --- a/com.ibm.wala.dalvik/src/com/ibm/wala/dalvik/ipa/callgraph/androidModel/parameters/Instantiator.java +++ b/com.ibm.wala.dalvik/src/com/ibm/wala/dalvik/ipa/callgraph/androidModel/parameters/Instantiator.java @@ -663,6 +663,7 @@ public class Instantiator implements IInstantiator { /** * Satisfy the interface. */ + @SuppressWarnings("unchecked") public int createInstance(TypeReference type, Object... instantiatorArgs) { // public SSAValue createInstance(final TypeReference T, final boolean asManaged, VariableKey key, Set seen) { if (! (instantiatorArgs[0] instanceof Boolean)) { diff --git a/com.ibm.wala.dalvik/src/com/ibm/wala/dalvik/ipa/callgraph/androidModel/parameters/LoadedInstantiationBehavior.java b/com.ibm.wala.dalvik/src/com/ibm/wala/dalvik/ipa/callgraph/androidModel/parameters/LoadedInstantiationBehavior.java index 61e67ac65..a14e235de 100644 --- a/com.ibm.wala.dalvik/src/com/ibm/wala/dalvik/ipa/callgraph/androidModel/parameters/LoadedInstantiationBehavior.java +++ b/com.ibm.wala.dalvik/src/com/ibm/wala/dalvik/ipa/callgraph/androidModel/parameters/LoadedInstantiationBehavior.java @@ -315,6 +315,7 @@ public class LoadedInstantiationBehavior extends IInstantiationBehavior implemen } } + @SuppressWarnings("unchecked") private void readObject(java.io.ObjectInputStream stream) throws IOException, ClassNotFoundException { diff --git a/com.ibm.wala.dalvik/src/com/ibm/wala/dalvik/ipa/callgraph/androidModel/parameters/SpecializedInstantiator.java b/com.ibm.wala.dalvik/src/com/ibm/wala/dalvik/ipa/callgraph/androidModel/parameters/SpecializedInstantiator.java index e9e5e5c97..7c0aae92e 100644 --- a/com.ibm.wala.dalvik/src/com/ibm/wala/dalvik/ipa/callgraph/androidModel/parameters/SpecializedInstantiator.java +++ b/com.ibm.wala.dalvik/src/com/ibm/wala/dalvik/ipa/callgraph/androidModel/parameters/SpecializedInstantiator.java @@ -260,6 +260,7 @@ public class SpecializedInstantiator extends FlatInstantiator { /** * Satisfy the interface. */ + @SuppressWarnings("unchecked") public int createInstance(TypeReference type, Object... instantiatorArgs) { // public SSAValue createInstance(final TypeReference T, final boolean asManaged, VariableKey key, Set seen) { if (! (instantiatorArgs[0] instanceof Boolean)) { From ab5aa90114cf2aa9743b3a956c4b9498e275a090 Mon Sep 17 00:00:00 2001 From: Ben Liblit Date: Wed, 15 Mar 2017 01:30:21 -0500 Subject: [PATCH 6/6] Suppress an Eclipse warning about unsafe varargs Nothing we can do about this statically, due to Java limitations about non-reifiable types. --- .../src/com/ibm/wala/cfg/exc/intra/OperatorUtil.java | 1 + 1 file changed, 1 insertion(+) diff --git a/com.ibm.wala.core/src/com/ibm/wala/cfg/exc/intra/OperatorUtil.java b/com.ibm.wala.core/src/com/ibm/wala/cfg/exc/intra/OperatorUtil.java index 621d321a9..a7d2a062e 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/cfg/exc/intra/OperatorUtil.java +++ b/com.ibm.wala.core/src/com/ibm/wala/cfg/exc/intra/OperatorUtil.java @@ -29,6 +29,7 @@ public class OperatorUtil { this.operators = operators.toArray(new UnaryOperator[operators.size()]); } + @SafeVarargs public UnaryOperatorSequence(UnaryOperator... operators) { if (operators.length == 0 ) throw new IllegalArgumentException("Empty Operator-Sequence"); this.operators = Arrays.copyOf(operators, operators.length);