From 1d239dac528930f73abd5e42622d3b7e180c2002 Mon Sep 17 00:00:00 2001 From: Raffi Khatchadourian Date: Sat, 18 Nov 2017 09:19:43 -0500 Subject: [PATCH 01/69] Remove explicit super call (#252) --- .../com/ibm/wala/ide/client/EclipseProjectAnalysisEngine.java | 1 - 1 file changed, 1 deletion(-) 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 93dc8264f..96bff0e15 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 @@ -39,7 +39,6 @@ abstract public class EclipseProjectAnalysisEngine ext protected EclipseProjectPath ePath; public EclipseProjectAnalysisEngine(P project) { - super(); this.project = project; this.workspaceRootPath = ResourcesPlugin.getWorkspace().getRoot().getLocation(); assert project != null; From d79707e1374a8b31e72c83cad71658527c150d39 Mon Sep 17 00:00:00 2001 From: Ben Liblit Date: Sun, 19 Nov 2017 15:43:45 -0600 Subject: [PATCH 02/69] Suppress deprecation warnings about requesting an old AST version Near as I can tell, the requests for deprecated versions here are intentional. The non-deprecated version (AST.JLS9) is the latest and greatest, but as far as I can tell we really do want the older version here. This is similar to 6caecce3e74cec12f4f206bddb39c44875e46ddc, though in that case JLS8 was the non-reprecated latest version and we were still asking for JLS3. --- .../cast/java/translator/jdt/ecj/ECJSourceModuleTranslator.java | 1 + .../wala/cast/java/translator/jdt/JDTSourceModuleTranslator.java | 1 + 2 files changed, 2 insertions(+) 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 692bb3cec..77a1bda1c 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 @@ -184,6 +184,7 @@ public class ECJSourceModuleTranslator implements SourceModuleTranslator { } String[] sourceFiles = sources.toArray(new String[ sources.size() ]); + @SuppressWarnings("deprecation") final ASTParser parser = ASTParser.newParser(AST.JLS8); parser.setResolveBindings(true); parser.setEnvironment(libs, this.sources, null, false); diff --git a/com.ibm.wala.ide.jdt/source/com/ibm/wala/cast/java/translator/jdt/JDTSourceModuleTranslator.java b/com.ibm.wala.ide.jdt/source/com/ibm/wala/cast/java/translator/jdt/JDTSourceModuleTranslator.java index c0f6d9bf3..832698dfc 100644 --- a/com.ibm.wala.ide.jdt/source/com/ibm/wala/cast/java/translator/jdt/JDTSourceModuleTranslator.java +++ b/com.ibm.wala.ide.jdt/source/com/ibm/wala/cast/java/translator/jdt/JDTSourceModuleTranslator.java @@ -172,6 +172,7 @@ public class JDTSourceModuleTranslator implements SourceModuleTranslator { projectsFiles.get(proj).put(JavaCore.createCompilationUnitFrom(entry.getIFile()), entry); } + @SuppressWarnings("deprecation") final ASTParser parser = ASTParser.newParser(AST.JLS8); for (final Map.Entry> proj : projectsFiles.entrySet()) { From 221a1a26ed270b59a0ea2cfa315840b47bbf5d65 Mon Sep 17 00:00:00 2001 From: Ben Liblit Date: Sun, 19 Nov 2017 15:31:05 -0600 Subject: [PATCH 03/69] Remove a default encoding setting that Eclipse considers unnecessary Removing fixes one Eclipse error diagnostic: "Default encoding (UTF-8) for library '.' should be removed as the workspace does not specify an explicit encoding." This reapplies the fox from ecd1ff72fecb9fd618d37a3f03b9ea9dba88f972, which was reverted (apparently unintentionally) as part of a larger group of changes in 8d65788aefc7726e4c0714c4b6e64d9a60a96eba. --- com.ibm.wala.cast.js.nodejs/build.properties | 1 - 1 file changed, 1 deletion(-) diff --git a/com.ibm.wala.cast.js.nodejs/build.properties b/com.ibm.wala.cast.js.nodejs/build.properties index 9c86a3abf..1e594bfcb 100644 --- a/com.ibm.wala.cast.js.nodejs/build.properties +++ b/com.ibm.wala.cast.js.nodejs/build.properties @@ -11,4 +11,3 @@ javacProjectSettings = true bin.excludes = dat/core-modules/.eslintrc,\ dat/core-modules/.gitignore,\ dat/core-modules/.gitkeep -javacDefaultEncoding.. = UTF-8 From e89c5c6562836930ac0af709031f3019b181c05b Mon Sep 17 00:00:00 2001 From: Ben Liblit Date: Tue, 21 Nov 2017 20:00:43 -0600 Subject: [PATCH 04/69] Disable deprecation warnings in modules where they are unavoidable (#263) These two modules refer to "AST.JLS8". If you have Java 9 installed, then "AST.JLS8" is marked as deprecated, and we can a warning unless we suppress or disable the deprecation warning wherever "AST.JLS8" is used. However, if you don't have Java 9 installed, then "AST.JLS8" is not deprecated, and trying to suppress deprecation warnings where "AST.JLS8" is used instead produces warnings about unnecessary warning suppression. Aagh! Turning off the deprecation warnings entirely for these two modules seems like the only sane compromise. --- com.ibm.wala.cast.java.ecj/.settings/org.eclipse.jdt.core.prefs | 2 +- .../wala/cast/java/translator/jdt/JDTJava2CAstTranslator.java | 1 - .../cast/java/translator/jdt/ecj/ECJSourceModuleTranslator.java | 1 - com.ibm.wala.ide.jdt/.settings/org.eclipse.jdt.core.prefs | 2 +- .../cast/java/translator/jdt/JDTSourceModuleTranslator.java | 1 - com.ibm.wala.ide.jdt/source/com/ibm/wala/ide/util/JdtUtil.java | 1 - 6 files changed, 2 insertions(+), 6 deletions(-) diff --git a/com.ibm.wala.cast.java.ecj/.settings/org.eclipse.jdt.core.prefs b/com.ibm.wala.cast.java.ecj/.settings/org.eclipse.jdt.core.prefs index c69ebb298..201e24b39 100644 --- a/com.ibm.wala.cast.java.ecj/.settings/org.eclipse.jdt.core.prefs +++ b/com.ibm.wala.cast.java.ecj/.settings/org.eclipse.jdt.core.prefs @@ -16,7 +16,7 @@ org.eclipse.jdt.core.compiler.problem.assertIdentifier=error org.eclipse.jdt.core.compiler.problem.autoboxing=error org.eclipse.jdt.core.compiler.problem.comparingIdentical=error org.eclipse.jdt.core.compiler.problem.deadCode=error -org.eclipse.jdt.core.compiler.problem.deprecation=warning +org.eclipse.jdt.core.compiler.problem.deprecation=ignore org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=disabled org.eclipse.jdt.core.compiler.problem.discouragedReference=error 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 344d404a5..c9b7e28d0 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 @@ -1044,7 +1044,6 @@ public abstract class JDTJava2CAstTranslator { private Collection fExceptionTypes = null; @Override - @SuppressWarnings("deprecation") public CAstType getReturnType() { if (fReturnType != null) return fTypeDict.getCAstTypeFor(fReturnType); 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 77a1bda1c..692bb3cec 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 @@ -184,7 +184,6 @@ public class ECJSourceModuleTranslator implements SourceModuleTranslator { } String[] sourceFiles = sources.toArray(new String[ sources.size() ]); - @SuppressWarnings("deprecation") final ASTParser parser = ASTParser.newParser(AST.JLS8); parser.setResolveBindings(true); parser.setEnvironment(libs, this.sources, null, false); diff --git a/com.ibm.wala.ide.jdt/.settings/org.eclipse.jdt.core.prefs b/com.ibm.wala.ide.jdt/.settings/org.eclipse.jdt.core.prefs index aeee0d99b..95607accf 100644 --- a/com.ibm.wala.ide.jdt/.settings/org.eclipse.jdt.core.prefs +++ b/com.ibm.wala.ide.jdt/.settings/org.eclipse.jdt.core.prefs @@ -23,7 +23,7 @@ org.eclipse.jdt.core.compiler.problem.assertIdentifier=error org.eclipse.jdt.core.compiler.problem.autoboxing=ignore org.eclipse.jdt.core.compiler.problem.comparingIdentical=error org.eclipse.jdt.core.compiler.problem.deadCode=error -org.eclipse.jdt.core.compiler.problem.deprecation=warning +org.eclipse.jdt.core.compiler.problem.deprecation=ignore org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=disabled org.eclipse.jdt.core.compiler.problem.discouragedReference=error diff --git a/com.ibm.wala.ide.jdt/source/com/ibm/wala/cast/java/translator/jdt/JDTSourceModuleTranslator.java b/com.ibm.wala.ide.jdt/source/com/ibm/wala/cast/java/translator/jdt/JDTSourceModuleTranslator.java index 832698dfc..c0f6d9bf3 100644 --- a/com.ibm.wala.ide.jdt/source/com/ibm/wala/cast/java/translator/jdt/JDTSourceModuleTranslator.java +++ b/com.ibm.wala.ide.jdt/source/com/ibm/wala/cast/java/translator/jdt/JDTSourceModuleTranslator.java @@ -172,7 +172,6 @@ public class JDTSourceModuleTranslator implements SourceModuleTranslator { projectsFiles.get(proj).put(JavaCore.createCompilationUnitFrom(entry.getIFile()), entry); } - @SuppressWarnings("deprecation") final ASTParser parser = ASTParser.newParser(AST.JLS8); for (final Map.Entry> proj : projectsFiles.entrySet()) { diff --git a/com.ibm.wala.ide.jdt/source/com/ibm/wala/ide/util/JdtUtil.java b/com.ibm.wala.ide.jdt/source/com/ibm/wala/ide/util/JdtUtil.java index 1cd5715ad..73c8cffff 100644 --- a/com.ibm.wala.ide.jdt/source/com/ibm/wala/ide/util/JdtUtil.java +++ b/com.ibm.wala.ide.jdt/source/com/ibm/wala/ide/util/JdtUtil.java @@ -578,7 +578,6 @@ public class JdtUtil { } public static ASTNode getAST(IFile javaSourceFile) { - @SuppressWarnings("deprecation") ASTParser parser = ASTParser.newParser(AST.JLS3); parser.setSource(JavaCore.createCompilationUnitFrom(javaSourceFile)); parser.setProject(JavaCore.create(javaSourceFile.getProject())); From 45da66a95d84eae12820ae133d60735864354bb7 Mon Sep 17 00:00:00 2001 From: Julian Dolby Date: Wed, 22 Nov 2017 18:24:39 -0500 Subject: [PATCH 05/69] cleanups and changes for TAMU work --- .../propagation/PointsToSetVariable.java | 2 +- com.ibm.wala.dalvik/.classpath | 2 +- com.ibm.wala.dalvik/META-INF/MANIFEST.MF | 2 +- com.ibm.wala.dalvik/build.properties | 2 +- com.ibm.wala.dalvik/build.xml | 4 +- .../scandroid/util/CLISCanDroidOptions.java | 37 +++++++++--------- .../ibm/wala/util/collections/OrFilter.java | 39 ------------------- 7 files changed, 24 insertions(+), 64 deletions(-) delete mode 100644 com.ibm.wala.util/src/com/ibm/wala/util/collections/OrFilter.java diff --git a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/PointsToSetVariable.java b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/PointsToSetVariable.java index 3f690bb81..a7766b069 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/PointsToSetVariable.java +++ b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/PointsToSetVariable.java @@ -154,7 +154,7 @@ public class PointsToSetVariable extends IntSetVariable { * * @param pointerKey The pointerKey to set. */ - void setPointerKey(PointerKey pointerKey) { + public void setPointerKey(PointerKey pointerKey) { // check that we haven't modified the hash code!!! this is crucial assert this.pointerKey.hashCode() == pointerKey.hashCode(); this.pointerKey = pointerKey; diff --git a/com.ibm.wala.dalvik/.classpath b/com.ibm.wala.dalvik/.classpath index e60e5fe4d..5306cac98 100644 --- a/com.ibm.wala.dalvik/.classpath +++ b/com.ibm.wala.dalvik/.classpath @@ -4,7 +4,7 @@ - + diff --git a/com.ibm.wala.dalvik/META-INF/MANIFEST.MF b/com.ibm.wala.dalvik/META-INF/MANIFEST.MF index 6350e2c79..bc3d9aa10 100644 --- a/com.ibm.wala.dalvik/META-INF/MANIFEST.MF +++ b/com.ibm.wala.dalvik/META-INF/MANIFEST.MF @@ -86,7 +86,7 @@ Export-Package: com.google.common.annotations, org.jf.util, org.jf.util.jcommander Bundle-ClassPath: ., - lib/commons-cli-1.2.jar, + lib/commons-cli-1.4.jar, lib/commons-io-2.4.jar, lib/dexlib2-2.2.1.jar, lib/util-2.2.1.jar, diff --git a/com.ibm.wala.dalvik/build.properties b/com.ibm.wala.dalvik/build.properties index 8f9288102..1e3626616 100644 --- a/com.ibm.wala.dalvik/build.properties +++ b/com.ibm.wala.dalvik/build.properties @@ -1,6 +1,6 @@ bin.includes = META-INF/,\ .,\ - lib/commons-cli-1.2.jar,\ + lib/commons-cli-1.4.jar,\ lib/commons-io-2.4.jar,\ lib/dexlib2-2.2.1.jar,\ lib/util-2.2.1.jar,\ diff --git a/com.ibm.wala.dalvik/build.xml b/com.ibm.wala.dalvik/build.xml index 5306b444a..b083f8f52 100755 --- a/com.ibm.wala.dalvik/build.xml +++ b/com.ibm.wala.dalvik/build.xml @@ -37,12 +37,12 @@ - + - + diff --git a/com.ibm.wala.scandroid/source/org/scandroid/util/CLISCanDroidOptions.java b/com.ibm.wala.scandroid/source/org/scandroid/util/CLISCanDroidOptions.java index 619f2de7a..6cf0c80e8 100644 --- a/com.ibm.wala.scandroid/source/org/scandroid/util/CLISCanDroidOptions.java +++ b/com.ibm.wala.scandroid/source/org/scandroid/util/CLISCanDroidOptions.java @@ -53,15 +53,14 @@ import java.net.URI; import org.apache.commons.cli.CommandLine; import org.apache.commons.cli.CommandLineParser; +import org.apache.commons.cli.DefaultParser; import org.apache.commons.cli.HelpFormatter; -import org.apache.commons.cli.OptionBuilder; +import org.apache.commons.cli.Option; import org.apache.commons.cli.Options; import org.apache.commons.cli.ParseException; -import org.apache.commons.cli.PosixParser; import com.ibm.wala.ipa.callgraph.AnalysisOptions.ReflectionOptions; -@SuppressWarnings("static-access") public class CLISCanDroidOptions implements ISCanDroidOptions { private static final String VERBOSE = "verbose"; private static final String REFLECTION = "reflection"; @@ -81,7 +80,7 @@ public class CLISCanDroidOptions implements ISCanDroidOptions { private static final String PARTIAL_CALL_GRAPH = "partial-call-graph"; private static final String CALL_GRAPH = "call-graph"; - private CommandLineParser parser = new PosixParser(); + private CommandLineParser parser = new DefaultParser(); private CommandLine line; private URI classpath; private String filename; @@ -93,11 +92,11 @@ public class CLISCanDroidOptions implements ISCanDroidOptions { private final Options options = new Options(); { options.addOption("h", "help", false, "print this message"); - options.addOption(OptionBuilder - .withLongOpt(VERBOSE) - .withDescription( + options.addOption(Option.builder() + .longOpt(VERBOSE) + .desc( "logging level (default INFO) [OFF, ERROR, WARN, INFO, DEBUG, TRACE, ALL]") - .hasArg().withArgName("level").create()); + .hasArg().argName("level").build()); options.addOption("c", CALL_GRAPH, false, "create full call graph pdf"); options.addOption("p", PARTIAL_CALL_GRAPH, false, "create partial call graph pdf (Application only)"); @@ -121,22 +120,22 @@ public class CLISCanDroidOptions implements ISCanDroidOptions { "run string prefix analysis"); options.addOption("f", SUMMARIES_FILE, true, "Use the specified summaries xml file"); - options.addOption(OptionBuilder - .withLongOpt(TEST_CGB) - .withDescription( + options.addOption(Option.builder() + .longOpt(TEST_CGB) + .desc( "Only load the call graph, exit status indicates success") - .create()); + .build()); options.addOption("y", CHECK_POLICY, false, "Check conformance with built-in policy"); - options.addOption(OptionBuilder.withLongOpt(ANDROID_LIB) - .withDescription("include ALIB in scope of analysis").hasArg() - .withArgName("ALIB").create()); - options.addOption(OptionBuilder - .withLongOpt(REFLECTION) - .withDescription( + options.addOption(Option.builder().longOpt(ANDROID_LIB) + .desc("include ALIB in scope of analysis").hasArg() + .argName("ALIB").build()); + options.addOption(Option.builder() + .longOpt(REFLECTION) + .desc( "FULL, NO_FLOW_TO_CASTS, NO_METHOD_INVOKE, NO_FLOW_TO_CASTS_NO_METHOD_INVOKE, ONE_FLOW_TO_CASTS_NO_METHOD_INVOKE, NO_STRING_CONSTANTS, NONE (Default)") - .hasArg().withArgName("option").create()); + .hasArg().argName("option").build()); } public CLISCanDroidOptions(String[] args, boolean reqArgs) { diff --git a/com.ibm.wala.util/src/com/ibm/wala/util/collections/OrFilter.java b/com.ibm.wala.util/src/com/ibm/wala/util/collections/OrFilter.java deleted file mode 100644 index 10e5f1707..000000000 --- a/com.ibm.wala.util/src/com/ibm/wala/util/collections/OrFilter.java +++ /dev/null @@ -1,39 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2007 IBM Corporation. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package com.ibm.wala.util.collections; - -import java.util.function.Predicate; - -/** - * A filter "A or B" - */ -public class OrFilter implements Predicate { - - public static OrFilter createOrFilter(Predicate a, Predicate b) { - if (a == null || b == null) { - throw new IllegalArgumentException("cannot compose null filter"); - } - return new OrFilter<>(a, b); - } - - private final Predicate a; - private final Predicate b; - - private OrFilter(Predicate a, Predicate b) { - this.a = a; - this.b = b; - } - - @Override public boolean test(T o) { - return a.test(o) || b.test(o); - } - -} From ded9e880b193880d0956ec911a69392e8a7088f5 Mon Sep 17 00:00:00 2001 From: Ben Liblit Date: Thu, 23 Nov 2017 14:55:05 -0600 Subject: [PATCH 06/69] Update Maven Central configurations to also use Java 8 (#264) E-mail exchanged with Julian Dolby suggests that this is the right thing to do, and that it should have been done back when we converted other parts of the build configuration to Java 8. --- com.ibm.wala.cast.java.ecj/mvncentral.xml | 4 ++-- com.ibm.wala.cast.java/mvncentral.xml | 4 ++-- com.ibm.wala.cast.js.rhino/mvncentral.xml | 4 ++-- com.ibm.wala.cast.js/mvncentral.xml | 4 ++-- com.ibm.wala.cast/mvncentral.xml | 4 ++-- com.ibm.wala.dalvik/mvncentral.xml | 4 ++-- com.ibm.wala.scandroid/mvncentral.xml | 4 ++-- com.ibm.wala.shrike/mvncentral.xml | 4 ++-- 8 files changed, 16 insertions(+), 16 deletions(-) diff --git a/com.ibm.wala.cast.java.ecj/mvncentral.xml b/com.ibm.wala.cast.java.ecj/mvncentral.xml index 94bd3ceef..58a676b2a 100644 --- a/com.ibm.wala.cast.java.ecj/mvncentral.xml +++ b/com.ibm.wala.cast.java.ecj/mvncentral.xml @@ -106,8 +106,8 @@ maven-compiler-plugin 3.2 - 1.7 - 1.7 + 1.8 + 1.8 diff --git a/com.ibm.wala.cast.java/mvncentral.xml b/com.ibm.wala.cast.java/mvncentral.xml index 6252152e1..84b6967f4 100644 --- a/com.ibm.wala.cast.java/mvncentral.xml +++ b/com.ibm.wala.cast.java/mvncentral.xml @@ -91,8 +91,8 @@ maven-compiler-plugin 3.2 - 1.7 - 1.7 + 1.8 + 1.8 diff --git a/com.ibm.wala.cast.js.rhino/mvncentral.xml b/com.ibm.wala.cast.js.rhino/mvncentral.xml index 14328615d..6e9dbdd96 100644 --- a/com.ibm.wala.cast.js.rhino/mvncentral.xml +++ b/com.ibm.wala.cast.js.rhino/mvncentral.xml @@ -96,8 +96,8 @@ maven-compiler-plugin 3.2 - 1.7 - 1.7 + 1.8 + 1.8 diff --git a/com.ibm.wala.cast.js/mvncentral.xml b/com.ibm.wala.cast.js/mvncentral.xml index c882d850f..d4ed7f415 100644 --- a/com.ibm.wala.cast.js/mvncentral.xml +++ b/com.ibm.wala.cast.js/mvncentral.xml @@ -106,8 +106,8 @@ maven-compiler-plugin 3.2 - 1.7 - 1.7 + 1.8 + 1.8 diff --git a/com.ibm.wala.cast/mvncentral.xml b/com.ibm.wala.cast/mvncentral.xml index 2272ebb1f..f8e8054d9 100644 --- a/com.ibm.wala.cast/mvncentral.xml +++ b/com.ibm.wala.cast/mvncentral.xml @@ -91,8 +91,8 @@ maven-compiler-plugin 3.2 - 1.7 - 1.7 + 1.8 + 1.8 diff --git a/com.ibm.wala.dalvik/mvncentral.xml b/com.ibm.wala.dalvik/mvncentral.xml index 7676b4c2a..01afba755 100644 --- a/com.ibm.wala.dalvik/mvncentral.xml +++ b/com.ibm.wala.dalvik/mvncentral.xml @@ -135,8 +135,8 @@ maven-compiler-plugin 3.2 - 1.7 - 1.7 + 1.8 + 1.8 diff --git a/com.ibm.wala.scandroid/mvncentral.xml b/com.ibm.wala.scandroid/mvncentral.xml index 58930bcac..b88ea2f60 100644 --- a/com.ibm.wala.scandroid/mvncentral.xml +++ b/com.ibm.wala.scandroid/mvncentral.xml @@ -105,8 +105,8 @@ maven-compiler-plugin 3.2 - 1.7 - 1.7 + 1.8 + 1.8 diff --git a/com.ibm.wala.shrike/mvncentral.xml b/com.ibm.wala.shrike/mvncentral.xml index f2515eaa5..ee35462f0 100644 --- a/com.ibm.wala.shrike/mvncentral.xml +++ b/com.ibm.wala.shrike/mvncentral.xml @@ -76,8 +76,8 @@ maven-compiler-plugin 3.2 - 1.7 - 1.7 + 1.8 + 1.8 From 9ef6ff1a9c67510bb9e635ec86157e0d9937c095 Mon Sep 17 00:00:00 2001 From: Ben Liblit Date: Sun, 26 Nov 2017 18:11:56 -0600 Subject: [PATCH 07/69] Remove "build.xml" files not used by corresponding "pom.xml" files --- .../build.xml | 68 ----- com.ibm.wala.cast.js.rhino/build.xml | 48 --- com.ibm.wala.cast.js/build.xml | 68 ----- com.ibm.wala.cast.test/build.xml | 47 --- com.ibm.wala.cast/build.xml | 71 ----- com.ibm.wala.core.tests/build.xml | 277 ------------------ com.ibm.wala.core/build.xml | 202 ------------- com.ibm.wala.shrike/build.xml | 174 ----------- 8 files changed, 955 deletions(-) delete mode 100755 com.ibm.wala.cast.js.html.nu_validator/build.xml delete mode 100644 com.ibm.wala.cast.js.rhino/build.xml delete mode 100755 com.ibm.wala.cast.js/build.xml delete mode 100644 com.ibm.wala.cast.test/build.xml delete mode 100644 com.ibm.wala.cast/build.xml delete mode 100644 com.ibm.wala.core.tests/build.xml delete mode 100644 com.ibm.wala.core/build.xml delete mode 100644 com.ibm.wala.shrike/build.xml diff --git a/com.ibm.wala.cast.js.html.nu_validator/build.xml b/com.ibm.wala.cast.js.html.nu_validator/build.xml deleted file mode 100755 index 47240c5db..000000000 --- a/com.ibm.wala.cast.js.html.nu_validator/build.xml +++ /dev/null @@ -1,68 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/com.ibm.wala.cast.js.rhino/build.xml b/com.ibm.wala.cast.js.rhino/build.xml deleted file mode 100644 index 74f466b5c..000000000 --- a/com.ibm.wala.cast.js.rhino/build.xml +++ /dev/null @@ -1,48 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/com.ibm.wala.cast.js/build.xml b/com.ibm.wala.cast.js/build.xml deleted file mode 100755 index 2294688d3..000000000 --- a/com.ibm.wala.cast.js/build.xml +++ /dev/null @@ -1,68 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/com.ibm.wala.cast.test/build.xml b/com.ibm.wala.cast.test/build.xml deleted file mode 100644 index 3a06ba5fd..000000000 --- a/com.ibm.wala.cast.test/build.xml +++ /dev/null @@ -1,47 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/com.ibm.wala.cast/build.xml b/com.ibm.wala.cast/build.xml deleted file mode 100644 index d70c3a262..000000000 --- a/com.ibm.wala.cast/build.xml +++ /dev/null @@ -1,71 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/com.ibm.wala.core.tests/build.xml b/com.ibm.wala.core.tests/build.xml deleted file mode 100644 index 469c9fe60..000000000 --- a/com.ibm.wala.core.tests/build.xml +++ /dev/null @@ -1,277 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/com.ibm.wala.core/build.xml b/com.ibm.wala.core/build.xml deleted file mode 100644 index 8db251c44..000000000 --- a/com.ibm.wala.core/build.xml +++ /dev/null @@ -1,202 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/com.ibm.wala.shrike/build.xml b/com.ibm.wala.shrike/build.xml deleted file mode 100644 index 8e71357e5..000000000 --- a/com.ibm.wala.shrike/build.xml +++ /dev/null @@ -1,174 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - From 11828c57f4717f39a2722c57ed7004b097ae65ef Mon Sep 17 00:00:00 2001 From: Ben Liblit Date: Sat, 25 Nov 2017 18:18:53 -0600 Subject: [PATCH 08/69] Update more parts of the build configuration to use Java 8 Julian Dolby assures me that WALA is now supposed to be using Java 8 everywhere. This covers nearly all remaining places that I can find where an earlier Java version was still being used. (The few exceptions are places where switching to Java 8 causes test failures. I'll address those separately, probably by reaching out to the WALA maintainers for help.) --- com.ibm.wala.cast.java.test.data/build.xml | 4 ++-- com.ibm.wala.cast.js.test.data/build.xml | 4 ++-- com.ibm.wala.dalvik.test/build.xml | 4 ++-- com.ibm.wala.dalvik/build.xml | 4 ++-- 4 files changed, 8 insertions(+), 8 deletions(-) diff --git a/com.ibm.wala.cast.java.test.data/build.xml b/com.ibm.wala.cast.java.test.data/build.xml index 034ca28f7..60bc4afa7 100644 --- a/com.ibm.wala.cast.java.test.data/build.xml +++ b/com.ibm.wala.cast.java.test.data/build.xml @@ -13,8 +13,8 @@ - - + + diff --git a/com.ibm.wala.cast.js.test.data/build.xml b/com.ibm.wala.cast.js.test.data/build.xml index b623ea825..b53464aec 100644 --- a/com.ibm.wala.cast.js.test.data/build.xml +++ b/com.ibm.wala.cast.js.test.data/build.xml @@ -13,8 +13,8 @@ - - + + diff --git a/com.ibm.wala.dalvik.test/build.xml b/com.ibm.wala.dalvik.test/build.xml index f5e6b2e7e..f3ce35012 100644 --- a/com.ibm.wala.dalvik.test/build.xml +++ b/com.ibm.wala.dalvik.test/build.xml @@ -13,8 +13,8 @@ - - + + diff --git a/com.ibm.wala.dalvik/build.xml b/com.ibm.wala.dalvik/build.xml index b083f8f52..ad85de705 100755 --- a/com.ibm.wala.dalvik/build.xml +++ b/com.ibm.wala.dalvik/build.xml @@ -13,8 +13,8 @@ - - + + From 28f0e09435d088c94bf78c981e55fa3fd5534c94 Mon Sep 17 00:00:00 2001 From: Ben Liblit Date: Tue, 21 Nov 2017 17:20:35 -0600 Subject: [PATCH 09/69] Make FilterIterator and Predicate statically type-correct Previously FilterIterator was very permissive regarding the type relationships between the original iterator, the filtered iterator, and the predicate used to prune the former down to the latter. Now we enforce those relationships more strictly, including proper use of covariant ("") and contravariant ("") polymorphic type parameters where appropriate. This lets us get rid of seven suppressed warnings about generic types and/or unchecked conversions. It also moves us toward being able to use modern Java features like lambdas and streams more easily. --- .../wala/cast/loader/CAstAbstractLoader.java | 2 +- .../com/ibm/wala/cast/util/CAstFunctions.java | 2 +- .../wala/analysis/pointers/HeapGraphImpl.java | 2 +- .../dataflow/IFDS/BackwardsSupergraph.java | 17 +++++++------- .../wala/escape/LocalLiveRangeAnalysis.java | 2 +- .../ipa/callgraph/impl/ExplicitCallGraph.java | 6 ++--- .../ipa/callgraph/impl/PartialCallGraph.java | 6 ++--- .../callgraph/propagation/PointsToMap.java | 6 ++--- .../propagation/PropagationGraph.java | 22 ++++++++----------- .../propagation/rta/TypeBasedHeapModel.java | 7 +++--- .../ipa/cfg/AbstractInterproceduralCFG.java | 7 +++--- .../src/com/ibm/wala/ipa/cfg/PrunedCFG.java | 6 ++--- .../ibm/wala/ipa/slicer/HeapReachingDefs.java | 9 ++++---- .../src/com/ibm/wala/ipa/slicer/PDG.java | 20 ++++++++--------- .../ibm/wala/ipa/slicer/SDGSupergraph.java | 5 ++--- .../impl/DefaultFixedPointSystem.java | 6 ++--- .../wala/util/collections/FilterIterator.java | 13 +++++------ .../wala/util/collections/IteratorUtil.java | 2 +- .../wala/util/graph/GraphReachability.java | 4 ++-- .../com/ibm/wala/util/graph/traverse/DFS.java | 2 +- .../src/com/ibm/wala/util/io/RtJar.java | 2 +- 21 files changed, 67 insertions(+), 81 deletions(-) diff --git a/com.ibm.wala.cast/source/java/com/ibm/wala/cast/loader/CAstAbstractLoader.java b/com.ibm.wala.cast/source/java/com/ibm/wala/cast/loader/CAstAbstractLoader.java index 1ec6a3b2c..cce71bb28 100644 --- a/com.ibm.wala.cast/source/java/com/ibm/wala/cast/loader/CAstAbstractLoader.java +++ b/com.ibm.wala.cast/source/java/com/ibm/wala/cast/loader/CAstAbstractLoader.java @@ -82,7 +82,7 @@ public abstract class CAstAbstractLoader implements IClassLoader { } private Iterator getMessages(final byte severity) { - return new MapIterator<>(new FilterIterator>>(errors.entrySet().iterator(), new Predicate>>() { + return new MapIterator<>(new FilterIterator<>(errors.entrySet().iterator(), new Predicate>>() { @Override public boolean test(Entry> o) { for(Warning w : o.getValue()) { if (w.getLevel() == severity) { diff --git a/com.ibm.wala.cast/source/java/com/ibm/wala/cast/util/CAstFunctions.java b/com.ibm.wala.cast/source/java/com/ibm/wala/cast/util/CAstFunctions.java index cbe8ae0f0..d8a25a50a 100644 --- a/com.ibm.wala.cast/source/java/com/ibm/wala/cast/util/CAstFunctions.java +++ b/com.ibm.wala.cast/source/java/com/ibm/wala/cast/util/CAstFunctions.java @@ -80,7 +80,7 @@ public class CAstFunctions { }; } - public static Iterator findAll(CAstNode tree, Predicate f) { + public static Iterator findAll(CAstNode tree, Predicate f) { return new FilterIterator<>(iterateNodes(tree), f); } diff --git a/com.ibm.wala.core/src/com/ibm/wala/analysis/pointers/HeapGraphImpl.java b/com.ibm.wala.core/src/com/ibm/wala/analysis/pointers/HeapGraphImpl.java index 85e2a62a6..2fa2bac60 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/analysis/pointers/HeapGraphImpl.java +++ b/com.ibm.wala.core/src/com/ibm/wala/analysis/pointers/HeapGraphImpl.java @@ -52,7 +52,7 @@ public abstract class HeapGraphImpl implements HeapGraph< @Override public Collection getReachableInstances(Set roots) { - Predicate f = new Predicate() { + Predicate f = new Predicate() { @Override public boolean test(Object o) { return (o instanceof InstanceKey); } diff --git a/com.ibm.wala.core/src/com/ibm/wala/dataflow/IFDS/BackwardsSupergraph.java b/com.ibm.wala.core/src/com/ibm/wala/dataflow/IFDS/BackwardsSupergraph.java index a6a1f79de..27a4fb0fb 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/dataflow/IFDS/BackwardsSupergraph.java +++ b/com.ibm.wala.core/src/com/ibm/wala/dataflow/IFDS/BackwardsSupergraph.java @@ -76,14 +76,13 @@ public class BackwardsSupergraph implements ISupergraph { /** * a filter that accepts only exit nodes from the original graph. */ - private class ExitFilter implements Predicate { + private class ExitFilter implements Predicate { /* * @see com.ibm.wala.util.Filter#accepts(java.lang.Object) */ @Override - @SuppressWarnings("unchecked") - public boolean test(Object o) { - return delegate.isExit((T) o); + public boolean test(T o) { + return delegate.isExit(o); } } @@ -98,7 +97,7 @@ public class BackwardsSupergraph implements ISupergraph { if (DEBUG_LEVEL > 1) { System.err.println(getClass() + " getCalledNodes " + ret); System.err.println("called nodes: " - + Iterator2Collection.toSet(new FilterIterator(getSuccNodes(ret), exitFilter))); + + Iterator2Collection.toSet(new FilterIterator<>(getSuccNodes(ret), exitFilter))); } return new FilterIterator(getSuccNodes(ret), exitFilter); } @@ -110,15 +109,15 @@ public class BackwardsSupergraph implements ISupergraph { */ @Override public Iterator getNormalSuccessors(final T ret) { - Iterator allPreds = delegate.getPredNodes(ret); - Predicate sameProc = new Predicate() { + Iterator allPreds = delegate.getPredNodes(ret); + Predicate sameProc = new Predicate() { @Override public boolean test(T o) { // throw out the exit node, which can be a predecessor due to tail recursion. return getProcOf(ret).equals(getProcOf(o)) && !delegate.isExit(o); } }; - Iterator sameProcPreds = new FilterIterator(allPreds, sameProc); - Predicate notCall = new Predicate() { + Iterator sameProcPreds = new FilterIterator<>(allPreds, sameProc); + Predicate notCall = new Predicate() { @Override public boolean test(T o) { return !delegate.isCall(o); } diff --git a/com.ibm.wala.core/src/com/ibm/wala/escape/LocalLiveRangeAnalysis.java b/com.ibm.wala.core/src/com/ibm/wala/escape/LocalLiveRangeAnalysis.java index e66993697..d0ab67967 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/escape/LocalLiveRangeAnalysis.java +++ b/com.ibm.wala.core/src/com/ibm/wala/escape/LocalLiveRangeAnalysis.java @@ -57,7 +57,7 @@ public class LocalLiveRangeAnalysis { final Collection uses = findBlocks(ir, du.getUses(v)); // a filter which accepts everything but the block which defs v - Predicate notDef = new Predicate() { + Predicate notDef = new Predicate() { @Override public boolean test(Object o) { return (defBlock == null || !defBlock.equals(o)); } 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 528d4fb71..761dc78d7 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 @@ -187,9 +187,9 @@ public class ExplicitCallGraph extends BasicCallGraph imp */ protected Iterator getPossibleSites(final CGNode to) { final int n = getCallGraph().getNumber(to); - return new FilterIterator(iterateCallSites(), new Predicate() { - @Override public boolean test(Object o) { - IntSet s = getPossibleTargetNumbers((CallSiteReference) o); + return new FilterIterator(iterateCallSites(), new Predicate() { + @Override public boolean test(CallSiteReference o) { + IntSet s = getPossibleTargetNumbers(o); return s == null ? false : s.contains(n); } }); diff --git a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/impl/PartialCallGraph.java b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/impl/PartialCallGraph.java index da36ebd4c..57dd82260 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/impl/PartialCallGraph.java +++ b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/impl/PartialCallGraph.java @@ -122,9 +122,9 @@ public class PartialCallGraph extends DelegatingGraph implements CallGra @Override public Iterator iterateNodes(IntSet nodes) { - return new FilterIterator(cg.iterateNodes(nodes), new Predicate() { - @Override public boolean test(Object o) { - return containsNode((CGNode) o); + return new FilterIterator(cg.iterateNodes(nodes), new Predicate() { + @Override public boolean test(CGNode o) { + return containsNode(o); } }); } diff --git a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/PointsToMap.java b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/PointsToMap.java index e3079b05c..22680b151 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/PointsToMap.java +++ b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/PointsToMap.java @@ -201,9 +201,9 @@ public class PointsToMap { * @return {@link Iterator}<{@link PointerKey}> */ public Iterator getTransitiveRoots() { - return new FilterIterator(iterateKeys(), new Predicate() { - @Override public boolean test(Object o) { - return isTransitiveRoot((PointerKey) o); + return new FilterIterator(iterateKeys(), new Predicate() { + @Override public boolean test(PointerKey o) { + return isTransitiveRoot(o); } }); } diff --git a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/PropagationGraph.java b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/PropagationGraph.java index a0d85a4e8..3915caace 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/PropagationGraph.java +++ b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/PropagationGraph.java @@ -26,11 +26,7 @@ import com.ibm.wala.fixpoint.IFixedPointSystem; import com.ibm.wala.fixpoint.IVariable; import com.ibm.wala.fixpoint.UnaryOperator; import com.ibm.wala.fixpoint.UnaryStatement; -import com.ibm.wala.util.collections.CompoundIterator; -import com.ibm.wala.util.collections.EmptyIterator; -import com.ibm.wala.util.collections.FilterIterator; -import com.ibm.wala.util.collections.HashSetFactory; -import com.ibm.wala.util.collections.SmallMap; +import com.ibm.wala.util.collections.*; import com.ibm.wala.util.debug.Assertions; import com.ibm.wala.util.debug.UnimplementedError; import com.ibm.wala.util.graph.AbstractNumberedGraph; @@ -274,14 +270,14 @@ public class PropagationGraph implements IFixedPointSystem } @Override - @SuppressWarnings("unchecked") public Iterator getStatements() { - Iterator it = new FilterIterator(delegateGraph.iterator(), new Predicate() { - @Override public boolean test(Object x) { + Iterator it = new FilterIterator<>(delegateGraph.iterator(), new Predicate() { + @Override public boolean test(INodeWithNumber x) { return x instanceof AbstractStatement; } }); - return new CompoundIterator(it, new GlobalImplicitIterator()); + Iterator converted = new MapIterator<>(it, AbstractStatement.class::cast); + return new CompoundIterator(converted, new GlobalImplicitIterator()); } /** @@ -765,14 +761,14 @@ public class PropagationGraph implements IFixedPointSystem } @Override - @SuppressWarnings("unchecked") public Iterator getVariables() { - Iterator it = new FilterIterator(delegateGraph.iterator(), new Predicate() { - @Override public boolean test(Object x) { + Iterator it = new FilterIterator<>(delegateGraph.iterator(), new Predicate() { + @Override public boolean test(INodeWithNumber x) { return x instanceof IVariable; } }); - return it; + Iterator converted = new MapIterator(it, PointsToSetVariable.class::cast); + return converted; } /* diff --git a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/rta/TypeBasedHeapModel.java b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/rta/TypeBasedHeapModel.java index f66a61a33..1ba6acc1e 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/rta/TypeBasedHeapModel.java +++ b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/rta/TypeBasedHeapModel.java @@ -37,9 +37,7 @@ import com.ibm.wala.ipa.cha.IClassHierarchy; import com.ibm.wala.ssa.IR; import com.ibm.wala.ssa.SymbolTable; import com.ibm.wala.types.TypeReference; -import com.ibm.wala.util.collections.FilterIterator; -import com.ibm.wala.util.collections.HashMapFactory; -import com.ibm.wala.util.collections.HashSetFactory; +import com.ibm.wala.util.collections.*; import com.ibm.wala.util.debug.Assertions; import com.ibm.wala.util.debug.UnimplementedError; @@ -178,12 +176,13 @@ public class TypeBasedHeapModel implements HeapModel { @Override public Iterator iteratePointerKeys() { initAllPKeys(); - return new FilterIterator<>(pKeys.values().iterator(), new Predicate() { + Iterator filtered = new FilterIterator(pKeys.values().iterator(), new Predicate() { @Override public boolean test(Object o) { return o instanceof PointerKey; } }); + return new MapIterator(filtered, PointerKey.class::cast); } @Override diff --git a/com.ibm.wala.core/src/com/ibm/wala/ipa/cfg/AbstractInterproceduralCFG.java b/com.ibm.wala.core/src/com/ibm/wala/ipa/cfg/AbstractInterproceduralCFG.java index 91223aa70..3aec1ffe8 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/ipa/cfg/AbstractInterproceduralCFG.java +++ b/com.ibm.wala.core/src/com/ibm/wala/ipa/cfg/AbstractInterproceduralCFG.java @@ -842,9 +842,8 @@ public abstract class AbstractInterproceduralCFG imple // a successor node is a return site if it is in the same // procedure, and is not the entry() node. - Predicate isReturn = new Predicate() { - @Override public boolean test(Object o) { - BasicBlockInContext other = (BasicBlockInContext) o; + Predicate isReturn = new Predicate() { + @Override public boolean test(BasicBlockInContext other) { return !other.isEntryBlock() && node.equals(other.getNode()); } }; @@ -863,7 +862,7 @@ public abstract class AbstractInterproceduralCFG imple Iterator it = cfg.getPredNodes(returnBlock.getDelegate()); final CGNode node = returnBlock.getNode(); - Predicate dispatchFilter = new Predicate() { + Predicate dispatchFilter = new Predicate() { @Override public boolean test(T callBlock) { BasicBlockInContext bb = new BasicBlockInContext(node, callBlock); if (!hasCall(bb, cfg)) { diff --git a/com.ibm.wala.core/src/com/ibm/wala/ipa/cfg/PrunedCFG.java b/com.ibm.wala.core/src/com/ibm/wala/ipa/cfg/PrunedCFG.java index d754fced4..1a21f29c4 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/ipa/cfg/PrunedCFG.java +++ b/com.ibm.wala.core/src/com/ibm/wala/ipa/cfg/PrunedCFG.java @@ -225,9 +225,9 @@ public class PrunedCFG> extends AbstractNumberedGrap return max; } - private Iterator filterNodes(Iterator nodeIterator) { - return new FilterIterator(nodeIterator, new Predicate() { - @Override public boolean test(Object o) { + private Iterator filterNodes(Iterator nodeIterator) { + return new FilterIterator(nodeIterator, new Predicate() { + @Override public boolean test(T o) { return subset.contains(o); } }); 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 d973742ff..ce6b24920 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 @@ -644,8 +644,8 @@ public class HeapReachingDefs { return null; } else { // only static fields are actually killed - Predicate staticFilter = new Predicate() { - @Override public boolean test(Object o) { + Predicate staticFilter = new Predicate() { + @Override public boolean test(PointerKey o) { return o instanceof StaticFieldKey; } }; @@ -654,10 +654,9 @@ public class HeapReachingDefs { if (kill.isEmpty()) { return null; } else { - Predicate f = new Predicate() { + Predicate f = new Predicate() { // accept any statement which writes a killed location. - @Override public boolean test(Object o) { - Statement s = (Statement) o; + @Override public boolean test(Statement s) { Collection m = getMod(s, node, heapModel, pa, exclusions); for (PointerKey k : kill) { if (m.contains(k)) { 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 aa45dbc61..1437c5c1d 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 @@ -53,12 +53,7 @@ import com.ibm.wala.ssa.SSAPhiInstruction; import com.ibm.wala.ssa.SSAPiInstruction; import com.ibm.wala.ssa.SSAReturnInstruction; import com.ibm.wala.types.TypeReference; -import com.ibm.wala.util.collections.FilterIterator; -import com.ibm.wala.util.collections.HashMapFactory; -import com.ibm.wala.util.collections.HashSetFactory; -import com.ibm.wala.util.collections.Iterator2Collection; -import com.ibm.wala.util.collections.Iterator2Iterable; -import com.ibm.wala.util.collections.MapUtil; +import com.ibm.wala.util.collections.*; import com.ibm.wala.util.config.SetOfClasses; import com.ibm.wala.util.debug.Assertions; import com.ibm.wala.util.debug.UnimplementedError; @@ -679,8 +674,8 @@ public class PDG implements NumberedGraph { // in reaching defs calculation, exclude heap statements that are // irrelevant. - Predicate f = new Predicate() { - @Override public boolean test(Object o) { + Predicate f = new Predicate() { + @Override public boolean test(Statement o) { if (o instanceof HeapStatement) { HeapStatement h = (HeapStatement) o; return h.getLocation().equals(pk); @@ -771,8 +766,8 @@ public class PDG implements NumberedGraph { * @return Statements representing each return instruction in the ir */ private Collection computeReturnStatements(final IR ir) { - Predicate filter = new Predicate() { - @Override public boolean test(Object o) { + Predicate filter = new Predicate() { + @Override public boolean test(Statement o) { if (o instanceof NormalStatement) { NormalStatement s = (NormalStatement) o; SSAInstruction st = ir.getInstructions()[s.getInstructionIndex()]; @@ -782,7 +777,10 @@ public class PDG implements NumberedGraph { } } }; - return Iterator2Collection.toSet(new FilterIterator(iterator(), filter)); + return Iterator2Collection.toSet( + new MapIterator( + new FilterIterator(iterator(), filter), + NormalStatement.class::cast)); } /** 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 00d9223ce..d9c00b044 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 @@ -97,9 +97,8 @@ class SDGSupergraph implements ISupergraph public Iterator getCalledNodes(Statement call) { switch (call.getKind()) { case NORMAL: - Predicate f = new Predicate() { - @Override public boolean test(Object o) { - Statement s = (Statement) o; + Predicate f = new Predicate() { + @Override public boolean test(Statement s) { return isEntry(s); } }; diff --git a/com.ibm.wala.util/src/com/ibm/wala/fixedpoint/impl/DefaultFixedPointSystem.java b/com.ibm.wala.util/src/com/ibm/wala/fixedpoint/impl/DefaultFixedPointSystem.java index ae32f46ce..186d69cee 100644 --- a/com.ibm.wala.util/src/com/ibm/wala/fixedpoint/impl/DefaultFixedPointSystem.java +++ b/com.ibm.wala.util/src/com/ibm/wala/fixedpoint/impl/DefaultFixedPointSystem.java @@ -258,9 +258,9 @@ public class DefaultFixedPointSystem> implements IFixedPo } @Override - public Iterator getVariables() { - return new FilterIterator<>(graph.iterator(), new Predicate() { - @Override public boolean test(T x) { + public Iterator getVariables() { + return new FilterIterator<>(graph.iterator(), new Predicate() { + @Override public boolean test(Object x) { return x != null; } }); diff --git a/com.ibm.wala.util/src/com/ibm/wala/util/collections/FilterIterator.java b/com.ibm.wala.util/src/com/ibm/wala/util/collections/FilterIterator.java index 477cd339b..8c30877af 100644 --- a/com.ibm.wala.util/src/com/ibm/wala/util/collections/FilterIterator.java +++ b/com.ibm.wala.util/src/com/ibm/wala/util/collections/FilterIterator.java @@ -18,10 +18,9 @@ import java.util.function.Predicate; * A FilterIterator filters an Iterator to generate a new one. */ public class FilterIterator implements java.util.Iterator { - final Iterator i; + final Iterator i; - @SuppressWarnings("rawtypes") - final Predicate f; + final Predicate f; private T next = null; @@ -31,8 +30,7 @@ public class FilterIterator implements java.util.Iterator { * @param i the original iterator * @param f a filter which defines which elements belong to the generated iterator */ - @SuppressWarnings("rawtypes") - public FilterIterator(Iterator i, Predicate f) { + public FilterIterator(Iterator i, Predicate f) { if (i == null) { throw new IllegalArgumentException("null i"); } @@ -47,12 +45,11 @@ public class FilterIterator implements java.util.Iterator { /** * update the internal state to prepare for the next access to this iterator */ - @SuppressWarnings("unchecked") private void advance() { while (i.hasNext()) { - Object o = i.next(); + T o = i.next(); if (f.test(o)) { - next = (T) o; + next = o; return; } } diff --git a/com.ibm.wala.util/src/com/ibm/wala/util/collections/IteratorUtil.java b/com.ibm.wala.util/src/com/ibm/wala/util/collections/IteratorUtil.java index 58860f023..550a1f67d 100644 --- a/com.ibm.wala.util/src/com/ibm/wala/util/collections/IteratorUtil.java +++ b/com.ibm.wala.util/src/com/ibm/wala/util/collections/IteratorUtil.java @@ -47,7 +47,7 @@ public class IteratorUtil { public static Iterator filter(Iterator iterator, final Class cls) { return new MapIterator<>( - new FilterIterator(iterator, new Predicate() { + new FilterIterator<>(iterator, new Predicate() { @Override public boolean test(T o) { return cls.isInstance(o); } diff --git a/com.ibm.wala.util/src/com/ibm/wala/util/graph/GraphReachability.java b/com.ibm.wala.util/src/com/ibm/wala/util/graph/GraphReachability.java index 9c5068a28..3d9714c16 100644 --- a/com.ibm.wala.util/src/com/ibm/wala/util/graph/GraphReachability.java +++ b/com.ibm.wala.util/src/com/ibm/wala/util/graph/GraphReachability.java @@ -58,12 +58,12 @@ public class GraphReachability { * @param filter "interesting" node definition * @throws IllegalArgumentException if g is null */ - public GraphReachability(Graph g, Predicate filter) { + public GraphReachability(Graph g, Predicate filter) { if (g == null) { throw new IllegalArgumentException("g is null"); } this.g = g; - Iterator i = new FilterIterator<>(g.iterator(), filter); + Iterator i = new FilterIterator<>(g.iterator(), filter); domain = new MutableMapping<>((Iterator2Collection.toSet(i)).toArray()); } diff --git a/com.ibm.wala.util/src/com/ibm/wala/util/graph/traverse/DFS.java b/com.ibm.wala.util/src/com/ibm/wala/util/graph/traverse/DFS.java index a48d83aba..4ba5d078d 100644 --- a/com.ibm.wala.util/src/com/ibm/wala/util/graph/traverse/DFS.java +++ b/com.ibm.wala.util/src/com/ibm/wala/util/graph/traverse/DFS.java @@ -41,7 +41,7 @@ public class DFS { * @throws IllegalArgumentException if C is null */ @SuppressWarnings("serial") - public static Collection getReachableNodes(final Graph G, Collection C, @SuppressWarnings("rawtypes") final Predicate filter) { + public static Collection getReachableNodes(final Graph G, Collection C, final Predicate filter) { if (C == null) { throw new IllegalArgumentException("C is null"); } diff --git a/com.ibm.wala.util/src/com/ibm/wala/util/io/RtJar.java b/com.ibm.wala.util/src/com/ibm/wala/util/io/RtJar.java index 43e4b6f30..a4504b6f4 100644 --- a/com.ibm.wala.util/src/com/ibm/wala/util/io/RtJar.java +++ b/com.ibm.wala.util/src/com/ibm/wala/util/io/RtJar.java @@ -35,7 +35,7 @@ public class RtJar { public static void main(String[] args) { @SuppressWarnings("resource") JarFile rt = getRtJar(new MapIterator<>( - new FilterIterator( + new FilterIterator<>( new ArrayIterator<>(System.getProperty("sun.boot.class.path").split(File.pathSeparator)), new Predicate() { @Override From 790d37781b8cabdc7d42be3104dd969e14a407a9 Mon Sep 17 00:00:00 2001 From: Ben Liblit Date: Wed, 22 Nov 2017 19:28:36 -0600 Subject: [PATCH 10/69] Convert many single-method anonymous classes to lambdas Eclipse's automated code clean-up tool did most of the heavy lifting here: it specifically has a clean-up option for converting functional interfaces to lambdas. I merely had to revert the automated changes for a single enumeration class for which it produced invalid results, and for a few test inputs that apparently aren't set up to be compiled with Java 8. --- .../jdt/JDTJava2CAstTranslator.java | 8 +- .../ibm/wala/cast/java/test/JavaIRTests.java | 351 +++++++----------- .../java/client/JavaSourceAnalysisEngine.java | 8 +- ...AstJavaSSAPropagationCallGraphBuilder.java | 12 +- .../cast/java/ipa/slicer/AstJavaSlicer.java | 24 +- .../JavaJavaScriptHybridCallGraphBuilder.java | 52 +-- .../ibm/wala/cast/js/rhino/test/PrintIRs.java | 16 +- .../TestSimplePageCallGraphShapeRhino.java | 8 +- .../com/ibm/wala/cast/js/test/CAstDumper.java | 8 +- .../cast/js/test/TestJavaScriptSlicer.java | 8 +- .../cast/js/test/TestPointerAnalyses.java | 44 +-- .../fieldbased/flowgraph/FlowGraph.java | 53 +-- .../cast/js/html/DefaultSourceExtractor.java | 7 +- .../cast/js/html/DomLessSourceExtractor.java | 7 +- .../com/ibm/wala/cast/js/html/WebUtil.java | 7 +- .../JSSSAPropagationCallGraphBuilder.java | 53 ++- ...aScriptLoopUnwindingTranslatorFactory.java | 11 +- .../ibm/wala/cast/js/util/CallGraph2JSON.java | 34 +- .../com/ibm/wala/cast/js/util/Util.java | 14 +- .../AstSSAPropagationCallGraphBuilder.java | 158 ++++---- .../callgraph/ScopeMappingInstanceKeys.java | 7 +- .../wala/cast/ipa/lexical/LexicalModRef.java | 17 +- .../cast/ir/translator/AstTranslator.java | 36 +- .../wala/cast/loader/CAstAbstractLoader.java | 24 +- .../wala/core/tests/basic/PathFinderTest.java | 6 +- .../tests/callGraph/CHACallGraphTest.java | 7 +- .../core/tests/callGraph/CallGraphTest.java | 14 +- .../tests/callGraph/Java7CallGraphTest.java | 11 +- .../shrike/DynamicCallGraphTestBase.java | 40 +- .../com/ibm/wala/examples/drivers/PDFSDG.java | 56 ++- .../ibm/wala/examples/drivers/PDFSlice.java | 60 ++- .../examples/drivers/PDFTypeHierarchy.java | 6 +- .../analysis/pointers/BasicHeapGraph.java | 7 +- .../wala/analysis/pointers/HeapGraphImpl.java | 6 +- .../reflection/java7/MethodHandles.java | 20 +- .../src/com/ibm/wala/cfg/AbstractCFG.java | 28 +- .../ibm/wala/classLoader/ShrikeCTMethod.java | 21 +- .../com/ibm/wala/classLoader/ShrikeClass.java | 7 +- .../wala/client/AbstractAnalysisEngine.java | 7 +- .../dataflow/IFDS/BackwardsSupergraph.java | 13 +- .../wala/dataflow/IFDS/ICFGSupergraph.java | 6 +- .../wala/dataflow/IFDS/TabulationSolver.java | 188 ++++------ .../alg/DemandRefinementPointsTo.java | 258 ++++--------- .../wala/escape/LocalLiveRangeAnalysis.java | 6 +- .../ibm/wala/ipa/callgraph/AnalysisScope.java | 13 +- .../wala/ipa/callgraph/cha/CHACallGraph.java | 28 +- .../ipa/callgraph/impl/ExplicitCallGraph.java | 24 +- .../ipa/callgraph/impl/PartialCallGraph.java | 19 +- .../com/ibm/wala/ipa/callgraph/impl/Util.java | 50 ++- .../callgraph/propagation/AllocationSite.java | 15 +- .../propagation/ConcreteTypeKey.java | 15 +- .../callgraph/propagation/PointsToMap.java | 7 +- .../propagation/PointsToSetVariable.java | 24 +- .../PropagationCallGraphBuilder.java | 149 ++++---- .../propagation/PropagationGraph.java | 13 +- .../propagation/PropagationSystem.java | 12 +- .../propagation/ReflectionHandler.java | 13 +- .../SSAPropagationCallGraphBuilder.java | 95 ++--- .../SmushedAllocationSiteInNode.java | 15 +- .../propagation/rta/BasicRTABuilder.java | 63 ++-- .../propagation/rta/TypeBasedHeapModel.java | 8 +- .../ipa/cfg/AbstractInterproceduralCFG.java | 41 +- .../src/com/ibm/wala/ipa/cfg/PrunedCFG.java | 43 +-- .../com/ibm/wala/ipa/cha/ClassHierarchy.java | 14 +- .../src/com/ibm/wala/ipa/modref/ModRef.java | 17 +- .../ibm/wala/ipa/slicer/HeapReachingDefs.java | 21 +- .../src/com/ibm/wala/ipa/slicer/PDG.java | 30 +- .../ibm/wala/ipa/slicer/SDGSupergraph.java | 6 +- .../src/com/ibm/wala/ssa/SSACFG.java | 7 +- .../src/com/ibm/wala/util/ProgressMaster.java | 20 +- .../ibm/wala/util/scope/JUnitEntryPoints.java | 14 +- .../src/com/ibm/wala/viz/PDFViewUtil.java | 7 +- .../src/com/ibm/wala/viz/viewer/CgPanel.java | 35 +- .../src/com/ibm/wala/viz/viewer/ChaPanel.java | 25 +- .../wala/viz/viewer/IrAndSourceViewer.java | 50 ++- .../src/com/ibm/wala/viz/viewer/IrViewer.java | 21 +- .../src/com/ibm/wala/viz/viewer/PaPanel.java | 80 ++-- .../dalvik/drivers/APKCallGraphDriver.java | 161 ++++---- .../callGraph/DalvikCallGraphTestBase.java | 28 +- .../test/callGraph/DroidBenchCGTest.java | 23 +- .../DynamicDalvikComparisonTest.java | 9 +- .../com/ibm/wala/dalvik/test/util/Util.java | 20 +- .../dalvik/util/AndroidManifestXMLReader.java | 6 +- .../demandpa/driver/DemandCastChecker.java | 17 +- .../EclipseJavaScriptAnalysisEngine.java | 13 +- .../wala/ide/util/JavaScriptHeadlessUtil.java | 32 +- .../examples/drivers/SWTTypeHierarchy.java | 6 +- .../wala/ide/tests/util/EclipseTestUtil.java | 7 +- .../EclipseProjectSourceAnalysisEngine.java | 8 +- .../com/ibm/wala/ide/ui/SWTTreeViewer.java | 22 +- .../ibm/wala/ide/ui/ViewIFDSLocalAction.java | 6 +- .../com/ibm/wala/ide/util/HeadlessUtil.java | 31 +- .../IFDSTaintFlowFunctionProvider.java | 21 +- .../functions/TaintTransferFunctions.java | 26 +- .../flow/functions/TracingFlowFunction.java | 7 +- .../org/scandroid/util/CGAnalysisContext.java | 99 +++-- .../wala/shrike/copywriter/CopyWriter.java | 7 +- .../shrikeCT/tools/AddSerialVersion.java | 31 +- .../tools/OfflineInstrumenterBase.java | 7 +- .../wala/shrikeCT/TypeAnnotationsReader.java | 28 +- .../dataflow/graph/BitVectorIntersection.java | 8 +- .../impl/DefaultFixedPointSystem.java | 13 +- .../wala/util/collections/IteratorUtil.java | 7 +- .../com/ibm/wala/util/collections/Util.java | 7 +- .../com/ibm/wala/util/graph/GraphSlicer.java | 14 +- .../wala/util/graph/impl/ExtensionGraph.java | 16 +- .../graph/impl/SparseNumberedEdgeManager.java | 37 +- .../util/graph/traverse/BFSPathFinder.java | 18 +- .../graph/traverse/DFSAllPathsFinder.java | 6 +- .../util/graph/traverse/FloydWarshall.java | 31 +- .../wala/util/graph/traverse/Topological.java | 39 +- .../wala/util/graph/traverse/WelshPowell.java | 18 +- .../util/intset/DebuggingMutableIntSet.java | 36 +- .../wala/util/intset/MutableSparseIntSet.java | 11 +- .../src/com/ibm/wala/util/io/FileUtil.java | 7 +- .../src/com/ibm/wala/util/io/RtJar.java | 25 +- 116 files changed, 1249 insertions(+), 2387 deletions(-) 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 c9b7e28d0..cb4aacd7b 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 @@ -42,7 +42,6 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; import java.util.Collections; -import java.util.Comparator; import java.util.Iterator; import java.util.LinkedHashMap; import java.util.LinkedHashSet; @@ -3476,12 +3475,7 @@ public abstract class JDTJava2CAstTranslator { constants.add(var); // constants are unsorted by default - Collections.sort(constants, new Comparator() { - @Override - public int compare(IVariableBinding arg0, IVariableBinding arg1) { - return arg0.getVariableId() - arg1.getVariableId(); - } - }); + Collections.sort(constants, (arg0, arg1) -> arg0.getVariableId() - arg1.getVariableId()); // PART II: create values() memberEntities.add(createEnumValuesMethod(typeBinding, constants, context)); 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 af3d14e80..5ee45393b 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 @@ -82,103 +82,78 @@ public abstract class JavaIRTests extends IRTests { @Test public void testTwoClasses() throws IllegalArgumentException, CancelException, IOException { runTest(singleTestSrc(), rtJar, simpleTestEntryPoint(), Arrays.asList( - new IRAssertion() { + (IRAssertion) cg -> { + final String typeStr = singleInputForTest(); - @Override - public void check(CallGraph cg) { - final String typeStr = singleInputForTest(); + final TypeReference type = findOrCreateTypeReference("Source", typeStr, cg.getClassHierarchy()); - final TypeReference type = findOrCreateTypeReference("Source", typeStr, cg.getClassHierarchy()); + final IClass iClass = cg.getClassHierarchy().lookupClass(type); + Assert.assertNotNull("Could not find class " + typeStr, iClass); - final IClass iClass = cg.getClassHierarchy().lookupClass(type); - Assert.assertNotNull("Could not find class " + typeStr, iClass); + /* + Assert.assertEquals("Expected two classes.", iClass.getClassLoader().getNumberOfClasses(), 2); - /* - Assert.assertEquals("Expected two classes.", iClass.getClassLoader().getNumberOfClasses(), 2); + for (Iterator it = iClass.getClassLoader().iterateAllClasses(); it.hasNext();) { + IClass cls = it.next(); - for (Iterator it = iClass.getClassLoader().iterateAllClasses(); it.hasNext();) { - IClass cls = it.next(); - - Assert.assertTrue("Expected class to be either " + typeStr + " or " + "Bar", cls.getName().getClassName().toString() - .equals(typeStr) - || cls.getName().getClassName().toString().equals("Bar")); - } - */ + Assert.assertTrue("Expected class to be either " + typeStr + " or " + "Bar", cls.getName().getClassName().toString() + .equals(typeStr) + || cls.getName().getClassName().toString().equals("Bar")); } + */ }), true); } @Test public void testInterfaceTest1() throws IllegalArgumentException, CancelException, IOException { runTest(singleTestSrc(), rtJar, simpleTestEntryPoint(), Arrays.asList( - /** - * IFoo is an interface - */ - new IRAssertion() { + cg -> { + final String typeStr = "IFoo"; - @Override - public void check(CallGraph cg) { - final String typeStr = "IFoo"; + final TypeReference type = findOrCreateTypeReference("Source", typeStr, cg.getClassHierarchy()); - final TypeReference type = findOrCreateTypeReference("Source", typeStr, cg.getClassHierarchy()); + final IClass iClass = cg.getClassHierarchy().lookupClass(type); + Assert.assertNotNull("Could not find class " + typeStr, iClass); - final IClass iClass = cg.getClassHierarchy().lookupClass(type); - Assert.assertNotNull("Could not find class " + typeStr, iClass); - - Assert.assertTrue("Expected IFoo to be an interface.", iClass.isInterface()); - } + Assert.assertTrue("Expected IFoo to be an interface.", iClass.isInterface()); }, - /** - * Foo implements IFoo - */ - new IRAssertion() { + cg -> { + final String typeStr = "FooIT1"; - @Override - public void check(CallGraph cg) { - final String typeStr = "FooIT1"; + final TypeReference type = findOrCreateTypeReference("Source", typeStr, cg.getClassHierarchy()); - final TypeReference type = findOrCreateTypeReference("Source", typeStr, cg.getClassHierarchy()); + final IClass iClass = cg.getClassHierarchy().lookupClass(type); + Assert.assertNotNull("Could not find class " + typeStr, iClass); - final IClass iClass = cg.getClassHierarchy().lookupClass(type); - Assert.assertNotNull("Could not find class " + typeStr, iClass); + final Collection interfaces = iClass.getDirectInterfaces(); - final Collection interfaces = iClass.getDirectInterfaces(); + Assert.assertEquals("Expected one single interface.", interfaces.size(), 1); - Assert.assertEquals("Expected one single interface.", interfaces.size(), 1); - - Assert.assertTrue("Expected Foo to implement IFoo", interfaces.contains(cg.getClassHierarchy().lookupClass( - findOrCreateTypeReference("Source", "IFoo", cg.getClassHierarchy())))); - } + Assert.assertTrue("Expected Foo to implement IFoo", interfaces.contains(cg.getClassHierarchy().lookupClass( + findOrCreateTypeReference("Source", "IFoo", cg.getClassHierarchy())))); }), true); } @Test public void testInheritance1() throws IllegalArgumentException, CancelException, IOException { runTest(singleTestSrc(), rtJar, simpleTestEntryPoint(), Arrays.asList( - /** - * 'Derived' extends 'Base' - */ - new IRAssertion() { + (IRAssertion) cg -> { + final String typeStr = "Derived"; - @Override - public void check(CallGraph cg) { - final String typeStr = "Derived"; + final TypeReference type = findOrCreateTypeReference("Source", typeStr, cg.getClassHierarchy()); - final TypeReference type = findOrCreateTypeReference("Source", typeStr, cg.getClassHierarchy()); + final IClass derivedClass = cg.getClassHierarchy().lookupClass(type); + Assert.assertNotNull("Could not find class " + typeStr, derivedClass); - final IClass derivedClass = cg.getClassHierarchy().lookupClass(type); - Assert.assertNotNull("Could not find class " + typeStr, derivedClass); + final TypeReference baseType = findOrCreateTypeReference("Source", "Base", cg.getClassHierarchy()); + final IClass baseClass = cg.getClassHierarchy().lookupClass(baseType); - final TypeReference baseType = findOrCreateTypeReference("Source", "Base", cg.getClassHierarchy()); - final IClass baseClass = cg.getClassHierarchy().lookupClass(baseType); + Assert.assertTrue("Expected 'Base' to be the superclass of 'Derived'", derivedClass.getSuperclass().equals(baseClass)); - Assert.assertTrue("Expected 'Base' to be the superclass of 'Derived'", derivedClass.getSuperclass().equals(baseClass)); + Collection subclasses = cg.getClassHierarchy().computeSubClasses(baseType); - Collection subclasses = cg.getClassHierarchy().computeSubClasses(baseType); - - Assert.assertTrue("Expected subclasses of 'Base' to be 'Base' and 'Derived'.", subclasses.contains(derivedClass) - && subclasses.contains(baseClass)); - } + Assert.assertTrue("Expected subclasses of 'Base' to be 'Base' and 'Derived'.", subclasses.contains(derivedClass) + && subclasses.contains(baseClass)); }), true); } @@ -214,80 +189,62 @@ public abstract class JavaIRTests extends IRTests { @Test public void testArrayLiteral1() throws IllegalArgumentException, CancelException, IOException { runTest(singleTestSrc(), rtJar, simpleTestEntryPoint(), Arrays.asList( - /** - * 'foo' has four array instructions: - 2 SSAArrayLengthInstruction - 1 - * SSAArrayLoadInstruction - 1 SSAArrayStoreInstruction - */ - new IRAssertion() { + (IRAssertion) cg -> { - @Override - public void check(CallGraph cg) { - - MethodReference mref = descriptorToMethodRef("Source#ArrayLiteral1#main#([Ljava/lang/String;)V", cg.getClassHierarchy()); - - CGNode node = cg.getNodes(mref).iterator().next(); - SSAInstruction s = node.getIR().getInstructions()[2]; - Assert.assertTrue("Did not find new array instruction.", s instanceof SSANewInstruction); - Assert.assertTrue("", ((SSANewInstruction) s).getNewSite().getDeclaredType().isArrayType()); - } + MethodReference mref = descriptorToMethodRef("Source#ArrayLiteral1#main#([Ljava/lang/String;)V", cg.getClassHierarchy()); + CGNode node = cg.getNodes(mref).iterator().next(); + SSAInstruction s = node.getIR().getInstructions()[2]; + Assert.assertTrue("Did not find new array instruction.", s instanceof SSANewInstruction); + Assert.assertTrue("", ((SSANewInstruction) s).getNewSite().getDeclaredType().isArrayType()); }), true); } @Test public void testArrayLiteral2() throws IllegalArgumentException, CancelException, IOException { runTest(singleTestSrc(), rtJar, simpleTestEntryPoint(), Arrays.asList( - /** - * int[] y= { 1, 2, 3, 4 } is represented in the IR as four array store - * instructions - */ - new IRAssertion() { + (IRAssertion) cg -> { - @Override - public void check(CallGraph cg) { + MethodReference mref = descriptorToMethodRef("Source#ArrayLiteral2#main#([Ljava/lang/String;)V", cg.getClassHierarchy()); - MethodReference mref = descriptorToMethodRef("Source#ArrayLiteral2#main#([Ljava/lang/String;)V", cg.getClassHierarchy()); + CGNode node = cg.getNodes(mref).iterator().next(); - CGNode node = cg.getNodes(mref).iterator().next(); - - final SSAInstruction[] instructions = node.getIR().getInstructions(); - // test 1 - { - SSAInstruction s1 = instructions[2]; - if (s1 instanceof SSANewInstruction) { - Assert.assertTrue("", ((SSANewInstruction) s1).getNewSite().getDeclaredType().isArrayType()); - } else { - Assert.assertTrue("Expected 3rd to be a new array instruction.", false); - } - } - // test 2 - { - SSAInstruction s2 = instructions[3]; - if (s2 instanceof SSANewInstruction) { - Assert.assertTrue("", ((SSANewInstruction) s2).getNewSite().getDeclaredType().isArrayType()); - } else { - Assert.assertTrue("Expected 4th to be a new array instruction.", false); - } - } - // test 3: the last 4 instructions are of the form y[i] = i+1; - { - final SymbolTable symbolTable = node.getIR().getSymbolTable(); - for (int i = 4; i <= 7; i++) { - Assert.assertTrue("Expected only array stores.", instructions[i] instanceof SSAArrayStoreInstruction); - - SSAArrayStoreInstruction as = (SSAArrayStoreInstruction) instructions[i]; - - Assert.assertEquals("Expected an array store to 'y'.", node.getIR().getLocalNames(i, as.getArrayRef())[0], "y"); - - final Integer valueOfArrayIndex = ((Integer) symbolTable.getConstantValue(as.getIndex())); - final Integer valueAssigned = (Integer) symbolTable.getConstantValue(as.getValue()); - - Assert.assertEquals("Expected an array store to 'y' with value " + (valueOfArrayIndex + 1), valueAssigned.intValue(), - valueOfArrayIndex + 1); - - } + final SSAInstruction[] instructions = node.getIR().getInstructions(); + // test 1 + { + SSAInstruction s1 = instructions[2]; + if (s1 instanceof SSANewInstruction) { + Assert.assertTrue("", ((SSANewInstruction) s1).getNewSite().getDeclaredType().isArrayType()); + } else { + Assert.assertTrue("Expected 3rd to be a new array instruction.", false); } } + // test 2 + { + SSAInstruction s2 = instructions[3]; + if (s2 instanceof SSANewInstruction) { + Assert.assertTrue("", ((SSANewInstruction) s2).getNewSite().getDeclaredType().isArrayType()); + } else { + Assert.assertTrue("Expected 4th to be a new array instruction.", false); + } + } + // test 3: the last 4 instructions are of the form y[i] = i+1; + { + final SymbolTable symbolTable = node.getIR().getSymbolTable(); + for (int i = 4; i <= 7; i++) { + Assert.assertTrue("Expected only array stores.", instructions[i] instanceof SSAArrayStoreInstruction); + SSAArrayStoreInstruction as = (SSAArrayStoreInstruction) instructions[i]; + + Assert.assertEquals("Expected an array store to 'y'.", node.getIR().getLocalNames(i, as.getArrayRef())[0], "y"); + + final Integer valueOfArrayIndex = ((Integer) symbolTable.getConstantValue(as.getIndex())); + final Integer valueAssigned = (Integer) symbolTable.getConstantValue(as.getValue()); + + Assert.assertEquals("Expected an array store to 'y' with value " + (valueOfArrayIndex + 1), valueAssigned.intValue(), + valueOfArrayIndex + 1); + + } + } }), true); } @@ -299,53 +256,41 @@ public abstract class JavaIRTests extends IRTests { @Test public void testQualifiedStatic() throws IllegalArgumentException, CancelException, IOException { runTest(singleTestSrc(), rtJar, simpleTestEntryPoint(), Arrays.asList( - /** - * - */ - new IRAssertion() { + (IRAssertion) cg -> { - @Override - public void check(CallGraph cg) { + MethodReference mref = descriptorToMethodRef("Source#QualifiedStatic#main#([Ljava/lang/String;)V", cg.getClassHierarchy()); - MethodReference mref = descriptorToMethodRef("Source#QualifiedStatic#main#([Ljava/lang/String;)V", cg.getClassHierarchy()); - - CGNode node = cg.getNodes(mref).iterator().next(); - SSAInstruction s = node.getIR().getInstructions()[4]; - - Assert.assertTrue("Did not find a getstatic instruction.", s instanceof SSAGetInstruction - && ((SSAGetInstruction) s).isStatic()); - final FieldReference field = ((SSAGetInstruction) s).getDeclaredField(); - Assert.assertEquals("Expected a getstatic for 'value'.", field.getName().toString(), "value"); - Assert.assertEquals("Expected a getstatic for 'value'.", field.getDeclaringClass().getName().toString(), "LFooQ"); - } + CGNode node = cg.getNodes(mref).iterator().next(); + SSAInstruction s = node.getIR().getInstructions()[4]; + Assert.assertTrue("Did not find a getstatic instruction.", s instanceof SSAGetInstruction + && ((SSAGetInstruction) s).isStatic()); + final FieldReference field = ((SSAGetInstruction) s).getDeclaredField(); + Assert.assertEquals("Expected a getstatic for 'value'.", field.getName().toString(), "value"); + Assert.assertEquals("Expected a getstatic for 'value'.", field.getDeclaringClass().getName().toString(), "LFooQ"); }), true); } @Test public void testStaticNesting() throws IllegalArgumentException, CancelException, IOException { runTest(singleTestSrc(), rtJar, simpleTestEntryPoint(), Arrays.asList( - new IRAssertion() { + (IRAssertion) cg -> { + final String typeStr = singleInputForTest() + "$WhatsIt"; - @Override - public void check(CallGraph cg) { - final String typeStr = singleInputForTest() + "$WhatsIt"; + final TypeReference type = findOrCreateTypeReference("Source", typeStr, cg.getClassHierarchy()); - final TypeReference type = findOrCreateTypeReference("Source", typeStr, cg.getClassHierarchy()); + final IClass iClass = cg.getClassHierarchy().lookupClass(type); + Assert.assertNotNull("Could not find class " + typeStr, iClass); - final IClass iClass = cg.getClassHierarchy().lookupClass(type); - Assert.assertNotNull("Could not find class " + typeStr, iClass); + // todo: this fails: Assert.assertNotNull("Expected to be enclosed in + // 'StaticNesting'.", + // ((JavaSourceLoaderImpl.JavaClass)iClass).getEnclosingClass()); + // todo: is there the concept of CompilationUnit? - // todo: this fails: Assert.assertNotNull("Expected to be enclosed in - // 'StaticNesting'.", - // ((JavaSourceLoaderImpl.JavaClass)iClass).getEnclosingClass()); - // todo: is there the concept of CompilationUnit? - - /** - * {@link JavaCAst2IRTranslator#getEnclosingType} return null for static - * inner classes..? - */ - } + /** + * {@link JavaCAst2IRTranslator#getEnclosingType} return null for static + * inner classes..? + */ }), true); } @@ -356,21 +301,17 @@ public abstract class JavaIRTests extends IRTests { @Test public void testInnerClass() throws IllegalArgumentException, CancelException, IOException { runTest(singleTestSrc(), rtJar, simpleTestEntryPoint(), Arrays.asList( - new IRAssertion() { + (IRAssertion) cg -> { + final String typeStr = singleInputForTest(); - @Override - public void check(CallGraph cg) { - final String typeStr = singleInputForTest(); + final TypeReference type = findOrCreateTypeReference("Source", typeStr + "$WhatsIt", cg.getClassHierarchy()); - final TypeReference type = findOrCreateTypeReference("Source", typeStr + "$WhatsIt", cg.getClassHierarchy()); + final IClass iClass = cg.getClassHierarchy().lookupClass(type); + Assert.assertNotNull("Could not find class " + typeStr, iClass); - final IClass iClass = cg.getClassHierarchy().lookupClass(type); - Assert.assertNotNull("Could not find class " + typeStr, iClass); - - Assert.assertEquals("Expected to be enclosed in 'InnerClass'.", ((JavaSourceLoaderImpl.JavaClass) iClass) - .getEnclosingClass(), // todo is there another way? - cg.getClassHierarchy().lookupClass(findOrCreateTypeReference("Source", typeStr, cg.getClassHierarchy()))); - } + Assert.assertEquals("Expected to be enclosed in 'InnerClass'.", ((JavaSourceLoaderImpl.JavaClass) iClass) + .getEnclosingClass(), // todo is there another way? + cg.getClassHierarchy().lookupClass(findOrCreateTypeReference("Source", typeStr, cg.getClassHierarchy()))); }), true); } @@ -471,61 +412,49 @@ public abstract class JavaIRTests extends IRTests { @Test public void testLocalClass() throws IllegalArgumentException, CancelException, IOException { runTest(singleTestSrc(), rtJar, simpleTestEntryPoint(), Arrays.asList( - new IRAssertion() { + (IRAssertion) cg -> { + final String typeStr = singleInputForTest(); + final String localClassStr = "Foo"; - /** - * Classes local to method are enclosed in the class the methods belong - * to. - */ - @Override - public void check(CallGraph cg) { - final String typeStr = singleInputForTest(); - final String localClassStr = "Foo"; + // Observe the descriptor for a class local to a method. + final TypeReference mainFooType = findOrCreateTypeReference("Source", typeStr + "/main([Ljava/lang/String;)V/" + + localClassStr, cg.getClassHierarchy()); - // Observe the descriptor for a class local to a method. - final TypeReference mainFooType = findOrCreateTypeReference("Source", typeStr + "/main([Ljava/lang/String;)V/" - + localClassStr, cg.getClassHierarchy()); + // Observe the descriptor for a class local to a method. + final IClass mainFooClass = cg.getClassHierarchy().lookupClass(mainFooType); + Assert.assertNotNull("Could not find class " + mainFooType, mainFooClass); - // Observe the descriptor for a class local to a method. - final IClass mainFooClass = cg.getClassHierarchy().lookupClass(mainFooType); - Assert.assertNotNull("Could not find class " + mainFooType, mainFooClass); + final TypeReference methodFooType = findOrCreateTypeReference("Source", typeStr + "/method()V/" + localClassStr, cg + .getClassHierarchy()); - final TypeReference methodFooType = findOrCreateTypeReference("Source", typeStr + "/method()V/" + localClassStr, cg - .getClassHierarchy()); + final IClass methodFooClass = cg.getClassHierarchy().lookupClass(methodFooType); + Assert.assertNotNull("Could not find class " + methodFooType, methodFooClass); - final IClass methodFooClass = cg.getClassHierarchy().lookupClass(methodFooType); - Assert.assertNotNull("Could not find class " + methodFooType, methodFooClass); + final IClass localClass = cg.getClassHierarchy().lookupClass( + findOrCreateTypeReference("Source", typeStr, cg.getClassHierarchy())); - final IClass localClass = cg.getClassHierarchy().lookupClass( - findOrCreateTypeReference("Source", typeStr, cg.getClassHierarchy())); - - Assert.assertSame("'Foo' is enclosed in 'Local'", ((JavaSourceLoaderImpl.JavaClass) methodFooClass).getEnclosingClass(), - localClass); - // todo: is this failing because 'main' is static? - // Assert.assertSame("'Foo' is enclosed in 'Local'", - // ((JavaSourceLoaderImpl.JavaClass)mainFooClass).getEnclosingClass(), - // localClass); - } + Assert.assertSame("'Foo' is enclosed in 'Local'", ((JavaSourceLoaderImpl.JavaClass) methodFooClass).getEnclosingClass(), + localClass); + // todo: is this failing because 'main' is static? + // Assert.assertSame("'Foo' is enclosed in 'Local'", + // ((JavaSourceLoaderImpl.JavaClass)mainFooClass).getEnclosingClass(), + // localClass); }), true); } @Test public void testAnonymousClass() throws IllegalArgumentException, CancelException, IOException { runTest(singleTestSrc(), rtJar, simpleTestEntryPoint(), Arrays.asList( - new IRAssertion() { + (IRAssertion) cg -> { + final String typeStr = singleInputForTest(); - @Override - public void check(CallGraph cg) { - final String typeStr = singleInputForTest(); + final TypeReference type = findOrCreateTypeReference("Source", typeStr, cg.getClassHierarchy()); - final TypeReference type = findOrCreateTypeReference("Source", typeStr, cg.getClassHierarchy()); + final IClass iClass = cg.getClassHierarchy().lookupClass(type); + Assert.assertNotNull("Could not find class " + typeStr, iClass); - final IClass iClass = cg.getClassHierarchy().lookupClass(type); - Assert.assertNotNull("Could not find class " + typeStr, iClass); - - // todo what to check?? could not find anything in the APIs for - // anonymous - } + // todo what to check?? could not find anything in the APIs for + // anonymous }), true); } 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 443b0f506..8f8d17615 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 @@ -34,7 +34,6 @@ import com.ibm.wala.ipa.cha.ClassHierarchyException; import com.ibm.wala.ipa.cha.ClassHierarchyFactory; import com.ibm.wala.ipa.cha.IClassHierarchy; import com.ibm.wala.ssa.SSAOptions; -import com.ibm.wala.ssa.SymbolTable; import com.ibm.wala.types.ClassLoaderReference; import com.ibm.wala.util.collections.HashSetFactory; import com.ibm.wala.util.config.FileOfClasses; @@ -159,12 +158,7 @@ public abstract class JavaSourceAnalysisEngine extends Ab AnalysisOptions options = new AnalysisOptions(getScope(), entrypoints); SSAOptions ssaOptions = new SSAOptions(); - ssaOptions.setDefaultValues(new SSAOptions.DefaultValues() { - @Override - public int getDefaultValue(SymbolTable symtab, int valueNumber) { - return symtab.getDefaultValue(valueNumber); - } - }); + ssaOptions.setDefaultValues((symtab, valueNumber) -> symtab.getDefaultValue(valueNumber)); options.setSSAOptions(ssaOptions); diff --git a/com.ibm.wala.cast.java/src/com/ibm/wala/cast/java/ipa/callgraph/AstJavaSSAPropagationCallGraphBuilder.java b/com.ibm.wala.cast.java/src/com/ibm/wala/cast/java/ipa/callgraph/AstJavaSSAPropagationCallGraphBuilder.java index d7e86f064..2e3112c6e 100644 --- a/com.ibm.wala.cast.java/src/com/ibm/wala/cast/java/ipa/callgraph/AstJavaSSAPropagationCallGraphBuilder.java +++ b/com.ibm.wala.cast.java/src/com/ibm/wala/cast/java/ipa/callgraph/AstJavaSSAPropagationCallGraphBuilder.java @@ -37,7 +37,6 @@ import com.ibm.wala.ssa.SSANewInstruction; import com.ibm.wala.ssa.SymbolTable; import com.ibm.wala.types.MethodReference; import com.ibm.wala.util.debug.Assertions; -import com.ibm.wala.util.intset.IntSetAction; import com.ibm.wala.util.strings.Atom; public class AstJavaSSAPropagationCallGraphBuilder extends AstSSAPropagationCallGraphBuilder { @@ -184,13 +183,10 @@ public class AstJavaSSAPropagationCallGraphBuilder extends AstSSAPropagationCall public byte evaluate(PointsToSetVariable lhs, PointsToSetVariable rhs) { IntSetVariable tv = rhs; if (tv.getValue() != null) { - tv.getValue().foreach(new IntSetAction() { - @Override - public void act(int ptr) { - InstanceKey iKey = system.getInstanceKey(ptr); - PointerKey enclosing = new EnclosingObjectReferenceKey(iKey, cls); - system.newConstraint(lvalKey, assignOperator, enclosing); - } + tv.getValue().foreach(ptr -> { + InstanceKey iKey = system.getInstanceKey(ptr); + PointerKey enclosing = new EnclosingObjectReferenceKey(iKey, cls); + system.newConstraint(lvalKey, assignOperator, enclosing); }); } return NOT_CHANGED; 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 04d7476fd..6540bd6a4 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 @@ -76,35 +76,19 @@ public class AstJavaSlicer extends Slicer { } public static Set gatherAssertions(CallGraph CG, Collection partialRoots) { - return gatherStatements(CG, partialRoots, new Predicate() { - @Override public boolean test(SSAInstruction o) { - return o instanceof AstAssertInstruction; - } - }); + return gatherStatements(CG, partialRoots, o -> o instanceof AstAssertInstruction); } public static Set gatherMonitors(CallGraph CG, Collection partialRoots) { - return gatherStatements(CG, partialRoots, new Predicate() { - @Override public boolean test(SSAInstruction o) { - return o instanceof SSAMonitorInstruction; - } - }); + return gatherStatements(CG, partialRoots, o -> o instanceof SSAMonitorInstruction); } public static Set gatherWrites(CallGraph CG, Collection partialRoots) { - return gatherStatements(CG, partialRoots, new Predicate() { - @Override public boolean test(SSAInstruction o) { - return (o instanceof SSAPutInstruction) || (o instanceof SSAArrayStoreInstruction); - } - }); + return gatherStatements(CG, partialRoots, o -> (o instanceof SSAPutInstruction) || (o instanceof SSAArrayStoreInstruction)); } public static Set gatherReads(CallGraph CG, Collection partialRoots) { - return gatherStatements(CG, partialRoots, new Predicate() { - @Override public boolean test(SSAInstruction o) { - return (o instanceof SSAGetInstruction) || (o instanceof SSAArrayLoadInstruction); - } - }); + return gatherStatements(CG, partialRoots, o -> (o instanceof SSAGetInstruction) || (o instanceof SSAArrayLoadInstruction)); } public static Pair, SDG> computeAssertionSlice(CallGraph CG, PointerAnalysis pa, diff --git a/com.ibm.wala.cast.js.rhino.test/harness-src/com/ibm/wala/cast/js/examples/hybrid/JavaJavaScriptHybridCallGraphBuilder.java b/com.ibm.wala.cast.js.rhino.test/harness-src/com/ibm/wala/cast/js/examples/hybrid/JavaJavaScriptHybridCallGraphBuilder.java index 4c2b97cf1..300270a40 100644 --- a/com.ibm.wala.cast.js.rhino.test/harness-src/com/ibm/wala/cast/js/examples/hybrid/JavaJavaScriptHybridCallGraphBuilder.java +++ b/com.ibm.wala.cast.js.rhino.test/harness-src/com/ibm/wala/cast/js/examples/hybrid/JavaJavaScriptHybridCallGraphBuilder.java @@ -78,28 +78,22 @@ public class JavaJavaScriptHybridCallGraphBuilder extends CrossLanguageSSAPropag @Override protected TargetLanguageSelector makeMainVisitorSelector() { - return new TargetLanguageSelector() { - @Override - public ConstraintVisitor get(Atom language, CGNode construct) { - if (JavaScriptTypes.jsName.equals(language)) { - return new JSConstraintVisitor(JavaJavaScriptHybridCallGraphBuilder.this, construct); - } else { - return new ConstraintVisitor(JavaJavaScriptHybridCallGraphBuilder.this, construct); - } + return (language, construct) -> { + if (JavaScriptTypes.jsName.equals(language)) { + return new JSConstraintVisitor(JavaJavaScriptHybridCallGraphBuilder.this, construct); + } else { + return new ConstraintVisitor(JavaJavaScriptHybridCallGraphBuilder.this, construct); } }; } @Override protected TargetLanguageSelector makeInterestingVisitorSelector() { - return new TargetLanguageSelector() { - @Override - public InterestingVisitor get(Atom language, Integer construct) { - if (JavaScriptTypes.jsName.equals(language)) { - return new JSInterestingVisitor(construct); - } else { - return new InterestingVisitor(construct); - } + return (language, construct) -> { + if (JavaScriptTypes.jsName.equals(language)) { + return new JSInterestingVisitor(construct); + } else { + return new InterestingVisitor(construct); } }; } @@ -107,28 +101,22 @@ public class JavaJavaScriptHybridCallGraphBuilder extends CrossLanguageSSAPropag @Override protected TargetLanguageSelector makeImplicitVisitorSelector( CrossLanguagePointerAnalysisImpl analysis) { - return new TargetLanguageSelector() { - @Override - public AstImplicitPointsToSetVisitor get(Atom language, LocalPointerKey construct) { - if (JavaScriptTypes.jsName.equals(language)) { - return new JSImplicitPointsToSetVisitor((AstPointerAnalysisImpl) getPointerAnalysis(), construct); - } else { - return new AstImplicitPointsToSetVisitor((AstPointerAnalysisImpl) getPointerAnalysis(), construct); - } + return (language, construct) -> { + if (JavaScriptTypes.jsName.equals(language)) { + return new JSImplicitPointsToSetVisitor((AstPointerAnalysisImpl) getPointerAnalysis(), construct); + } else { + return new AstImplicitPointsToSetVisitor((AstPointerAnalysisImpl) getPointerAnalysis(), construct); } }; } @Override protected TargetLanguageSelector makeRootNodeSelector() { - return new TargetLanguageSelector() { - @Override - public AbstractRootMethod get(Atom language, CrossLanguageCallGraph construct) { - if (JavaScriptTypes.jsName.equals(language)) { - return new JSFakeRoot(getClassHierarchy(), getOptions(), getAnalysisCache()); - } else { - return new FakeRootMethod(getClassHierarchy(), getOptions(), getAnalysisCache()); - } + return (language, construct) -> { + if (JavaScriptTypes.jsName.equals(language)) { + return new JSFakeRoot(getClassHierarchy(), getOptions(), getAnalysisCache()); + } else { + return new FakeRootMethod(getClassHierarchy(), getOptions(), getAnalysisCache()); } }; } diff --git a/com.ibm.wala.cast.js.rhino.test/harness-src/com/ibm/wala/cast/js/rhino/test/PrintIRs.java b/com.ibm.wala.cast.js.rhino.test/harness-src/com/ibm/wala/cast/js/rhino/test/PrintIRs.java index b048d6023..4827a8c93 100644 --- a/com.ibm.wala.cast.js.rhino.test/harness-src/com/ibm/wala/cast/js/rhino/test/PrintIRs.java +++ b/com.ibm.wala.cast.js.rhino.test/harness-src/com/ibm/wala/cast/js/rhino/test/PrintIRs.java @@ -58,13 +58,7 @@ public class PrintIRs { JSCallGraphUtil.setTranslatorFactory(new CAstRhinoTranslatorFactory()); // build a class hierarchy, for access to code info IClassHierarchy cha = JSCallGraphUtil.makeHierarchyForScripts(filename); - printIRsForCHA(cha, new Predicate() { - - @Override - public boolean test(String t) { - return t.startsWith("Lprologue.js"); - } - }); + printIRsForCHA(cha, t -> t.startsWith("Lprologue.js")); } protected static void printIRsForCHA(IClassHierarchy cha, Predicate exclude) { @@ -101,13 +95,7 @@ public class PrintIRs { CAstAnalysisScope scope = new CAstAnalysisScope(scripts, loaders, Collections.singleton(JavaScriptLoader.JS)); IClassHierarchy cha = ClassHierarchyFactory.make(scope, loaders, JavaScriptLoader.JS); com.ibm.wala.cast.util.Util.checkForFrontEndErrors(cha); - printIRsForCHA(cha, new Predicate() { - - @Override - public boolean test(String t) { - return t.startsWith("Lprologue.js") || t.startsWith("Lpreamble.js"); - } - }); + printIRsForCHA(cha, t -> t.startsWith("Lprologue.js") || t.startsWith("Lpreamble.js")); } /** diff --git a/com.ibm.wala.cast.js.rhino.test/harness-src/com/ibm/wala/cast/js/test/TestSimplePageCallGraphShapeRhino.java b/com.ibm.wala.cast.js.rhino.test/harness-src/com/ibm/wala/cast/js/test/TestSimplePageCallGraphShapeRhino.java index cea6a524f..38c0a6e38 100644 --- a/com.ibm.wala.cast.js.rhino.test/harness-src/com/ibm/wala/cast/js/test/TestSimplePageCallGraphShapeRhino.java +++ b/com.ibm.wala.cast.js.rhino.test/harness-src/com/ibm/wala/cast/js/test/TestSimplePageCallGraphShapeRhino.java @@ -17,7 +17,6 @@ import org.junit.Test; import com.ibm.wala.cast.js.html.DefaultSourceExtractor; import com.ibm.wala.cast.js.html.IHtmlParser; -import com.ibm.wala.cast.js.html.IHtmlParserFactory; import com.ibm.wala.cast.js.html.JSSourceExtractor; import com.ibm.wala.cast.js.html.WebUtil; import com.ibm.wala.cast.js.ipa.callgraph.JSCFABuilder; @@ -58,12 +57,7 @@ public abstract class TestSimplePageCallGraphShapeRhino extends TestSimplePageCa @Before public void setUp() { com.ibm.wala.cast.js.ipa.callgraph.JSCallGraphUtil.setTranslatorFactory(new CAstRhinoTranslatorFactory()); - WebUtil.setFactory(new IHtmlParserFactory() { - @Override - public IHtmlParser getParser() { - return TestSimplePageCallGraphShapeRhino.this.getParser(); - } - }); + WebUtil.setFactory(() -> TestSimplePageCallGraphShapeRhino.this.getParser()); JSSourceExtractor.USE_TEMP_NAME = false; // JSSourceExtractor.DELETE_UPON_EXIT = false; } diff --git a/com.ibm.wala.cast.js.test/harness-src/com/ibm/wala/cast/js/test/CAstDumper.java b/com.ibm.wala.cast.js.test/harness-src/com/ibm/wala/cast/js/test/CAstDumper.java index ee54516cb..cc7266252 100644 --- a/com.ibm.wala.cast.js.test/harness-src/com/ibm/wala/cast/js/test/CAstDumper.java +++ b/com.ibm.wala.cast.js.test/harness-src/com/ibm/wala/cast/js/test/CAstDumper.java @@ -19,7 +19,6 @@ import static com.ibm.wala.cast.tree.CAstNode.EMPTY; import java.util.ArrayList; import java.util.Collection; import java.util.Collections; -import java.util.Comparator; import java.util.Map; import java.util.Map.Entry; @@ -99,12 +98,7 @@ public class CAstDumper { scopedEntities.add(scopedEntity); m.put(scopedEntity, e.getKey()); } - Collections.sort(scopedEntities, new Comparator() { - @Override - public int compare(CAstEntity o1, CAstEntity o2) { - return o1.getName().compareTo(o2.getName()); - } - }); + Collections.sort(scopedEntities, (o1, o2) -> o1.getName().compareTo(o2.getName())); buf.append(indent(indent) + "> "); boolean first = true; 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 531be9486..1767eec3d 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 @@ -33,7 +33,6 @@ import com.ibm.wala.ipa.slicer.Statement; import com.ibm.wala.util.CancelException; import com.ibm.wala.util.WalaException; import com.ibm.wala.util.collections.HashSetFactory; -import com.ibm.wala.util.intset.IntSetAction; public abstract class TestJavaScriptSlicer extends TestJSCallGraphShape { @@ -89,12 +88,7 @@ public abstract class TestJavaScriptSlicer extends TestJSCallGraphShape { for(Iterator callers = CG.getPredNodes(n); callers.hasNext(); ) { final CGNode caller = callers.next(); for(Iterator sites = CG.getPossibleSites(caller, n); sites.hasNext(); ) { - caller.getIR().getCallInstructionIndices(sites.next()).foreach(new IntSetAction() { - @Override - public void act(int x) { - ss.add(new NormalStatement(caller, x)); - } - }); + caller.getIR().getCallInstructionIndices(sites.next()).foreach(x -> ss.add(new NormalStatement(caller, x))); } } } diff --git a/com.ibm.wala.cast.js.test/harness-src/com/ibm/wala/cast/js/test/TestPointerAnalyses.java b/com.ibm.wala.cast.js.test/harness-src/com/ibm/wala/cast/js/test/TestPointerAnalyses.java index d189b9b1a..d2ec12ea8 100644 --- a/com.ibm.wala.cast.js.test/harness-src/com/ibm/wala/cast/js/test/TestPointerAnalyses.java +++ b/com.ibm.wala.cast.js.test/harness-src/com/ibm/wala/cast/js/test/TestPointerAnalyses.java @@ -333,23 +333,15 @@ public abstract class TestPointerAnalyses { CallGraph CG, CGNode node, int vn) { - return getPrototypeSites(fbPA, CG, new Function>() { - @Override - public Iterator apply(ObjectVertex o) { - PrototypeFieldVertex proto = new PrototypeFieldVertex(PrototypeField.__proto__, o); - if (hg.containsNode(proto)) { - return - new MapIterator<>(hg.getSuccNodes(proto), - new Function() { - @Override - public ObjectVertex apply(Object object) { - return (ObjectVertex)object; - } - }); - } else { - return EmptyIterator.instance(); - } - } + return getPrototypeSites(fbPA, CG, o -> { + PrototypeFieldVertex proto = new PrototypeFieldVertex(PrototypeField.__proto__, o); + if (hg.containsNode(proto)) { + return + new MapIterator<>(hg.getSuccNodes(proto), + object -> (ObjectVertex)object); + } else { + return EmptyIterator.instance(); + } }, node, vn); } @@ -357,12 +349,7 @@ public abstract class TestPointerAnalyses { CallGraph CG, CGNode node, int vn) { - return getPrototypeSites(fbPA, CG, new Function>() { - @Override - public Iterator apply(InstanceKey o) { - return fbPA.getPointsToSet(new TransitivePrototypeKey(o)).iterator(); - } - }, node, vn); + return getPrototypeSites(fbPA, CG, o -> fbPA.getPointsToSet(new TransitivePrototypeKey(o)).iterator(), node, vn); } private void testPageUserCodeEquivalent(URL page) throws WalaException, CancelException { @@ -371,13 +358,10 @@ public abstract class TestPointerAnalyses { } protected Predicate nameFilter(final String name) { - return new Predicate() { - @Override - public boolean test(MethodReference t) { - System.err.println(t + " " + name); - return t.getSelector().equals(AstMethodReference.fnSelector) && - t.getDeclaringClass().getName().toString().startsWith("L" + name); - } + return t -> { + System.err.println(t + " " + name); + return t.getSelector().equals(AstMethodReference.fnSelector) && + t.getDeclaringClass().getName().toString().startsWith("L" + name); }; } diff --git a/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/callgraph/fieldbased/flowgraph/FlowGraph.java b/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/callgraph/fieldbased/flowgraph/FlowGraph.java index 8c8fc6d7b..3b8d1cc72 100644 --- a/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/callgraph/fieldbased/flowgraph/FlowGraph.java +++ b/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/callgraph/fieldbased/flowgraph/FlowGraph.java @@ -14,7 +14,6 @@ import java.util.Collection; import java.util.Iterator; import java.util.Map; import java.util.Set; -import java.util.function.Predicate; import com.ibm.wala.analysis.pointers.HeapGraph; import com.ibm.wala.cast.ipa.callgraph.AstHeapModel; @@ -106,32 +105,23 @@ public class FlowGraph implements Iterable { private static GraphReachability computeClosure(NumberedGraph graph, IProgressMonitor monitor, final Class type) throws CancelException { // prune flowgraph by taking out 'unknown' vertex - Graph pruned_flowgraph = GraphSlicer.prune(graph, new Predicate() { - @Override - public boolean test(Vertex t) { - return t.accept(new AbstractVertexVisitor() { - @Override - public Boolean visitVertex() { - return true; - } - - @Override - public Boolean visitUnknownVertex(UnknownVertex unknownVertex) { - return false; - } - }); - } - }); + Graph pruned_flowgraph = GraphSlicer.prune(graph, t -> t.accept(new AbstractVertexVisitor() { + @Override + public Boolean visitVertex() { + return true; + } + + @Override + public Boolean visitUnknownVertex(UnknownVertex unknownVertex) { + return false; + } + })); // compute transitive closure GraphReachability optimistic_closure = new GraphReachability<>( new InvertedGraph<>(pruned_flowgraph), - new Predicate() { - @Override public boolean test(Vertex o) { - return type.isInstance(o); - } - } + o -> type.isInstance(o) ); optimistic_closure.solve(monitor); @@ -285,15 +275,10 @@ public class FlowGraph implements Iterable { @Override public Iterable getPointerKeys() { - return new Iterable () { - @Override - public Iterator iterator() { - return new CompoundIterator<>(factory.getArgVertices().iterator(), - new CompoundIterator<>(factory.getRetVertices().iterator(), - new CompoundIterator(factory.getVarVertices().iterator(), - factory.getPropVertices().iterator()))); - } - }; + return () -> new CompoundIterator<>(factory.getArgVertices().iterator(), + new CompoundIterator<>(factory.getRetVertices().iterator(), + new CompoundIterator(factory.getVarVertices().iterator(), + factory.getPropVertices().iterator()))); } @Override @@ -548,11 +533,7 @@ public class FlowGraph implements Iterable { @Override public Collection getReachableInstances(Set roots) { - return DFS.getReachableNodes(this, roots, new Predicate() { - @Override public boolean test(Object o) { - return o instanceof ObjectVertex; - } - }); + return DFS.getReachableNodes(this, roots, o -> o instanceof ObjectVertex); } @Override diff --git a/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/html/DefaultSourceExtractor.java b/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/html/DefaultSourceExtractor.java index e757cc5a8..45597d341 100644 --- a/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/html/DefaultSourceExtractor.java +++ b/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/html/DefaultSourceExtractor.java @@ -27,12 +27,7 @@ import com.ibm.wala.util.collections.Pair; public class DefaultSourceExtractor extends DomLessSourceExtractor{ - public static Supplier factory = new Supplier() { - @Override - public JSSourceExtractor get() { - return new DefaultSourceExtractor(); - } - }; + public static Supplier factory = () -> new DefaultSourceExtractor(); protected static class HtmlCallBack extends DomLessSourceExtractor.HtmlCallback{ diff --git a/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/html/DomLessSourceExtractor.java b/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/html/DomLessSourceExtractor.java index a3fc33d57..57c1e7759 100644 --- a/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/html/DomLessSourceExtractor.java +++ b/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/html/DomLessSourceExtractor.java @@ -42,12 +42,7 @@ public class DomLessSourceExtractor extends JSSourceExtractor { private static final Pattern LEGAL_JS_IDENTIFIER_REGEXP = Pattern.compile("^[a-zA-Z$_][a-zA-Z\\d$_]*$"); private static final Pattern LEGAL_JS_KEYWORD_REGEXP = Pattern.compile("^((break)|(case)|(catch)|(continue)|(debugger)|(default)|(delete)|(do)|(else)|(finally)|(for)|(function)|(if)|(in)|(instanceof)|(new)|(return)|(switch)|(this)|(throw)|(try)|(typeof)|(var)|(void)|(while)|(with))$"); - public static Supplier factory = new Supplier() { - @Override - public JSSourceExtractor get() { - return new DomLessSourceExtractor(); - } - }; + public static Supplier factory = () -> new DomLessSourceExtractor(); protected interface IGeneratorCallback extends IHtmlCallback { void writeToFinalRegion(SourceRegion finalRegion); diff --git a/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/html/WebUtil.java b/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/html/WebUtil.java index 978c46d6b..6bb7fb656 100644 --- a/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/html/WebUtil.java +++ b/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/html/WebUtil.java @@ -28,12 +28,7 @@ public class WebUtil { public static final String preamble = "preamble.js"; - private static IHtmlParserFactory factory = new IHtmlParserFactory() { - @Override - public IHtmlParser getParser() { - return new JerichoHtmlParser(); - } - }; + private static IHtmlParserFactory factory = () -> new JerichoHtmlParser(); public static void setFactory(IHtmlParserFactory factory) { WebUtil.factory = factory; diff --git a/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/ipa/callgraph/JSSSAPropagationCallGraphBuilder.java b/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/ipa/callgraph/JSSSAPropagationCallGraphBuilder.java index 1503a29ba..eed9737f5 100755 --- a/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/ipa/callgraph/JSSSAPropagationCallGraphBuilder.java +++ b/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/ipa/callgraph/JSSSAPropagationCallGraphBuilder.java @@ -601,23 +601,20 @@ public class JSSSAPropagationCallGraphBuilder extends AstSSAPropagationCallGraph @Override public byte evaluate(PointsToSetVariable lhs, PointsToSetVariable ptrs) { if (ptrs.getValue() != null) { - ptrs.getValue().foreachExcluding(previous, new IntSetAction() { - @Override - public void act(int x) { - final InstanceKey functionObj = system.getInstanceKey(x); - visitInvokeInternal(instruction, new DefaultInvariantComputer() { - @Override - public InstanceKey[][] computeInvariantParameters(SSAAbstractInvokeInstruction call) { - InstanceKey[][] x = super.computeInvariantParameters(call); - if (x == null) { - x = new InstanceKey[call.getNumberOfUses()][]; - } - x[0] = new InstanceKey[]{ functionObj }; - x[1] = new InstanceKey[]{ receiverType }; - return x; + ptrs.getValue().foreachExcluding(previous, x -> { + final InstanceKey functionObj = system.getInstanceKey(x); + visitInvokeInternal(instruction, new DefaultInvariantComputer() { + @Override + public InstanceKey[][] computeInvariantParameters(SSAAbstractInvokeInstruction call) { + InstanceKey[][] x = super.computeInvariantParameters(call); + if (x == null) { + x = new InstanceKey[call.getNumberOfUses()][]; } - }); - } + x[0] = new InstanceKey[]{ functionObj }; + x[1] = new InstanceKey[]{ receiverType }; + return x; + } + }); }); previous.addAll(ptrs.getValue()); } @@ -682,17 +679,14 @@ public class JSSSAPropagationCallGraphBuilder extends AstSSAPropagationCallGraph @Override public byte evaluate(PointsToSetVariable lhs, PointsToSetVariable rhs) { if (rhs.getValue() != null) { - rhs.getValue().foreachExcluding(previous, new IntSetAction() { - @Override - public void act(int x) { - try { - MonitorUtil.throwExceptionIfCanceled(getBuilder().monitor); - } catch (CancelException e) { - throw new CancelRuntimeException(e); - } - InstanceKey ik = system.getInstanceKey(x); - handleJavascriptDispatch(instruction, ik); + rhs.getValue().foreachExcluding(previous, x -> { + try { + MonitorUtil.throwExceptionIfCanceled(getBuilder().monitor); + } catch (CancelException e) { + throw new CancelRuntimeException(e); } + InstanceKey ik = system.getInstanceKey(x); + handleJavascriptDispatch(instruction, ik); }); previous.addAll(rhs.getValue()); } @@ -775,12 +769,7 @@ public class JSSSAPropagationCallGraphBuilder extends AstSSAPropagationCallGraph return new InstanceKey[0]; } else { final Set temp = HashSetFactory.make(); - v.getValue().foreach(new IntSetAction() { - @Override - public void act(int keyIndex) { - temp.add(system.getInstanceKey(keyIndex)); - } - }); + v.getValue().foreach(keyIndex -> temp.add(system.getInstanceKey(keyIndex))); return temp.toArray(new InstanceKey[temp.size()]); } diff --git a/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/translator/JavaScriptLoopUnwindingTranslatorFactory.java b/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/translator/JavaScriptLoopUnwindingTranslatorFactory.java index ddecc21d8..0a1146be9 100644 --- a/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/translator/JavaScriptLoopUnwindingTranslatorFactory.java +++ b/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/translator/JavaScriptLoopUnwindingTranslatorFactory.java @@ -13,10 +13,6 @@ package com.ibm.wala.cast.js.translator; import com.ibm.wala.cast.ir.translator.TranslatorToCAst; import com.ibm.wala.cast.tree.CAst; import com.ibm.wala.cast.tree.rewrite.AstLoopUnwinder; -import com.ibm.wala.cast.tree.rewrite.AstLoopUnwinder.UnwindKey; -import com.ibm.wala.cast.tree.rewrite.CAstRewriter; -import com.ibm.wala.cast.tree.rewrite.CAstRewriter.RewriteContext; -import com.ibm.wala.cast.tree.rewrite.CAstRewriterFactory; import com.ibm.wala.classLoader.ModuleEntry; import com.ibm.wala.classLoader.SourceFileModule; import com.ibm.wala.classLoader.SourceModule; @@ -46,12 +42,7 @@ public abstract class JavaScriptLoopUnwindingTranslatorFactory } TranslatorToCAst xlator = translateInternal(ast, (SourceModule)M, N); - xlator.addRewriter(new CAstRewriterFactory,AstLoopUnwinder.UnwindKey>() { - @Override - public CAstRewriter, UnwindKey> createCAstRewriter(CAst ast) { - return new AstLoopUnwinder(ast, true, unwindFactor); - } - }, false); + xlator.addRewriter(ast1 -> new AstLoopUnwinder(ast1, true, unwindFactor), false); return xlator; } diff --git a/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/util/CallGraph2JSON.java b/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/util/CallGraph2JSON.java index 6d851fec3..59c67e2cc 100644 --- a/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/util/CallGraph2JSON.java +++ b/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/util/CallGraph2JSON.java @@ -13,7 +13,6 @@ import java.util.ArrayList; import java.util.Iterator; import java.util.Map; import java.util.Set; -import java.util.function.Function; import com.ibm.wala.cast.js.loader.JavaScriptLoader; import com.ibm.wala.cast.js.types.JavaScriptMethods; @@ -75,12 +74,7 @@ public class CallGraph2JSON { for(Iterator iter = nd.iterateCallSites(); iter.hasNext();) { CallSiteReference callsite = iter.next(); - Set targets = Util.mapToSet(cg.getPossibleTargets(nd, callsite), new Function() { - @Override - public IMethod apply(CGNode nd) { - return nd.getMethod(); - } - }); + Set targets = Util.mapToSet(cg.getPossibleTargets(nd, callsite), nd1 -> nd1.getMethod()); serializeCallSite(method, callsite, targets, edges); } } @@ -137,23 +131,15 @@ public class CallGraph2JSON { public static String toJSON(Map> map) { StringBuffer res = new StringBuffer(); res.append("{\n"); - res.append(joinWith(Util.mapToSet(map.entrySet(), new Function>, String>() { - @Override - public String apply(Map.Entry> e) { - StringBuffer res = new StringBuffer(); - if(e.getValue().size() > 0) { - res.append(" \"" + e.getKey() + "\": [\n"); - res.append(joinWith(Util.mapToSet(e.getValue(), new Function() { - @Override - public String apply(String str) { - return " \"" + str + "\""; - } - }), ",\n")); - res.append("\n ]"); - } - return res.length() == 0 ? null : res.toString(); - } - }), ",\n")); + res.append(joinWith(Util.mapToSet(map.entrySet(), e -> { + StringBuffer res1 = new StringBuffer(); + if(e.getValue().size() > 0) { + res1.append(" \"" + e.getKey() + "\": [\n"); + res1.append(joinWith(Util.mapToSet(e.getValue(), str -> " \"" + str + "\""), ",\n")); + res1.append("\n ]"); + } + return res1.length() == 0 ? null : res1.toString(); + }), ",\n")); res.append("\n}"); return res.toString(); } diff --git a/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/util/Util.java b/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/util/Util.java index 5b8ffd4a9..5190edd9b 100644 --- a/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/util/Util.java +++ b/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/util/Util.java @@ -18,7 +18,6 @@ import com.ibm.wala.ssa.IR; import com.ibm.wala.ssa.SSAInstruction; import com.ibm.wala.ssa.SSAPhiInstruction; import com.ibm.wala.util.intset.IntSet; -import com.ibm.wala.util.intset.IntSetAction; import com.ibm.wala.util.intset.IntSetUtil; import com.ibm.wala.util.intset.MutableIntSet; @@ -35,14 +34,11 @@ public class Util { int size; do { size = result.size(); - result.foreach(new IntSetAction() { - @Override - public void act(int vn) { - for(Iterator insts = du.getUses(vn); insts.hasNext(); ) { - SSAInstruction inst = insts.next(); - if (inst instanceof PrototypeLookup || inst instanceof SSAPhiInstruction) { - result.add(inst.getDef()); - } + result.foreach(vn -> { + for(Iterator insts = du.getUses(vn); insts.hasNext(); ) { + SSAInstruction inst = insts.next(); + if (inst instanceof PrototypeLookup || inst instanceof SSAPhiInstruction) { + result.add(inst.getDef()); } } }); diff --git a/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ipa/callgraph/AstSSAPropagationCallGraphBuilder.java b/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ipa/callgraph/AstSSAPropagationCallGraphBuilder.java index e2d98976c..84eaf0f51 100644 --- a/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ipa/callgraph/AstSSAPropagationCallGraphBuilder.java +++ b/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ipa/callgraph/AstSSAPropagationCallGraphBuilder.java @@ -69,7 +69,6 @@ import com.ibm.wala.util.collections.HashSetFactory; import com.ibm.wala.util.collections.Pair; import com.ibm.wala.util.debug.Assertions; import com.ibm.wala.util.intset.IntSet; -import com.ibm.wala.util.intset.IntSetAction; import com.ibm.wala.util.intset.IntSetUtil; import com.ibm.wala.util.intset.MutableIntSet; import com.ibm.wala.util.intset.MutableMapping; @@ -473,15 +472,12 @@ public abstract class AstSSAPropagationCallGraphBuilder extends SSAPropagationCa public byte evaluate(PointsToSetVariable lhs, PointsToSetVariable rhs) { final IntSetVariable objects = rhs; if (objects.getValue() != null) { - objects.getValue().foreach(new IntSetAction() { - @Override - public void act(int optr) { - InstanceKey object = system.getInstanceKey(optr); - if (!getBuilder().isUncataloguedField(object.getConcreteType(), hack)) { - PointerKey cat = getPointerKeyForObjectCatalog(object); - if (cat != null) { - system.newConstraint(cat, fieldNameKeys[0]); - } + objects.getValue().foreach(optr -> { + InstanceKey object = system.getInstanceKey(optr); + if (!getBuilder().isUncataloguedField(object.getConcreteType(), hack)) { + PointerKey cat = getPointerKeyForObjectCatalog(object); + if (cat != null) { + system.newConstraint(cat, fieldNameKeys[0]); } } }); @@ -539,14 +535,11 @@ public abstract class AstSSAPropagationCallGraphBuilder extends SSAPropagationCa public byte evaluate(PointsToSetVariable lhs, PointsToSetVariable rhs) { final IntSetVariable objects = rhs; if (objects.getValue() != null) { - objects.getValue().foreach(new IntSetAction() { - @Override - public void act(int optr) { - InstanceKey object = system.getInstanceKey(optr); - PointerKey objCatalog = getPointerKeyForObjectCatalog(object); - if (objCatalog != null) { - system.newConstraint(lk, assignOperator, objCatalog); - } + objects.getValue().foreach(optr -> { + InstanceKey object = system.getInstanceKey(optr); + PointerKey objCatalog = getPointerKeyForObjectCatalog(object); + if (objCatalog != null) { + system.newConstraint(lk, assignOperator, objCatalog); } }); } @@ -718,19 +711,16 @@ public abstract class AstSSAPropagationCallGraphBuilder extends SSAPropagationCa } else { PointsToSetVariable FV = system.findOrCreatePointsToSet(F); if (FV.getValue() != null) { - FV.getValue().foreach(new IntSetAction() { - @Override - public void act(int ptr) { - InstanceKey iKey = system.getInstanceKey(ptr); - if (iKey instanceof ScopeMappingInstanceKey) { - ScopeMappingInstanceKey K = (ScopeMappingInstanceKey) iKey; - Iterator x = K.getFunargNodes(definer); - while (x.hasNext()) { - result.add(x.next()); - } - } else { - Assertions.UNREACHABLE("unexpected instance key " + iKey); + FV.getValue().foreach(ptr -> { + InstanceKey iKey = system.getInstanceKey(ptr); + if (iKey instanceof ScopeMappingInstanceKey) { + ScopeMappingInstanceKey K = (ScopeMappingInstanceKey) iKey; + Iterator x = K.getFunargNodes(definer); + while (x.hasNext()) { + result.add(x.next()); } + } else { + Assertions.UNREACHABLE("unexpected instance key " + iKey); } }); } @@ -957,34 +947,28 @@ public abstract class AstSSAPropagationCallGraphBuilder extends SSAPropagationCa final IntSetVariable receivers = rhs[0]; final IntSetVariable fields = rhs[1]; if (receivers.getValue() != null && fields.getValue() != null) { - receivers.getValue().foreach(new IntSetAction() { - @Override - public void act(final int rptr) { - final InstanceKey receiver = system.getInstanceKey(rptr); + receivers.getValue().foreach(rptr -> { + final InstanceKey receiver = system.getInstanceKey(rptr); - if (!isLoadOperation) { - PointerKey cat = getPointerKeyForObjectCatalog(receiver); - if (cat != null) { - system.newConstraint(cat, assignOperator, fieldKey); + if (!isLoadOperation) { + PointerKey cat = getPointerKeyForObjectCatalog(receiver); + if (cat != null) { + system.newConstraint(cat, assignOperator, fieldKey); + } + } + + fields.getValue().foreach(fptr -> { + if (!doneField.contains(fptr) || !doneReceiver.contains(rptr)) { + InstanceKey field = system.getInstanceKey(fptr); + for (Iterator keys = isLoadOperation ? getPointerKeysForReflectedFieldRead(receiver, field) + : getPointerKeysForReflectedFieldWrite(receiver, field); keys.hasNext();) { + AbstractFieldPointerKey key = (AbstractFieldPointerKey) keys.next(); + if (DEBUG_PROPERTIES) + action.dump(key, false, false); + action.action(key); } } - - fields.getValue().foreach(new IntSetAction() { - @Override - public void act(int fptr) { - if (!doneField.contains(fptr) || !doneReceiver.contains(rptr)) { - InstanceKey field = system.getInstanceKey(fptr); - for (Iterator keys = isLoadOperation ? getPointerKeysForReflectedFieldRead(receiver, field) - : getPointerKeysForReflectedFieldWrite(receiver, field); keys.hasNext();) { - AbstractFieldPointerKey key = (AbstractFieldPointerKey) keys.next(); - if (DEBUG_PROPERTIES) - action.dump(key, false, false); - action.action(key); - } - } - } - }); - } + }); }); doneReceiver.addAll(receivers.getValue()); doneField.addAll(fields.getValue()); @@ -1017,29 +1001,26 @@ public abstract class AstSSAPropagationCallGraphBuilder extends SSAPropagationCa public byte evaluate(PointsToSetVariable lhs, PointsToSetVariable rhs) { final IntSetVariable objects = rhs; if (objects.getValue() != null) { - objects.getValue().foreach(new IntSetAction() { - @Override - public void act(int optr) { - InstanceKey object = system.getInstanceKey(optr); - PointerKey objCatalog = getPointerKeyForObjectCatalog(object); - for (int f = 0; f < fieldsKeys.length; f++) { - if (isLoadOperation) { - for (Iterator keys = getPointerKeysForReflectedFieldRead(object, fieldsKeys[f]); keys.hasNext();) { - AbstractFieldPointerKey key = (AbstractFieldPointerKey) keys.next(); - if (DEBUG_PROPERTIES) - action.dump(key, true, false); - action.action(key); - } - } else { - if (objCatalog != null) { - system.newConstraint(objCatalog, fieldsKeys[f]); - } - for (Iterator keys = getPointerKeysForReflectedFieldWrite(object, fieldsKeys[f]); keys.hasNext();) { - AbstractFieldPointerKey key = (AbstractFieldPointerKey) keys.next(); - if (DEBUG_PROPERTIES) - action.dump(key, true, false); - action.action(key); - } + objects.getValue().foreach(optr -> { + InstanceKey object = system.getInstanceKey(optr); + PointerKey objCatalog = getPointerKeyForObjectCatalog(object); + for (int f = 0; f < fieldsKeys.length; f++) { + if (isLoadOperation) { + for (Iterator keys1 = getPointerKeysForReflectedFieldRead(object, fieldsKeys[f]); keys1.hasNext();) { + AbstractFieldPointerKey key1 = (AbstractFieldPointerKey) keys1.next(); + if (DEBUG_PROPERTIES) + action.dump(key1, true, false); + action.action(key1); + } + } else { + if (objCatalog != null) { + system.newConstraint(objCatalog, fieldsKeys[f]); + } + for (Iterator keys2 = getPointerKeysForReflectedFieldWrite(object, fieldsKeys[f]); keys2.hasNext();) { + AbstractFieldPointerKey key2 = (AbstractFieldPointerKey) keys2.next(); + if (DEBUG_PROPERTIES) + action.dump(key2, true, false); + action.action(key2); } } } @@ -1081,18 +1062,15 @@ public abstract class AstSSAPropagationCallGraphBuilder extends SSAPropagationCa public byte evaluate(PointsToSetVariable lhs, PointsToSetVariable rhs) { final IntSetVariable fields = rhs; if (fields.getValue() != null) { - fields.getValue().foreach(new IntSetAction() { - @Override - public void act(int fptr) { - InstanceKey field = system.getInstanceKey(fptr); - for (int o = 0; o < objKeys.length; o++) { - for (Iterator keys = isLoadOperation ? getPointerKeysForReflectedFieldRead(objKeys[o], field) - : getPointerKeysForReflectedFieldWrite(objKeys[o], field); keys.hasNext();) { - AbstractFieldPointerKey key = (AbstractFieldPointerKey) keys.next(); - if (DEBUG_PROPERTIES) - action.dump(key, false, true); - action.action(key); - } + fields.getValue().foreach(fptr -> { + InstanceKey field = system.getInstanceKey(fptr); + for (int o = 0; o < objKeys.length; o++) { + for (Iterator keys = isLoadOperation ? getPointerKeysForReflectedFieldRead(objKeys[o], field) + : getPointerKeysForReflectedFieldWrite(objKeys[o], field); keys.hasNext();) { + AbstractFieldPointerKey key = (AbstractFieldPointerKey) keys.next(); + if (DEBUG_PROPERTIES) + action.dump(key, false, true); + action.action(key); } } }); diff --git a/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ipa/callgraph/ScopeMappingInstanceKeys.java b/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ipa/callgraph/ScopeMappingInstanceKeys.java index d0e27ec4b..e66b3a8c5 100644 --- a/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ipa/callgraph/ScopeMappingInstanceKeys.java +++ b/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ipa/callgraph/ScopeMappingInstanceKeys.java @@ -12,7 +12,6 @@ package com.ibm.wala.cast.ipa.callgraph; import java.util.Collection; import java.util.Iterator; -import java.util.function.Predicate; import com.ibm.wala.classLoader.IClass; import com.ibm.wala.classLoader.NewSiteReference; @@ -139,11 +138,7 @@ abstract public class ScopeMappingInstanceKeys implements InstanceKeyFactory { public Iterator> getCreationSites(CallGraph CG) { return new FilterIterator<>( base.getCreationSites(CG), - new Predicate>() { - @Override public boolean test(Pair o) { - return o.fst.equals(creator); - } - }); + o -> o.fst.equals(creator)); } } diff --git a/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ipa/lexical/LexicalModRef.java b/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ipa/lexical/LexicalModRef.java index db3b23504..01d3432c0 100644 --- a/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ipa/lexical/LexicalModRef.java +++ b/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ipa/lexical/LexicalModRef.java @@ -12,7 +12,6 @@ package com.ibm.wala.cast.ipa.lexical; import java.util.Collection; import java.util.Map; -import java.util.function.Function; import com.ibm.wala.cast.ipa.callgraph.ScopeMappingInstanceKeys.ScopeMappingInstanceKey; import com.ibm.wala.cast.ir.ssa.AstLexicalAccess.Access; @@ -56,13 +55,7 @@ public class LexicalModRef { */ public Map>> computeLexicalRef() { Map>> scan = CallGraphTransitiveClosure.collectNodeResults(cg, - new Function>>() { - - @Override - public Collection> apply(CGNode n) { - return scanNodeForLexReads(n); - } - }); + n -> scanNodeForLexReads(n)); return CallGraphTransitiveClosure.transitiveClosure(cg, scan); } @@ -73,13 +66,7 @@ public class LexicalModRef { */ public Map>> computeLexicalMod() { Map>> scan = CallGraphTransitiveClosure.collectNodeResults(cg, - new Function>>() { - - @Override - public Collection> apply(CGNode n) { - return scanNodeForLexWrites(n); - } - }); + n -> scanNodeForLexWrites(n)); return CallGraphTransitiveClosure.transitiveClosure(cg, scan); } diff --git a/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ir/translator/AstTranslator.java b/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ir/translator/AstTranslator.java index 2c5b5ad06..152ab677f 100644 --- a/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ir/translator/AstTranslator.java +++ b/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ir/translator/AstTranslator.java @@ -1196,22 +1196,16 @@ public abstract class AstTranslator extends CAstVisitor> exceptionalEdges = hasDeadBlocks? HashMapFactory.>make() : null; if (hasDeadBlocks) { - transferEdges(liveBlocks, icfg, new EdgeOperation() { - @Override - public void act(PreBasicBlock src, PreBasicBlock dst) { - if (! normalEdges.containsKey(src)) { - normalEdges.put(src, HashSetFactory.make()); - } - normalEdges.get(src).add(dst); + transferEdges(liveBlocks, icfg, (src, dst) -> { + if (! normalEdges.containsKey(src)) { + normalEdges.put(src, HashSetFactory.make()); } - }, new EdgeOperation() { - @Override - public void act(PreBasicBlock src, PreBasicBlock dst) { - if (! exceptionalEdges.containsKey(src)) { - exceptionalEdges.put(src, HashSetFactory.make()); - } - exceptionalEdges.get(src).add(dst); - } + normalEdges.get(src).add(dst); + }, (src, dst) -> { + if (! exceptionalEdges.containsKey(src)) { + exceptionalEdges.put(src, HashSetFactory.make()); + } + exceptionalEdges.get(src).add(dst); }); } @@ -1268,17 +1262,7 @@ public abstract class AstTranslator extends CAstVisitor addNormalEdge(src, dst), (src, dst) -> addExceptionalEdge(src, dst)); } int x = 0; diff --git a/com.ibm.wala.cast/source/java/com/ibm/wala/cast/loader/CAstAbstractLoader.java b/com.ibm.wala.cast/source/java/com/ibm/wala/cast/loader/CAstAbstractLoader.java index cce71bb28..2477f88a2 100644 --- a/com.ibm.wala.cast/source/java/com/ibm/wala/cast/loader/CAstAbstractLoader.java +++ b/com.ibm.wala.cast/source/java/com/ibm/wala/cast/loader/CAstAbstractLoader.java @@ -17,10 +17,7 @@ import java.util.HashMap; import java.util.HashSet; import java.util.Iterator; import java.util.Map; -import java.util.Map.Entry; import java.util.Set; -import java.util.function.Function; -import java.util.function.Predicate; import com.ibm.wala.cast.tree.CAstSourcePositionMap.Position; import com.ibm.wala.classLoader.IClass; @@ -82,21 +79,14 @@ public abstract class CAstAbstractLoader implements IClassLoader { } private Iterator getMessages(final byte severity) { - return new MapIterator<>(new FilterIterator<>(errors.entrySet().iterator(), new Predicate>>() { - @Override public boolean test(Entry> o) { - for(Warning w : o.getValue()) { - if (w.getLevel() == severity) { - return true; - } + return new MapIterator<>(new FilterIterator<>(errors.entrySet().iterator(), o -> { + for(Warning w : o.getValue()) { + if (w.getLevel() == severity) { + return true; } - return false; - } - }), new Function>, ModuleEntry>() { - @Override - public ModuleEntry apply(Entry> object) { - return object.getKey(); - } - }); + } + return false; + }), object -> object.getKey()); } public Iterator getModulesWithParseErrors() { diff --git a/com.ibm.wala.core.tests/src/com/ibm/wala/core/tests/basic/PathFinderTest.java b/com.ibm.wala.core.tests/src/com/ibm/wala/core/tests/basic/PathFinderTest.java index 9692a8566..fc88056bd 100644 --- a/com.ibm.wala.core.tests/src/com/ibm/wala/core/tests/basic/PathFinderTest.java +++ b/com.ibm.wala.core.tests/src/com/ibm/wala/core/tests/basic/PathFinderTest.java @@ -41,11 +41,7 @@ public class PathFinderTest { } private static DFSAllPathsFinder makeFinder(Graph g, String start, final String end) { - return new DFSAllPathsFinder<>(g, start, new Predicate() { - @Override public boolean test(String o) { - return end.equals(o); - } - }); + return new DFSAllPathsFinder<>(g, start, (Predicate) o -> end.equals(o)); } private static void checkPaths(DFSAllPathsFinder paths, int expectedCount) { diff --git a/com.ibm.wala.core.tests/src/com/ibm/wala/core/tests/callGraph/CHACallGraphTest.java b/com.ibm.wala.core.tests/src/com/ibm/wala/core/tests/callGraph/CHACallGraphTest.java index c5f1ccea7..38f2cb475 100644 --- a/com.ibm.wala.core.tests/src/com/ibm/wala/core/tests/callGraph/CHACallGraphTest.java +++ b/com.ibm.wala.core.tests/src/com/ibm/wala/core/tests/callGraph/CHACallGraphTest.java @@ -33,12 +33,7 @@ public class CHACallGraphTest { } public static CallGraph testCHA(String scopeFile, final String mainClass, final String exclusionsFile) throws ClassHierarchyException, IllegalArgumentException, CancelException, IOException { - return testCHA(scopeFile, exclusionsFile, new Function>() { - @Override - public Iterable apply(IClassHierarchy cha) { - return Util.makeMainEntrypoints(cha.getScope(), cha, mainClass); - } - }); + return testCHA(scopeFile, exclusionsFile, cha -> Util.makeMainEntrypoints(cha.getScope(), cha, mainClass)); } public static CallGraph testCHA(String scopeFile, diff --git a/com.ibm.wala.core.tests/src/com/ibm/wala/core/tests/callGraph/CallGraphTest.java b/com.ibm.wala.core.tests/src/com/ibm/wala/core/tests/callGraph/CallGraphTest.java index 6c1daa594..376cec6eb 100644 --- a/com.ibm.wala.core.tests/src/com/ibm/wala/core/tests/callGraph/CallGraphTest.java +++ b/com.ibm.wala.core.tests/src/com/ibm/wala/core/tests/callGraph/CallGraphTest.java @@ -242,12 +242,7 @@ public class CallGraphTest extends WalaTestCase { } } } - return new Iterable() { - @Override - public Iterator iterator() { - return result.iterator(); - } - }; + return () -> result.iterator(); } @Test public void testPrimordial() throws ClassHierarchyException, IllegalArgumentException, CancelException, IOException { @@ -299,12 +294,7 @@ public class CallGraphTest extends WalaTestCase { result.add(new DefaultEntrypoint(m, cha)); } } - return new Iterable() { - @Override - public Iterator iterator() { - return result.iterator(); - } - }; + return () -> result.iterator(); } public static void doCallGraphs(AnalysisOptions options, IAnalysisCacheView cache, IClassHierarchy cha, AnalysisScope scope) diff --git a/com.ibm.wala.core.tests/src/com/ibm/wala/core/tests/callGraph/Java7CallGraphTest.java b/com.ibm.wala.core.tests/src/com/ibm/wala/core/tests/callGraph/Java7CallGraphTest.java index fa03cf985..bff08aab2 100644 --- a/com.ibm.wala.core.tests/src/com/ibm/wala/core/tests/callGraph/Java7CallGraphTest.java +++ b/com.ibm.wala.core.tests/src/com/ibm/wala/core/tests/callGraph/Java7CallGraphTest.java @@ -13,7 +13,6 @@ package com.ibm.wala.core.tests.callGraph; import java.io.File; import java.io.IOException; -import java.util.function.Predicate; import java.util.jar.JarFile; import org.junit.Test; @@ -35,7 +34,6 @@ import com.ibm.wala.ipa.cha.ClassHierarchyFactory; import com.ibm.wala.shrikeBT.analysis.Analyzer.FailureException; import com.ibm.wala.shrikeCT.InvalidClassFileException; import com.ibm.wala.types.ClassLoaderReference; -import com.ibm.wala.types.MethodReference; import com.ibm.wala.util.CancelException; import com.ibm.wala.util.io.TemporaryFile; @@ -69,12 +67,9 @@ public class Java7CallGraphTest extends DynamicCallGraphTestBase { instrument(F.getAbsolutePath()); run("pack.ocamljavaMain", null, args); - checkNodes(cg, new Predicate() { - @Override - public boolean test(MethodReference t) { - String s = t.toString(); - return s.contains("Lpack/") || s.contains("Locaml/stdlib/"); - } + checkNodes(cg, t -> { + String s = t.toString(); + return s.contains("Lpack/") || s.contains("Locaml/stdlib/"); }); } diff --git a/com.ibm.wala.core.tests/src/com/ibm/wala/core/tests/shrike/DynamicCallGraphTestBase.java b/com.ibm.wala.core.tests/src/com/ibm/wala/core/tests/shrike/DynamicCallGraphTestBase.java index 1524fdb3a..00e4b4f59 100644 --- a/com.ibm.wala.core.tests/src/com/ibm/wala/core/tests/shrike/DynamicCallGraphTestBase.java +++ b/com.ibm.wala.core.tests/src/com/ibm/wala/core/tests/shrike/DynamicCallGraphTestBase.java @@ -152,20 +152,17 @@ public abstract class DynamicCallGraphTestBase extends WalaTestCase { protected void checkEdges(CallGraph staticCG, Predicate filter) throws IOException { final Set> edges = HashSetFactory.make(); - check(staticCG, new EdgesTest() { - @Override - public void edgesTest(CallGraph staticCG, CGNode caller, MethodReference calleeRef) { - Set nodes = staticCG.getNodes(calleeRef); - Assert.assertEquals("expected one node for " + calleeRef, 1, nodes.size()); - CGNode callee = nodes.iterator().next(); - - Assert.assertTrue("no edge for " + caller + " --> " + callee, staticCG.getPossibleSites(caller, callee).hasNext()); - Pair x = Pair.make(caller, callee); - if (! edges.contains(x)) { - edges.add(x); - System.err.println("found expected edge " + caller + " --> " + callee); - } - } + check(staticCG, (staticCG1, caller, calleeRef) -> { + Set nodes = staticCG1.getNodes(calleeRef); + Assert.assertEquals("expected one node for " + calleeRef, 1, nodes.size()); + CGNode callee = nodes.iterator().next(); + + Assert.assertTrue("no edge for " + caller + " --> " + callee, staticCG1.getPossibleSites(caller, callee).hasNext()); + Pair x = Pair.make(caller, callee); + if (! edges.contains(x)) { + edges.add(x); + System.err.println("found expected edge " + caller + " --> " + callee); + } }, filter); } @@ -175,15 +172,12 @@ public abstract class DynamicCallGraphTestBase extends WalaTestCase { protected void checkNodes(CallGraph staticCG, Predicate filter) throws IOException { final Set notFound = HashSetFactory.make(); - check(staticCG, new EdgesTest() { - @Override - public void edgesTest(CallGraph staticCG, CGNode caller, MethodReference callee) { - boolean checkForCallee = !staticCG.getNodes(callee).isEmpty(); - if (!checkForCallee) { - notFound.add(callee); - } else { - System.err.println("found expected node " + callee); - } + check(staticCG, (staticCG1, caller, callee) -> { + boolean checkForCallee = !staticCG1.getNodes(callee).isEmpty(); + if (!checkForCallee) { + notFound.add(callee); + } else { + System.err.println("found expected node " + callee); } }, filter); 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 b26e5086f..afba98ea1 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 @@ -165,44 +165,38 @@ public class PDFSDG { } private static Graph pruneSDG(final SDG sdg) { - Predicate f = new Predicate() { - @Override public boolean test(Statement s) { - if (s.getNode().equals(sdg.getCallGraph().getFakeRootNode())) { - return false; - } else if (s instanceof MethodExitStatement || s instanceof MethodEntryStatement) { - return false; - } else { - return true; - } + Predicate f = s -> { + if (s.getNode().equals(sdg.getCallGraph().getFakeRootNode())) { + return false; + } else if (s instanceof MethodExitStatement || s instanceof MethodEntryStatement) { + return false; + } else { + return true; } }; return GraphSlicer.prune(sdg, f); } private static NodeDecorator makeNodeDecorator() { - return new NodeDecorator() { - @Override - public String getLabel(Statement s) throws WalaException { - switch (s.getKind()) { - case HEAP_PARAM_CALLEE: - case HEAP_PARAM_CALLER: - case HEAP_RET_CALLEE: - case HEAP_RET_CALLER: - HeapStatement h = (HeapStatement) s; - return s.getKind() + "\\n" + h.getNode() + "\\n" + h.getLocation(); - case EXC_RET_CALLEE: - case EXC_RET_CALLER: - case NORMAL: - case NORMAL_RET_CALLEE: - case NORMAL_RET_CALLER: - case PARAM_CALLEE: - case PARAM_CALLER: - case PHI: - default: - return s.toString(); - } + return s -> { + switch (s.getKind()) { + case HEAP_PARAM_CALLEE: + case HEAP_PARAM_CALLER: + case HEAP_RET_CALLEE: + case HEAP_RET_CALLER: + HeapStatement h = (HeapStatement) s; + return s.getKind() + "\\n" + h.getNode() + "\\n" + h.getLocation(); + case EXC_RET_CALLEE: + case EXC_RET_CALLER: + case NORMAL: + case NORMAL_RET_CALLEE: + case NORMAL_RET_CALLER: + case PARAM_CALLEE: + case PARAM_CALLER: + case PHI: + default: + return s.toString(); } - }; } 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 4afd8c818..113b7926b 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 @@ -249,11 +249,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) { - Predicate f = new Predicate() { - @Override public boolean test(Statement o) { - return slice.contains(o); - } - }; + Predicate f = o -> slice.contains(o); return GraphSlicer.prune(sdg, f); } @@ -261,36 +257,32 @@ public class PDFSlice { * @return a NodeDecorator that decorates statements in a slice for a dot-ted representation */ public static NodeDecorator makeNodeDecorator() { - return new NodeDecorator() { - @Override - public String getLabel(Statement s) throws WalaException { - switch (s.getKind()) { - case HEAP_PARAM_CALLEE: - case HEAP_PARAM_CALLER: - case HEAP_RET_CALLEE: - case HEAP_RET_CALLER: - HeapStatement h = (HeapStatement) s; - return s.getKind() + "\\n" + h.getNode() + "\\n" + h.getLocation(); - case NORMAL: - NormalStatement n = (NormalStatement) s; - return n.getInstruction() + "\\n" + n.getNode().getMethod().getSignature(); - case PARAM_CALLEE: - ParamCallee paramCallee = (ParamCallee) s; - return s.getKind() + " " + paramCallee.getValueNumber() + "\\n" + s.getNode().getMethod().getName(); - case PARAM_CALLER: - ParamCaller paramCaller = (ParamCaller) s; - return s.getKind() + " " + paramCaller.getValueNumber() + "\\n" + s.getNode().getMethod().getName() + "\\n" - + paramCaller.getInstruction().getCallSite().getDeclaredTarget().getName(); - case EXC_RET_CALLEE: - case EXC_RET_CALLER: - case NORMAL_RET_CALLEE: - case NORMAL_RET_CALLER: - case PHI: - default: - return s.toString(); - } + return s -> { + switch (s.getKind()) { + case HEAP_PARAM_CALLEE: + case HEAP_PARAM_CALLER: + case HEAP_RET_CALLEE: + case HEAP_RET_CALLER: + HeapStatement h = (HeapStatement) s; + return s.getKind() + "\\n" + h.getNode() + "\\n" + h.getLocation(); + case NORMAL: + NormalStatement n = (NormalStatement) s; + return n.getInstruction() + "\\n" + n.getNode().getMethod().getSignature(); + case PARAM_CALLEE: + ParamCallee paramCallee = (ParamCallee) s; + return s.getKind() + " " + paramCallee.getValueNumber() + "\\n" + s.getNode().getMethod().getName(); + case PARAM_CALLER: + ParamCaller paramCaller = (ParamCaller) s; + return s.getKind() + " " + paramCaller.getValueNumber() + "\\n" + s.getNode().getMethod().getName() + "\\n" + + paramCaller.getInstruction().getCallSite().getDeclaredTarget().getName(); + case EXC_RET_CALLEE: + case EXC_RET_CALLER: + case NORMAL_RET_CALLEE: + case NORMAL_RET_CALLER: + case PHI: + default: + return s.toString(); } - }; } diff --git a/com.ibm.wala.core.tests/src/com/ibm/wala/examples/drivers/PDFTypeHierarchy.java b/com.ibm.wala.core.tests/src/com/ibm/wala/examples/drivers/PDFTypeHierarchy.java index c52137928..c57bf7814 100644 --- a/com.ibm.wala.core.tests/src/com/ibm/wala/examples/drivers/PDFTypeHierarchy.java +++ b/com.ibm.wala.core.tests/src/com/ibm/wala/examples/drivers/PDFTypeHierarchy.java @@ -103,11 +103,7 @@ public class PDFTypeHierarchy { * Restrict g to nodes from the Application loader */ public static Graph pruneForAppLoader(Graph g) { - Predicate f = new Predicate() { - @Override public boolean test(IClass c) { - return (c.getClassLoader().getReference().equals(ClassLoaderReference.Application)); - } - }; + Predicate f = c -> (c.getClassLoader().getReference().equals(ClassLoaderReference.Application)); return pruneGraph(g, f); } 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 03734880a..f8ec7eb4c 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 @@ -135,12 +135,7 @@ public class BasicHeapGraph extends HeapGraphImpl { }; final IBinaryNaturalRelation pred = computePredecessors(nodeMgr); - final IntFunction toNode = new IntFunction() { - @Override - public Object apply(int i) { - return nodeMgr.getNode(i); - } - }; + final IntFunction toNode = i -> nodeMgr.getNode(i); this.G = new AbstractNumberedGraph() { private final NumberedEdgeManager edgeMgr = new NumberedEdgeManager() { diff --git a/com.ibm.wala.core/src/com/ibm/wala/analysis/pointers/HeapGraphImpl.java b/com.ibm.wala.core/src/com/ibm/wala/analysis/pointers/HeapGraphImpl.java index 2fa2bac60..332ebf922 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/analysis/pointers/HeapGraphImpl.java +++ b/com.ibm.wala.core/src/com/ibm/wala/analysis/pointers/HeapGraphImpl.java @@ -52,11 +52,7 @@ public abstract class HeapGraphImpl implements HeapGraph< @Override public Collection getReachableInstances(Set roots) { - Predicate f = new Predicate() { - @Override public boolean test(Object o) { - return (o instanceof InstanceKey); - } - }; + Predicate f = o -> (o instanceof InstanceKey); return DFS.getReachableNodes(this, roots, f); } diff --git a/com.ibm.wala.core/src/com/ibm/wala/analysis/reflection/java7/MethodHandles.java b/com.ibm.wala.core/src/com/ibm/wala/analysis/reflection/java7/MethodHandles.java index 2b6351e64..d20afea39 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/analysis/reflection/java7/MethodHandles.java +++ b/com.ibm.wala.core/src/com/ibm/wala/analysis/reflection/java7/MethodHandles.java @@ -13,7 +13,6 @@ package com.ibm.wala.analysis.reflection.java7; import java.lang.ref.SoftReference; import java.util.Iterator; import java.util.Map; -import java.util.function.Function; import java.util.function.Predicate; import com.ibm.wala.cfg.ControlFlowGraph; @@ -212,30 +211,17 @@ public class MethodHandles { return new MapIterator( new FilterIterator(getIR(node).iterateNormalInstructions(), filter), - new Function() { - @Override - public FieldReference apply(SSAInstruction object) { - return ((SSAFieldAccessInstruction)object).getDeclaredField(); - } - }); + object -> ((SSAFieldAccessInstruction)object).getDeclaredField()); } @Override public Iterator iterateFieldsRead(CGNode node) { - return iterateFields(node, new Predicate() { - @Override public boolean test(SSAInstruction o) { - return o instanceof SSAGetInstruction; - } - }); + return iterateFields(node, o -> o instanceof SSAGetInstruction); } @Override public Iterator iterateFieldsWritten(CGNode node) { - return iterateFields(node, new Predicate() { - @Override public boolean test(SSAInstruction o) { - return o instanceof SSAPutInstruction; - } - }); + return iterateFields(node, o -> o instanceof SSAPutInstruction); } @Override diff --git a/com.ibm.wala.core/src/com/ibm/wala/cfg/AbstractCFG.java b/com.ibm.wala.core/src/com/ibm/wala/cfg/AbstractCFG.java index 740c4b6b5..954c19788 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/cfg/AbstractCFG.java +++ b/com.ibm.wala.core/src/com/ibm/wala/cfg/AbstractCFG.java @@ -15,7 +15,6 @@ import java.util.Collection; import java.util.HashSet; import java.util.Iterator; import java.util.List; -import java.util.function.Predicate; import com.ibm.wala.classLoader.IMethod; import com.ibm.wala.shrikeBT.Constants; @@ -228,12 +227,9 @@ public abstract class AbstractCFG> implements Contro throw new IllegalArgumentException("N is null"); } if (N.equals(exit())) { - return new FilterIterator<>(iterator(), new Predicate() { - @Override - public boolean test(T o) { - int i = getNumber(o); - return normalToExit.get(i) || exceptionalToExit.get(i); - } + return new FilterIterator<>(iterator(), o -> { + int i = getNumber(o); + return normalToExit.get(i) || exceptionalToExit.get(i); }); } else { int number = getNumber(N); @@ -341,12 +337,9 @@ public abstract class AbstractCFG> implements Contro Iterator iterateExceptionalPredecessors(T N) { if (N.equals(exit())) { - return new FilterIterator<>(iterator(), new Predicate() { - @Override - public boolean test(T o) { - int i = getNumber(o); - return exceptionalToExit.get(i); - } + return new FilterIterator<>(iterator(), o -> { + int i = getNumber(o); + return exceptionalToExit.get(i); }); } else { return exceptionalEdgeManager.getPredNodes(N); @@ -355,12 +348,9 @@ public abstract class AbstractCFG> implements Contro Iterator iterateNormalPredecessors(T N) { if (N.equals(exit())) { - return new FilterIterator<>(iterator(), new Predicate() { - @Override - public boolean test(T o) { - int i = getNumber(o); - return normalToExit.get(i); - } + return new FilterIterator<>(iterator(), o -> { + int i = getNumber(o); + return normalToExit.get(i); }); } else { int number = getNumber(N); diff --git a/com.ibm.wala.core/src/com/ibm/wala/classLoader/ShrikeCTMethod.java b/com.ibm.wala.core/src/com/ibm/wala/classLoader/ShrikeCTMethod.java index 8be4fd543..c4a3336e2 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/classLoader/ShrikeCTMethod.java +++ b/com.ibm.wala.core/src/com/ibm/wala/classLoader/ShrikeCTMethod.java @@ -347,30 +347,15 @@ public final class ShrikeCTMethod extends ShrikeBTMethod implements IBytecodeMet } private CodeReader getCodeReader() { - return getReader("Code", new GetReader() { - @Override - public CodeReader getReader(AttrIterator iter) throws InvalidClassFileException { - return new CodeReader(iter); - } - }); + return getReader("Code", iter -> new CodeReader(iter)); } private ExceptionsReader getExceptionReader() { - return getReader("Exceptions", new GetReader() { - @Override - public ExceptionsReader getReader(AttrIterator iter) throws InvalidClassFileException { - return new ExceptionsReader(iter); - } - }); + return getReader("Exceptions", iter -> new ExceptionsReader(iter)); } private SignatureReader getSignatureReader() { - return getReader("Signature", new GetReader() { - @Override - public SignatureReader getReader(AttrIterator iter) throws InvalidClassFileException { - return new SignatureReader(iter); - } - }); + return getReader("Signature", iter -> new SignatureReader(iter)); } private AnnotationsReader getAnnotationsReader(AnnotationType type) { diff --git a/com.ibm.wala.core/src/com/ibm/wala/classLoader/ShrikeClass.java b/com.ibm.wala.core/src/com/ibm/wala/classLoader/ShrikeClass.java index 3b32487d7..9bc376e5e 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/classLoader/ShrikeClass.java +++ b/com.ibm.wala.core/src/com/ibm/wala/classLoader/ShrikeClass.java @@ -343,12 +343,7 @@ public final class ShrikeClass extends JVMClass { ClassReader.AttrIterator attrs = new ClassReader.AttrIterator(); getReader().initClassAttributeIterator(attrs); - return getReader(attrs, "SourceFile", new GetReader() { - @Override - public SourceFileReader getReader(AttrIterator iter) throws InvalidClassFileException { - return new SourceFileReader(iter); - } - }); + return getReader(attrs, "SourceFile", iter -> new SourceFileReader(iter)); } private AnnotationsReader getFieldAnnotationsReader(boolean runtimeInvisible, int fieldIndex) throws InvalidClassFileException { 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 86f48b4db..9bb6f8f82 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 @@ -125,12 +125,7 @@ public abstract class AbstractAnalysisEngine implements A */ private HeapGraph heapGraph; - private EntrypointBuilder entrypointBuilder = new EntrypointBuilder() { - @Override - public Iterable createEntrypoints(AnalysisScope scope, IClassHierarchy cha) { - return makeDefaultEntrypoints(scope, cha); - } - }; + private EntrypointBuilder entrypointBuilder = (scope, cha) -> makeDefaultEntrypoints(scope, cha); protected abstract CallGraphBuilder getCallGraphBuilder(IClassHierarchy cha, AnalysisOptions options, IAnalysisCacheView cache2); diff --git a/com.ibm.wala.core/src/com/ibm/wala/dataflow/IFDS/BackwardsSupergraph.java b/com.ibm.wala.core/src/com/ibm/wala/dataflow/IFDS/BackwardsSupergraph.java index 27a4fb0fb..aae7f97f0 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/dataflow/IFDS/BackwardsSupergraph.java +++ b/com.ibm.wala.core/src/com/ibm/wala/dataflow/IFDS/BackwardsSupergraph.java @@ -110,18 +110,9 @@ public class BackwardsSupergraph implements ISupergraph { @Override public Iterator getNormalSuccessors(final T ret) { Iterator allPreds = delegate.getPredNodes(ret); - Predicate sameProc = new Predicate() { - @Override public boolean test(T o) { - // throw out the exit node, which can be a predecessor due to tail recursion. - return getProcOf(ret).equals(getProcOf(o)) && !delegate.isExit(o); - } - }; + Predicate sameProc = o -> getProcOf(ret).equals(getProcOf(o)) && !delegate.isExit(o); Iterator sameProcPreds = new FilterIterator<>(allPreds, sameProc); - Predicate notCall = new Predicate() { - @Override public boolean test(T o) { - return !delegate.isCall(o); - } - }; + Predicate notCall = o -> !delegate.isCall(o); return new FilterIterator(sameProcPreds, notCall); } diff --git a/com.ibm.wala.core/src/com/ibm/wala/dataflow/IFDS/ICFGSupergraph.java b/com.ibm.wala.core/src/com/ibm/wala/dataflow/IFDS/ICFGSupergraph.java index a33a1310d..e6de030e5 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/dataflow/IFDS/ICFGSupergraph.java +++ b/com.ibm.wala.core/src/com/ibm/wala/dataflow/IFDS/ICFGSupergraph.java @@ -95,11 +95,7 @@ public class ICFGSupergraph implements ISupergraph> getCalledNodes(BasicBlockInContext call) { - final Predicate> isEntryFilter = new Predicate>() { - @Override public boolean test(BasicBlockInContext o) { - return o.isEntryBlock(); - } - }; + final Predicate> isEntryFilter = o -> o.isEntryBlock(); return new FilterIterator>(getSuccNodes(call), isEntryFilter); } diff --git a/com.ibm.wala.core/src/com/ibm/wala/dataflow/IFDS/TabulationSolver.java b/com.ibm.wala.core/src/com/ibm/wala/dataflow/IFDS/TabulationSolver.java index f2460de76..c62ea812e 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/dataflow/IFDS/TabulationSolver.java +++ b/com.ibm.wala.core/src/com/ibm/wala/dataflow/IFDS/TabulationSolver.java @@ -343,12 +343,9 @@ public class TabulationSolver { System.err.println(" reached: " + D3); } if (D3 != null) { - D3.foreach(new IntSetAction() { - @Override - public void act(int d3) { - newNormalExplodedEdge(edge, m, d3); - propagate(edge.entry, edge.d1, m, d3); - } + D3.foreach(d3 -> { + newNormalExplodedEdge(edge, m, d3); + propagate(edge.entry, edge.d1, m, d3); }); } } @@ -437,12 +434,7 @@ public class TabulationSolver { System.err.println("D4" + D4); System.err.println("D5 " + D5); } - IntSetAction action = new IntSetAction() { - @Override - public void act(final int d4) { - propToReturnSite(c, entries, retSite, d4, D5, edge); - } - }; + IntSetAction action = d4 -> propToReturnSite(c, entries, retSite, d4, D5, edge); D4.foreach(action); } } @@ -462,13 +454,9 @@ public class TabulationSolver { */ private void propagateToReturnSiteWithBinaryFlowFunction(final PathEdge edge, final T c, final IntSet D4, final T[] entries, final T retSite, final IFlowFunction retf) { - D4.foreach(new IntSetAction() { - @Override - public void act(final int d4) { - final IntSet D5 = computeBinaryFlow(d4, edge.d2, (IBinaryReturnFlowFunction) retf); - propToReturnSite(c, entries, retSite, d4, D5, edge); - } - + D4.foreach(d4 -> { + final IntSet D5 = computeBinaryFlow(d4, edge.d2, (IBinaryReturnFlowFunction) retf); + propToReturnSite(c, entries, retSite, d4, D5, edge); }); } @@ -508,14 +496,11 @@ public class TabulationSolver { System.err.println("D3" + D3); } if (D3 != null) { - D3.foreach(new IntSetAction() { - @Override - public void act(int d3) { - // set curPathEdge to be consistent with its setting in processCall() when applying a summary edge - curPathEdge = PathEdge.createPathEdge(s_p, d3, c, d4); - newSummaryEdge(curPathEdge, edge, retSite, d5); - propagate(s_p, d3, retSite, d5); - } + D3.foreach(d3 -> { + // set curPathEdge to be consistent with its setting in processCall() when applying a summary edge + curPathEdge = PathEdge.createPathEdge(s_p, d3, c, d4); + newSummaryEdge(curPathEdge, edge, retSite, d5); + propagate(s_p, d3, retSite, d5); }); } } @@ -576,12 +561,9 @@ public class TabulationSolver { System.err.println("normal successor reached: " + D3); } if (D3 != null) { - D3.foreach(new IntSetAction() { - @Override - public void act(int d3) { - newNormalExplodedEdge(edge, m, d3); - propagate(edge.entry, edge.d1, m, d3); - } + D3.foreach(d3 -> { + newNormalExplodedEdge(edge, m, d3); + propagate(edge.entry, edge.d1, m, d3); }); } } @@ -603,14 +585,11 @@ public class TabulationSolver { System.err.println("reached: " + reached); } if (reached != null) { - reached.foreach(new IntSetAction() { - @Override - public void act(int x) { - assert x >= 0; - assert edge.d1 >= 0; - newNormalExplodedEdge(edge, returnSite, x); - propagate(edge.entry, edge.d1, returnSite, x); - } + reached.foreach(x -> { + assert x >= 0; + assert edge.d1 >= 0; + newNormalExplodedEdge(edge, returnSite, x); + propagate(edge.entry, edge.d1, returnSite, x); }); } } @@ -658,69 +637,57 @@ public class TabulationSolver { final CallFlowEdges callFlow = findOrCreateCallFlowEdges(calleeEntry); final int s_p_num = supergraph.getLocalBlockNumber(calleeEntry); - reached.foreach(new IntSetAction() { - @Override - public void act(final int d1) { - // we get reuse if we _don't_ propagate a new fact to the callee entry - final boolean gotReuse = !propagate(calleeEntry, d1, calleeEntry, d1); - recordCall(edge.target, calleeEntry, d1, gotReuse); - newCallExplodedEdge(edge, calleeEntry, d1); - // cache the fact that we've flowed -> by a - // call flow - callFlow.addCallEdge(callNodeNum, edge.d2, d1); - // handle summary edges now as well. this is different from the PoPL - // 95 paper. - if (summaries != null) { - // for each exit from the callee - P p = supergraph.getProcOf(calleeEntry); - T[] exits = supergraph.getExitsForProcedure(p); - for (int e = 0; e < exits.length; e++) { - final T exit = exits[e]; - if (DEBUG_LEVEL > 0) { - assert supergraph.containsNode(exit); - } - int x_num = supergraph.getLocalBlockNumber(exit); - // reachedBySummary := {d2} s.t. -> - // was recorded as a summary edge - IntSet reachedBySummary = summaries.getSummaryEdges(s_p_num, x_num, d1); - if (reachedBySummary != null) { - for (final T returnSite : returnSitesForCallee) { - // if "exit" is a valid exit from the callee to the return - // site being processed - if (supergraph.hasEdge(exit, returnSite)) { - final IFlowFunction retf = flowFunctionMap.getReturnFlowFunction(edge.target, exit, returnSite); - reachedBySummary.foreach(new IntSetAction() { - @Override - public void act(final int d2) { - assert curSummaryEdge == null : "curSummaryEdge should be null here"; - curSummaryEdge = PathEdge.createPathEdge(calleeEntry, d1, exit, d2); - if (retf instanceof IBinaryReturnFlowFunction) { - final IntSet D5 = computeBinaryFlow(edge.d2, d2, (IBinaryReturnFlowFunction) retf); - if (D5 != null) { - D5.foreach(new IntSetAction() { - @Override - public void act(int d5) { - newSummaryEdge(edge, curSummaryEdge, returnSite, d5); - propagate(edge.entry, edge.d1, returnSite, d5); - } - }); - } - } else { - final IntSet D5 = computeFlow(d2, (IUnaryFlowFunction) retf); - if (D5 != null) { - D5.foreach(new IntSetAction() { - @Override - public void act(int d5) { - newSummaryEdge(edge, curSummaryEdge, returnSite, d5); - propagate(edge.entry, edge.d1, returnSite, d5); - } - }); - } - } - curSummaryEdge = null; + reached.foreach(d1 -> { + // we get reuse if we _don't_ propagate a new fact to the callee entry + final boolean gotReuse = !propagate(calleeEntry, d1, calleeEntry, d1); + recordCall(edge.target, calleeEntry, d1, gotReuse); + newCallExplodedEdge(edge, calleeEntry, d1); + // cache the fact that we've flowed -> by a + // call flow + callFlow.addCallEdge(callNodeNum, edge.d2, d1); + // handle summary edges now as well. this is different from the PoPL + // 95 paper. + if (summaries != null) { + // for each exit from the callee + P p = supergraph.getProcOf(calleeEntry); + T[] exits = supergraph.getExitsForProcedure(p); + for (int e = 0; e < exits.length; e++) { + final T exit = exits[e]; + if (DEBUG_LEVEL > 0) { + assert supergraph.containsNode(exit); + } + int x_num = supergraph.getLocalBlockNumber(exit); + // reachedBySummary := {d2} s.t. -> + // was recorded as a summary edge + IntSet reachedBySummary = summaries.getSummaryEdges(s_p_num, x_num, d1); + if (reachedBySummary != null) { + for (final T returnSite : returnSitesForCallee) { + // if "exit" is a valid exit from the callee to the return + // site being processed + if (supergraph.hasEdge(exit, returnSite)) { + final IFlowFunction retf = flowFunctionMap.getReturnFlowFunction(edge.target, exit, returnSite); + reachedBySummary.foreach(d2 -> { + assert curSummaryEdge == null : "curSummaryEdge should be null here"; + curSummaryEdge = PathEdge.createPathEdge(calleeEntry, d1, exit, d2); + if (retf instanceof IBinaryReturnFlowFunction) { + final IntSet D51 = computeBinaryFlow(edge.d2, d2, (IBinaryReturnFlowFunction) retf); + if (D51 != null) { + D51.foreach(d5 -> { + newSummaryEdge(edge, curSummaryEdge, returnSite, d5); + propagate(edge.entry, edge.d1, returnSite, d5); + }); } - }); - } + } else { + final IntSet D52 = computeFlow(d2, (IUnaryFlowFunction) retf); + if (D52 != null) { + D52.foreach(d5 -> { + newSummaryEdge(edge, curSummaryEdge, returnSite, d5); + propagate(edge.entry, edge.d1, returnSite, d5); + }); + } + } + curSummaryEdge = null; + }); } } } @@ -948,16 +915,13 @@ public class TabulationSolver { StringBuffer result = new StringBuffer(); TreeMap> map = new TreeMap>(ToStringComparator.instance()); - Comparator c = new Comparator() { - @Override - public int compare(Object o1, Object o2) { - if (!(o1 instanceof IBasicBlock)) { - return -1; - } - IBasicBlock bb1 = (IBasicBlock) o1; - IBasicBlock bb2 = (IBasicBlock) o2; - return bb1.getNumber() - bb2.getNumber(); + Comparator c = (o1, o2) -> { + if (!(o1 instanceof IBasicBlock)) { + return -1; } + IBasicBlock bb1 = (IBasicBlock) o1; + IBasicBlock bb2 = (IBasicBlock) o2; + return bb1.getNumber() - bb2.getNumber(); }; for (Iterator it = supergraph.iterator(); it.hasNext();) { T n = it.next(); diff --git a/com.ibm.wala.core/src/com/ibm/wala/demandpa/alg/DemandRefinementPointsTo.java b/com.ibm.wala.core/src/com/ibm/wala/demandpa/alg/DemandRefinementPointsTo.java index e604fda7d..34c72f9cc 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/demandpa/alg/DemandRefinementPointsTo.java +++ b/com.ibm.wala.core/src/com/ibm/wala/demandpa/alg/DemandRefinementPointsTo.java @@ -129,7 +129,6 @@ import com.ibm.wala.util.collections.Util; import com.ibm.wala.util.debug.Assertions; import com.ibm.wala.util.debug.UnimplementedError; import com.ibm.wala.util.intset.IntSet; -import com.ibm.wala.util.intset.IntSetAction; import com.ibm.wala.util.intset.MutableIntSet; import com.ibm.wala.util.intset.MutableIntSetFactory; import com.ibm.wala.util.intset.MutableMapping; @@ -286,13 +285,7 @@ public class DemandRefinementPointsTo extends AbstractDemandPointsTo { throw new IllegalArgumentException("p2SetWithStates == null"); } Collection finalP2Set = Iterator2Collection.toSet(new MapIterator, T>(p2SetWithStates.iterator(), - new Function, T>() { - - @Override - public T apply(WithState object) { - return object.getWrapped(); - } - })); + object -> object.getWrapped())); return finalP2Set; } @@ -502,13 +495,7 @@ public class DemandRefinementPointsTo extends AbstractDemandPointsTo { * do all instance keys in p2set pass ikeyPred? */ private static boolean passesPred(Collection curP2Set, final Predicate ikeyPred) { - return Util.forAll(curP2Set, new Predicate() { - - @Override - public boolean test(InstanceKeyAndState t) { - return ikeyPred.test(t.getInstanceKey()); - } - }); + return Util.forAll(curP2Set, t -> ikeyPred.test(t.getInstanceKey())); } /** @@ -910,47 +897,32 @@ public class DemandRefinementPointsTo extends AbstractDemandPointsTo { if (typeFilter instanceof SingleClassFilter) { final IClass concreteType = ((SingleClassFilter) typeFilter).getConcreteType(); final MutableIntSet tmp = intSetFactory.make(); - vals.foreach(new IntSetAction() { - - @Override - public void act(int x) { - InstanceKeyAndState ikAndState = ikAndStates.getMappedObject(x); - if (cha.isAssignableFrom(concreteType, ikAndState.getInstanceKey().getConcreteType())) { - tmp.add(x); - } + vals.foreach(x -> { + InstanceKeyAndState ikAndState = ikAndStates.getMappedObject(x); + if (cha.isAssignableFrom(concreteType, ikAndState.getInstanceKey().getConcreteType())) { + tmp.add(x); } - }); vals = tmp; } else if (typeFilter instanceof MultipleClassesFilter) { final MutableIntSet tmp = intSetFactory.make(); - vals.foreach(new IntSetAction() { - - @Override - public void act(int x) { - InstanceKeyAndState ikAndState = ikAndStates.getMappedObject(x); - for (IClass t : ((MultipleClassesFilter) typeFilter).getConcreteTypes()) { - if (cha.isAssignableFrom(t, ikAndState.getInstanceKey().getConcreteType())) { - tmp.add(x); - } + vals.foreach(x -> { + InstanceKeyAndState ikAndState = ikAndStates.getMappedObject(x); + for (IClass t : ((MultipleClassesFilter) typeFilter).getConcreteTypes()) { + if (cha.isAssignableFrom(t, ikAndState.getInstanceKey().getConcreteType())) { + tmp.add(x); } } - }); vals = tmp; } else if (typeFilter instanceof SingleInstanceFilter) { final InstanceKey theOnlyInstanceKey = ((SingleInstanceFilter) typeFilter).getInstance(); final MutableIntSet tmp = intSetFactory.make(); - vals.foreach(new IntSetAction() { - - @Override - public void act(int x) { - InstanceKeyAndState ikAndState = ikAndStates.getMappedObject(x); - if (ikAndState.getInstanceKey().equals(theOnlyInstanceKey)) { - tmp.add(x); - } + vals.foreach(x -> { + InstanceKeyAndState ikAndState = ikAndStates.getMappedObject(x); + if (ikAndState.getInstanceKey().equals(theOnlyInstanceKey)) { + tmp.add(x); } - }); vals = tmp; } else { @@ -983,15 +955,10 @@ public class DemandRefinementPointsTo extends AbstractDemandPointsTo { void handleCopy(final PointerKeyAndState curPkAndState, final PointerKey succPk, final IFlowLabel label) { assert !label.isBarred(); State curState = curPkAndState.getState(); - doTransition(curState, label, new Function() { - - @Override - public Object apply(State nextState) { - PointerKeyAndState succPkAndState = new PointerKeyAndState(succPk, nextState); - handleCopy(curPkAndState, succPkAndState, label); - return null; - } - + doTransition(curState, label, nextState -> { + PointerKeyAndState succPkAndState = new PointerKeyAndState(succPk, nextState); + handleCopy(curPkAndState, succPkAndState, label); + return null; }); } @@ -1153,43 +1120,28 @@ public class DemandRefinementPointsTo extends AbstractDemandPointsTo { final PointerKeyAndState defAndState = new PointerKeyAndState(heapModel.getPointerKeyForLocal(caller, invokeInstr .getDef()), receiverState); final PointerKey ret = heapModel.getPointerKeyForReturnValue(targetForCall); - doTransition(receiverState, returnLabel, new Function() { - - @Override - public Object apply(State retState) { - repropCallArg(defAndState, new PointerKeyAndState(ret, retState), returnLabel.bar()); - return null; - } - + doTransition(receiverState, returnLabel, retState -> { + repropCallArg(defAndState, new PointerKeyAndState(ret, retState), returnLabel.bar()); + return null; }); } final PointerKeyAndState exc = new PointerKeyAndState(heapModel.getPointerKeyForLocal(caller, invokeInstr .getException()), receiverState); final PointerKey excRet = heapModel.getPointerKeyForExceptionalReturnValue(targetForCall); - doTransition(receiverState, returnLabel, new Function() { - - @Override - public Object apply(State excRetState) { - repropCallArg(exc, new PointerKeyAndState(excRet, excRetState), returnLabel.bar()); - return null; - } - + doTransition(receiverState, returnLabel, excRetState -> { + repropCallArg(exc, new PointerKeyAndState(excRet, excRetState), returnLabel.bar()); + return null; }); for (Iterator iter = new PointerParamValueNumIterator(targetForCall); iter.hasNext();) { final int formalNum = iter.next(); final int actualNum = formalNum - 1; final ParamBarLabel paramBarLabel = ParamBarLabel.make(new CallerSiteContext(caller, call)); - doTransition(receiverState, paramBarLabel, new Function() { - - @Override - public Object apply(State formalState) { - repropCallArg( - new PointerKeyAndState(heapModel.getPointerKeyForLocal(targetForCall, formalNum), formalState), - new PointerKeyAndState(heapModel.getPointerKeyForLocal(caller, invokeInstr.getUse(actualNum)), receiverState), - paramBarLabel); - return null; - } - + doTransition(receiverState, paramBarLabel, formalState -> { + repropCallArg( + new PointerKeyAndState(heapModel.getPointerKeyForLocal(targetForCall, formalNum), formalState), + new PointerKeyAndState(heapModel.getPointerKeyForLocal(caller, invokeInstr.getUse(actualNum)), receiverState), + paramBarLabel); + return null; }); } } @@ -1250,17 +1202,12 @@ public class DemandRefinementPointsTo extends AbstractDemandPointsTo { if (DEBUG) { System.err.println("alloc " + ik + " assigned to " + curPk); } - doTransition(curState, label, new Function() { - - @Override - public Object apply(State newState) { - InstanceKeyAndState ikAndState = new InstanceKeyAndState(ik, newState); - int n = ikAndStates.add(ikAndState); - findOrCreate(pkToP2Set, curPkAndState).add(n); - addToPToWorklist(curPkAndState); - return null; - } - + doTransition(curState, label, newState -> { + InstanceKeyAndState ikAndState = new InstanceKeyAndState(ik, newState); + int n = ikAndStates.add(ikAndState); + findOrCreate(pkToP2Set, curPkAndState).add(n); + addToPToWorklist(curPkAndState); + return null; }); } @@ -1775,15 +1722,10 @@ public class DemandRefinementPointsTo extends AbstractDemandPointsTo { public void visitAssignGlobal(final AssignGlobalLabel label, Object dst) { for (Iterator readIter = g.getReadsOfStaticField((StaticFieldKey) dst); readIter.hasNext();) { final PointerKey predPk = (PointerKey) readIter.next(); - doTransition(curState, AssignGlobalBarLabel.v(), new Function() { - - @Override - public Object apply(State predPkState) { - PointerKeyAndState predPkAndState = new PointerKeyAndState(predPk, predPkState); - handleTrackedPred(trackedSet, predPkAndState, AssignGlobalBarLabel.v()); - return null; - } - + doTransition(curState, AssignGlobalBarLabel.v(), predPkState -> { + PointerKeyAndState predPkAndState = new PointerKeyAndState(predPk, predPkState); + handleTrackedPred(trackedSet, predPkAndState, AssignGlobalBarLabel.v()); + return null; }); } } @@ -1807,15 +1749,10 @@ public class DemandRefinementPointsTo extends AbstractDemandPointsTo { // send to all getfield sources for (Iterator readIter = g.getReadsOfInstanceField(storeBase, field); readIter.hasNext();) { final PointerKey predPk = readIter.next(); - doTransition(curState, MatchBarLabel.v(), new Function() { - - @Override - public Object apply(State predPkState) { - PointerKeyAndState predPkAndState = new PointerKeyAndState(predPk, predPkState); - handleTrackedPred(trackedSet, predPkAndState, MatchBarLabel.v()); - return null; - } - + doTransition(curState, MatchBarLabel.v(), predPkState -> { + PointerKeyAndState predPkAndState = new PointerKeyAndState(predPk, predPkState); + handleTrackedPred(trackedSet, predPkAndState, MatchBarLabel.v()); + return null; }); } @@ -1846,15 +1783,10 @@ public class DemandRefinementPointsTo extends AbstractDemandPointsTo { @Override public void visitAssign(final AssignLabel label, Object dst) { final PointerKey predPk = (PointerKey) dst; - doTransition(curState, label.bar(), new Function() { - - @Override - public Object apply(State predPkState) { - PointerKeyAndState predPkAndState = new PointerKeyAndState(predPk, predPkState); - handleTrackedPred(trackedSet, predPkAndState, label.bar()); - return null; - } - + doTransition(curState, label.bar(), predPkState -> { + PointerKeyAndState predPkAndState = new PointerKeyAndState(predPk, predPkState); + handleTrackedPred(trackedSet, predPkAndState, label.bar()); + return null; }); } @@ -1865,14 +1797,10 @@ public class DemandRefinementPointsTo extends AbstractDemandPointsTo { @Override void handle(PointerKeyAndState src, final PointerKey dst, final IFlowLabel label) { assert src == curPkAndState; - doTransition(curState, label, new Function() { - @Override - public Object apply(State dstState) { - PointerKeyAndState dstAndState = new PointerKeyAndState(dst, dstState); - handleTrackedPred(trackedSet, dstAndState, label); - return null; - } - + doTransition(curState, label, dstState -> { + PointerKeyAndState dstAndState = new PointerKeyAndState(dst, dstState); + handleTrackedPred(trackedSet, dstAndState, label); + return null; }); } @@ -2127,13 +2055,9 @@ public class DemandRefinementPointsTo extends AbstractDemandPointsTo { final PointerKey actualPk = heapModel.getPointerKeyForLocal(caller, callInstr.getUse(paramPos)); assert g.containsNode(actualPk); assert g.containsNode(localPk); - doTransition(curState, paramLabel, new Function() { - @Override - public Object apply(State nextState) { - propagate(new PointerKeyAndState(actualPk, nextState)); - return null; - } - + doTransition(curState, paramLabel, nextState -> { + propagate(new PointerKeyAndState(actualPk, nextState)); + return null; }); } } @@ -2180,14 +2104,9 @@ public class DemandRefinementPointsTo extends AbstractDemandPointsTo { final PointerKey retVal = isExceptional ? heapModel.getPointerKeyForExceptionalReturnValue(callee) : heapModel .getPointerKeyForReturnValue(callee); assert g.containsNode(retVal); - doTransition(curState, ReturnLabel.make(callSiteAndCGNode), new Function() { - - @Override - public Object apply(State nextState) { - propagate(new PointerKeyAndState(retVal, nextState)); - return null; - } - + doTransition(curState, ReturnLabel.make(callSiteAndCGNode), nextState -> { + propagate(new PointerKeyAndState(retVal, nextState)); + return null; }); } } else { @@ -2202,14 +2121,9 @@ public class DemandRefinementPointsTo extends AbstractDemandPointsTo { final PointerKey retVal = isExceptional ? heapModel.getPointerKeyForExceptionalReturnValue(callee) : heapModel .getPointerKeyForReturnValue(callee); assert g.containsNode(retVal); - doTransition(curState, ReturnLabel.make(callSiteAndCGNode), new Function() { - - @Override - public Object apply(State nextState) { - propagate(new PointerKeyAndState(retVal, nextState)); - return null; - } - + doTransition(curState, ReturnLabel.make(callSiteAndCGNode), nextState -> { + propagate(new PointerKeyAndState(retVal, nextState)); + return null; }); } } @@ -2305,17 +2219,12 @@ public class DemandRefinementPointsTo extends AbstractDemandPointsTo { if (DEBUG_TOPLEVEL) { System.err.println("toplevel alloc " + ik + " assigned to " + curPk); } - doTransition(curState, label, new Function() { - - @Override - public Object apply(State newState) { - // just check if ik violates the pred - if (!pred.test(ik)) { - foundBadInstanceKey = true; - } - return null; + doTransition(curState, label, newState -> { + // just check if ik violates the pred + if (!pred.test(ik)) { + foundBadInstanceKey = true; } - + return null; }); } @@ -2360,14 +2269,9 @@ public class DemandRefinementPointsTo extends AbstractDemandPointsTo { for (Iterator writesToInstanceField = g.getWritesToInstanceField(loadBase, field); writesToInstanceField .hasNext();) { final PointerKey writtenPk = writesToInstanceField.next(); - doTransition(curState, MatchLabel.v(), new Function() { - - @Override - public Object apply(State nextState) { - h.propagate(new PointerKeyAndState(writtenPk, nextState)); - return null; - } - + doTransition(curState, MatchLabel.v(), nextState -> { + h.propagate(new PointerKeyAndState(writtenPk, nextState)); + return null; }); } } @@ -2418,14 +2322,9 @@ public class DemandRefinementPointsTo extends AbstractDemandPointsTo { for (Iterator writesToStaticField = g.getWritesToStaticField((StaticFieldKey) dst); writesToStaticField .hasNext();) { final PointerKey writtenPk = (PointerKey) writesToStaticField.next(); - doTransition(curState, label, new Function() { - - @Override - public Object apply(State nextState) { - h.propagate(new PointerKeyAndState(writtenPk, nextState)); - return null; - } - + doTransition(curState, label, nextState -> { + h.propagate(new PointerKeyAndState(writtenPk, nextState)); + return null; }); } @@ -2434,14 +2333,9 @@ public class DemandRefinementPointsTo extends AbstractDemandPointsTo { @Override public void visitAssign(AssignLabel label, Object dst) { final PointerKey succPk = (PointerKey) dst; - doTransition(curState, label, new Function() { - - @Override - public Object apply(State nextState) { - h.propagate(new PointerKeyAndState(succPk, nextState)); - return null; - } - + doTransition(curState, label, nextState -> { + h.propagate(new PointerKeyAndState(succPk, nextState)); + return null; }); } diff --git a/com.ibm.wala.core/src/com/ibm/wala/escape/LocalLiveRangeAnalysis.java b/com.ibm.wala.core/src/com/ibm/wala/escape/LocalLiveRangeAnalysis.java index d0ab67967..6f84f9dcd 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/escape/LocalLiveRangeAnalysis.java +++ b/com.ibm.wala.core/src/com/ibm/wala/escape/LocalLiveRangeAnalysis.java @@ -57,11 +57,7 @@ public class LocalLiveRangeAnalysis { final Collection uses = findBlocks(ir, du.getUses(v)); // a filter which accepts everything but the block which defs v - Predicate notDef = new Predicate() { - @Override public boolean test(Object o) { - return (defBlock == null || !defBlock.equals(o)); - } - }; + Predicate notDef = o -> (defBlock == null || !defBlock.equals(o)); if (defBlock != null && defBlock.equals(queryBlock)) { // for now, conservatively say it's live. fix this later if necessary. diff --git a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/AnalysisScope.java b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/AnalysisScope.java index c191fb0e4..5b05c4e18 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/AnalysisScope.java +++ b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/AnalysisScope.java @@ -20,8 +20,6 @@ import java.util.LinkedHashMap; import java.util.List; import java.util.Map; import java.util.Set; -import java.util.function.Function; -import java.util.function.Predicate; import java.util.jar.Attributes; import java.util.jar.JarFile; import java.util.jar.Manifest; @@ -379,16 +377,7 @@ public class AnalysisScope { private JarFile getRtJar() { return RtJar.getRtJar( new MapIterator( - new FilterIterator(getModules(getPrimordialLoader()).iterator(), new Predicate() { - @Override - public boolean test(Module M) { - return M instanceof JarFileModule; - } }), new Function() { - - @Override - public JarFile apply(Module M) { - return ((JarFileModule) M).getJarFile(); - } })); + new FilterIterator(getModules(getPrimordialLoader()).iterator(), M -> M instanceof JarFileModule), M -> ((JarFileModule) M).getJarFile())); } public String getJavaLibraryVersion() throws IllegalStateException { diff --git a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/cha/CHACallGraph.java b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/cha/CHACallGraph.java index 8e2acf563..ae3552a97 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/cha/CHACallGraph.java +++ b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/cha/CHACallGraph.java @@ -16,7 +16,6 @@ import java.util.Iterator; import java.util.Map; import java.util.Set; import java.util.Stack; -import java.util.function.Function; import java.util.function.Predicate; import com.ibm.wala.classLoader.CallSiteReference; @@ -163,21 +162,14 @@ public class CHACallGraph extends BasicCallGraph { new MapIterator( new FilterIterator( getPossibleTargets(site), - new Predicate() { - @Override public boolean test(IMethod o) { - return isRelevantMethod(o); - } - } + o -> isRelevantMethod(o) ), - new Function() { - @Override - public CGNode apply(IMethod object) { - try { - return findOrCreateNode(object, Everywhere.EVERYWHERE); - } catch (CancelException e) { - assert false : e.toString(); - return null; - } + object -> { + try { + return findOrCreateNode(object, Everywhere.EVERYWHERE); + } catch (CancelException e) { + assert false : e.toString(); + return null; } })); } @@ -191,11 +183,7 @@ public class CHACallGraph extends BasicCallGraph { public Iterator getPossibleSites(final CGNode src, final CGNode target) { return new FilterIterator(getInterpreter(src).iterateCallSites(src), - new Predicate() { - @Override public boolean test(CallSiteReference o) { - return getPossibleTargets(src, o).contains(target); - } - }); + o -> getPossibleTargets(src, o).contains(target)); } private class CHARootNode extends CHANode { 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 761dc78d7..c972a6353 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 @@ -16,7 +16,6 @@ import java.util.HashSet; import java.util.Iterator; import java.util.Set; import java.util.function.IntFunction; -import java.util.function.Predicate; import com.ibm.wala.cfg.ControlFlowGraph; import com.ibm.wala.classLoader.CallSiteReference; @@ -187,11 +186,9 @@ public class ExplicitCallGraph extends BasicCallGraph imp */ protected Iterator getPossibleSites(final CGNode to) { final int n = getCallGraph().getNumber(to); - return new FilterIterator(iterateCallSites(), new Predicate() { - @Override public boolean test(CallSiteReference o) { - IntSet s = getPossibleTargetNumbers(o); - return s == null ? false : s.contains(n); - } + return new FilterIterator(iterateCallSites(), o -> { + IntSet s = getPossibleTargetNumbers(o); + return s == null ? false : s.contains(n); }); } @@ -356,15 +353,12 @@ public class ExplicitCallGraph extends BasicCallGraph imp protected class ExplicitEdgeManager implements NumberedEdgeManager { - final IntFunction toNode = new IntFunction() { - @Override - public CGNode apply(int i) { - CGNode result = getNode(i); - // if (Assertions.verifyAssertions && result == null) { - // Assertions.UNREACHABLE("uh oh " + i); - // } - return result; - } + final IntFunction toNode = i -> { + CGNode result = getNode(i); + // if (Assertions.verifyAssertions && result == null) { + // Assertions.UNREACHABLE("uh oh " + i); + // } + return result; }; /** diff --git a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/impl/PartialCallGraph.java b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/impl/PartialCallGraph.java index 57dd82260..c7ef6b915 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/impl/PartialCallGraph.java +++ b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/impl/PartialCallGraph.java @@ -13,7 +13,6 @@ package com.ibm.wala.ipa.callgraph.impl; import java.util.Collection; import java.util.Iterator; import java.util.Set; -import java.util.function.Predicate; import com.ibm.wala.classLoader.CallSiteReference; import com.ibm.wala.classLoader.IMethod; @@ -53,11 +52,7 @@ public class PartialCallGraph extends DelegatingGraph implements CallGra * @param nodes set of nodes that will be included in the new, partial call graph */ public static PartialCallGraph make(final CallGraph cg, final Collection partialRoots, final Collection nodes) { - Graph partialGraph = GraphSlicer.prune(cg, new Predicate() { - @Override public boolean test(CGNode o) { - return nodes.contains(o); - } - }); + Graph partialGraph = GraphSlicer.prune(cg, o -> nodes.contains(o)); return new PartialCallGraph(cg, partialRoots, partialGraph); } @@ -69,11 +64,7 @@ public class PartialCallGraph extends DelegatingGraph implements CallGra */ public static PartialCallGraph make(CallGraph cg, Collection partialRoots) { final Set nodes = DFS.getReachableNodes(cg, partialRoots); - Graph partialGraph = GraphSlicer.prune(cg, new Predicate() { - @Override public boolean test(CGNode o) { - return nodes.contains(o); - } - }); + Graph partialGraph = GraphSlicer.prune(cg, o -> nodes.contains(o)); return new PartialCallGraph(cg, partialRoots, partialGraph); } @@ -122,11 +113,7 @@ public class PartialCallGraph extends DelegatingGraph implements CallGra @Override public Iterator iterateNodes(IntSet nodes) { - return new FilterIterator(cg.iterateNodes(nodes), new Predicate() { - @Override public boolean test(CGNode o) { - return containsNode(o); - } - }); + return new FilterIterator(cg.iterateNodes(nodes), o -> containsNode(o)); } @Override 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 a1359d5dd..157874ea5 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 @@ -167,12 +167,7 @@ public class Util { } } } - return new Iterable() { - @Override - public Iterator iterator() { - return result.iterator(); - } - }; + return () -> result.iterator(); } /** @@ -218,32 +213,29 @@ public class Util { } } - return new Iterable() { - @Override - public Iterator iterator() { - final Atom mainMethod = Atom.findOrCreateAsciiAtom("main"); - return new Iterator() { - private int index = 0; + return () -> { + final Atom mainMethod = Atom.findOrCreateAsciiAtom("main"); + return new Iterator() { + private int index = 0; - @Override - public void remove() { - Assertions.UNREACHABLE(); - } + @Override + public void remove() { + Assertions.UNREACHABLE(); + } - @Override - public boolean hasNext() { - return index < classNames.length; - } + @Override + public boolean hasNext() { + return index < classNames.length; + } - @Override - public Entrypoint next() { - TypeReference T = TypeReference.findOrCreate(loaderRef, TypeName.string2TypeName(classNames[index++])); - MethodReference mainRef = MethodReference.findOrCreate(T, mainMethod, Descriptor - .findOrCreateUTF8("([Ljava/lang/String;)V")); - return new DefaultEntrypoint(mainRef, cha); - } - }; - } + @Override + public Entrypoint next() { + TypeReference T = TypeReference.findOrCreate(loaderRef, TypeName.string2TypeName(classNames[index++])); + MethodReference mainRef = MethodReference.findOrCreate(T, mainMethod, Descriptor + .findOrCreateUTF8("([Ljava/lang/String;)V")); + return new DefaultEntrypoint(mainRef, cha); + } + }; }; } diff --git a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/AllocationSite.java b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/AllocationSite.java index b03674e98..bb22964d9 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/AllocationSite.java +++ b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/AllocationSite.java @@ -11,8 +11,6 @@ package com.ibm.wala.ipa.callgraph.propagation; import java.util.Iterator; -import java.util.function.Function; -import java.util.function.Predicate; import com.ibm.wala.classLoader.IClass; import com.ibm.wala.classLoader.IMethod; @@ -96,17 +94,8 @@ public class AllocationSite implements InstanceKey { return new MapIterator>( new FilterIterator( CG.getNodes(method.getReference()).iterator(), - new Predicate() { - @Override public boolean test(CGNode o) { - return o.getMethod().equals(method); - } - } + o -> o.getMethod().equals(method) ), - new Function>() { - @Override - public Pair apply(CGNode object) { - return Pair.make(object, site); - } - }); + object -> Pair.make(object, site)); } } diff --git a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/ConcreteTypeKey.java b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/ConcreteTypeKey.java index 7e31075f8..98e6054da 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/ConcreteTypeKey.java +++ b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/ConcreteTypeKey.java @@ -12,8 +12,6 @@ package com.ibm.wala.ipa.callgraph.propagation; import java.util.Collection; import java.util.Iterator; -import java.util.function.Function; -import java.util.function.Predicate; import com.ibm.wala.classLoader.IClass; import com.ibm.wala.classLoader.NewSiteReference; @@ -110,18 +108,9 @@ public final class ConcreteTypeKey implements InstanceKey { return new MapIterator>( new FilterIterator( outer.iterateNewSites(), - new Predicate() { - @Override public boolean test(NewSiteReference o) { - return o.getDeclaredType().equals(type.getReference()); - } - } + o -> o.getDeclaredType().equals(type.getReference()) ), - new Function>() { - @Override - public Pair apply(NewSiteReference object) { - return Pair.make(outer, object); - } - }); + object -> Pair.make(outer, object)); } }; } diff --git a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/PointsToMap.java b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/PointsToMap.java index 22680b151..b2aeb2790 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/PointsToMap.java +++ b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/PointsToMap.java @@ -11,7 +11,6 @@ package com.ibm.wala.ipa.callgraph.propagation; import java.util.Iterator; -import java.util.function.Predicate; import com.ibm.wala.util.collections.FilterIterator; import com.ibm.wala.util.collections.IVector; @@ -201,11 +200,7 @@ public class PointsToMap { * @return {@link Iterator}<{@link PointerKey}> */ public Iterator getTransitiveRoots() { - return new FilterIterator(iterateKeys(), new Predicate() { - @Override public boolean test(PointerKey o) { - return isTransitiveRoot(o); - } - }); + return new FilterIterator(iterateKeys(), o -> isTransitiveRoot(o)); } /** diff --git a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/PointsToSetVariable.java b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/PointsToSetVariable.java index a7766b069..5d3730038 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/PointsToSetVariable.java +++ b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/PointsToSetVariable.java @@ -19,7 +19,6 @@ import com.ibm.wala.ssa.IR; import com.ibm.wala.types.TypeReference; import com.ibm.wala.util.debug.Assertions; import com.ibm.wala.util.intset.IntSet; -import com.ibm.wala.util.intset.IntSetAction; import com.ibm.wala.util.intset.MutableMapping; import com.ibm.wala.util.intset.MutableSparseIntSet; @@ -120,21 +119,16 @@ public class PointsToSetVariable extends IntSetVariable { if (cha.isAssignableFrom(cha.lookupClass(TypeReference.JavaLangThrowable), type)) { return; } - b.foreach(new IntSetAction() { - - @Override - public void act(int x) { - InstanceKey ik = instanceKeys.getMappedObject(x); - IClass concreteType = ik.getConcreteType(); - if (!cha.isAssignableFrom(type, concreteType)) { - System.err.println("BOOM"); - System.err.println(ir); - System.err.println(lpk + " type " + type); - System.err.println(ik + " type " + concreteType); - Assertions.UNREACHABLE(); - } + b.foreach(x -> { + InstanceKey ik = instanceKeys.getMappedObject(x); + IClass concreteType = ik.getConcreteType(); + if (!cha.isAssignableFrom(type, concreteType)) { + System.err.println("BOOM"); + System.err.println(ir); + System.err.println(lpk + " type " + type); + System.err.println(ik + " type " + concreteType); + Assertions.UNREACHABLE(); } - }); } 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 20d1b6945..9419754c6 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 @@ -839,27 +839,24 @@ public abstract class PropagationCallGraphBuilder implements CallGraphBuilder { + InstanceKey I = system.getInstanceKey(i); + if (!I.getConcreteType().isArrayClass()) { + return; } + TypeReference C = I.getConcreteType().getReference().getArrayElementType(); + if (C.isPrimitiveType()) { + return; + } + PointerKey p = getPointerKeyForArrayContents(I); + if (p == null) { + return; + } + + if (DEBUG_ARRAY_LOAD) { + System.err.println("ArrayLoad add assign: " + dVal + " " + p); + } + sideEffect.b |= system.newFieldRead(dVal, assignOperator, p); }; if (priorInstances != null) { rhs.getValue().foreachExcluding(priorInstances, action); @@ -1022,20 +1019,17 @@ public abstract class PropagationCallGraphBuilder implements CallGraphBuilder { + InstanceKey I = system.getInstanceKey(i); + if (!representsNullType(I)) { + PointerKey p = getPointerKeyForInstanceField(I, getField()); - if (p != null) { - if (DEBUG_GET) { - String S = "Getfield add constraint " + dVal + " " + p; - System.err.println(S); - } - sideEffect.b |= system.newFieldRead(dVal, assignOperator, p); + if (p != null) { + if (DEBUG_GET) { + String S = "Getfield add constraint " + dVal + " " + p; + System.err.println(S); } + sideEffect.b |= system.newFieldRead(dVal, assignOperator, p); } } }; @@ -1137,23 +1131,20 @@ public abstract class PropagationCallGraphBuilder implements CallGraphBuilder { + InstanceKey I = system.getInstanceKey(i); + if (!representsNullType(I)) { + if (DEBUG_PUT) { + String S1 = "Putfield consider instance " + I; + System.err.println(S1); + } + PointerKey p = getPointerKeyForInstanceField(I, getField()); + if (p != null) { if (DEBUG_PUT) { - String S = "Putfield consider instance " + I; - System.err.println(S); - } - PointerKey p = getPointerKeyForInstanceField(I, getField()); - if (p != null) { - if (DEBUG_PUT) { - String S = "Putfield add constraint " + p + " " + pVal; - System.err.println(S); - } - sideEffect.b |= system.newFieldWrite(p, assign, pVal); + String S2 = "Putfield add constraint " + p + " " + pVal; + System.err.println(S2); } + sideEffect.b |= system.newFieldWrite(p, assign, pVal); } } }; @@ -1240,15 +1231,12 @@ public abstract class PropagationCallGraphBuilder implements CallGraphBuilder { + InstanceKey I = system.getInstanceKey(i); + if (!representsNullType(I)) { + PointerKey p = getPointerKeyForInstanceField(I, field); + if (p != null) { + sideEffect.b |= system.newConstraint(p, instance); } } }; @@ -1314,33 +1302,30 @@ public abstract class PropagationCallGraphBuilder implements CallGraphBuilder { + InstanceKey I = system.getInstanceKey(i); + if (!I.getConcreteType().isArrayClass()) { + return; + } + if (I instanceof ZeroLengthArrayInNode) { + return; + } + TypeReference C = I.getConcreteType().getReference().getArrayElementType(); + if (C.isPrimitiveType()) { + return; + } + IClass contents = getClassHierarchy().lookupClass(C); + if (contents == null) { + assert false : "null type for " + C + " " + I.getConcreteType(); + } + PointerKey p = getPointerKeyForArrayContents(I); + if (contents.isInterface()) { + if (getClassHierarchy().implementsInterface(instance.getConcreteType(), contents)) { + sideEffect.b |= system.newConstraint(p, instance); } - if (I instanceof ZeroLengthArrayInNode) { - return; - } - TypeReference C = I.getConcreteType().getReference().getArrayElementType(); - if (C.isPrimitiveType()) { - return; - } - IClass contents = getClassHierarchy().lookupClass(C); - if (contents == null) { - assert false : "null type for " + C + " " + I.getConcreteType(); - } - PointerKey p = getPointerKeyForArrayContents(I); - if (contents.isInterface()) { - if (getClassHierarchy().implementsInterface(instance.getConcreteType(), contents)) { - sideEffect.b |= system.newConstraint(p, instance); - } - } else { - if (getClassHierarchy().isSubclassOf(instance.getConcreteType(), contents)) { - sideEffect.b |= system.newConstraint(p, instance); - } + } else { + if (getClassHierarchy().isSubclassOf(instance.getConcreteType(), contents)) { + sideEffect.b |= system.newConstraint(p, instance); } } }; diff --git a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/PropagationGraph.java b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/PropagationGraph.java index 3915caace..f5a9c3f16 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/PropagationGraph.java +++ b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/PropagationGraph.java @@ -16,7 +16,6 @@ import java.util.HashSet; import java.util.Iterator; import java.util.List; import java.util.Map; -import java.util.function.Predicate; import com.ibm.wala.fixedpoint.impl.GeneralStatement; import com.ibm.wala.fixpoint.AbstractOperator; @@ -271,11 +270,7 @@ public class PropagationGraph implements IFixedPointSystem @Override public Iterator getStatements() { - Iterator it = new FilterIterator<>(delegateGraph.iterator(), new Predicate() { - @Override public boolean test(INodeWithNumber x) { - return x instanceof AbstractStatement; - } - }); + Iterator it = new FilterIterator<>(delegateGraph.iterator(), x -> x instanceof AbstractStatement); Iterator converted = new MapIterator<>(it, AbstractStatement.class::cast); return new CompoundIterator(converted, new GlobalImplicitIterator()); } @@ -762,11 +757,7 @@ public class PropagationGraph implements IFixedPointSystem @Override public Iterator getVariables() { - Iterator it = new FilterIterator<>(delegateGraph.iterator(), new Predicate() { - @Override public boolean test(INodeWithNumber x) { - return x instanceof IVariable; - } - }); + Iterator it = new FilterIterator<>(delegateGraph.iterator(), x -> x instanceof IVariable); Iterator converted = new MapIterator(it, PointsToSetVariable.class::cast); return converted; } diff --git a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/PropagationSystem.java b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/PropagationSystem.java index 0841ed720..9b3e4cf88 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/PropagationSystem.java +++ b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/PropagationSystem.java @@ -46,7 +46,6 @@ import com.ibm.wala.util.graph.NumberedGraph; import com.ibm.wala.util.heapTrace.HeapTracer; import com.ibm.wala.util.intset.IntIterator; import com.ibm.wala.util.intset.IntSet; -import com.ibm.wala.util.intset.IntSetAction; import com.ibm.wala.util.intset.IntSetUtil; import com.ibm.wala.util.intset.MutableIntSet; import com.ibm.wala.util.intset.MutableMapping; @@ -644,14 +643,11 @@ public class PropagationSystem extends DefaultFixedPointSolver { + for (int i = 0; i < 4; i++) { + topFive[i] = topFive[i + 1]; } + topFive[4] = x; }); StringBuffer result = new StringBuffer(); for (int i = 0; i < 5; i++) { 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 9fefb1433..c1f74a295 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 @@ -70,14 +70,11 @@ public class ReflectionHandler { System.err.println(" " + x); } } - Predicate f = new Predicate() { - @Override - public boolean test(Statement s) { - if (s.getKind() == Kind.NORMAL) { - return ((NormalStatement) s).getInstruction() instanceof SSACheckCastInstruction; - } else { - return false; - } + Predicate f = s -> { + if (s.getKind() == Kind.NORMAL) { + return ((NormalStatement) s).getInstruction() instanceof SSACheckCastInstruction; + } else { + return false; } }; Collection casts = Iterator2Collection.toSet(new FilterIterator<>(slice.iterator(), f)); diff --git a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/SSAPropagationCallGraphBuilder.java b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/SSAPropagationCallGraphBuilder.java index aece1d709..9bc5e54b3 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/SSAPropagationCallGraphBuilder.java +++ b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/SSAPropagationCallGraphBuilder.java @@ -550,12 +550,9 @@ public abstract class SSAPropagationCallGraphBuilder extends PropagationCallGrap } else { IntSet s = getParamObjects(pi, rhsi); if (s != null && !s.isEmpty()) { - s.foreach(new IntSetAction() { - @Override - public void act(int x) { - keys[pi] = system.getInstanceKey(x); - rec(pi + 1, rhsi + 1); - } + s.foreach(x -> { + keys[pi] = system.getInstanceKey(x); + rec(pi + 1, rhsi + 1); }); } /*else { if (!site.isDispatch() || p != 0) { @@ -1174,12 +1171,9 @@ public abstract class SSAPropagationCallGraphBuilder extends PropagationCallGrap } final List pks = new ArrayList(params.size()); - params.foreach(new IntSetAction() { - @Override - public void act(int x) { - if (!contentsAreInvariant(symbolTable, du, instruction.getUse(x))) { - pks.add(getBuilder().getPointerKeyForLocal(node, instruction.getUse(x))); - } + params.foreach(x -> { + if (!contentsAreInvariant(symbolTable, du, instruction.getUse(x))) { + pks.add(getBuilder().getPointerKeyForLocal(node, instruction.getUse(x))); } }); @@ -1739,42 +1733,34 @@ public abstract class SSAPropagationCallGraphBuilder extends PropagationCallGrap IntSet currentObjs = rhs[rhsIndex].getValue(); if (currentObjs != null) { final IntSet oldObjs = previousPtrs[rhsIndex]; - currentObjs.foreachExcluding(oldObjs, new IntSetAction() { - @Override - public void act(final int x) { - new CrossProductRec(constParams, call, node, - new Consumer() { - @Override - public void accept(InstanceKey[] v) { - IClass recv = null; - if (call.getCallSite().isDispatch()) { - recv = v[0].getConcreteType(); - } - CGNode target = getTargetForCall(node, call.getCallSite(), recv, v); - if (target != null) { - changed.b = true; - processResolvedCall(node, call, target, constParams, uniqueCatch); - if (!haveAlreadyVisited(target)) { - markDiscovered(target); - } - } - } - }) { - - { - rec(0, 0); + currentObjs.foreachExcluding(oldObjs, x -> new CrossProductRec(constParams, call, node, + v -> { + IClass recv = null; + if (call.getCallSite().isDispatch()) { + recv = v[0].getConcreteType(); } - - @Override - protected IntSet getParamObjects(int paramVn, int rhsi) { - if (rhsi == y) { - return IntSetUtil.make(new int[]{ x }); - } else { - return previousPtrs[rhsi]; + CGNode target = getTargetForCall(node, call.getCallSite(), recv, v); + if (target != null) { + changed.b = true; + processResolvedCall(node, call, target, constParams, uniqueCatch); + if (!haveAlreadyVisited(target)) { + markDiscovered(target); } } - }; - } + }) { + + { + rec(0, 0); + } + + @Override + protected IntSet getParamObjects(int paramVn, int rhsi) { + if (rhsi == y) { + return IntSetUtil.make(new int[]{ x }); + } else { + return previousPtrs[rhsi]; + } + } }); previousPtrs[rhsIndex].addAll(currentObjs); } @@ -2022,17 +2008,14 @@ public abstract class SSAPropagationCallGraphBuilder extends PropagationCallGrap // associated with the instruction final CallSiteReference site = instruction.getCallSite(); final Set targets = HashSetFactory.make(); - Consumer f = new Consumer() { - @Override - public void accept(InstanceKey[] v) { - IClass recv = null; - if (site.isDispatch()) { - recv = v[0].getConcreteType(); - } - CGNode target = getTargetForCall(caller, site, recv, v); - if (target != null) { - targets.add(target); - } + Consumer f = v -> { + IClass recv = null; + if (site.isDispatch()) { + recv = v[0].getConcreteType(); + } + CGNode target = getTargetForCall(caller, site, recv, v); + if (target != null) { + targets.add(target); } }; iterateCrossProduct(caller, instruction, invs, f); diff --git a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/SmushedAllocationSiteInNode.java b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/SmushedAllocationSiteInNode.java index da903eb07..0a0c59cb3 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/SmushedAllocationSiteInNode.java +++ b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/SmushedAllocationSiteInNode.java @@ -11,8 +11,6 @@ package com.ibm.wala.ipa.callgraph.propagation; import java.util.Iterator; -import java.util.function.Function; -import java.util.function.Predicate; import com.ibm.wala.classLoader.IClass; import com.ibm.wala.classLoader.NewSiteReference; @@ -59,16 +57,7 @@ public class SmushedAllocationSiteInNode extends AbstractTypeInNode { return new MapIterator>( new FilterIterator( getNode().iterateNewSites(), - new Predicate() { - @Override public boolean test(NewSiteReference o) { - return o.getDeclaredType().equals(getConcreteType().getReference()); - } - }), - new Function>() { - @Override - public Pair apply(NewSiteReference object) { - return Pair.make(getNode(), object); - } - }); + o -> o.getDeclaredType().equals(getConcreteType().getReference())), + object -> Pair.make(getNode(), object)); } } 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 9b465ec6f..c079c2d4b 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 @@ -149,46 +149,43 @@ public class BasicRTABuilder extends AbstractRTABuilder { if (DEBUG_LEVEL >= 2) { System.err.println(("filtered value: " + value)); } - IntSetAction action = new IntSetAction() { - @Override - public void act(int ptr) { + IntSetAction action = ptr -> { + if (DEBUG) { + System.err.println((" dispatch to ptr " + ptr)); + } + InstanceKey iKey = system.getInstanceKey(ptr); + + CGNode target = getTargetForCall(caller, site, iKey.getConcreteType(), new InstanceKey[]{iKey}); + if (target == null) { + // This indicates an error; I sure hope getTargetForCall + // raised a warning about this! if (DEBUG) { - System.err.println((" dispatch to ptr " + ptr)); + System.err.println(("Warning: null target for call " + site + " " + iKey)); } - InstanceKey iKey = system.getInstanceKey(ptr); - - CGNode target = getTargetForCall(caller, site, iKey.getConcreteType(), new InstanceKey[]{iKey}); - if (target == null) { - // This indicates an error; I sure hope getTargetForCall - // raised a warning about this! - if (DEBUG) { - System.err.println(("Warning: null target for call " + site + " " + iKey)); - } + return; + } + if (clone2Assign) { + if (target.getMethod().getReference().equals(CloneInterpreter.CLONE)) { + // (mostly) ignore a call to clone: it won't affect the + // solution, but we should probably at least have a call + // edge + caller.addTarget(site, target); return; } - if (clone2Assign) { - if (target.getMethod().getReference().equals(CloneInterpreter.CLONE)) { - // (mostly) ignore a call to clone: it won't affect the - // solution, but we should probably at least have a call - // edge - caller.addTarget(site, target); - return; - } - } + } - IntSet targets = getCallGraph().getPossibleTargetNumbers(caller, site); - if (targets != null && targets.contains(target.getGraphNodeId())) { - // do nothing; we've previously discovered and handled this - // receiver for this call site. - return; - } + IntSet targets = getCallGraph().getPossibleTargetNumbers(caller, site); + if (targets != null && targets.contains(target.getGraphNodeId())) { + // do nothing; we've previously discovered and handled this + // receiver for this call site. + return; + } - // process the newly discovered target for this call - processResolvedCall(caller, site, target); + // process the newly discovered target for this call + processResolvedCall(caller, site, target); - if (!haveAlreadyVisited(target)) { - markDiscovered(target); - } + if (!haveAlreadyVisited(target)) { + markDiscovered(target); } }; diff --git a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/rta/TypeBasedHeapModel.java b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/rta/TypeBasedHeapModel.java index 1ba6acc1e..dda9e6243 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/rta/TypeBasedHeapModel.java +++ b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/rta/TypeBasedHeapModel.java @@ -14,7 +14,6 @@ import java.util.Collection; import java.util.Collections; import java.util.Iterator; import java.util.Map; -import java.util.function.Predicate; import com.ibm.wala.analysis.typeInference.TypeAbstraction; import com.ibm.wala.analysis.typeInference.TypeInference; @@ -176,12 +175,7 @@ public class TypeBasedHeapModel implements HeapModel { @Override public Iterator iteratePointerKeys() { initAllPKeys(); - Iterator filtered = new FilterIterator(pKeys.values().iterator(), new Predicate() { - @Override - public boolean test(Object o) { - return o instanceof PointerKey; - } - }); + Iterator filtered = new FilterIterator(pKeys.values().iterator(), o -> o instanceof PointerKey); return new MapIterator(filtered, PointerKey.class::cast); } diff --git a/com.ibm.wala.core/src/com/ibm/wala/ipa/cfg/AbstractInterproceduralCFG.java b/com.ibm.wala.core/src/com/ibm/wala/ipa/cfg/AbstractInterproceduralCFG.java index 3aec1ffe8..61db39390 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/ipa/cfg/AbstractInterproceduralCFG.java +++ b/com.ibm.wala.core/src/com/ibm/wala/ipa/cfg/AbstractInterproceduralCFG.java @@ -842,11 +842,7 @@ public abstract class AbstractInterproceduralCFG imple // a successor node is a return site if it is in the same // procedure, and is not the entry() node. - Predicate isReturn = new Predicate() { - @Override public boolean test(BasicBlockInContext other) { - return !other.isEntryBlock() && node.equals(other.getNode()); - } - }; + Predicate isReturn = other -> !other.isEntryBlock() && node.equals(other.getNode()); return new FilterIterator>(getSuccNodes(callBlock), isReturn); } @@ -862,37 +858,28 @@ public abstract class AbstractInterproceduralCFG imple Iterator it = cfg.getPredNodes(returnBlock.getDelegate()); final CGNode node = returnBlock.getNode(); - Predicate dispatchFilter = new Predicate() { - @Override public boolean test(T callBlock) { - BasicBlockInContext bb = new BasicBlockInContext(node, callBlock); - if (!hasCall(bb, cfg)) { - return false; - } - if (callee != null) { - return getCallTargets(bb).contains(callee); - } else { - return getCallTargets(bb).isEmpty(); - } + Predicate dispatchFilter = callBlock -> { + BasicBlockInContext bb = new BasicBlockInContext(node, callBlock); + if (!hasCall(bb, cfg)) { + return false; + } + if (callee != null) { + return getCallTargets(bb).contains(callee); + } else { + return getCallTargets(bb).isEmpty(); } }; it = new FilterIterator(it, dispatchFilter); - Function> toContext = new Function>() { - @Override - public BasicBlockInContext apply(T object) { - T b = object; - return new BasicBlockInContext(node, b); - } + Function> toContext = object -> { + T b = object; + return new BasicBlockInContext(node, b); }; MapIterator> m = new MapIterator>(it, toContext); return new FilterIterator>(m, isCall); } - private final Predicate> isCall = new Predicate>() { - @Override public boolean test(BasicBlockInContext o) { - return hasCall(o); - } - }; + private final Predicate> isCall = o -> hasCall(o); public boolean isReturn(BasicBlockInContext bb) throws IllegalArgumentException { if (bb == null) { diff --git a/com.ibm.wala.core/src/com/ibm/wala/ipa/cfg/PrunedCFG.java b/com.ibm.wala.core/src/com/ibm/wala/ipa/cfg/PrunedCFG.java index 1a21f29c4..23d9c9689 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/ipa/cfg/PrunedCFG.java +++ b/com.ibm.wala.core/src/com/ibm/wala/ipa/cfg/PrunedCFG.java @@ -17,7 +17,6 @@ import java.util.Iterator; import java.util.List; import java.util.NoSuchElementException; import java.util.Set; -import java.util.function.Predicate; import com.ibm.wala.cfg.ControlFlowGraph; import com.ibm.wala.cfg.IBasicBlock; @@ -69,44 +68,24 @@ public class PrunedCFG> extends AbstractNumberedGrap } public Iterator getExceptionalSuccessors(final T N) { - return new FilterIterator(cfg.getExceptionalSuccessors(N).iterator(), new Predicate() { - @Override public boolean test(T o) { - return currentCFGNodes.containsNode(o) && filter.hasExceptionalEdge(N, o); - } - }); + return new FilterIterator(cfg.getExceptionalSuccessors(N).iterator(), o -> currentCFGNodes.containsNode(o) && filter.hasExceptionalEdge(N, o)); } public Iterator getNormalSuccessors(final T N) { - return new FilterIterator(cfg.getNormalSuccessors(N).iterator(), new Predicate() { - @Override public boolean test(T o) { - return currentCFGNodes.containsNode(o) && filter.hasNormalEdge(N, o); - } - }); + return new FilterIterator(cfg.getNormalSuccessors(N).iterator(), o -> currentCFGNodes.containsNode(o) && filter.hasNormalEdge(N, o)); } public Iterator getExceptionalPredecessors(final T N) { - return new FilterIterator(cfg.getExceptionalPredecessors(N).iterator(), new Predicate() { - @Override public boolean test(T o) { - return currentCFGNodes.containsNode(o) && filter.hasExceptionalEdge(o, N); - } - }); + return new FilterIterator(cfg.getExceptionalPredecessors(N).iterator(), o -> currentCFGNodes.containsNode(o) && filter.hasExceptionalEdge(o, N)); } public Iterator getNormalPredecessors(final T N) { - return new FilterIterator(cfg.getNormalPredecessors(N).iterator(), new Predicate() { - @Override public boolean test(T o) { - return currentCFGNodes.containsNode(o) && filter.hasNormalEdge(o, N); - } - }); + return new FilterIterator(cfg.getNormalPredecessors(N).iterator(), o -> currentCFGNodes.containsNode(o) && filter.hasNormalEdge(o, N)); } @Override public Iterator getSuccNodes(final T N) { - return new FilterIterator(cfg.getSuccNodes(N), new Predicate() { - @Override public boolean test(T o) { - return currentCFGNodes.containsNode(o) && (filter.hasNormalEdge(N, o) || filter.hasExceptionalEdge(N, o)); - } - }); + return new FilterIterator(cfg.getSuccNodes(N), o -> currentCFGNodes.containsNode(o) && (filter.hasNormalEdge(N, o) || filter.hasExceptionalEdge(N, o))); } @Override @@ -126,11 +105,7 @@ public class PrunedCFG> extends AbstractNumberedGrap @Override public Iterator getPredNodes(final T N) { - return new FilterIterator(cfg.getPredNodes(N), new Predicate() { - @Override public boolean test(T o) { - return currentCFGNodes.containsNode(o) && (filter.hasNormalEdge(o, N) || filter.hasExceptionalEdge(o, N)); - } - }); + return new FilterIterator(cfg.getPredNodes(N), o -> currentCFGNodes.containsNode(o) && (filter.hasNormalEdge(o, N) || filter.hasExceptionalEdge(o, N))); } @Override @@ -226,11 +201,7 @@ public class PrunedCFG> extends AbstractNumberedGrap } private Iterator filterNodes(Iterator nodeIterator) { - return new FilterIterator(nodeIterator, new Predicate() { - @Override public boolean test(T o) { - return subset.contains(o); - } - }); + return new FilterIterator(nodeIterator, o -> subset.contains(o)); } @Override diff --git a/com.ibm.wala.core/src/com/ibm/wala/ipa/cha/ClassHierarchy.java b/com.ibm.wala.core/src/com/ibm/wala/ipa/cha/ClassHierarchy.java index 328ceacc7..c07f43fa5 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/ipa/cha/ClassHierarchy.java +++ b/com.ibm.wala.core/src/com/ibm/wala/ipa/cha/ClassHierarchy.java @@ -1085,12 +1085,7 @@ public class ClassHierarchy implements IClassHierarchy { @Override public Iterator iterator() { - Function toClass = new Function() { - @Override - public IClass apply(Node n) { - return n.klass; - } - }; + Function toClass = n -> n.klass; return new MapIterator(map.values().iterator(), toClass); } @@ -1147,12 +1142,7 @@ public class ClassHierarchy implements IClassHierarchy { if (klass.isArrayClass()) { return getImmediateArraySubclasses((ArrayClass)klass); } - Function node2Class = new Function() { - @Override - public IClass apply(Node n) { - return n.klass; - } - }; + Function node2Class = n -> n.klass; return Iterator2Collection.toSet(new MapIterator(findNode(klass).children.iterator(), node2Class)); } 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 3ab66bf13..fd251e90e 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 @@ -14,7 +14,6 @@ import java.util.Collection; import java.util.Iterator; import java.util.Map; import java.util.Set; -import java.util.function.Function; import com.ibm.wala.classLoader.IClass; import com.ibm.wala.classLoader.IField; @@ -103,13 +102,7 @@ public class ModRef { */ private Map> scanForMod(CallGraph cg, final PointerAnalysis pa, final HeapExclusions heapExclude) { - return CallGraphTransitiveClosure.collectNodeResults(cg, new Function>() { - - @Override - public Collection apply(CGNode n) { - return scanNodeForMod(n, pa, heapExclude); - } - }); + return CallGraphTransitiveClosure.collectNodeResults(cg, n -> scanNodeForMod(n, pa, heapExclude)); } /** @@ -119,13 +112,7 @@ public class ModRef { * @param heapExclude */ private Map> scanForRef(CallGraph cg, final PointerAnalysis pa, final HeapExclusions heapExclude) { - return CallGraphTransitiveClosure.collectNodeResults(cg, new Function>() { - - @Override - public Collection apply(CGNode n) { - return scanNodeForRef(n, pa, heapExclude); - } - }); + return CallGraphTransitiveClosure.collectNodeResults(cg, n -> scanNodeForRef(n, pa, heapExclude)); } public ExtendedHeapModel makeHeapModel(PointerAnalysis pa) { 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 ce6b24920..25d0aa1ff 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 @@ -644,27 +644,20 @@ public class HeapReachingDefs { return null; } else { // only static fields are actually killed - Predicate staticFilter = new Predicate() { - @Override public boolean test(PointerKey o) { - return o instanceof StaticFieldKey; - } - }; + Predicate staticFilter = o -> o instanceof StaticFieldKey; final Collection kill = Iterator2Collection .toSet(new FilterIterator(mod.iterator(), staticFilter)); if (kill.isEmpty()) { return null; } else { - Predicate f = new Predicate() { - // accept any statement which writes a killed location. - @Override public boolean test(Statement s) { - Collection m = getMod(s, node, heapModel, pa, exclusions); - for (PointerKey k : kill) { - if (m.contains(k)) { - return true; - } + Predicate f = s1 -> { + Collection m = getMod(s1, node, heapModel, pa, exclusions); + for (PointerKey k : kill) { + if (m.contains(k)) { + return true; } - return false; } + return false; }; BitVector result = new BitVector(); for (Statement k : Iterator2Iterable.make(new FilterIterator(domain.iterator(), f))) { 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 1437c5c1d..3d23315ad 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 @@ -674,14 +674,12 @@ public class PDG implements NumberedGraph { // in reaching defs calculation, exclude heap statements that are // irrelevant. - Predicate f = new Predicate() { - @Override public boolean test(Statement o) { - if (o instanceof HeapStatement) { - HeapStatement h = (HeapStatement) o; - return h.getLocation().equals(pk); - } else { - return true; - } + Predicate f = o -> { + if (o instanceof HeapStatement) { + HeapStatement h = (HeapStatement) o; + return h.getLocation().equals(pk); + } else { + return true; } }; Collection relevantStatements = Iterator2Collection.toSet(new FilterIterator(iterator(), f)); @@ -766,15 +764,13 @@ public class PDG implements NumberedGraph { * @return Statements representing each return instruction in the ir */ private Collection computeReturnStatements(final IR ir) { - Predicate filter = new Predicate() { - @Override public boolean test(Statement o) { - if (o instanceof NormalStatement) { - NormalStatement s = (NormalStatement) o; - SSAInstruction st = ir.getInstructions()[s.getInstructionIndex()]; - return st instanceof SSAReturnInstruction; - } else { - return false; - } + Predicate filter = o -> { + if (o instanceof NormalStatement) { + NormalStatement s = (NormalStatement) o; + SSAInstruction st = ir.getInstructions()[s.getInstructionIndex()]; + return st instanceof SSAReturnInstruction; + } else { + return false; } }; return Iterator2Collection.toSet( 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 d9c00b044..984459cd2 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 @@ -97,11 +97,7 @@ class SDGSupergraph implements ISupergraph public Iterator getCalledNodes(Statement call) { switch (call.getKind()) { case NORMAL: - Predicate f = new Predicate() { - @Override public boolean test(Statement s) { - return isEntry(s); - } - }; + Predicate f = s -> isEntry(s); return new FilterIterator(getSuccNodes(call), f); case PARAM_CALLER: case HEAP_PARAM_CALLER: diff --git a/com.ibm.wala.core/src/com/ibm/wala/ssa/SSACFG.java b/com.ibm.wala.core/src/com/ibm/wala/ssa/SSACFG.java index eb7464ed9..3a4801c88 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/ssa/SSACFG.java +++ b/com.ibm.wala.core/src/com/ibm/wala/ssa/SSACFG.java @@ -1034,12 +1034,7 @@ public class SSACFG implements ControlFlowGraph, throw new IllegalArgumentException("b is null"); } IBasicBlock n = delegate.getNode(b.getNumber()); - Function, ISSABasicBlock> f = new Function, ISSABasicBlock>() { - @Override - public ISSABasicBlock apply(IBasicBlock object) { - return basicBlocks[delegate.getNumber(object)]; - } - }; + Function, ISSABasicBlock> f = object -> basicBlocks[delegate.getNumber(object)]; return Iterator2Collection.toSet(new MapIterator, ISSABasicBlock>(delegate .getExceptionalPredecessors(n).iterator(), f)); } diff --git a/com.ibm.wala.core/src/com/ibm/wala/util/ProgressMaster.java b/com.ibm.wala.core/src/com/ibm/wala/util/ProgressMaster.java index f810c3d05..92b57c7ed 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/util/ProgressMaster.java +++ b/com.ibm.wala.core/src/com/ibm/wala/util/ProgressMaster.java @@ -18,7 +18,6 @@ import java.lang.management.MemoryType; import javax.management.InstanceNotFoundException; import javax.management.ListenerNotFoundException; -import javax.management.Notification; import javax.management.NotificationListener; import javax.management.openmbean.CompositeData; @@ -169,18 +168,15 @@ public class ProgressMaster implements IProgressMonitor { final Thread nannyThread = this; gcbean = ManagementFactory.getMemoryMXBean(); - listener = new NotificationListener() { - @Override - public void handleNotification(Notification notification, Object arg1) { - MemoryNotificationInfo info = MemoryNotificationInfo.from((CompositeData) notification.getUserData()); - long used = info.getUsage().getUsed(); - long max = Runtime.getRuntime().maxMemory(); + listener = (notification, arg1) -> { + MemoryNotificationInfo info = MemoryNotificationInfo.from((CompositeData) notification.getUserData()); + long used = info.getUsage().getUsed(); + long max = Runtime.getRuntime().maxMemory(); - if (((double)used/(double)max) > MAX_USED_MEM_BEFORE_BACKING_OUT) { - System.err.println("used " + used + " of " + max); - tooMuchMemory = true; - nannyThread.interrupt(); - } + if (((double)used/(double)max) > MAX_USED_MEM_BEFORE_BACKING_OUT) { + System.err.println("used " + used + " of " + max); + tooMuchMemory = true; + nannyThread.interrupt(); } }; try { diff --git a/com.ibm.wala.core/src/com/ibm/wala/util/scope/JUnitEntryPoints.java b/com.ibm.wala.core/src/com/ibm/wala/util/scope/JUnitEntryPoints.java index f391b27fa..be5c0b76f 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/util/scope/JUnitEntryPoints.java +++ b/com.ibm.wala.core/src/com/ibm/wala/util/scope/JUnitEntryPoints.java @@ -67,12 +67,7 @@ public class JUnitEntryPoints { } } } - return new Iterable() { - @Override - public Iterator iterator() { - return result.iterator(); - } - }; + return () -> result.iterator(); } /** @@ -120,12 +115,7 @@ public class JUnitEntryPoints { } } } - return new Iterable() { - @Override - public Iterator iterator() { - return entryPts.iterator(); - } - }; + return () -> entryPts.iterator(); } /** diff --git a/com.ibm.wala.core/src/com/ibm/wala/viz/PDFViewUtil.java b/com.ibm.wala.core/src/com/ibm/wala/viz/PDFViewUtil.java index b56c66f68..0c2c546dd 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/viz/PDFViewUtil.java +++ b/com.ibm.wala.core/src/com/ibm/wala/viz/PDFViewUtil.java @@ -79,12 +79,7 @@ public class PDFViewUtil { SSACFG.BasicBlock bb = (SSACFG.BasicBlock) it.next(); labelMap.put(bb, getNodeLabel(ir, bb)); } - NodeDecorator labels = new NodeDecorator() { - @Override - public String getLabel(ISSABasicBlock bb) { - return labelMap.get(bb); - } - }; + NodeDecorator labels = bb -> labelMap.get(bb); return labels; } diff --git a/com.ibm.wala.core/src/com/ibm/wala/viz/viewer/CgPanel.java b/com.ibm.wala.core/src/com/ibm/wala/viz/viewer/CgPanel.java index 72d30ee19..9fd37c275 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/viz/viewer/CgPanel.java +++ b/com.ibm.wala.core/src/com/ibm/wala/viz/viewer/CgPanel.java @@ -20,8 +20,6 @@ import javax.swing.JSplitPane; import javax.swing.JTree; import javax.swing.event.TreeExpansionEvent; import javax.swing.event.TreeExpansionListener; -import javax.swing.event.TreeSelectionEvent; -import javax.swing.event.TreeSelectionListener; import javax.swing.tree.DefaultMutableTreeNode; import javax.swing.tree.TreePath; @@ -45,24 +43,21 @@ public class CgPanel extends JSplitPane{ final IrAndSourceViewer irViewer = new IrAndSourceViewer(); this.setRightComponent(irViewer.getComponent()); - tree.addTreeSelectionListener(new TreeSelectionListener() { - @Override - public void valueChanged(TreeSelectionEvent e) { - TreePath newLeadSelectionPath = e.getNewLeadSelectionPath(); - if (null == newLeadSelectionPath){ - return; - } - DefaultMutableTreeNode treeNode = (DefaultMutableTreeNode) newLeadSelectionPath.getLastPathComponent(); - Object userObject = treeNode.getUserObject(); - if (userObject instanceof CGNode) { - CGNode node = (CGNode) userObject; - IR ir = node.getIR(); - irViewer.setIR(ir); - } else if (userObject instanceof CallSiteReference){ - CGNode parentNode = (CGNode) ((DefaultMutableTreeNode) treeNode.getParent()).getUserObject(); - IR ir = parentNode.getIR(); - irViewer.setIRAndPc(ir, ((CallSiteReference) userObject).getProgramCounter()); - } + tree.addTreeSelectionListener(e -> { + TreePath newLeadSelectionPath = e.getNewLeadSelectionPath(); + if (null == newLeadSelectionPath){ + return; + } + DefaultMutableTreeNode treeNode = (DefaultMutableTreeNode) newLeadSelectionPath.getLastPathComponent(); + Object userObject = treeNode.getUserObject(); + if (userObject instanceof CGNode) { + CGNode node = (CGNode) userObject; + IR ir1 = node.getIR(); + irViewer.setIR(ir1); + } else if (userObject instanceof CallSiteReference){ + CGNode parentNode = (CGNode) ((DefaultMutableTreeNode) treeNode.getParent()).getUserObject(); + IR ir2 = parentNode.getIR(); + irViewer.setIRAndPc(ir2, ((CallSiteReference) userObject).getProgramCounter()); } }); 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 c6b3d10e0..1579b310a 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 @@ -19,8 +19,6 @@ import javax.swing.JSplitPane; import javax.swing.JTree; import javax.swing.event.TreeExpansionEvent; import javax.swing.event.TreeExpansionListener; -import javax.swing.event.TreeSelectionEvent; -import javax.swing.event.TreeSelectionListener; import javax.swing.tree.DefaultMutableTreeNode; import javax.swing.tree.TreePath; @@ -44,19 +42,16 @@ public class ChaPanel extends JSplitPane { JList methodList = new JList(methodListModel); this.setRightComponent(methodList); - tree.addTreeSelectionListener(new TreeSelectionListener(){ - @Override - public void valueChanged(TreeSelectionEvent e) { - TreePath newLeadSelectionPath = e.getNewLeadSelectionPath(); - if (null == newLeadSelectionPath){ - return; - } - DefaultMutableTreeNode treeNode = (DefaultMutableTreeNode) newLeadSelectionPath.getLastPathComponent(); - IClass klass = (IClass) treeNode.getUserObject(); - methodListModel.clear(); - for (IMethod m : klass.getDeclaredMethods()){ - methodListModel.addElement(m.toString()); - } + tree.addTreeSelectionListener(e -> { + TreePath newLeadSelectionPath = e.getNewLeadSelectionPath(); + if (null == newLeadSelectionPath){ + return; + } + DefaultMutableTreeNode treeNode = (DefaultMutableTreeNode) newLeadSelectionPath.getLastPathComponent(); + IClass klass = (IClass) treeNode.getUserObject(); + methodListModel.clear(); + for (IMethod m : klass.getDeclaredMethods()){ + methodListModel.addElement(m.toString()); } }); diff --git a/com.ibm.wala.core/src/com/ibm/wala/viz/viewer/IrAndSourceViewer.java b/com.ibm.wala.core/src/com/ibm/wala/viz/viewer/IrAndSourceViewer.java index 34c41d9da..78c215e93 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/viz/viewer/IrAndSourceViewer.java +++ b/com.ibm.wala.core/src/com/ibm/wala/viz/viewer/IrAndSourceViewer.java @@ -20,7 +20,6 @@ import javax.swing.JSplitPane; import com.ibm.wala.classLoader.IClassLoader; import com.ibm.wala.classLoader.IMethod; import com.ibm.wala.ssa.IR; -import com.ibm.wala.viz.viewer.IrViewer.SelectedPcListner; public class IrAndSourceViewer { @@ -39,35 +38,30 @@ public class IrAndSourceViewer { sourceViewer = new SourceViewer(); splitPane.setRightComponent(sourceViewer); - irViewer.addSelectedPcListner(new SelectedPcListner(){ - - @Override - public void valueChanged(int pc) { - IMethod method = ir.getMethod(); - int sourceLineNumber = IrViewer.NA; - String sourceFileName = null; - if (pc != IrViewer.NA){ - try{ - sourceLineNumber = method.getLineNumber(pc); - IClassLoader loader = method.getDeclaringClass().getClassLoader(); - sourceFileName = loader.getSourceFileName(method, pc); - } catch (Exception e){ - e.printStackTrace(); - } - } - if (sourceFileName != null){ - URL url; - try { - url = (new File(sourceFileName)).toURI().toURL(); - sourceViewer.setSource(url, sourceLineNumber); - } catch (MalformedURLException e) { - e.printStackTrace(); - } - } else { - sourceViewer.removeSource(); + irViewer.addSelectedPcListner(pc -> { + IMethod method = ir.getMethod(); + int sourceLineNumber = IrViewer.NA; + String sourceFileName = null; + if (pc != IrViewer.NA){ + try{ + sourceLineNumber = method.getLineNumber(pc); + IClassLoader loader = method.getDeclaringClass().getClassLoader(); + sourceFileName = loader.getSourceFileName(method, pc); + } catch (Exception e1){ + e1.printStackTrace(); } } - + if (sourceFileName != null){ + URL url; + try { + url = (new File(sourceFileName)).toURI().toURL(); + sourceViewer.setSource(url, sourceLineNumber); + } catch (MalformedURLException e2) { + e2.printStackTrace(); + } + } else { + sourceViewer.removeSource(); + } }); return splitPane; 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 f8037d879..efc6d591f 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 @@ -24,8 +24,6 @@ import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JTextField; import javax.swing.ScrollPaneConstants; -import javax.swing.event.ListSelectionEvent; -import javax.swing.event.ListSelectionListener; import com.ibm.wala.classLoader.IMethod; import com.ibm.wala.ssa.IR; @@ -58,17 +56,14 @@ public class IrViewer extends JPanel{ ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED), BorderLayout.CENTER); - irLines.addListSelectionListener(new ListSelectionListener() { - @Override - public void valueChanged(ListSelectionEvent e) { - int index = irLines.getSelectedIndex(); - Integer pc = lineToPc.get(index); - if (pc == null) { - pc = NA; - } - for (SelectedPcListner selectedPcListner : selectedPcListners) { - selectedPcListner.valueChanged(pc); - } + irLines.addListSelectionListener(e -> { + int index = irLines.getSelectedIndex(); + Integer pc = lineToPc.get(index); + if (pc == null) { + pc = NA; + } + for (SelectedPcListner selectedPcListner : selectedPcListners) { + selectedPcListner.valueChanged(pc); } }); } 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 ffca1dcd5..1c6114191 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 @@ -22,8 +22,6 @@ import javax.swing.JTextField; import javax.swing.JTree; import javax.swing.event.TreeExpansionEvent; import javax.swing.event.TreeExpansionListener; -import javax.swing.event.TreeSelectionEvent; -import javax.swing.event.TreeSelectionListener; import javax.swing.tree.DefaultMutableTreeNode; import javax.swing.tree.TreeNode; import javax.swing.tree.TreePath; @@ -118,51 +116,47 @@ public class PaPanel extends JSplitPane { } }); - heapTree.addTreeSelectionListener(new TreeSelectionListener() { - - @Override - public void valueChanged(TreeSelectionEvent e) { - TreePath newLeadSelectionPath = e.getNewLeadSelectionPath(); - if (null == newLeadSelectionPath){ - return; - } - DefaultMutableTreeNode treeNode = (DefaultMutableTreeNode) newLeadSelectionPath.getLastPathComponent(); - Object userObject = treeNode.getUserObject(); - fullName.setText(userObject.toString()); - if (userObject instanceof LocalPointerKey){ - LocalPointerKey lpk = (LocalPointerKey) userObject; - IR ir = lpk.getNode().getIR(); - SSAInstruction def = lpk.getNode().getDU().getDef(lpk.getValueNumber()); - int pc = IrViewer.NA; - if (def != null){ - SSAInstruction[] instructions = ir.getInstructions(); - for (int i = 0; i < instructions.length; i++) { - SSAInstruction instruction = instructions[i]; - if (def == instruction){ - pc = i; - } + heapTree.addTreeSelectionListener(e -> { + TreePath newLeadSelectionPath = e.getNewLeadSelectionPath(); + if (null == newLeadSelectionPath){ + return; + } + DefaultMutableTreeNode treeNode = (DefaultMutableTreeNode) newLeadSelectionPath.getLastPathComponent(); + Object userObject = treeNode.getUserObject(); + fullName.setText(userObject.toString()); + if (userObject instanceof LocalPointerKey){ + LocalPointerKey lpk = (LocalPointerKey) userObject; + IR ir1 = lpk.getNode().getIR(); + SSAInstruction def = lpk.getNode().getDU().getDef(lpk.getValueNumber()); + int pc1 = IrViewer.NA; + if (def != null){ + SSAInstruction[] instructions = ir1.getInstructions(); + for (int i = 0; i < instructions.length; i++) { + SSAInstruction instruction = instructions[i]; + if (def == instruction){ + pc1 = i; } } - irViewer.setIRAndPc(ir, pc); - } else if (userObject instanceof InstanceFieldPointerKey){ - InstanceKey ik = ((InstanceFieldPointerKey) userObject).getInstanceKey(); - if (ik instanceof NormalAllocationInNode){ - NormalAllocationInNode normalIk = (NormalAllocationInNode) ik; - IR ir = normalIk.getNode().getIR(); - int pc = normalIk.getSite().getProgramCounter(); - irViewer.setIRAndPc(ir, pc); - } - } else if (userObject instanceof NormalAllocationInNode){ - NormalAllocationInNode normalIk = (NormalAllocationInNode) userObject; - IR ir = normalIk.getNode().getIR(); - int pc = normalIk.getSite().getProgramCounter(); - irViewer.setIRAndPc(ir, pc); - } else if (userObject instanceof CGNode){ - irViewer.setIR(((CGNode)userObject).getIR()); } - - + irViewer.setIRAndPc(ir1, pc1); + } else if (userObject instanceof InstanceFieldPointerKey){ + InstanceKey ik = ((InstanceFieldPointerKey) userObject).getInstanceKey(); + if (ik instanceof NormalAllocationInNode){ + NormalAllocationInNode normalIk1 = (NormalAllocationInNode) ik; + IR ir2 = normalIk1.getNode().getIR(); + int pc2 = normalIk1.getSite().getProgramCounter(); + irViewer.setIRAndPc(ir2, pc2); + } + } else if (userObject instanceof NormalAllocationInNode){ + NormalAllocationInNode normalIk2 = (NormalAllocationInNode) userObject; + IR ir3 = normalIk2.getNode().getIR(); + int pc3 = normalIk2.getSite().getProgramCounter(); + irViewer.setIRAndPc(ir3, pc3); + } else if (userObject instanceof CGNode){ + irViewer.setIR(((CGNode)userObject).getIR()); } + + }); } 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 bc1ba1eff..02fc0369f 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 @@ -4,8 +4,6 @@ import java.io.File; import java.net.URI; import java.util.Collections; import java.util.Set; -import java.util.function.Predicate; -import java.util.function.Consumer; import com.ibm.wala.classLoader.IClass; import com.ibm.wala.classLoader.IMethod; @@ -55,102 +53,93 @@ public class APKCallGraphDriver { } catch (Throwable e) { // no timeout specified } - FileUtil.recurseFiles(new Consumer() { + FileUtil.recurseFiles(apk1 -> { + System.gc(); + System.err.println("Analyzing " + apk1 + "..."); + try { + long time = System.currentTimeMillis(); + Pair> CG; + final long startTime = System.currentTimeMillis(); + IProgressMonitor pm = new IProgressMonitor() { + private boolean cancelled = false; - @Override - public void accept(File apk) { - System.gc(); - System.err.println("Analyzing " + apk + "..."); - try { - long time = System.currentTimeMillis(); - Pair> CG; - final long startTime = System.currentTimeMillis(); - IProgressMonitor pm = new IProgressMonitor() { - private boolean cancelled = false; + @Override + public void beginTask(String task, int totalWork) { + // TODO Auto-generated method stub + } - @Override - public void beginTask(String task, int totalWork) { - // TODO Auto-generated method stub - } + @Override + public void subTask(String subTask) { + // TODO Auto-generated method stub + } - @Override - public void subTask(String subTask) { - // TODO Auto-generated method stub - } + @Override + public void cancel() { + cancelled = true; + } - @Override - public void cancel() { - cancelled = true; - } + @Override + public boolean isCanceled() { + if (System.currentTimeMillis() - startTime > timeout) { + cancelled = true; + } + return cancelled; + } - @Override - public boolean isCanceled() { - if (System.currentTimeMillis() - startTime > timeout) { - cancelled = true; - } - return cancelled; - } + @Override + public void done() { + // TODO Auto-generated method stub + } - @Override - public void done() { - // TODO Auto-generated method stub - } + @Override + public void worked(int units) { + // TODO Auto-generated method stub + } - @Override - public void worked(int units) { - // TODO Auto-generated method stub - } + @Override + public String getCancelMessage() { + return "timeout"; + } + }; + CG = DalvikCallGraphTestBase.makeAPKCallGraph(libs(), null, apk1.getAbsolutePath(), pm, ReflectionOptions.NONE); + System.err.println("Analyzed " + apk1 + " in " + (System.currentTimeMillis() - time)); - @Override - public String getCancelMessage() { - return "timeout"; - } - }; - 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)); + + if (dumpIR) { + for(CGNode n1 : CG.fst) { + System.err.println(n1.getIR()); + System.err.println(); + } + } else { + Set code = HashSetFactory.make(); + for(CGNode n2 : CG.fst) { + code.add(n2.getMethod()); + } - System.err.println(new SDG<>(CG.fst, CG.snd, DataDependenceOptions.NO_BASE_NO_HEAP_NO_EXCEPTIONS, ControlDependenceOptions.NONE)); - - if (dumpIR) { - for(CGNode n : CG.fst) { - System.err.println(n.getIR()); - System.err.println(); - } - } else { - Set code = HashSetFactory.make(); - for(CGNode n : CG.fst) { - code.add(n.getMethod()); - } + if (addAbstract) { + for(IClass cls : CG.fst.getClassHierarchy()) { + for(IMethod m1 : cls.getDeclaredMethods()) { + if (m1.isAbstract() && !Collections.disjoint(CG.fst.getClassHierarchy().getPossibleTargets(m1.getReference()), code)) { + code.add(m1); + } + } + } + } - if (addAbstract) { - for(IClass cls : CG.fst.getClassHierarchy()) { - for(IMethod m : cls.getDeclaredMethods()) { - if (m.isAbstract() && !Collections.disjoint(CG.fst.getClassHierarchy().getPossibleTargets(m.getReference()), code)) { - code.add(m); - } - } - } - } + System.err.println("reachable methods for " + apk1); + for(IMethod m2 : code) { + System.err.println("" + m2.getDeclaringClass().getName() + " " + m2.getName() + m2.getDescriptor()); - System.err.println("reachable methods for " + apk); - for(IMethod m : code) { - System.err.println("" + m.getDeclaringClass().getName() + " " + m.getName() + m.getDescriptor()); + } + System.err.println("end of methods"); + } - } - System.err.println("end of methods"); - } - - } catch (Throwable e) { - e.printStackTrace(System.err); - } - } - }, - new Predicate() { - @Override - public boolean test(File file) { - return file.getName().endsWith("apk"); - } - }, + } catch (Throwable e) { + e.printStackTrace(System.err); + } + }, + file -> file.getName().endsWith("apk"), apk); } } diff --git a/com.ibm.wala.dalvik.test/source/com/ibm/wala/dalvik/test/callGraph/DalvikCallGraphTestBase.java b/com.ibm.wala.dalvik.test/source/com/ibm/wala/dalvik/test/callGraph/DalvikCallGraphTestBase.java index e1da09bbf..5c05f5383 100644 --- a/com.ibm.wala.dalvik.test/source/com/ibm/wala/dalvik/test/callGraph/DalvikCallGraphTestBase.java +++ b/com.ibm.wala.dalvik.test/source/com/ibm/wala/dalvik/test/callGraph/DalvikCallGraphTestBase.java @@ -75,18 +75,8 @@ public class DalvikCallGraphTestBase extends DynamicCallGraphTestBase { protected static Set applicationMethods(CallGraph cg) { return processCG(cg, - new Predicate() { - @Override - public boolean test(CGNode t) { - return t.getMethod().getReference().getDeclaringClass().getClassLoader().equals(ClassLoaderReference.Application); - } - }, - new Function() { - @Override - public MethodReference apply(CGNode object) { - return object.getMethod().getReference(); - } - }); + t -> t.getMethod().getReference().getDeclaringClass().getClassLoader().equals(ClassLoaderReference.Application), + object -> object.getMethod().getReference()); } @@ -110,18 +100,8 @@ public class DalvikCallGraphTestBase extends DynamicCallGraphTestBase { new MapIterator( new FilterIterator( node.getIR().iterateAllInstructions(), - new Predicate() { - @Override - public boolean test(SSAInstruction t) { - return t instanceof SSANewInstruction; - } - }), - new Function() { - @Override - public NewSiteReference apply(SSAInstruction object) { - return ((SSANewInstruction)object).getNewSite(); - } - } + t -> t instanceof SSANewInstruction), + object -> ((SSANewInstruction)object).getNewSite() ); } }; diff --git a/com.ibm.wala.dalvik.test/source/com/ibm/wala/dalvik/test/callGraph/DroidBenchCGTest.java b/com.ibm.wala.dalvik.test/source/com/ibm/wala/dalvik/test/callGraph/DroidBenchCGTest.java index fea8dc8bf..211103c7a 100644 --- a/com.ibm.wala.dalvik.test/source/com/ibm/wala/dalvik/test/callGraph/DroidBenchCGTest.java +++ b/com.ibm.wala.dalvik.test/source/com/ibm/wala/dalvik/test/callGraph/DroidBenchCGTest.java @@ -21,8 +21,6 @@ import java.util.LinkedList; import java.util.List; import java.util.Map; import java.util.Set; -import java.util.function.Consumer; -import java.util.function.Predicate; import org.junit.Assert; import org.junit.Test; @@ -161,20 +159,13 @@ public abstract class DroidBenchCGTest extends DalvikCallGraphTestBase { public static Collection generateData(String droidBenchRoot, final URI[] androidLibs, final File androidJavaJar, final String filter) { final List files = new LinkedList<>(); - FileUtil.recurseFiles(new Consumer() { - @Override - public void accept(File f) { - Set uncalled = uncalledFunctions.get(f.getName()); - if (uncalled == null) { - uncalled = Collections.emptySet(); - } - files.add(new Object[]{ androidLibs, androidJavaJar, f.getAbsolutePath(), uncalled }); - } - }, new Predicate() { - @Override - public boolean test(File t) { - return (filter == null || t.getAbsolutePath().contains(filter)) && t.getName().endsWith("apk") && ! skipTests.contains(t.getName().toString()); - } }, new File(droidBenchRoot + "/apk/")); + FileUtil.recurseFiles(f -> { + Set uncalled = uncalledFunctions.get(f.getName()); + if (uncalled == null) { + uncalled = Collections.emptySet(); + } + files.add(new Object[]{ androidLibs, androidJavaJar, f.getAbsolutePath(), uncalled }); + }, t -> (filter == null || t.getAbsolutePath().contains(filter)) && t.getName().endsWith("apk") && ! skipTests.contains(t.getName().toString()), new File(droidBenchRoot + "/apk/")); return files; } } diff --git a/com.ibm.wala.dalvik.test/source/com/ibm/wala/dalvik/test/callGraph/DynamicDalvikComparisonTest.java b/com.ibm.wala.dalvik.test/source/com/ibm/wala/dalvik/test/callGraph/DynamicDalvikComparisonTest.java index f4649a68b..5020083ea 100644 --- a/com.ibm.wala.dalvik.test/source/com/ibm/wala/dalvik/test/callGraph/DynamicDalvikComparisonTest.java +++ b/com.ibm.wala.dalvik.test/source/com/ibm/wala/dalvik/test/callGraph/DynamicDalvikComparisonTest.java @@ -16,7 +16,6 @@ import static com.ibm.wala.dalvik.test.util.Util.getJavaJar; import java.io.File; import java.io.IOException; import java.net.URI; -import java.util.function.Predicate; import com.ibm.wala.core.tests.callGraph.CallGraphTestUtil; import com.ibm.wala.ipa.callgraph.AnalysisScope; @@ -27,7 +26,6 @@ import com.ibm.wala.ipa.cha.ClassHierarchyException; import com.ibm.wala.shrikeBT.analysis.Analyzer.FailureException; import com.ibm.wala.shrikeCT.InvalidClassFileException; import com.ibm.wala.types.ClassLoaderReference; -import com.ibm.wala.types.MethodReference; import com.ibm.wala.util.CancelException; import com.ibm.wala.util.collections.Pair; import com.ibm.wala.util.io.TemporaryFile; @@ -42,12 +40,7 @@ public abstract class DynamicDalvikComparisonTest extends DalvikCallGraphTestBas dynamicCG(new File(javaJarPath), mainClass, args); - checkEdges(android.fst, new Predicate() { - @Override - public boolean test(MethodReference t) { - return t.getDeclaringClass().getClassLoader().equals(ClassLoaderReference.Application); - } - }); + checkEdges(android.fst, t -> t.getDeclaringClass().getClassLoader().equals(ClassLoaderReference.Application)); } protected File testFile(String file) throws IOException { diff --git a/com.ibm.wala.dalvik.test/source/com/ibm/wala/dalvik/test/util/Util.java b/com.ibm.wala.dalvik.test/source/com/ibm/wala/dalvik/test/util/Util.java index 7e5dec099..91636caca 100644 --- a/com.ibm.wala.dalvik.test/source/com/ibm/wala/dalvik/test/util/Util.java +++ b/com.ibm.wala.dalvik.test/source/com/ibm/wala/dalvik/test/util/Util.java @@ -81,24 +81,16 @@ public class Util { libs.add(new File(System.getenv("ANDROID_BOOT_OAT")).toURI()); } else if (walaProperties != null && walaProperties.getProperty(ANDROID_RT_DEX_DIR) != null) { - for(File lib : new File(walaProperties.getProperty(ANDROID_RT_DEX_DIR)).listFiles(new FilenameFilter() { - @Override - public boolean accept(File dir, String name) { - return name.startsWith("boot") && name.endsWith("oat"); - } - })) { + for(File lib : new File(walaProperties.getProperty(ANDROID_RT_DEX_DIR)).listFiles((FilenameFilter) (dir, name) -> name.startsWith("boot") && name.endsWith("oat"))) { libs.add(lib.toURI()); } } else { assert "Dalvik".equals(System.getProperty("java.vm.name")); - for(File f : new File("/system/framework/").listFiles(new FileFilter() { - @Override - public boolean accept(File pathname) { - String name = pathname.getName(); - return - (name.startsWith("core") || name.startsWith("framework")) && - (name.endsWith("jar") || name.endsWith("apk")); - } + for(File f : new File("/system/framework/").listFiles((FileFilter) pathname -> { + String name = pathname.getName(); + return + (name.startsWith("core") || name.startsWith("framework")) && + (name.endsWith("jar") || name.endsWith("apk")); })) { System.out.println("adding " + f); diff --git a/com.ibm.wala.dalvik/src/com/ibm/wala/dalvik/util/AndroidManifestXMLReader.java b/com.ibm.wala.dalvik/src/com/ibm/wala/dalvik/util/AndroidManifestXMLReader.java index 7e8a3e177..b73619ae6 100644 --- a/com.ibm.wala.dalvik/src/com/ibm/wala/dalvik/util/AndroidManifestXMLReader.java +++ b/com.ibm.wala.dalvik/src/com/ibm/wala/dalvik/util/AndroidManifestXMLReader.java @@ -188,14 +188,12 @@ public class AndroidManifestXMLReader { Collections.EMPTY_SET, IntentItem.class), ACTION("action", - new ISubTags() { @Override public Set getSubTags() { - return Collections.EMPTY_SET; }}, + () -> Collections.emptySet(), EnumSet.of(Attr.NAME), FinalItem.class), //(new ITagDweller() { //public Tag getTag() { return Tag.ACTION; }})), DATA("data", - new ISubTags() { @Override public Set getSubTags() { - return Collections.EMPTY_SET; }}, + () -> Collections.emptySet(), EnumSet.of(Attr.SCHEME, Attr.HOST, Attr.PATH, Attr.MIME), FinalItem.class), //(new ITagDweller() { //public Tag getTag() { return Tag.DATA; }})), diff --git a/com.ibm.wala.ide.jdt.test/source/com/ibm/wala/demandpa/driver/DemandCastChecker.java b/com.ibm.wala.ide.jdt.test/source/com/ibm/wala/demandpa/driver/DemandCastChecker.java index 57c11b55f..a23314b47 100644 --- a/com.ibm.wala.ide.jdt.test/source/com/ibm/wala/demandpa/driver/DemandCastChecker.java +++ b/com.ibm.wala.ide.jdt.test/source/com/ibm/wala/demandpa/driver/DemandCastChecker.java @@ -258,19 +258,14 @@ public class DemandCastChecker { System.err.println("CHECKING " + castInstr + " in " + node.getMethod()); PointerKey castedPk = heapModel.getPointerKeyForLocal(node, castInstr.getUse(0)); - Predicate castPred = new Predicate() { - - @Override - public boolean test(InstanceKey ik) { - TypeReference ikTypeRef = ik.getConcreteType().getReference(); - for (TypeReference t : declaredResultTypes) { - if (cha.isAssignableFrom(cha.lookupClass(t), cha.lookupClass(ikTypeRef))) { - return true; - } + Predicate castPred = ik -> { + TypeReference ikTypeRef = ik.getConcreteType().getReference(); + for (TypeReference t : declaredResultTypes) { + if (cha.isAssignableFrom(cha.lookupClass(t), cha.lookupClass(ikTypeRef))) { + return true; } - return false; } - + return false; }; long startTime = System.currentTimeMillis(); Pair> queryResult = dmp.getPointsTo(castedPk, castPred); 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 5acd016ee..1b1d31d25 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 @@ -148,14 +148,11 @@ public class EclipseJavaScriptAnalysisEngine extends Ecli scripts.add(scriptName); } - final Function filter = new Function() { - @Override - public Boolean apply(IMethod object) { - if (object instanceof AstMethod) { - return scripts.contains(getScriptName((AstMethod)object)); - } else { - return true; - } + final Function filter = object -> { + if (object instanceof AstMethod) { + return scripts.contains(getScriptName((AstMethod)object)); + } else { + return true; } }; diff --git a/com.ibm.wala.ide.jsdt/source/com/ibm/wala/ide/util/JavaScriptHeadlessUtil.java b/com.ibm.wala.ide.jsdt/source/com/ibm/wala/ide/util/JavaScriptHeadlessUtil.java index d1ffce4fa..ceee67cde 100644 --- a/com.ibm.wala.ide.jsdt/source/com/ibm/wala/ide/util/JavaScriptHeadlessUtil.java +++ b/com.ibm.wala.ide.jsdt/source/com/ibm/wala/ide/util/JavaScriptHeadlessUtil.java @@ -10,9 +10,6 @@ *******************************************************************************/ package com.ibm.wala.ide.util; -import java.util.function.Function; - -import org.eclipse.core.resources.IProject; import org.eclipse.core.runtime.CoreException; import org.eclipse.wst.jsdt.core.IJavaScriptProject; import org.eclipse.wst.jsdt.core.JavaScriptCore; @@ -20,22 +17,19 @@ import org.eclipse.wst.jsdt.core.JavaScriptCore; public class JavaScriptHeadlessUtil extends HeadlessUtil { public static IJavaScriptProject getJavaScriptProjectFromWorkspace(final String projectName) { - IJavaScriptProject jp = getProjectFromWorkspace(new Function() { - @Override - public IJavaScriptProject apply(IProject p) { - try { - if (p.hasNature(JavaScriptCore.NATURE_ID)) { - IJavaScriptProject jp = JavaScriptCore.create(p); - if (jp != null && jp.getElementName().equals(projectName)) { - return jp; - } - } - } catch (CoreException e) { - } - // failed to match - return null; - } - }); + IJavaScriptProject jp = getProjectFromWorkspace(p -> { + try { + if (p.hasNature(JavaScriptCore.NATURE_ID)) { + IJavaScriptProject jp1 = JavaScriptCore.create(p); + if (jp1 != null && jp1.getElementName().equals(projectName)) { + return jp1; + } + } + } catch (CoreException e) { + } + // failed to match + return null; + }); return jp; } diff --git a/com.ibm.wala.ide.tests/src/com/ibm/wala/examples/drivers/SWTTypeHierarchy.java b/com.ibm.wala.ide.tests/src/com/ibm/wala/examples/drivers/SWTTypeHierarchy.java index edc83b770..a7cdbd10e 100644 --- a/com.ibm.wala.ide.tests/src/com/ibm/wala/examples/drivers/SWTTypeHierarchy.java +++ b/com.ibm.wala.ide.tests/src/com/ibm/wala/examples/drivers/SWTTypeHierarchy.java @@ -106,11 +106,7 @@ public class SWTTypeHierarchy { * Restrict g to nodes from the Application loader */ static Graph pruneForAppLoader(Graph g) { - Predicate f = new Predicate() { - @Override public boolean test(IClass c) { - return (c.getClassLoader().getReference().equals(ClassLoaderReference.Application)); - } - }; + Predicate f = c -> (c.getClassLoader().getReference().equals(ClassLoaderReference.Application)); return pruneGraph(g, f); } diff --git a/com.ibm.wala.ide.tests/src/com/ibm/wala/ide/tests/util/EclipseTestUtil.java b/com.ibm.wala.ide.tests/src/com/ibm/wala/ide/tests/util/EclipseTestUtil.java index adbab60fc..f78559ad8 100644 --- a/com.ibm.wala.ide.tests/src/com/ibm/wala/ide/tests/util/EclipseTestUtil.java +++ b/com.ibm.wala.ide.tests/src/com/ibm/wala/ide/tests/util/EclipseTestUtil.java @@ -105,12 +105,7 @@ public class EclipseTestUtil { protected static void importProject(IImportStructureProvider provider, IProgressMonitor monitor, String projectName, T root) { IPath containerPath = getWorkspacePath().append(projectName).addTrailingSeparator(); - ImportOperation importOp = new ImportOperation(containerPath, root, provider, new IOverwriteQuery() { - @Override - public String queryOverwrite(String pathString) { - return IOverwriteQuery.ALL; - } - }); + ImportOperation importOp = new ImportOperation(containerPath, root, provider, pathString -> IOverwriteQuery.ALL); importOp.setCreateContainerStructure(false); importOp.setOverwriteResources(true); diff --git a/com.ibm.wala.ide/src/com/ibm/wala/ide/client/EclipseProjectSourceAnalysisEngine.java b/com.ibm.wala.ide/src/com/ibm/wala/ide/client/EclipseProjectSourceAnalysisEngine.java index d65572914..ccee399ab 100644 --- a/com.ibm.wala.ide/src/com/ibm/wala/ide/client/EclipseProjectSourceAnalysisEngine.java +++ b/com.ibm.wala.ide/src/com/ibm/wala/ide/client/EclipseProjectSourceAnalysisEngine.java @@ -19,7 +19,6 @@ import com.ibm.wala.ipa.callgraph.Entrypoint; import com.ibm.wala.ipa.callgraph.IAnalysisCacheView; import com.ibm.wala.ipa.callgraph.propagation.InstanceKey; import com.ibm.wala.ssa.SSAOptions; -import com.ibm.wala.ssa.SymbolTable; import com.ibm.wala.types.ClassLoaderReference; import com.ibm.wala.util.debug.Assertions; import com.ibm.wala.util.io.FileProvider; @@ -70,12 +69,7 @@ abstract public class EclipseProjectSourceAnalysisEngine symtab.getDefaultValue(valueNumber)); options.setSSAOptions(ssaOptions); diff --git a/com.ibm.wala.ide/src/com/ibm/wala/ide/ui/SWTTreeViewer.java b/com.ibm.wala.ide/src/com/ibm/wala/ide/ui/SWTTreeViewer.java index 2516003cb..1a5d3191c 100644 --- a/com.ibm.wala.ide/src/com/ibm/wala/ide/ui/SWTTreeViewer.java +++ b/com.ibm.wala.ide/src/com/ibm/wala/ide/ui/SWTTreeViewer.java @@ -108,14 +108,11 @@ public class SWTTreeViewer extends AbstractJFaceRunner { if (PlatformUI.isWorkbenchRunning()) { // run the code on the UI thread Display d = PlatformUI.getWorkbench().getDisplay(); - Runnable r = new Runnable() { - @Override - public void run() { - try { - w.open(); - } catch (Exception e) { - e.printStackTrace(); - } + Runnable r = () -> { + try { + w.open(); + } catch (Exception e) { + e.printStackTrace(); } }; if (isBlockInput()) { @@ -130,12 +127,9 @@ public class SWTTreeViewer extends AbstractJFaceRunner { w.open(); Display.getCurrent().dispose(); } else { - Runnable r = new Runnable() { - @Override - public void run() { - w.open(); - Display.getCurrent().dispose(); - } + Runnable r = () -> { + w.open(); + Display.getCurrent().dispose(); }; Thread t = new Thread(r); t.start(); 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 c75188c42..2249af203 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 @@ -176,11 +176,7 @@ public class ViewIFDSLocalAction extends Action { try { final P proc = getProcedureForSelection(); - Predicate filter = new Predicate() { - @Override public boolean test(T o) { - return supergraph.getProcOf(o).equals(proc); - } - }; + Predicate filter = o -> supergraph.getProcOf(o).equals(proc); Graph localGraph = GraphSlicer.prune(supergraph, filter); // spawn the viewer diff --git a/com.ibm.wala.ide/src/com/ibm/wala/ide/util/HeadlessUtil.java b/com.ibm.wala.ide/src/com/ibm/wala/ide/util/HeadlessUtil.java index fd13a512f..92806f56f 100644 --- a/com.ibm.wala.ide/src/com/ibm/wala/ide/util/HeadlessUtil.java +++ b/com.ibm.wala.ide/src/com/ibm/wala/ide/util/HeadlessUtil.java @@ -103,24 +103,21 @@ public class HeadlessUtil { for (final Map.Entry> proj : projectsFiles.entrySet()) { parser.setProject(proj.getKey()); - parser.processASTs(proj.getValue(), new Function() { - @Override - public Boolean apply(Object[] problems) { - int length = problems.length; - if (length > 0) { - StringBuffer buffer = new StringBuffer(); - for (int i = 0; i < length; i++) { - buffer.append(problems[i].toString()); - buffer.append('\n'); - } - if (length != 0) { - System.err.println(buffer.toString()); - return true; - } + parser.processASTs(proj.getValue(), problems -> { + int length = problems.length; + if (length > 0) { + StringBuffer buffer = new StringBuffer(); + for (int i = 0; i < length; i++) { + buffer.append(problems[i].toString()); + buffer.append('\n'); } - return false; - } - }); + if (length != 0) { + System.err.println(buffer.toString()); + return true; + } + } + return false; + }); } } } diff --git a/com.ibm.wala.scandroid/source/org/scandroid/flow/functions/IFDSTaintFlowFunctionProvider.java b/com.ibm.wala.scandroid/source/org/scandroid/flow/functions/IFDSTaintFlowFunctionProvider.java index 84ae78dea..af58110d2 100644 --- a/com.ibm.wala.scandroid/source/org/scandroid/flow/functions/IFDSTaintFlowFunctionProvider.java +++ b/com.ibm.wala.scandroid/source/org/scandroid/flow/functions/IFDSTaintFlowFunctionProvider.java @@ -462,20 +462,15 @@ implements IFlowFunctionMap> { } } - return new IUnaryFlowFunction() { - - @Override - public IntSet getTargets(int d1) { - BitVectorIntSet set = new BitVectorIntSet(); - if(d1 == 0 || !(domain.getMappedObject(d1).codeElement instanceof LocalElement)) { - set.add(d1); - } - DomainElement de = domain.getMappedObject(d1); - if(de!=null && parameterMap.containsKey(de.codeElement)) - set.add(domain.getMappedIndex(new DomainElement(parameterMap.get(de.codeElement),de.taintSource))); - return set; + return d1 -> { + BitVectorIntSet set = new BitVectorIntSet(); + if(d1 == 0 || !(domain.getMappedObject(d1).codeElement instanceof LocalElement)) { + set.add(d1); } - + DomainElement de = domain.getMappedObject(d1); + if(de!=null && parameterMap.containsKey(de.codeElement)) + set.add(domain.getMappedIndex(new DomainElement(parameterMap.get(de.codeElement),de.taintSource))); + return set; }; } diff --git a/com.ibm.wala.scandroid/source/org/scandroid/flow/functions/TaintTransferFunctions.java b/com.ibm.wala.scandroid/source/org/scandroid/flow/functions/TaintTransferFunctions.java index ea407354e..00b015054 100644 --- a/com.ibm.wala.scandroid/source/org/scandroid/flow/functions/TaintTransferFunctions.java +++ b/com.ibm.wala.scandroid/source/org/scandroid/flow/functions/TaintTransferFunctions.java @@ -94,7 +94,6 @@ import com.ibm.wala.types.TypeReference; import com.ibm.wala.util.collections.HashSetFactory; import com.ibm.wala.util.collections.Pair; import com.ibm.wala.util.intset.IntSet; -import com.ibm.wala.util.intset.IntSetAction; import com.ibm.wala.util.intset.MutableSparseIntSet; import com.ibm.wala.util.intset.OrdinalSet; import com.ibm.wala.util.intset.SparseIntSet; @@ -494,12 +493,7 @@ public class TaintTransferFunctions implements private static IUnaryFlowFunction union(final IUnaryFlowFunction g, final IUnaryFlowFunction h) { - return new IUnaryFlowFunction() { - @Override - public IntSet getTargets(int d1) { - return g.getTargets(d1).union(h.getTargets(d1)); - } - }; + return d1 -> g.getTargets(d1).union(h.getTargets(d1)); } /** @@ -511,20 +505,10 @@ public class TaintTransferFunctions implements */ private static IUnaryFlowFunction compose(final IUnaryFlowFunction f, final IUnaryFlowFunction g) { - return new IUnaryFlowFunction() { - - @Override - public IntSet getTargets(int d1) { - final MutableSparseIntSet set = MutableSparseIntSet.makeEmpty(); - g.getTargets(d1).foreach(new IntSetAction() { - - @Override - public void act(int x) { - set.addAll(f.getTargets(x)); - } - }); - return set; - } + return d1 -> { + final MutableSparseIntSet set = MutableSparseIntSet.makeEmpty(); + g.getTargets(d1).foreach(x -> set.addAll(f.getTargets(x))); + return set; }; } diff --git a/com.ibm.wala.scandroid/source/org/scandroid/flow/functions/TracingFlowFunction.java b/com.ibm.wala.scandroid/source/org/scandroid/flow/functions/TracingFlowFunction.java index 8bdc6a5aa..5eae3cbec 100644 --- a/com.ibm.wala.scandroid/source/org/scandroid/flow/functions/TracingFlowFunction.java +++ b/com.ibm.wala.scandroid/source/org/scandroid/flow/functions/TracingFlowFunction.java @@ -50,7 +50,6 @@ package org.scandroid.flow.functions; import com.ibm.wala.dataflow.IFDS.IUnaryFlowFunction; import com.ibm.wala.util.intset.IntSet; -import com.ibm.wala.util.intset.IntSetAction; public class TracingFlowFunction implements IUnaryFlowFunction { private final IUnaryFlowFunction function; @@ -63,12 +62,8 @@ public class TracingFlowFunction implements IUnaryFlowFunction { public IntSet getTargets(int d1) { IntSet result = function.getTargets(d1); - result.foreach(new IntSetAction() { + result.foreach(x -> { - @Override - public void act(int x) { - - } }); return result; } diff --git a/com.ibm.wala.scandroid/source/org/scandroid/util/CGAnalysisContext.java b/com.ibm.wala.scandroid/source/org/scandroid/util/CGAnalysisContext.java index 2cd6f35ee..2cce1dc39 100644 --- a/com.ibm.wala.scandroid/source/org/scandroid/util/CGAnalysisContext.java +++ b/com.ibm.wala.scandroid/source/org/scandroid/util/CGAnalysisContext.java @@ -58,7 +58,6 @@ import java.util.Deque; import java.util.Iterator; import java.util.List; import java.util.Set; -import java.util.function.Predicate; import org.scandroid.domain.CodeElement; import org.scandroid.domain.FieldElement; @@ -198,13 +197,7 @@ public class CGAnalysisContext { Warnings.clear(); pa = cgb.getPointerAnalysis(); - partialGraph = GraphSlicer.prune(cg, new Predicate() { - @Override - // CallGraph composed of APK nodes - public boolean test(CGNode node) { - return LoaderUtils.fromLoader(node, ClassLoaderReference.Application) || node.getMethod().isSynthetic(); - } - }); + partialGraph = GraphSlicer.prune(cg, node -> LoaderUtils.fromLoader(node, ClassLoaderReference.Application) || node.getMethod().isSynthetic()); if (options.includeLibrary()) { graph = (ISupergraph) ICFGSupergraph.make(cg); } else { @@ -217,65 +210,59 @@ public class CGAnalysisContext { graph = (ISupergraph) ICFGSupergraph.make(pcg); } - oneLevelGraph = GraphSlicer.prune(cg, new Predicate() { - @Override - public boolean test(CGNode node) { - // Node in APK - if (LoaderUtils.fromLoader(node, ClassLoaderReference.Application)) { - return true; - } else { - Iterator n = cg.getPredNodes(node); - while (n.hasNext()) { - // Primordial node has a successor in APK - if (LoaderUtils.fromLoader(n.next(), ClassLoaderReference.Application)) - return true; - } - n = cg.getSuccNodes(node); - while (n.hasNext()) { - // Primordial node has a predecessor in APK - if (LoaderUtils.fromLoader(n.next(), ClassLoaderReference.Application)) - return true; - } - // Primordial node with no direct successors or predecessors - // to APK code - return false; + oneLevelGraph = GraphSlicer.prune(cg, node -> { + // Node in APK + if (LoaderUtils.fromLoader(node, ClassLoaderReference.Application)) { + return true; + } else { + Iterator n = cg.getPredNodes(node); + while (n.hasNext()) { + // Primordial node has a successor in APK + if (LoaderUtils.fromLoader(n.next(), ClassLoaderReference.Application)) + return true; } + n = cg.getSuccNodes(node); + while (n.hasNext()) { + // Primordial node has a predecessor in APK + if (LoaderUtils.fromLoader(n.next(), ClassLoaderReference.Application)) + return true; + } + // Primordial node with no direct successors or predecessors + // to APK code + return false; } }); - systemToApkGraph = GraphSlicer.prune(cg, new Predicate() { - @Override - public boolean test(CGNode node) { + systemToApkGraph = GraphSlicer.prune(cg, node -> { - if (LoaderUtils.fromLoader(node, ClassLoaderReference.Primordial)) { - Iterator succs = cg.getSuccNodes(node); - while (succs.hasNext()) { - CGNode n = succs.next(); + if (LoaderUtils.fromLoader(node, ClassLoaderReference.Primordial)) { + Iterator succs = cg.getSuccNodes(node); + while (succs.hasNext()) { + CGNode n1 = succs.next(); - if (LoaderUtils.fromLoader(n, ClassLoaderReference.Application)) { - return true; - } + if (LoaderUtils.fromLoader(n1, ClassLoaderReference.Application)) { + return true; } - // Primordial method, with no link to APK code: - return false; - } else if (LoaderUtils.fromLoader(node, ClassLoaderReference.Application)) { - // see if this is an APK method that was - // invoked by a Primordial method: - Iterator preds = cg.getPredNodes(node); - while (preds.hasNext()) { - CGNode n = preds.next(); - - if (LoaderUtils.fromLoader(n, ClassLoaderReference.Primordial)) { - return true; - } - } - // APK code, no link to Primordial: - return false; } + // Primordial method, with no link to APK code: + return false; + } else if (LoaderUtils.fromLoader(node, ClassLoaderReference.Application)) { + // see if this is an APK method that was + // invoked by a Primordial method: + Iterator preds = cg.getPredNodes(node); + while (preds.hasNext()) { + CGNode n2 = preds.next(); - // who knows, not interesting: + if (LoaderUtils.fromLoader(n2, ClassLoaderReference.Primordial)) { + return true; + } + } + // APK code, no link to Primordial: return false; } + + // who knows, not interesting: + return false; }); /* diff --git a/com.ibm.wala.shrike/src/com/ibm/wala/shrike/copywriter/CopyWriter.java b/com.ibm.wala.shrike/src/com/ibm/wala/shrike/copywriter/CopyWriter.java index dd4d11c05..5a686ca03 100644 --- a/com.ibm.wala.shrike/src/com/ibm/wala/shrike/copywriter/CopyWriter.java +++ b/com.ibm.wala.shrike/src/com/ibm/wala/shrike/copywriter/CopyWriter.java @@ -95,12 +95,7 @@ public class CopyWriter { final ArrayList entries = new ArrayList<>(); instrumenter = new OfflineInstrumenter(); - instrumenter.setManifestBuilder(new OfflineInstrumenter.ManifestBuilder() { - @Override - public void addEntry(ZipEntry ze) { - entries.add(ze); - } - }); + instrumenter.setManifestBuilder(ze -> entries.add(ze)); instrumenter.parseStandardArgs(args); instrumenter.setJARComment(copyright); instrumenter.beginTraversal(); diff --git a/com.ibm.wala.shrike/src/com/ibm/wala/shrikeBT/shrikeCT/tools/AddSerialVersion.java b/com.ibm.wala.shrike/src/com/ibm/wala/shrikeBT/shrikeCT/tools/AddSerialVersion.java index c775355ed..5bfb8bfdf 100644 --- a/com.ibm.wala.shrike/src/com/ibm/wala/shrikeBT/shrikeCT/tools/AddSerialVersion.java +++ b/com.ibm.wala.shrike/src/com/ibm/wala/shrikeBT/shrikeCT/tools/AddSerialVersion.java @@ -19,7 +19,6 @@ import java.security.DigestOutputStream; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; import java.util.Arrays; -import java.util.Comparator; import com.ibm.wala.shrikeBT.Util; import com.ibm.wala.shrikeCT.ClassConstants; @@ -119,13 +118,10 @@ public class AddSerialVersion { fieldCount++; } } - Arrays.sort(fields, 0, fieldCount, new Comparator() { - @Override - public int compare(Integer o1, Integer o2) { - String name1 = fieldNames[o1.intValue()]; - String name2 = fieldNames[o2.intValue()]; - return name1.compareTo(name2); - } + Arrays.sort(fields, 0, fieldCount, (o1, o2) -> { + String name1 = fieldNames[o1.intValue()]; + String name2 = fieldNames[o2.intValue()]; + return name1.compareTo(name2); }); for (int i = 0; i < fieldCount; i++) { int f = fields[i].intValue(); @@ -155,18 +151,15 @@ public class AddSerialVersion { methodCount++; } } - Arrays.sort(methods, 0, methodCount, new Comparator() { - @Override - public int compare(Integer o1, Integer o2) { - int m1 = o1.intValue(); - int m2 = o2.intValue(); - if (methodKinds[m1] != methodKinds[m2]) { - return methodKinds[m1] - methodKinds[m2]; - } - String name1 = methodSigs[m1]; - String name2 = methodSigs[m2]; - return name1.compareTo(name2); + Arrays.sort(methods, 0, methodCount, (o1, o2) -> { + int m1 = o1.intValue(); + int m2 = o2.intValue(); + if (methodKinds[m1] != methodKinds[m2]) { + return methodKinds[m1] - methodKinds[m2]; } + String name1 = methodSigs[m1]; + String name2 = methodSigs[m2]; + return name1.compareTo(name2); }); for (int i = 0; i < methodCount; i++) { int m = methods[i].intValue(); diff --git a/com.ibm.wala.shrike/src/com/ibm/wala/shrikeBT/tools/OfflineInstrumenterBase.java b/com.ibm.wala.shrike/src/com/ibm/wala/shrikeBT/tools/OfflineInstrumenterBase.java index 5c94bad8b..3f1cb65c8 100644 --- a/com.ibm.wala.shrike/src/com/ibm/wala/shrikeBT/tools/OfflineInstrumenterBase.java +++ b/com.ibm.wala.shrike/src/com/ibm/wala/shrikeBT/tools/OfflineInstrumenterBase.java @@ -263,12 +263,7 @@ public abstract class OfflineInstrumenterBase { if (d == null) { throw new IllegalArgumentException("d is null"); } - File[] fs = d.listFiles(new FileFilter() { - @Override - public boolean accept(File f) { - return f.isDirectory() || f.getName().endsWith(".class"); - } - }); + File[] fs = d.listFiles((FileFilter) f -> f.isDirectory() || f.getName().endsWith(".class")); if (fs == null) { throw new IllegalArgumentException("bad directory " + d.getAbsolutePath()); } diff --git a/com.ibm.wala.shrike/src/com/ibm/wala/shrikeCT/TypeAnnotationsReader.java b/com.ibm.wala.shrike/src/com/ibm/wala/shrikeCT/TypeAnnotationsReader.java index 8cd4f3d7c..d0edbbe87 100644 --- a/com.ibm.wala.shrike/src/com/ibm/wala/shrikeCT/TypeAnnotationsReader.java +++ b/com.ibm.wala.shrike/src/com/ibm/wala/shrikeCT/TypeAnnotationsReader.java @@ -754,40 +754,20 @@ public class TypeAnnotationsReader extends AnnotationsReader { TypeAnnotationsReader apply() throws InvalidClassFileException; } public static TypeAnnotationsReader getReaderForAnnotationAtClassfile(final AnnotationType type, final ClassReader.AttrIterator iter, final SignatureReader signatureReader) { - return advanceIter(type, iter, new Action() { - @Override - public TypeAnnotationsReader apply() throws InvalidClassFileException { - return getTypeAnnotationReaderAtClassfile(iter, type.toString(), signatureReader); - } - }); + return advanceIter(type, iter, () -> getTypeAnnotationReaderAtClassfile(iter, type.toString(), signatureReader)); } public static TypeAnnotationsReader getReaderForAnnotationAtMethodInfo(final AnnotationType type, final ClassReader.AttrIterator iter, final ExceptionsReader exceptionReader, final SignatureReader signatureReader) { - return advanceIter(type, iter, new Action() { - @Override - public TypeAnnotationsReader apply() throws InvalidClassFileException { - return getTypeAnnotationReaderAtMethodInfo(iter, type.toString(), exceptionReader, signatureReader); - } - }); + return advanceIter(type, iter, () -> getTypeAnnotationReaderAtMethodInfo(iter, type.toString(), exceptionReader, signatureReader)); } public static TypeAnnotationsReader getReaderForAnnotationAtFieldInfo(final AnnotationType type, final ClassReader.AttrIterator iter) { - return advanceIter(type, iter, new Action() { - @Override - public TypeAnnotationsReader apply() throws InvalidClassFileException { - return getTypeAnnotationReaderAtFieldInfo(iter, type.toString()); - } - }); + return advanceIter(type, iter, () -> getTypeAnnotationReaderAtFieldInfo(iter, type.toString())); } public static TypeAnnotationsReader getReaderForAnnotationAtCode(final AnnotationType type, final ClassReader.AttrIterator iter, final CodeReader codereader) { - return advanceIter(type, iter, new Action() { - @Override - public TypeAnnotationsReader apply() throws InvalidClassFileException { - return getTypeAnnotationReaderAtCode(iter, type.toString(), codereader); - } - }); + return advanceIter(type, iter, () -> getTypeAnnotationReaderAtCode(iter, type.toString(), codereader)); } diff --git a/com.ibm.wala.util/src/com/ibm/wala/dataflow/graph/BitVectorIntersection.java b/com.ibm.wala.util/src/com/ibm/wala/dataflow/graph/BitVectorIntersection.java index 64253df57..44d4f32e1 100644 --- a/com.ibm.wala.util/src/com/ibm/wala/dataflow/graph/BitVectorIntersection.java +++ b/com.ibm.wala.util/src/com/ibm/wala/dataflow/graph/BitVectorIntersection.java @@ -13,7 +13,6 @@ package com.ibm.wala.dataflow.graph; import com.ibm.wala.fixpoint.BitVectorVariable; import com.ibm.wala.util.intset.IntSet; -import com.ibm.wala.util.intset.IntSetAction; /** * Operator U(n) = U(n) n U(j) @@ -59,12 +58,7 @@ public final class BitVectorIntersection extends AbstractMeetOperator bvv.set(x)); lhs.copyState(bvv); return CHANGED; diff --git a/com.ibm.wala.util/src/com/ibm/wala/fixedpoint/impl/DefaultFixedPointSystem.java b/com.ibm.wala.util/src/com/ibm/wala/fixedpoint/impl/DefaultFixedPointSystem.java index 186d69cee..770eefa0a 100644 --- a/com.ibm.wala.util/src/com/ibm/wala/fixedpoint/impl/DefaultFixedPointSystem.java +++ b/com.ibm.wala.util/src/com/ibm/wala/fixedpoint/impl/DefaultFixedPointSystem.java @@ -10,7 +10,6 @@ *******************************************************************************/ package com.ibm.wala.fixedpoint.impl; -import java.util.function.Predicate; import java.util.Iterator; import java.util.Set; @@ -95,11 +94,7 @@ public class DefaultFixedPointSystem> implements IFixedPo @Override @SuppressWarnings({ "unchecked", "rawtypes" }) public Iterator getStatements() { - return new FilterIterator(graph.iterator(), new Predicate() { - @Override public boolean test(Object x) { - return x instanceof AbstractStatement; - } - }); + return new FilterIterator(graph.iterator(), x -> x instanceof AbstractStatement); } @Override @@ -259,11 +254,7 @@ public class DefaultFixedPointSystem> implements IFixedPo @Override public Iterator getVariables() { - return new FilterIterator<>(graph.iterator(), new Predicate() { - @Override public boolean test(Object x) { - return x != null; - } - }); + return new FilterIterator<>(graph.iterator(), x -> x != null); } public int getNumberOfNodes() { diff --git a/com.ibm.wala.util/src/com/ibm/wala/util/collections/IteratorUtil.java b/com.ibm.wala.util/src/com/ibm/wala/util/collections/IteratorUtil.java index 550a1f67d..0aa9f1159 100644 --- a/com.ibm.wala.util/src/com/ibm/wala/util/collections/IteratorUtil.java +++ b/com.ibm.wala.util/src/com/ibm/wala/util/collections/IteratorUtil.java @@ -12,7 +12,6 @@ package com.ibm.wala.util.collections; import java.util.Iterator; import java.util.function.Function; -import java.util.function.Predicate; /** * utilities dealing with Iterators */ @@ -47,11 +46,7 @@ public class IteratorUtil { public static Iterator filter(Iterator iterator, final Class cls) { return new MapIterator<>( - new FilterIterator<>(iterator, new Predicate() { - @Override public boolean test(T o) { - return cls.isInstance(o); - } - }), + new FilterIterator<>(iterator, o -> cls.isInstance(o)), new Function() { @SuppressWarnings("unchecked") @Override diff --git a/com.ibm.wala.util/src/com/ibm/wala/util/collections/Util.java b/com.ibm.wala.util/src/com/ibm/wala/util/collections/Util.java index fcbc4d3e3..ac769a6e9 100644 --- a/com.ibm.wala.util/src/com/ibm/wala/util/collections/Util.java +++ b/com.ibm.wala.util/src/com/ibm/wala/util/collections/Util.java @@ -283,12 +283,7 @@ public class Util { * @return true if the sets intersect; false otherwise */ public static boolean intersecting(final Set s1, final Set s2) { - return forSome(s1, new Predicate() { - @Override - public boolean test(T obj) { - return s2.contains(obj); - } - }); + return forSome(s1, obj -> s2.contains(obj)); } /** diff --git a/com.ibm.wala.util/src/com/ibm/wala/util/graph/GraphSlicer.java b/com.ibm.wala.util/src/com/ibm/wala/util/graph/GraphSlicer.java index 6be8d49f1..1d47f0859 100644 --- a/com.ibm.wala.util/src/com/ibm/wala/util/graph/GraphSlicer.java +++ b/com.ibm.wala.util/src/com/ibm/wala/util/graph/GraphSlicer.java @@ -234,21 +234,11 @@ public class GraphSlicer { } private void setPredNodes(E N) { - preds.put(N, getConnected(N, new Function>() { - @Override - public Iterator apply(E object) { - return G.getPredNodes(object); - } - })); + preds.put(N, getConnected(N, object -> G.getPredNodes(object))); } private void setSuccNodes(E N) { - succs.put(N, getConnected(N, new Function>() { - @Override - public Iterator apply(E object) { - return G.getSuccNodes(object); - } - })); + succs.put(N, getConnected(N, object -> G.getSuccNodes(object))); } @Override diff --git a/com.ibm.wala.util/src/com/ibm/wala/util/graph/impl/ExtensionGraph.java b/com.ibm.wala.util/src/com/ibm/wala/util/graph/impl/ExtensionGraph.java index d2362d833..7ca5c309f 100644 --- a/com.ibm.wala.util/src/com/ibm/wala/util/graph/impl/ExtensionGraph.java +++ b/com.ibm.wala.util/src/com/ibm/wala/util/graph/impl/ExtensionGraph.java @@ -23,7 +23,6 @@ import com.ibm.wala.util.graph.NumberedNodeManager; import com.ibm.wala.util.intset.EmptyIntSet; import com.ibm.wala.util.intset.IntIterator; import com.ibm.wala.util.intset.IntSet; -import com.ibm.wala.util.intset.IntSetAction; import com.ibm.wala.util.intset.IntSetUtil; import com.ibm.wala.util.intset.MutableIntSet; @@ -229,15 +228,12 @@ public class ExtensionGraph implements NumberedGraph { public Iterator iterateNodes(IntSet s) { final MutableIntSet os = IntSetUtil.make(); final MutableIntSet es = IntSetUtil.make(); - s.foreach(new IntSetAction() { - @Override - public void act(int x) { - if (x <= original.getMaxNumber()) { - os.add(x); - } else { - es.add(x - original.getMaxNumber() - 1); - } - } + s.foreach(x -> { + if (x <= original.getMaxNumber()) { + os.add(x); + } else { + es.add(x - original.getMaxNumber() - 1); + } }); return new CompoundIterator<>(original.iterateNodes(os), additionalNodes.iterateNodes(es)); } diff --git a/com.ibm.wala.util/src/com/ibm/wala/util/graph/impl/SparseNumberedEdgeManager.java b/com.ibm.wala.util/src/com/ibm/wala/util/graph/impl/SparseNumberedEdgeManager.java index 7c693e4e4..7100560cc 100644 --- a/com.ibm.wala.util/src/com/ibm/wala/util/graph/impl/SparseNumberedEdgeManager.java +++ b/com.ibm.wala.util/src/com/ibm/wala/util/graph/impl/SparseNumberedEdgeManager.java @@ -21,7 +21,6 @@ import com.ibm.wala.util.intset.BasicNaturalRelation; import com.ibm.wala.util.intset.BitVector; import com.ibm.wala.util.intset.IBinaryNaturalRelation; import com.ibm.wala.util.intset.IntSet; -import com.ibm.wala.util.intset.IntSetAction; /** * An object which tracks edges for nodes that have numbers. @@ -204,22 +203,14 @@ public final class SparseNumberedEdgeManager implements NumberedEdgeManager predecessors.remove(x, number)); } IntSet pred = predecessors.getRelated(number); if (pred != null) { - pred.foreach(new IntSetAction() { - @Override - public void act(int x) { - successors.remove(x, number); - if (successors.getRelatedCount(x) == 0) { - hasSuccessor.clear(x); - } + pred.foreach(x -> { + successors.remove(x, number); + if (successors.getRelatedCount(x) == 0) { + hasSuccessor.clear(x); } }); } @@ -239,13 +230,10 @@ public final class SparseNumberedEdgeManager implements NumberedEdgeManager { + successors.remove(x, number); + if (successors.getRelatedCount(x) == 0) { + hasSuccessor.clear(x); } }); } @@ -280,12 +268,7 @@ public final class SparseNumberedEdgeManager implements NumberedEdgeManager predecessors.remove(x, number)); } successors.removeAll(number); hasSuccessor.clear(number); diff --git a/com.ibm.wala.util/src/com/ibm/wala/util/graph/traverse/BFSPathFinder.java b/com.ibm.wala.util/src/com/ibm/wala/util/graph/traverse/BFSPathFinder.java index 761bc32a8..3d0486c5c 100644 --- a/com.ibm.wala.util/src/com/ibm/wala/util/graph/traverse/BFSPathFinder.java +++ b/com.ibm.wala.util/src/com/ibm/wala/util/graph/traverse/BFSPathFinder.java @@ -83,11 +83,7 @@ public class BFSPathFinder { if (!G.containsNode(src)) { throw new IllegalArgumentException("src is not in graph " + src); } - this.filter = new Predicate() { - @Override public boolean test(T o) { - return target.equals(o); - } - }; + this.filter = o -> target.equals(o); } /** @@ -107,11 +103,7 @@ public class BFSPathFinder { this.G = G; this.roots = new NonNullSingletonIterator<>(src); - this.filter = new Predicate() { - @Override public boolean test(T o) { - return ts.contains(o); - } - }; + this.filter = o -> ts.contains(o); } /** @@ -128,11 +120,7 @@ public class BFSPathFinder { } this.G = G; this.roots = sources; - this.filter = new Predicate() { - @Override public boolean test(T o) { - return target.equals(o); - } - }; + this.filter = o -> target.equals(o); } /** diff --git a/com.ibm.wala.util/src/com/ibm/wala/util/graph/traverse/DFSAllPathsFinder.java b/com.ibm.wala.util/src/com/ibm/wala/util/graph/traverse/DFSAllPathsFinder.java index 6acd539a6..805fb2ad1 100644 --- a/com.ibm.wala.util/src/com/ibm/wala/util/graph/traverse/DFSAllPathsFinder.java +++ b/com.ibm.wala.util/src/com/ibm/wala/util/graph/traverse/DFSAllPathsFinder.java @@ -41,11 +41,7 @@ public class DFSAllPathsFinder extends DFSPathFinder { @Override protected Iterator getConnected(T n) { final List cp = currentPath(); - return new FilterIterator<>(G.getSuccNodes(n), new Predicate() { - @Override public boolean test(T o) { - return ! cp.contains(o); - } - }); + return new FilterIterator<>(G.getSuccNodes(n), o -> ! cp.contains(o)); } @Override diff --git a/com.ibm.wala.util/src/com/ibm/wala/util/graph/traverse/FloydWarshall.java b/com.ibm.wala.util/src/com/ibm/wala/util/graph/traverse/FloydWarshall.java index 7b086d164..da5b75fb9 100644 --- a/com.ibm.wala.util/src/com/ibm/wala/util/graph/traverse/FloydWarshall.java +++ b/com.ibm.wala.util/src/com/ibm/wala/util/graph/traverse/FloydWarshall.java @@ -19,7 +19,6 @@ import java.util.Set; import com.ibm.wala.util.graph.NumberedGraph; import com.ibm.wala.util.intset.IntSet; -import com.ibm.wala.util.intset.IntSetAction; import com.ibm.wala.util.intset.IntSetUtil; import com.ibm.wala.util.intset.MutableIntSet; @@ -67,12 +66,7 @@ public class FloydWarshall { for(T from : G) { final int fn = G.getNumber(from); IntSet tos = G.getSuccNodeNumbers(from); - tos.foreach(new IntSetAction() { - @Override - public void act(int x) { - result[fn][x] = edgeCost(); - } - }); + tos.foreach(x -> result[fn][x] = edgeCost()); } for(T kn : G) { @@ -202,20 +196,17 @@ public class FloydWarshall { } else { final Set> result = new HashSet<>(); - intermediate.foreach(new IntSetAction() { - @Override - public void act(int x) { - T in = G.getNode(x); - for(List pre : getPaths(from, in)) { - for(List post : getPaths(in, to)) { - List path = new LinkedList<>(pre); - path.add(in); - path.addAll(post); - result.add(path); - } + intermediate.foreach(x -> { + T in = G.getNode(x); + for(List pre : getPaths(from, in)) { + for(List post : getPaths(in, to)) { + List path = new LinkedList<>(pre); + path.add(in); + path.addAll(post); + result.add(path); } - } - }); + } + }); return result; } diff --git a/com.ibm.wala.util/src/com/ibm/wala/util/graph/traverse/Topological.java b/com.ibm.wala.util/src/com/ibm/wala/util/graph/traverse/Topological.java index 1b63ac024..443c1803a 100644 --- a/com.ibm.wala.util/src/com/ibm/wala/util/graph/traverse/Topological.java +++ b/com.ibm.wala.util/src/com/ibm/wala/util/graph/traverse/Topological.java @@ -31,28 +31,25 @@ public class Topological { throw new IllegalArgumentException("graph == null"); } - return new Iterable() { - @Override - public Iterator iterator() { - // the following code ensures a topological order over SCCs. - // note that the first two lines of the following give a topological - // order for dags, but that can get screwed up by cycles. so - // instead, we use Tarjan's SCC algorithm, which happens to - // visit nodes in an order consistent with a top. order over SCCs. + return () -> { + // the following code ensures a topological order over SCCs. + // note that the first two lines of the following give a topological + // order for dags, but that can get screwed up by cycles. so + // instead, we use Tarjan's SCC algorithm, which happens to + // visit nodes in an order consistent with a top. order over SCCs. - // finish time is post-order - // note that if you pay attention only to the first representative - // of each SCC discovered, we have a top. order of these SCC - // representatives - Iterator finishTime = DFS.iterateFinishTime(graph); - // reverse postorder is usual topological sort. - Iterator rev = ReverseIterator.reverse(finishTime); - // the following statement helps out the GC; note that finishTime holds - // on to a large array - finishTime = null; - Graph G_T = GraphInverter.invert(graph); - return DFS.iterateFinishTime(G_T, rev); - } + // finish time is post-order + // note that if you pay attention only to the first representative + // of each SCC discovered, we have a top. order of these SCC + // representatives + Iterator finishTime = DFS.iterateFinishTime(graph); + // reverse postorder is usual topological sort. + Iterator rev = ReverseIterator.reverse(finishTime); + // the following statement helps out the GC; note that finishTime holds + // on to a large array + finishTime = null; + Graph G_T = GraphInverter.invert(graph); + return DFS.iterateFinishTime(G_T, rev); }; } } diff --git a/com.ibm.wala.util/src/com/ibm/wala/util/graph/traverse/WelshPowell.java b/com.ibm.wala.util/src/com/ibm/wala/util/graph/traverse/WelshPowell.java index 6c30c1a4e..4c6191569 100644 --- a/com.ibm.wala.util/src/com/ibm/wala/util/graph/traverse/WelshPowell.java +++ b/com.ibm.wala.util/src/com/ibm/wala/util/graph/traverse/WelshPowell.java @@ -65,17 +65,13 @@ public class WelshPowell { } public static Comparator defaultComparator(final NumberedGraph G) { - return new Comparator() { - - @Override - public int compare(T o1, T o2) { - int o1edges = G.getSuccNodeCount(o1) + G.getPredNodeCount(o1); - int o2edges = G.getSuccNodeCount(o2) + G.getPredNodeCount(o2); - if (o1edges != o2edges) { - return o2edges - o1edges; - } else { - return o2.toString().compareTo(o1.toString()); - } + return (o1, o2) -> { + int o1edges = G.getSuccNodeCount(o1) + G.getPredNodeCount(o1); + int o2edges = G.getSuccNodeCount(o2) + G.getPredNodeCount(o2); + if (o1edges != o2edges) { + return o2edges - o1edges; + } else { + return o2.toString().compareTo(o1.toString()); } }; } diff --git a/com.ibm.wala.util/src/com/ibm/wala/util/intset/DebuggingMutableIntSet.java b/com.ibm.wala.util/src/com/ibm/wala/util/intset/DebuggingMutableIntSet.java index 9419dfcac..e17ad2258 100644 --- a/com.ibm.wala.util/src/com/ibm/wala/util/intset/DebuggingMutableIntSet.java +++ b/com.ibm.wala.util/src/com/ibm/wala/util/intset/DebuggingMutableIntSet.java @@ -313,19 +313,13 @@ class DebuggingMutableIntSet implements MutableIntSet { @Override public void foreach(IntSetAction action) { final Set bits = HashSetFactory.make(); - primaryImpl.foreach(new IntSetAction() { - @Override - public void act(int x) { - assert !bits.contains(Integer.valueOf(x)); - bits.add(Integer.valueOf(x)); - } + primaryImpl.foreach(x -> { + assert !bits.contains(Integer.valueOf(x)); + bits.add(Integer.valueOf(x)); }); - secondaryImpl.foreach(new IntSetAction() { - @Override - public void act(int x) { - assert bits.contains(Integer.valueOf(x)); - bits.remove(Integer.valueOf(x)); - } + secondaryImpl.foreach(x -> { + assert bits.contains(Integer.valueOf(x)); + bits.remove(Integer.valueOf(x)); }); assert bits.isEmpty(); @@ -338,19 +332,13 @@ class DebuggingMutableIntSet implements MutableIntSet { @Override public void foreachExcluding(IntSet X, IntSetAction action) { final Set bits = HashSetFactory.make(); - primaryImpl.foreachExcluding(X, new IntSetAction() { - @Override - public void act(int x) { - assert !bits.contains(Integer.valueOf(x)); - bits.add(Integer.valueOf(x)); - } + primaryImpl.foreachExcluding(X, x -> { + assert !bits.contains(Integer.valueOf(x)); + bits.add(Integer.valueOf(x)); }); - secondaryImpl.foreachExcluding(X, new IntSetAction() { - @Override - public void act(int x) { - assert bits.contains(Integer.valueOf(x)); - bits.remove(Integer.valueOf(x)); - } + secondaryImpl.foreachExcluding(X, x -> { + assert bits.contains(Integer.valueOf(x)); + bits.remove(Integer.valueOf(x)); }); assert bits.isEmpty(); diff --git a/com.ibm.wala.util/src/com/ibm/wala/util/intset/MutableSparseIntSet.java b/com.ibm.wala.util/src/com/ibm/wala/util/intset/MutableSparseIntSet.java index 87c7484b5..6360670d0 100644 --- a/com.ibm.wala.util/src/com/ibm/wala/util/intset/MutableSparseIntSet.java +++ b/com.ibm.wala.util/src/com/ibm/wala/util/intset/MutableSparseIntSet.java @@ -325,13 +325,10 @@ public class MutableSparseIntSet extends SparseIntSet implements MutableIntSet { return addAll((SparseIntSet) set); } else { int oldSize = size; - set.foreach(new IntSetAction() { - @Override - public void act(int i) { - if (!contains(i)) - add(i); - } - }); + set.foreach(i -> { + if (!contains(i)) + add(i); + }); if (DEBUG_LARGE && size() > TRAP_SIZE) { Assertions.UNREACHABLE(); diff --git a/com.ibm.wala.util/src/com/ibm/wala/util/io/FileUtil.java b/com.ibm.wala.util/src/com/ibm/wala/util/io/FileUtil.java index ad4ed423d..3cee37f2e 100644 --- a/com.ibm.wala.util/src/com/ibm/wala/util/io/FileUtil.java +++ b/com.ibm.wala.util/src/com/ibm/wala/util/io/FileUtil.java @@ -192,12 +192,7 @@ public class FileUtil { public static void recurseFiles(Consumer action, final Predicate filter, File top) { if (top.isDirectory()) { - for(File f : top.listFiles(new FileFilter() { - @Override - public boolean accept(File file) { - return filter.test(file) || file.isDirectory(); - } - })) { + for(File f : top.listFiles((FileFilter) file -> filter.test(file) || file.isDirectory())) { recurseFiles(action, filter, f); } } else { diff --git a/com.ibm.wala.util/src/com/ibm/wala/util/io/RtJar.java b/com.ibm.wala.util/src/com/ibm/wala/util/io/RtJar.java index a4504b6f4..caa8b5387 100644 --- a/com.ibm.wala.util/src/com/ibm/wala/util/io/RtJar.java +++ b/com.ibm.wala.util/src/com/ibm/wala/util/io/RtJar.java @@ -3,8 +3,6 @@ package com.ibm.wala.util.io; import java.io.File; import java.io.IOException; import java.util.Iterator; -import java.util.function.Function; -import java.util.function.Predicate; import java.util.jar.JarFile; import com.ibm.wala.util.PlatformUtil; @@ -37,21 +35,14 @@ public class RtJar { JarFile rt = getRtJar(new MapIterator<>( new FilterIterator<>( new ArrayIterator<>(System.getProperty("sun.boot.class.path").split(File.pathSeparator)), - new Predicate() { - @Override - public boolean test(String t) { - return t.endsWith(".jar"); - } }), - new Function() { - @Override - public JarFile apply(String object) { - try { - return new JarFile(object); - } catch (IOException e) { - assert false : e.toString(); - return null; - } - } + t -> t.endsWith(".jar")), + object -> { + try { + return new JarFile(object); + } catch (IOException e) { + assert false : e.toString(); + return null; + } })); System.err.println(rt.getName()); From 74e0640771c3f5a701abed3681ad0a4b10730e54 Mon Sep 17 00:00:00 2001 From: Ben Liblit Date: Wed, 22 Nov 2017 13:27:43 -0600 Subject: [PATCH 11/69] Replace simple lambdas with method references wherever possible --- .../ibm/wala/cast/java/client/JavaSourceAnalysisEngine.java | 3 ++- .../com/ibm/wala/cast/java/ipa/slicer/AstJavaSlicer.java | 4 ++-- .../cast/js/test/TestSimplePageCallGraphShapeRhino.java | 2 +- .../com/ibm/wala/cast/js/test/TestPointerAnalyses.java | 2 +- .../cast/js/callgraph/fieldbased/flowgraph/FlowGraph.java | 4 ++-- .../com/ibm/wala/cast/js/html/DefaultSourceExtractor.java | 2 +- .../com/ibm/wala/cast/js/html/DomLessSourceExtractor.java | 2 +- .../source/com/ibm/wala/cast/js/html/WebUtil.java | 2 +- .../source/com/ibm/wala/cast/js/util/CallGraph2JSON.java | 2 +- .../java/com/ibm/wala/cast/ipa/lexical/LexicalModRef.java | 4 ++-- .../java/com/ibm/wala/cast/ir/translator/AstTranslator.java | 2 +- .../java/com/ibm/wala/cast/loader/CAstAbstractLoader.java | 2 +- .../src/com/ibm/wala/core/tests/basic/PathFinderTest.java | 3 +-- .../com/ibm/wala/core/tests/callGraph/CallGraphTest.java | 4 ++-- .../wala/core/tests/shrike/DynamicCallGraphTestBase.java | 4 ++-- .../src/com/ibm/wala/examples/drivers/PDFSlice.java | 4 +--- .../src/com/ibm/wala/analysis/pointers/BasicHeapGraph.java | 2 +- .../src/com/ibm/wala/analysis/pointers/HeapGraphImpl.java | 3 +-- .../ibm/wala/analysis/reflection/java7/MethodHandles.java | 4 ++-- .../src/com/ibm/wala/classLoader/ShrikeCTMethod.java | 6 +++--- .../src/com/ibm/wala/classLoader/ShrikeClass.java | 2 +- .../src/com/ibm/wala/client/AbstractAnalysisEngine.java | 2 +- .../src/com/ibm/wala/dataflow/IFDS/ICFGSupergraph.java | 2 +- .../com/ibm/wala/demandpa/alg/DemandRefinementPointsTo.java | 6 +++--- .../src/com/ibm/wala/ipa/callgraph/AnalysisScope.java | 2 +- .../src/com/ibm/wala/ipa/callgraph/cha/CHACallGraph.java | 2 +- .../com/ibm/wala/ipa/callgraph/impl/PartialCallGraph.java | 6 +++--- .../src/com/ibm/wala/ipa/callgraph/impl/Util.java | 2 +- .../com/ibm/wala/ipa/callgraph/propagation/PointsToMap.java | 2 +- .../wala/ipa/callgraph/propagation/PropagationGraph.java | 4 ++-- .../ipa/callgraph/propagation/rta/TypeBasedHeapModel.java | 2 +- .../com/ibm/wala/ipa/cfg/AbstractInterproceduralCFG.java | 2 +- com.ibm.wala.core/src/com/ibm/wala/ipa/cfg/PrunedCFG.java | 2 +- .../src/com/ibm/wala/ipa/slicer/HeapReachingDefs.java | 2 +- .../src/com/ibm/wala/ipa/slicer/SDGSupergraph.java | 3 +-- .../src/com/ibm/wala/util/scope/JUnitEntryPoints.java | 4 ++-- com.ibm.wala.core/src/com/ibm/wala/viz/PDFViewUtil.java | 2 +- .../wala/dalvik/test/callGraph/DalvikCallGraphTestBase.java | 2 +- .../com/ibm/wala/dalvik/util/AndroidManifestXMLReader.java | 4 ++-- .../wala/ide/client/EclipseProjectSourceAnalysisEngine.java | 3 ++- .../src/com/ibm/wala/shrike/copywriter/CopyWriter.java | 2 +- .../com/ibm/wala/dataflow/graph/BitVectorIntersection.java | 2 +- .../ibm/wala/fixedpoint/impl/DefaultFixedPointSystem.java | 2 +- .../src/com/ibm/wala/util/collections/IteratorUtil.java | 2 +- .../src/com/ibm/wala/util/collections/Util.java | 2 +- .../src/com/ibm/wala/util/graph/GraphSlicer.java | 4 ++-- .../src/com/ibm/wala/util/graph/traverse/BFSPathFinder.java | 6 +++--- 47 files changed, 67 insertions(+), 70 deletions(-) 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 8f8d17615..97fc1f4a3 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 @@ -34,6 +34,7 @@ import com.ibm.wala.ipa.cha.ClassHierarchyException; import com.ibm.wala.ipa.cha.ClassHierarchyFactory; import com.ibm.wala.ipa.cha.IClassHierarchy; import com.ibm.wala.ssa.SSAOptions; +import com.ibm.wala.ssa.SymbolTable; import com.ibm.wala.types.ClassLoaderReference; import com.ibm.wala.util.collections.HashSetFactory; import com.ibm.wala.util.config.FileOfClasses; @@ -158,7 +159,7 @@ public abstract class JavaSourceAnalysisEngine extends Ab AnalysisOptions options = new AnalysisOptions(getScope(), entrypoints); SSAOptions ssaOptions = new SSAOptions(); - ssaOptions.setDefaultValues((symtab, valueNumber) -> symtab.getDefaultValue(valueNumber)); + ssaOptions.setDefaultValues(SymbolTable::getDefaultValue); options.setSSAOptions(ssaOptions); 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 6540bd6a4..3c52071ec 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 @@ -76,11 +76,11 @@ public class AstJavaSlicer extends Slicer { } public static Set gatherAssertions(CallGraph CG, Collection partialRoots) { - return gatherStatements(CG, partialRoots, o -> o instanceof AstAssertInstruction); + return gatherStatements(CG, partialRoots, AstAssertInstruction.class::isInstance); } public static Set gatherMonitors(CallGraph CG, Collection partialRoots) { - return gatherStatements(CG, partialRoots, o -> o instanceof SSAMonitorInstruction); + return gatherStatements(CG, partialRoots, SSAMonitorInstruction.class::isInstance); } public static Set gatherWrites(CallGraph CG, Collection partialRoots) { diff --git a/com.ibm.wala.cast.js.rhino.test/harness-src/com/ibm/wala/cast/js/test/TestSimplePageCallGraphShapeRhino.java b/com.ibm.wala.cast.js.rhino.test/harness-src/com/ibm/wala/cast/js/test/TestSimplePageCallGraphShapeRhino.java index 38c0a6e38..2a407f034 100644 --- a/com.ibm.wala.cast.js.rhino.test/harness-src/com/ibm/wala/cast/js/test/TestSimplePageCallGraphShapeRhino.java +++ b/com.ibm.wala.cast.js.rhino.test/harness-src/com/ibm/wala/cast/js/test/TestSimplePageCallGraphShapeRhino.java @@ -57,7 +57,7 @@ public abstract class TestSimplePageCallGraphShapeRhino extends TestSimplePageCa @Before public void setUp() { com.ibm.wala.cast.js.ipa.callgraph.JSCallGraphUtil.setTranslatorFactory(new CAstRhinoTranslatorFactory()); - WebUtil.setFactory(() -> TestSimplePageCallGraphShapeRhino.this.getParser()); + WebUtil.setFactory(TestSimplePageCallGraphShapeRhino.this::getParser); JSSourceExtractor.USE_TEMP_NAME = false; // JSSourceExtractor.DELETE_UPON_EXIT = false; } diff --git a/com.ibm.wala.cast.js.test/harness-src/com/ibm/wala/cast/js/test/TestPointerAnalyses.java b/com.ibm.wala.cast.js.test/harness-src/com/ibm/wala/cast/js/test/TestPointerAnalyses.java index d2ec12ea8..8a4d3d31c 100644 --- a/com.ibm.wala.cast.js.test/harness-src/com/ibm/wala/cast/js/test/TestPointerAnalyses.java +++ b/com.ibm.wala.cast.js.test/harness-src/com/ibm/wala/cast/js/test/TestPointerAnalyses.java @@ -338,7 +338,7 @@ public abstract class TestPointerAnalyses { if (hg.containsNode(proto)) { return new MapIterator<>(hg.getSuccNodes(proto), - object -> (ObjectVertex)object); + ObjectVertex.class::cast); } else { return EmptyIterator.instance(); } diff --git a/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/callgraph/fieldbased/flowgraph/FlowGraph.java b/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/callgraph/fieldbased/flowgraph/FlowGraph.java index 3b8d1cc72..6e3394a9d 100644 --- a/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/callgraph/fieldbased/flowgraph/FlowGraph.java +++ b/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/callgraph/fieldbased/flowgraph/FlowGraph.java @@ -121,7 +121,7 @@ public class FlowGraph implements Iterable { GraphReachability optimistic_closure = new GraphReachability<>( new InvertedGraph<>(pruned_flowgraph), - o -> type.isInstance(o) + type::isInstance ); optimistic_closure.solve(monitor); @@ -533,7 +533,7 @@ public class FlowGraph implements Iterable { @Override public Collection getReachableInstances(Set roots) { - return DFS.getReachableNodes(this, roots, o -> o instanceof ObjectVertex); + return DFS.getReachableNodes(this, roots, ObjectVertex.class::isInstance); } @Override diff --git a/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/html/DefaultSourceExtractor.java b/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/html/DefaultSourceExtractor.java index 45597d341..0d5a6872e 100644 --- a/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/html/DefaultSourceExtractor.java +++ b/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/html/DefaultSourceExtractor.java @@ -27,7 +27,7 @@ import com.ibm.wala.util.collections.Pair; public class DefaultSourceExtractor extends DomLessSourceExtractor{ - public static Supplier factory = () -> new DefaultSourceExtractor(); + public static Supplier factory = DefaultSourceExtractor::new; protected static class HtmlCallBack extends DomLessSourceExtractor.HtmlCallback{ diff --git a/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/html/DomLessSourceExtractor.java b/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/html/DomLessSourceExtractor.java index 57c1e7759..76dac580a 100644 --- a/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/html/DomLessSourceExtractor.java +++ b/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/html/DomLessSourceExtractor.java @@ -42,7 +42,7 @@ public class DomLessSourceExtractor extends JSSourceExtractor { private static final Pattern LEGAL_JS_IDENTIFIER_REGEXP = Pattern.compile("^[a-zA-Z$_][a-zA-Z\\d$_]*$"); private static final Pattern LEGAL_JS_KEYWORD_REGEXP = Pattern.compile("^((break)|(case)|(catch)|(continue)|(debugger)|(default)|(delete)|(do)|(else)|(finally)|(for)|(function)|(if)|(in)|(instanceof)|(new)|(return)|(switch)|(this)|(throw)|(try)|(typeof)|(var)|(void)|(while)|(with))$"); - public static Supplier factory = () -> new DomLessSourceExtractor(); + public static Supplier factory = DomLessSourceExtractor::new; protected interface IGeneratorCallback extends IHtmlCallback { void writeToFinalRegion(SourceRegion finalRegion); diff --git a/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/html/WebUtil.java b/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/html/WebUtil.java index 6bb7fb656..5f4808361 100644 --- a/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/html/WebUtil.java +++ b/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/html/WebUtil.java @@ -28,7 +28,7 @@ public class WebUtil { public static final String preamble = "preamble.js"; - private static IHtmlParserFactory factory = () -> new JerichoHtmlParser(); + private static IHtmlParserFactory factory = JerichoHtmlParser::new; public static void setFactory(IHtmlParserFactory factory) { WebUtil.factory = factory; diff --git a/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/util/CallGraph2JSON.java b/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/util/CallGraph2JSON.java index 59c67e2cc..83c779f13 100644 --- a/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/util/CallGraph2JSON.java +++ b/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/util/CallGraph2JSON.java @@ -74,7 +74,7 @@ public class CallGraph2JSON { for(Iterator iter = nd.iterateCallSites(); iter.hasNext();) { CallSiteReference callsite = iter.next(); - Set targets = Util.mapToSet(cg.getPossibleTargets(nd, callsite), nd1 -> nd1.getMethod()); + Set targets = Util.mapToSet(cg.getPossibleTargets(nd, callsite), CGNode::getMethod); serializeCallSite(method, callsite, targets, edges); } } diff --git a/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ipa/lexical/LexicalModRef.java b/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ipa/lexical/LexicalModRef.java index 01d3432c0..824766dcb 100644 --- a/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ipa/lexical/LexicalModRef.java +++ b/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ipa/lexical/LexicalModRef.java @@ -55,7 +55,7 @@ public class LexicalModRef { */ public Map>> computeLexicalRef() { Map>> scan = CallGraphTransitiveClosure.collectNodeResults(cg, - n -> scanNodeForLexReads(n)); + this::scanNodeForLexReads); return CallGraphTransitiveClosure.transitiveClosure(cg, scan); } @@ -66,7 +66,7 @@ public class LexicalModRef { */ public Map>> computeLexicalMod() { Map>> scan = CallGraphTransitiveClosure.collectNodeResults(cg, - n -> scanNodeForLexWrites(n)); + this::scanNodeForLexWrites); return CallGraphTransitiveClosure.transitiveClosure(cg, scan); } diff --git a/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ir/translator/AstTranslator.java b/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ir/translator/AstTranslator.java index 152ab677f..86b5eb122 100644 --- a/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ir/translator/AstTranslator.java +++ b/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ir/translator/AstTranslator.java @@ -1262,7 +1262,7 @@ public abstract class AstTranslator extends CAstVisitor addNormalEdge(src, dst), (src, dst) -> addExceptionalEdge(src, dst)); + transferEdges(liveBlocks, icfg, this::addNormalEdge, this::addExceptionalEdge); } int x = 0; diff --git a/com.ibm.wala.cast/source/java/com/ibm/wala/cast/loader/CAstAbstractLoader.java b/com.ibm.wala.cast/source/java/com/ibm/wala/cast/loader/CAstAbstractLoader.java index 2477f88a2..44d0e30a3 100644 --- a/com.ibm.wala.cast/source/java/com/ibm/wala/cast/loader/CAstAbstractLoader.java +++ b/com.ibm.wala.cast/source/java/com/ibm/wala/cast/loader/CAstAbstractLoader.java @@ -86,7 +86,7 @@ public abstract class CAstAbstractLoader implements IClassLoader { } } return false; - }), object -> object.getKey()); + }), Map.Entry::getKey); } public Iterator getModulesWithParseErrors() { diff --git a/com.ibm.wala.core.tests/src/com/ibm/wala/core/tests/basic/PathFinderTest.java b/com.ibm.wala.core.tests/src/com/ibm/wala/core/tests/basic/PathFinderTest.java index fc88056bd..03d2423ea 100644 --- a/com.ibm.wala.core.tests/src/com/ibm/wala/core/tests/basic/PathFinderTest.java +++ b/com.ibm.wala.core.tests/src/com/ibm/wala/core/tests/basic/PathFinderTest.java @@ -11,7 +11,6 @@ package com.ibm.wala.core.tests.basic; import java.util.List; -import java.util.function.Predicate; import org.junit.Assert; import org.junit.Test; @@ -41,7 +40,7 @@ public class PathFinderTest { } private static DFSAllPathsFinder makeFinder(Graph g, String start, final String end) { - return new DFSAllPathsFinder<>(g, start, (Predicate) o -> end.equals(o)); + return new DFSAllPathsFinder<>(g, start, end::equals); } private static void checkPaths(DFSAllPathsFinder paths, int expectedCount) { diff --git a/com.ibm.wala.core.tests/src/com/ibm/wala/core/tests/callGraph/CallGraphTest.java b/com.ibm.wala.core.tests/src/com/ibm/wala/core/tests/callGraph/CallGraphTest.java index 376cec6eb..7fa649791 100644 --- a/com.ibm.wala.core.tests/src/com/ibm/wala/core/tests/callGraph/CallGraphTest.java +++ b/com.ibm.wala.core.tests/src/com/ibm/wala/core/tests/callGraph/CallGraphTest.java @@ -242,7 +242,7 @@ public class CallGraphTest extends WalaTestCase { } } } - return () -> result.iterator(); + return result::iterator; } @Test public void testPrimordial() throws ClassHierarchyException, IllegalArgumentException, CancelException, IOException { @@ -294,7 +294,7 @@ public class CallGraphTest extends WalaTestCase { result.add(new DefaultEntrypoint(m, cha)); } } - return () -> result.iterator(); + return result::iterator; } public static void doCallGraphs(AnalysisOptions options, IAnalysisCacheView cache, IClassHierarchy cha, AnalysisScope scope) diff --git a/com.ibm.wala.core.tests/src/com/ibm/wala/core/tests/shrike/DynamicCallGraphTestBase.java b/com.ibm.wala.core.tests/src/com/ibm/wala/core/tests/shrike/DynamicCallGraphTestBase.java index 00e4b4f59..1579a3a4c 100644 --- a/com.ibm.wala.core.tests/src/com/ibm/wala/core/tests/shrike/DynamicCallGraphTestBase.java +++ b/com.ibm.wala.core.tests/src/com/ibm/wala/core/tests/shrike/DynamicCallGraphTestBase.java @@ -147,7 +147,7 @@ public abstract class DynamicCallGraphTestBase extends WalaTestCase { } protected void checkEdges(CallGraph staticCG) throws IOException { - checkEdges(staticCG, (x) -> true ); + checkEdges(staticCG, x -> true); } protected void checkEdges(CallGraph staticCG, Predicate filter) throws IOException { @@ -167,7 +167,7 @@ public abstract class DynamicCallGraphTestBase extends WalaTestCase { } protected void checkNodes(CallGraph staticCG) throws IOException { - checkNodes(staticCG, (x) -> true); + checkNodes(staticCG, x -> true); } protected void checkNodes(CallGraph staticCG, Predicate filter) throws IOException { 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 113b7926b..ada6d82b8 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 @@ -14,7 +14,6 @@ import java.io.File; import java.io.IOException; import java.util.Collection; import java.util.Properties; -import java.util.function.Predicate; import com.ibm.wala.core.tests.callGraph.CallGraphTestUtil; import com.ibm.wala.core.tests.slicer.SlicerTest; @@ -249,8 +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) { - Predicate f = o -> slice.contains(o); - return GraphSlicer.prune(sdg, f); + return GraphSlicer.prune(sdg, slice::contains); } /** 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 f8ec7eb4c..2c8d9b966 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 @@ -135,7 +135,7 @@ public class BasicHeapGraph extends HeapGraphImpl { }; final IBinaryNaturalRelation pred = computePredecessors(nodeMgr); - final IntFunction toNode = i -> nodeMgr.getNode(i); + final IntFunction toNode = nodeMgr::getNode; this.G = new AbstractNumberedGraph() { private final NumberedEdgeManager edgeMgr = new NumberedEdgeManager() { diff --git a/com.ibm.wala.core/src/com/ibm/wala/analysis/pointers/HeapGraphImpl.java b/com.ibm.wala.core/src/com/ibm/wala/analysis/pointers/HeapGraphImpl.java index 332ebf922..932dd6dd5 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/analysis/pointers/HeapGraphImpl.java +++ b/com.ibm.wala.core/src/com/ibm/wala/analysis/pointers/HeapGraphImpl.java @@ -52,8 +52,7 @@ public abstract class HeapGraphImpl implements HeapGraph< @Override public Collection getReachableInstances(Set roots) { - Predicate f = o -> (o instanceof InstanceKey); - return DFS.getReachableNodes(this, roots, f); + return DFS.getReachableNodes(this, roots, InstanceKey.class::isInstance); } @Override diff --git a/com.ibm.wala.core/src/com/ibm/wala/analysis/reflection/java7/MethodHandles.java b/com.ibm.wala.core/src/com/ibm/wala/analysis/reflection/java7/MethodHandles.java index d20afea39..7b3d7c560 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/analysis/reflection/java7/MethodHandles.java +++ b/com.ibm.wala.core/src/com/ibm/wala/analysis/reflection/java7/MethodHandles.java @@ -216,12 +216,12 @@ public class MethodHandles { @Override public Iterator iterateFieldsRead(CGNode node) { - return iterateFields(node, o -> o instanceof SSAGetInstruction); + return iterateFields(node, SSAGetInstruction.class::isInstance); } @Override public Iterator iterateFieldsWritten(CGNode node) { - return iterateFields(node, o -> o instanceof SSAPutInstruction); + return iterateFields(node, SSAPutInstruction.class::isInstance); } @Override diff --git a/com.ibm.wala.core/src/com/ibm/wala/classLoader/ShrikeCTMethod.java b/com.ibm.wala.core/src/com/ibm/wala/classLoader/ShrikeCTMethod.java index c4a3336e2..d2a8222d0 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/classLoader/ShrikeCTMethod.java +++ b/com.ibm.wala.core/src/com/ibm/wala/classLoader/ShrikeCTMethod.java @@ -347,15 +347,15 @@ public final class ShrikeCTMethod extends ShrikeBTMethod implements IBytecodeMet } private CodeReader getCodeReader() { - return getReader("Code", iter -> new CodeReader(iter)); + return getReader("Code", CodeReader::new); } private ExceptionsReader getExceptionReader() { - return getReader("Exceptions", iter -> new ExceptionsReader(iter)); + return getReader("Exceptions", ExceptionsReader::new); } private SignatureReader getSignatureReader() { - return getReader("Signature", iter -> new SignatureReader(iter)); + return getReader("Signature", SignatureReader::new); } private AnnotationsReader getAnnotationsReader(AnnotationType type) { diff --git a/com.ibm.wala.core/src/com/ibm/wala/classLoader/ShrikeClass.java b/com.ibm.wala.core/src/com/ibm/wala/classLoader/ShrikeClass.java index 9bc376e5e..db359cbd1 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/classLoader/ShrikeClass.java +++ b/com.ibm.wala.core/src/com/ibm/wala/classLoader/ShrikeClass.java @@ -343,7 +343,7 @@ public final class ShrikeClass extends JVMClass { ClassReader.AttrIterator attrs = new ClassReader.AttrIterator(); getReader().initClassAttributeIterator(attrs); - return getReader(attrs, "SourceFile", iter -> new SourceFileReader(iter)); + return getReader(attrs, "SourceFile", SourceFileReader::new); } private AnnotationsReader getFieldAnnotationsReader(boolean runtimeInvisible, int fieldIndex) throws InvalidClassFileException { 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 9bb6f8f82..67d19a848 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 @@ -125,7 +125,7 @@ public abstract class AbstractAnalysisEngine implements A */ private HeapGraph heapGraph; - private EntrypointBuilder entrypointBuilder = (scope, cha) -> makeDefaultEntrypoints(scope, cha); + private EntrypointBuilder entrypointBuilder = this::makeDefaultEntrypoints; protected abstract CallGraphBuilder getCallGraphBuilder(IClassHierarchy cha, AnalysisOptions options, IAnalysisCacheView cache2); diff --git a/com.ibm.wala.core/src/com/ibm/wala/dataflow/IFDS/ICFGSupergraph.java b/com.ibm.wala.core/src/com/ibm/wala/dataflow/IFDS/ICFGSupergraph.java index e6de030e5..89999c84d 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/dataflow/IFDS/ICFGSupergraph.java +++ b/com.ibm.wala.core/src/com/ibm/wala/dataflow/IFDS/ICFGSupergraph.java @@ -95,7 +95,7 @@ public class ICFGSupergraph implements ISupergraph> getCalledNodes(BasicBlockInContext call) { - final Predicate> isEntryFilter = o -> o.isEntryBlock(); + final Predicate> isEntryFilter = BasicBlockInContext::isEntryBlock; return new FilterIterator>(getSuccNodes(call), isEntryFilter); } diff --git a/com.ibm.wala.core/src/com/ibm/wala/demandpa/alg/DemandRefinementPointsTo.java b/com.ibm.wala.core/src/com/ibm/wala/demandpa/alg/DemandRefinementPointsTo.java index 34c72f9cc..bd9a51867 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/demandpa/alg/DemandRefinementPointsTo.java +++ b/com.ibm.wala.core/src/com/ibm/wala/demandpa/alg/DemandRefinementPointsTo.java @@ -285,7 +285,7 @@ public class DemandRefinementPointsTo extends AbstractDemandPointsTo { throw new IllegalArgumentException("p2SetWithStates == null"); } Collection finalP2Set = Iterator2Collection.toSet(new MapIterator, T>(p2SetWithStates.iterator(), - object -> object.getWrapped())); + WithState::getWrapped)); return finalP2Set; } @@ -504,7 +504,7 @@ public class DemandRefinementPointsTo extends AbstractDemandPointsTo { */ @Override public Collection getPointsTo(PointerKey pk) { - return getPointsTo(pk, (InstanceKey k) -> { return false; }).snd; + return getPointsTo(pk, k -> { return false; }).snd; } /** @@ -512,7 +512,7 @@ public class DemandRefinementPointsTo extends AbstractDemandPointsTo { * null if the points-to set can't be computed in the allocated budget */ public Collection getPointsToWithStates(PointerKey pk) { - return getPointsToWithStates(pk, (InstanceKey k) -> { return false; }).snd; + return getPointsToWithStates(pk, k -> { return false; }).snd; } /** diff --git a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/AnalysisScope.java b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/AnalysisScope.java index 5b05c4e18..ab17fb164 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/AnalysisScope.java +++ b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/AnalysisScope.java @@ -377,7 +377,7 @@ public class AnalysisScope { private JarFile getRtJar() { return RtJar.getRtJar( new MapIterator( - new FilterIterator(getModules(getPrimordialLoader()).iterator(), M -> M instanceof JarFileModule), M -> ((JarFileModule) M).getJarFile())); + new FilterIterator(getModules(getPrimordialLoader()).iterator(), JarFileModule.class::isInstance), M -> ((JarFileModule) M).getJarFile())); } public String getJavaLibraryVersion() throws IllegalStateException { diff --git a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/cha/CHACallGraph.java b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/cha/CHACallGraph.java index ae3552a97..3844c2696 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/cha/CHACallGraph.java +++ b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/cha/CHACallGraph.java @@ -162,7 +162,7 @@ public class CHACallGraph extends BasicCallGraph { new MapIterator( new FilterIterator( getPossibleTargets(site), - o -> isRelevantMethod(o) + this::isRelevantMethod ), object -> { try { diff --git a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/impl/PartialCallGraph.java b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/impl/PartialCallGraph.java index c7ef6b915..266830dd9 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/impl/PartialCallGraph.java +++ b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/impl/PartialCallGraph.java @@ -52,7 +52,7 @@ public class PartialCallGraph extends DelegatingGraph implements CallGra * @param nodes set of nodes that will be included in the new, partial call graph */ public static PartialCallGraph make(final CallGraph cg, final Collection partialRoots, final Collection nodes) { - Graph partialGraph = GraphSlicer.prune(cg, o -> nodes.contains(o)); + Graph partialGraph = GraphSlicer.prune(cg, nodes::contains); return new PartialCallGraph(cg, partialRoots, partialGraph); } @@ -64,7 +64,7 @@ public class PartialCallGraph extends DelegatingGraph implements CallGra */ public static PartialCallGraph make(CallGraph cg, Collection partialRoots) { final Set nodes = DFS.getReachableNodes(cg, partialRoots); - Graph partialGraph = GraphSlicer.prune(cg, o -> nodes.contains(o)); + Graph partialGraph = GraphSlicer.prune(cg, nodes::contains); return new PartialCallGraph(cg, partialRoots, partialGraph); } @@ -113,7 +113,7 @@ public class PartialCallGraph extends DelegatingGraph implements CallGra @Override public Iterator iterateNodes(IntSet nodes) { - return new FilterIterator(cg.iterateNodes(nodes), o -> containsNode(o)); + return new FilterIterator(cg.iterateNodes(nodes), this::containsNode); } @Override 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 157874ea5..e2153cb9c 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 @@ -167,7 +167,7 @@ public class Util { } } } - return () -> result.iterator(); + return result::iterator; } /** diff --git a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/PointsToMap.java b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/PointsToMap.java index b2aeb2790..9f4797e9f 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/PointsToMap.java +++ b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/PointsToMap.java @@ -200,7 +200,7 @@ public class PointsToMap { * @return {@link Iterator}<{@link PointerKey}> */ public Iterator getTransitiveRoots() { - return new FilterIterator(iterateKeys(), o -> isTransitiveRoot(o)); + return new FilterIterator(iterateKeys(), this::isTransitiveRoot); } /** diff --git a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/PropagationGraph.java b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/PropagationGraph.java index f5a9c3f16..91d2fa329 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/PropagationGraph.java +++ b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/PropagationGraph.java @@ -270,7 +270,7 @@ public class PropagationGraph implements IFixedPointSystem @Override public Iterator getStatements() { - Iterator it = new FilterIterator<>(delegateGraph.iterator(), x -> x instanceof AbstractStatement); + Iterator it = new FilterIterator<>(delegateGraph.iterator(), AbstractStatement.class::isInstance); Iterator converted = new MapIterator<>(it, AbstractStatement.class::cast); return new CompoundIterator(converted, new GlobalImplicitIterator()); } @@ -757,7 +757,7 @@ public class PropagationGraph implements IFixedPointSystem @Override public Iterator getVariables() { - Iterator it = new FilterIterator<>(delegateGraph.iterator(), x -> x instanceof IVariable); + Iterator it = new FilterIterator<>(delegateGraph.iterator(), IVariable.class::isInstance); Iterator converted = new MapIterator(it, PointsToSetVariable.class::cast); return converted; } diff --git a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/rta/TypeBasedHeapModel.java b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/rta/TypeBasedHeapModel.java index dda9e6243..af66b1fc2 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/rta/TypeBasedHeapModel.java +++ b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/rta/TypeBasedHeapModel.java @@ -175,7 +175,7 @@ public class TypeBasedHeapModel implements HeapModel { @Override public Iterator iteratePointerKeys() { initAllPKeys(); - Iterator filtered = new FilterIterator(pKeys.values().iterator(), o -> o instanceof PointerKey); + Iterator filtered = new FilterIterator(pKeys.values().iterator(), PointerKey.class::isInstance); return new MapIterator(filtered, PointerKey.class::cast); } diff --git a/com.ibm.wala.core/src/com/ibm/wala/ipa/cfg/AbstractInterproceduralCFG.java b/com.ibm.wala.core/src/com/ibm/wala/ipa/cfg/AbstractInterproceduralCFG.java index 61db39390..2b208546c 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/ipa/cfg/AbstractInterproceduralCFG.java +++ b/com.ibm.wala.core/src/com/ibm/wala/ipa/cfg/AbstractInterproceduralCFG.java @@ -879,7 +879,7 @@ public abstract class AbstractInterproceduralCFG imple return new FilterIterator>(m, isCall); } - private final Predicate> isCall = o -> hasCall(o); + private final Predicate> isCall = this::hasCall; public boolean isReturn(BasicBlockInContext bb) throws IllegalArgumentException { if (bb == null) { diff --git a/com.ibm.wala.core/src/com/ibm/wala/ipa/cfg/PrunedCFG.java b/com.ibm.wala.core/src/com/ibm/wala/ipa/cfg/PrunedCFG.java index 23d9c9689..ac1148ad3 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/ipa/cfg/PrunedCFG.java +++ b/com.ibm.wala.core/src/com/ibm/wala/ipa/cfg/PrunedCFG.java @@ -201,7 +201,7 @@ public class PrunedCFG> extends AbstractNumberedGrap } private Iterator filterNodes(Iterator nodeIterator) { - return new FilterIterator(nodeIterator, o -> subset.contains(o)); + return new FilterIterator(nodeIterator, subset::contains); } @Override 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 25d0aa1ff..10618a85b 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 @@ -644,7 +644,7 @@ public class HeapReachingDefs { return null; } else { // only static fields are actually killed - Predicate staticFilter = o -> o instanceof StaticFieldKey; + Predicate staticFilter = StaticFieldKey.class::isInstance; final Collection kill = Iterator2Collection .toSet(new FilterIterator(mod.iterator(), staticFilter)); if (kill.isEmpty()) { 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 984459cd2..28d830fcd 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 @@ -97,8 +97,7 @@ class SDGSupergraph implements ISupergraph public Iterator getCalledNodes(Statement call) { switch (call.getKind()) { case NORMAL: - Predicate f = s -> isEntry(s); - return new FilterIterator(getSuccNodes(call), f); + return new FilterIterator(getSuccNodes(call), this::isEntry); case PARAM_CALLER: case HEAP_PARAM_CALLER: return getSuccNodes(call); diff --git a/com.ibm.wala.core/src/com/ibm/wala/util/scope/JUnitEntryPoints.java b/com.ibm.wala.core/src/com/ibm/wala/util/scope/JUnitEntryPoints.java index be5c0b76f..8c8675034 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/util/scope/JUnitEntryPoints.java +++ b/com.ibm.wala.core/src/com/ibm/wala/util/scope/JUnitEntryPoints.java @@ -67,7 +67,7 @@ public class JUnitEntryPoints { } } } - return () -> result.iterator(); + return result::iterator; } /** @@ -115,7 +115,7 @@ public class JUnitEntryPoints { } } } - return () -> entryPts.iterator(); + return entryPts::iterator; } /** diff --git a/com.ibm.wala.core/src/com/ibm/wala/viz/PDFViewUtil.java b/com.ibm.wala.core/src/com/ibm/wala/viz/PDFViewUtil.java index 0c2c546dd..d778f4600 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/viz/PDFViewUtil.java +++ b/com.ibm.wala.core/src/com/ibm/wala/viz/PDFViewUtil.java @@ -79,7 +79,7 @@ public class PDFViewUtil { SSACFG.BasicBlock bb = (SSACFG.BasicBlock) it.next(); labelMap.put(bb, getNodeLabel(ir, bb)); } - NodeDecorator labels = bb -> labelMap.get(bb); + NodeDecorator labels = labelMap::get; return labels; } diff --git a/com.ibm.wala.dalvik.test/source/com/ibm/wala/dalvik/test/callGraph/DalvikCallGraphTestBase.java b/com.ibm.wala.dalvik.test/source/com/ibm/wala/dalvik/test/callGraph/DalvikCallGraphTestBase.java index 5c05f5383..de0dc53ce 100644 --- a/com.ibm.wala.dalvik.test/source/com/ibm/wala/dalvik/test/callGraph/DalvikCallGraphTestBase.java +++ b/com.ibm.wala.dalvik.test/source/com/ibm/wala/dalvik/test/callGraph/DalvikCallGraphTestBase.java @@ -100,7 +100,7 @@ public class DalvikCallGraphTestBase extends DynamicCallGraphTestBase { new MapIterator( new FilterIterator( node.getIR().iterateAllInstructions(), - t -> t instanceof SSANewInstruction), + SSANewInstruction.class::isInstance), object -> ((SSANewInstruction)object).getNewSite() ); } diff --git a/com.ibm.wala.dalvik/src/com/ibm/wala/dalvik/util/AndroidManifestXMLReader.java b/com.ibm.wala.dalvik/src/com/ibm/wala/dalvik/util/AndroidManifestXMLReader.java index b73619ae6..9a277220f 100644 --- a/com.ibm.wala.dalvik/src/com/ibm/wala/dalvik/util/AndroidManifestXMLReader.java +++ b/com.ibm.wala.dalvik/src/com/ibm/wala/dalvik/util/AndroidManifestXMLReader.java @@ -188,12 +188,12 @@ public class AndroidManifestXMLReader { Collections.EMPTY_SET, IntentItem.class), ACTION("action", - () -> Collections.emptySet(), + Collections::emptySet, EnumSet.of(Attr.NAME), FinalItem.class), //(new ITagDweller() { //public Tag getTag() { return Tag.ACTION; }})), DATA("data", - () -> Collections.emptySet(), + Collections::emptySet, EnumSet.of(Attr.SCHEME, Attr.HOST, Attr.PATH, Attr.MIME), FinalItem.class), //(new ITagDweller() { //public Tag getTag() { return Tag.DATA; }})), diff --git a/com.ibm.wala.ide/src/com/ibm/wala/ide/client/EclipseProjectSourceAnalysisEngine.java b/com.ibm.wala.ide/src/com/ibm/wala/ide/client/EclipseProjectSourceAnalysisEngine.java index ccee399ab..265cd5f2a 100644 --- a/com.ibm.wala.ide/src/com/ibm/wala/ide/client/EclipseProjectSourceAnalysisEngine.java +++ b/com.ibm.wala.ide/src/com/ibm/wala/ide/client/EclipseProjectSourceAnalysisEngine.java @@ -19,6 +19,7 @@ import com.ibm.wala.ipa.callgraph.Entrypoint; import com.ibm.wala.ipa.callgraph.IAnalysisCacheView; import com.ibm.wala.ipa.callgraph.propagation.InstanceKey; import com.ibm.wala.ssa.SSAOptions; +import com.ibm.wala.ssa.SymbolTable; import com.ibm.wala.types.ClassLoaderReference; import com.ibm.wala.util.debug.Assertions; import com.ibm.wala.util.io.FileProvider; @@ -69,7 +70,7 @@ abstract public class EclipseProjectSourceAnalysisEngine symtab.getDefaultValue(valueNumber)); + ssaOptions.setDefaultValues(SymbolTable::getDefaultValue); options.setSSAOptions(ssaOptions); diff --git a/com.ibm.wala.shrike/src/com/ibm/wala/shrike/copywriter/CopyWriter.java b/com.ibm.wala.shrike/src/com/ibm/wala/shrike/copywriter/CopyWriter.java index 5a686ca03..a28ae998c 100644 --- a/com.ibm.wala.shrike/src/com/ibm/wala/shrike/copywriter/CopyWriter.java +++ b/com.ibm.wala.shrike/src/com/ibm/wala/shrike/copywriter/CopyWriter.java @@ -95,7 +95,7 @@ public class CopyWriter { final ArrayList entries = new ArrayList<>(); instrumenter = new OfflineInstrumenter(); - instrumenter.setManifestBuilder(ze -> entries.add(ze)); + instrumenter.setManifestBuilder(entries::add); instrumenter.parseStandardArgs(args); instrumenter.setJARComment(copyright); instrumenter.beginTraversal(); diff --git a/com.ibm.wala.util/src/com/ibm/wala/dataflow/graph/BitVectorIntersection.java b/com.ibm.wala.util/src/com/ibm/wala/dataflow/graph/BitVectorIntersection.java index 44d4f32e1..defec366e 100644 --- a/com.ibm.wala.util/src/com/ibm/wala/dataflow/graph/BitVectorIntersection.java +++ b/com.ibm.wala.util/src/com/ibm/wala/dataflow/graph/BitVectorIntersection.java @@ -58,7 +58,7 @@ public final class BitVectorIntersection extends AbstractMeetOperator bvv.set(x)); + intersect.foreach(bvv::set); lhs.copyState(bvv); return CHANGED; diff --git a/com.ibm.wala.util/src/com/ibm/wala/fixedpoint/impl/DefaultFixedPointSystem.java b/com.ibm.wala.util/src/com/ibm/wala/fixedpoint/impl/DefaultFixedPointSystem.java index 770eefa0a..865d175bc 100644 --- a/com.ibm.wala.util/src/com/ibm/wala/fixedpoint/impl/DefaultFixedPointSystem.java +++ b/com.ibm.wala.util/src/com/ibm/wala/fixedpoint/impl/DefaultFixedPointSystem.java @@ -94,7 +94,7 @@ public class DefaultFixedPointSystem> implements IFixedPo @Override @SuppressWarnings({ "unchecked", "rawtypes" }) public Iterator getStatements() { - return new FilterIterator(graph.iterator(), x -> x instanceof AbstractStatement); + return new FilterIterator(graph.iterator(), AbstractStatement.class::isInstance); } @Override diff --git a/com.ibm.wala.util/src/com/ibm/wala/util/collections/IteratorUtil.java b/com.ibm.wala.util/src/com/ibm/wala/util/collections/IteratorUtil.java index 0aa9f1159..e06f7cf4e 100644 --- a/com.ibm.wala.util/src/com/ibm/wala/util/collections/IteratorUtil.java +++ b/com.ibm.wala.util/src/com/ibm/wala/util/collections/IteratorUtil.java @@ -46,7 +46,7 @@ public class IteratorUtil { public static Iterator filter(Iterator iterator, final Class cls) { return new MapIterator<>( - new FilterIterator<>(iterator, o -> cls.isInstance(o)), + new FilterIterator<>(iterator, cls::isInstance), new Function() { @SuppressWarnings("unchecked") @Override diff --git a/com.ibm.wala.util/src/com/ibm/wala/util/collections/Util.java b/com.ibm.wala.util/src/com/ibm/wala/util/collections/Util.java index ac769a6e9..902e46200 100644 --- a/com.ibm.wala.util/src/com/ibm/wala/util/collections/Util.java +++ b/com.ibm.wala.util/src/com/ibm/wala/util/collections/Util.java @@ -283,7 +283,7 @@ public class Util { * @return true if the sets intersect; false otherwise */ public static boolean intersecting(final Set s1, final Set s2) { - return forSome(s1, obj -> s2.contains(obj)); + return forSome(s1, s2::contains); } /** diff --git a/com.ibm.wala.util/src/com/ibm/wala/util/graph/GraphSlicer.java b/com.ibm.wala.util/src/com/ibm/wala/util/graph/GraphSlicer.java index 1d47f0859..ff9e5e962 100644 --- a/com.ibm.wala.util/src/com/ibm/wala/util/graph/GraphSlicer.java +++ b/com.ibm.wala.util/src/com/ibm/wala/util/graph/GraphSlicer.java @@ -234,11 +234,11 @@ public class GraphSlicer { } private void setPredNodes(E N) { - preds.put(N, getConnected(N, object -> G.getPredNodes(object))); + preds.put(N, getConnected(N, G::getPredNodes)); } private void setSuccNodes(E N) { - succs.put(N, getConnected(N, object -> G.getSuccNodes(object))); + succs.put(N, getConnected(N, G::getSuccNodes)); } @Override diff --git a/com.ibm.wala.util/src/com/ibm/wala/util/graph/traverse/BFSPathFinder.java b/com.ibm.wala.util/src/com/ibm/wala/util/graph/traverse/BFSPathFinder.java index 3d0486c5c..2ee78e434 100644 --- a/com.ibm.wala.util/src/com/ibm/wala/util/graph/traverse/BFSPathFinder.java +++ b/com.ibm.wala.util/src/com/ibm/wala/util/graph/traverse/BFSPathFinder.java @@ -83,7 +83,7 @@ public class BFSPathFinder { if (!G.containsNode(src)) { throw new IllegalArgumentException("src is not in graph " + src); } - this.filter = o -> target.equals(o); + this.filter = target::equals; } /** @@ -103,7 +103,7 @@ public class BFSPathFinder { this.G = G; this.roots = new NonNullSingletonIterator<>(src); - this.filter = o -> ts.contains(o); + this.filter = ts::contains; } /** @@ -120,7 +120,7 @@ public class BFSPathFinder { } this.G = G; this.roots = sources; - this.filter = o -> target.equals(o); + this.filter = target::equals; } /** From 4b81b6916585737f53d807aa83b8a026ded86f56 Mon Sep 17 00:00:00 2001 From: Ben Liblit Date: Wed, 22 Nov 2017 14:03:53 -0600 Subject: [PATCH 12/69] Disable annotation-based nullness analysis Using constructor references apparently pulls in something involving nullness annotations. However, we don't actually build with a jar file that defines those annotations, so this leads to Eclipse build failures. I don't know the right way to add such a jar file to our current configuration mishmash of Ant, Maven, and Eclipse. So the easier thing to do is just disable annotation-based nullness analysis. I doubt we were getting any benefit from such an analysis anyway, given that WALA itself doesn't use those annotations at all. --- com.ibm.wala.cast.js/.settings/org.eclipse.jdt.core.prefs | 2 +- com.ibm.wala.core/.settings/org.eclipse.jdt.core.prefs | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/com.ibm.wala.cast.js/.settings/org.eclipse.jdt.core.prefs b/com.ibm.wala.cast.js/.settings/org.eclipse.jdt.core.prefs index 489c58adf..c3cb0dec9 100644 --- a/com.ibm.wala.cast.js/.settings/org.eclipse.jdt.core.prefs +++ b/com.ibm.wala.cast.js/.settings/org.eclipse.jdt.core.prefs @@ -8,7 +8,7 @@ org.eclipse.jdt.core.compiler.annotation.nonnullbydefault=org.eclipse.jdt.annota org.eclipse.jdt.core.compiler.annotation.nonnullbydefault.secondary= org.eclipse.jdt.core.compiler.annotation.nullable=org.eclipse.jdt.annotation.Nullable org.eclipse.jdt.core.compiler.annotation.nullable.secondary= -org.eclipse.jdt.core.compiler.annotation.nullanalysis=enabled +org.eclipse.jdt.core.compiler.annotation.nullanalysis=disabled org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve diff --git a/com.ibm.wala.core/.settings/org.eclipse.jdt.core.prefs b/com.ibm.wala.core/.settings/org.eclipse.jdt.core.prefs index b6898e040..5c09b1310 100644 --- a/com.ibm.wala.core/.settings/org.eclipse.jdt.core.prefs +++ b/com.ibm.wala.core/.settings/org.eclipse.jdt.core.prefs @@ -17,7 +17,7 @@ org.eclipse.jdt.core.compiler.annotation.nonnullbydefault=org.eclipse.jdt.annota org.eclipse.jdt.core.compiler.annotation.nonnullbydefault.secondary= org.eclipse.jdt.core.compiler.annotation.nullable=org.eclipse.jdt.annotation.Nullable org.eclipse.jdt.core.compiler.annotation.nullable.secondary= -org.eclipse.jdt.core.compiler.annotation.nullanalysis=enabled +org.eclipse.jdt.core.compiler.annotation.nullanalysis=disabled org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled org.eclipse.jdt.core.compiler.codegen.methodParameters=do not generate org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 From de2690dfac1dbc0a0c2a902f8c394a60aef39ca7 Mon Sep 17 00:00:00 2001 From: Ben Liblit Date: Wed, 22 Nov 2017 14:07:45 -0600 Subject: [PATCH 13/69] Remove two imports that are no longer used --- .../src/com/ibm/wala/analysis/pointers/HeapGraphImpl.java | 1 - com.ibm.wala.core/src/com/ibm/wala/ipa/slicer/SDGSupergraph.java | 1 - 2 files changed, 2 deletions(-) diff --git a/com.ibm.wala.core/src/com/ibm/wala/analysis/pointers/HeapGraphImpl.java b/com.ibm.wala.core/src/com/ibm/wala/analysis/pointers/HeapGraphImpl.java index 932dd6dd5..f7ad0ceac 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/analysis/pointers/HeapGraphImpl.java +++ b/com.ibm.wala.core/src/com/ibm/wala/analysis/pointers/HeapGraphImpl.java @@ -13,7 +13,6 @@ package com.ibm.wala.analysis.pointers; import java.util.Collection; import java.util.Iterator; import java.util.Set; -import java.util.function.Predicate; import com.ibm.wala.ipa.callgraph.propagation.HeapModel; import com.ibm.wala.ipa.callgraph.propagation.InstanceKey; 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 28d830fcd..092ab2193 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 @@ -11,7 +11,6 @@ package com.ibm.wala.ipa.slicer; import java.util.Iterator; -import java.util.function.Predicate; import com.ibm.wala.dataflow.IFDS.ISupergraph; import com.ibm.wala.ipa.callgraph.CGNode; From 5fa3643652a8ae2eeae12e93ec0e39b5e025ba30 Mon Sep 17 00:00:00 2001 From: Ben Liblit Date: Wed, 22 Nov 2017 14:10:44 -0600 Subject: [PATCH 14/69] Don't suppress javadoc warnings; these are disabled entirely anyway --- .../dalvik/ipa/callgraph/androidModel/stubs/AndroidBoot.java | 2 -- 1 file changed, 2 deletions(-) diff --git a/com.ibm.wala.dalvik/src/com/ibm/wala/dalvik/ipa/callgraph/androidModel/stubs/AndroidBoot.java b/com.ibm.wala.dalvik/src/com/ibm/wala/dalvik/ipa/callgraph/androidModel/stubs/AndroidBoot.java index 46386f61b..c9d31c56e 100644 --- a/com.ibm.wala.dalvik/src/com/ibm/wala/dalvik/ipa/callgraph/androidModel/stubs/AndroidBoot.java +++ b/com.ibm.wala.dalvik/src/com/ibm/wala/dalvik/ipa/callgraph/androidModel/stubs/AndroidBoot.java @@ -177,7 +177,6 @@ public class AndroidBoot { * * @see android.app.ContextImpl.createPackageContextAsUser */ - @SuppressWarnings("javadoc") private SSAValue createSystemContext(SSAValue mainThread) { final SSAValue systemContext = this.pm.getUnmanaged(AndroidTypes.ContextImpl, "systemContextImpl"); { // Call ContextImpl.getSystemContext() @@ -210,7 +209,6 @@ public class AndroidBoot { * * @see android.app.ContextImpl.createPackageContextAsUser */ - @SuppressWarnings("javadoc") private SSAValue createPackageContext(final SSAValue mainThread) { final SSAValue packageContext = this.pm.getUnmanaged(AndroidTypes.ContextImpl, "packageContextImpl"); { // New-Site From b2e1081221e6cf54b50ae1a3bb79ce2bfba8e55a Mon Sep 17 00:00:00 2001 From: Ben Liblit Date: Wed, 22 Nov 2017 14:34:53 -0600 Subject: [PATCH 15/69] Clean up IteratorUtil.filter Use method references where possible. Remove no-longer-needed annotations. --- .../com/ibm/wala/util/collections/IteratorUtil.java | 11 +---------- 1 file changed, 1 insertion(+), 10 deletions(-) diff --git a/com.ibm.wala.util/src/com/ibm/wala/util/collections/IteratorUtil.java b/com.ibm.wala.util/src/com/ibm/wala/util/collections/IteratorUtil.java index e06f7cf4e..7f9a52086 100644 --- a/com.ibm.wala.util/src/com/ibm/wala/util/collections/IteratorUtil.java +++ b/com.ibm.wala.util/src/com/ibm/wala/util/collections/IteratorUtil.java @@ -11,7 +11,6 @@ package com.ibm.wala.util.collections; import java.util.Iterator; -import java.util.function.Function; /** * utilities dealing with Iterators */ @@ -45,14 +44,6 @@ public class IteratorUtil { } public static Iterator filter(Iterator iterator, final Class cls) { - return new MapIterator<>( - new FilterIterator<>(iterator, cls::isInstance), - new Function() { - @SuppressWarnings("unchecked") - @Override - public S apply(T object) { - return (S) object; - } - }); + return new MapIterator<>(new FilterIterator<>(iterator, cls::isInstance), cls::cast); } } From 2e084bdec765a5421b4c22723138ee92b4ef15d7 Mon Sep 17 00:00:00 2001 From: Ben Liblit Date: Wed, 22 Nov 2017 14:34:16 -0600 Subject: [PATCH 16/69] Use existing IteratorUtil.filter when that's exactly what we need --- .../wala/ipa/callgraph/propagation/PropagationGraph.java | 9 +++------ .../callgraph/propagation/rta/TypeBasedHeapModel.java | 3 +-- 2 files changed, 4 insertions(+), 8 deletions(-) diff --git a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/PropagationGraph.java b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/PropagationGraph.java index 91d2fa329..68da649cd 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/PropagationGraph.java +++ b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/PropagationGraph.java @@ -270,9 +270,8 @@ public class PropagationGraph implements IFixedPointSystem @Override public Iterator getStatements() { - Iterator it = new FilterIterator<>(delegateGraph.iterator(), AbstractStatement.class::isInstance); - Iterator converted = new MapIterator<>(it, AbstractStatement.class::cast); - return new CompoundIterator(converted, new GlobalImplicitIterator()); + Iterator it = IteratorUtil.filter(delegateGraph.iterator(), AbstractStatement.class); + return new CompoundIterator(it, new GlobalImplicitIterator()); } /** @@ -757,9 +756,7 @@ public class PropagationGraph implements IFixedPointSystem @Override public Iterator getVariables() { - Iterator it = new FilterIterator<>(delegateGraph.iterator(), IVariable.class::isInstance); - Iterator converted = new MapIterator(it, PointsToSetVariable.class::cast); - return converted; + return IteratorUtil.filter(delegateGraph.iterator(), PointsToSetVariable.class); } /* diff --git a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/rta/TypeBasedHeapModel.java b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/rta/TypeBasedHeapModel.java index af66b1fc2..d43ba4526 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/rta/TypeBasedHeapModel.java +++ b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/rta/TypeBasedHeapModel.java @@ -175,8 +175,7 @@ public class TypeBasedHeapModel implements HeapModel { @Override public Iterator iteratePointerKeys() { initAllPKeys(); - Iterator filtered = new FilterIterator(pKeys.values().iterator(), PointerKey.class::isInstance); - return new MapIterator(filtered, PointerKey.class::cast); + return IteratorUtil.filter(pKeys.values().iterator(), PointerKey.class); } @Override From 16913ffc80774c70aa2727250fb2e46421bf38be Mon Sep 17 00:00:00 2001 From: Ben Liblit Date: Wed, 22 Nov 2017 14:36:00 -0600 Subject: [PATCH 17/69] Remove an apparently-useless no-op walk over elements of a set --- .../org/scandroid/flow/functions/TracingFlowFunction.java | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/com.ibm.wala.scandroid/source/org/scandroid/flow/functions/TracingFlowFunction.java b/com.ibm.wala.scandroid/source/org/scandroid/flow/functions/TracingFlowFunction.java index 5eae3cbec..5bb31bed0 100644 --- a/com.ibm.wala.scandroid/source/org/scandroid/flow/functions/TracingFlowFunction.java +++ b/com.ibm.wala.scandroid/source/org/scandroid/flow/functions/TracingFlowFunction.java @@ -60,12 +60,7 @@ public class TracingFlowFunction implements IUnaryFlowFunction { @Override public IntSet getTargets(int d1) { - IntSet result = function.getTargets(d1); - - result.foreach(x -> { - - }); - return result; + return function.getTargets(d1); } } From 62618802646df44ebe4054f7fca588ced3329726 Mon Sep 17 00:00:00 2001 From: Ben Liblit Date: Wed, 22 Nov 2017 14:36:36 -0600 Subject: [PATCH 18/69] Remove unnecessary casts of lambda expressions --- .../source/com/ibm/wala/dalvik/test/util/Util.java | 3 +-- .../com/ibm/wala/shrikeBT/tools/OfflineInstrumenterBase.java | 3 +-- com.ibm.wala.util/src/com/ibm/wala/util/io/FileUtil.java | 3 +-- 3 files changed, 3 insertions(+), 6 deletions(-) diff --git a/com.ibm.wala.dalvik.test/source/com/ibm/wala/dalvik/test/util/Util.java b/com.ibm.wala.dalvik.test/source/com/ibm/wala/dalvik/test/util/Util.java index 91636caca..cf16e8a69 100644 --- a/com.ibm.wala.dalvik.test/source/com/ibm/wala/dalvik/test/util/Util.java +++ b/com.ibm.wala.dalvik.test/source/com/ibm/wala/dalvik/test/util/Util.java @@ -5,7 +5,6 @@ import static com.ibm.wala.properties.WalaProperties.ANDROID_RT_JAVA_JAR; import java.io.File; import java.io.FileFilter; -import java.io.FilenameFilter; import java.io.IOException; import java.net.URI; import java.util.ArrayList; @@ -81,7 +80,7 @@ public class Util { libs.add(new File(System.getenv("ANDROID_BOOT_OAT")).toURI()); } else if (walaProperties != null && walaProperties.getProperty(ANDROID_RT_DEX_DIR) != null) { - for(File lib : new File(walaProperties.getProperty(ANDROID_RT_DEX_DIR)).listFiles((FilenameFilter) (dir, name) -> name.startsWith("boot") && name.endsWith("oat"))) { + for(File lib : new File(walaProperties.getProperty(ANDROID_RT_DEX_DIR)).listFiles((dir, name) -> name.startsWith("boot") && name.endsWith("oat"))) { libs.add(lib.toURI()); } } else { diff --git a/com.ibm.wala.shrike/src/com/ibm/wala/shrikeBT/tools/OfflineInstrumenterBase.java b/com.ibm.wala.shrike/src/com/ibm/wala/shrikeBT/tools/OfflineInstrumenterBase.java index 3f1cb65c8..beb02fc8a 100644 --- a/com.ibm.wala.shrike/src/com/ibm/wala/shrikeBT/tools/OfflineInstrumenterBase.java +++ b/com.ibm.wala.shrike/src/com/ibm/wala/shrikeBT/tools/OfflineInstrumenterBase.java @@ -13,7 +13,6 @@ package com.ibm.wala.shrikeBT.tools; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.File; -import java.io.FileFilter; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; @@ -263,7 +262,7 @@ public abstract class OfflineInstrumenterBase { if (d == null) { throw new IllegalArgumentException("d is null"); } - File[] fs = d.listFiles((FileFilter) f -> f.isDirectory() || f.getName().endsWith(".class")); + File[] fs = d.listFiles(f -> f.isDirectory() || f.getName().endsWith(".class")); if (fs == null) { throw new IllegalArgumentException("bad directory " + d.getAbsolutePath()); } diff --git a/com.ibm.wala.util/src/com/ibm/wala/util/io/FileUtil.java b/com.ibm.wala.util/src/com/ibm/wala/util/io/FileUtil.java index 3cee37f2e..55321893f 100644 --- a/com.ibm.wala.util/src/com/ibm/wala/util/io/FileUtil.java +++ b/com.ibm.wala.util/src/com/ibm/wala/util/io/FileUtil.java @@ -11,7 +11,6 @@ package com.ibm.wala.util.io; import java.io.ByteArrayOutputStream; import java.io.File; -import java.io.FileFilter; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; @@ -192,7 +191,7 @@ public class FileUtil { public static void recurseFiles(Consumer action, final Predicate filter, File top) { if (top.isDirectory()) { - for(File f : top.listFiles((FileFilter) file -> filter.test(file) || file.isDirectory())) { + for(File f : top.listFiles(file -> filter.test(file) || file.isDirectory())) { recurseFiles(action, filter, f); } } else { From 5bc0e11e90b5f42ee16f6b1ea03e9efb6740397d Mon Sep 17 00:00:00 2001 From: Ben Liblit Date: Fri, 24 Nov 2017 12:45:30 -0600 Subject: [PATCH 19/69] Ignore invalid Javadoc here, in case we don't have Android's SDK --- com.ibm.wala.dalvik/.settings/org.eclipse.jdt.core.prefs | 1 + 1 file changed, 1 insertion(+) diff --git a/com.ibm.wala.dalvik/.settings/org.eclipse.jdt.core.prefs b/com.ibm.wala.dalvik/.settings/org.eclipse.jdt.core.prefs index f83ad1514..37828eba8 100644 --- a/com.ibm.wala.dalvik/.settings/org.eclipse.jdt.core.prefs +++ b/com.ibm.wala.dalvik/.settings/org.eclipse.jdt.core.prefs @@ -48,6 +48,7 @@ org.eclipse.jdt.core.compiler.problem.includeNullInfoFromAsserts=enabled org.eclipse.jdt.core.compiler.problem.incompatibleNonInheritedInterfaceMethod=error org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch=error org.eclipse.jdt.core.compiler.problem.indirectStaticAccess=error +org.eclipse.jdt.core.compiler.problem.invalidJavadoc=ignore org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsNotVisibleRef=disabled org.eclipse.jdt.core.compiler.problem.localVariableHiding=ignore org.eclipse.jdt.core.compiler.problem.methodWithConstructorName=error From 456b0e45c379dbec48907b1a5877dfbf39bbd4ed Mon Sep 17 00:00:00 2001 From: Ben Liblit Date: Mon, 27 Nov 2017 14:58:17 -0600 Subject: [PATCH 20/69] Remove additional unnecessary casts of lambda expressions --- .../ibm/wala/cast/java/test/JavaIRTests.java | 18 +++++++++--------- .../com/ibm/wala/dalvik/test/util/Util.java | 3 +-- 2 files changed, 10 insertions(+), 11 deletions(-) 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 5ee45393b..06b84e5b3 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 @@ -82,7 +82,7 @@ public abstract class JavaIRTests extends IRTests { @Test public void testTwoClasses() throws IllegalArgumentException, CancelException, IOException { runTest(singleTestSrc(), rtJar, simpleTestEntryPoint(), Arrays.asList( - (IRAssertion) cg -> { + cg -> { final String typeStr = singleInputForTest(); final TypeReference type = findOrCreateTypeReference("Source", typeStr, cg.getClassHierarchy()); @@ -137,7 +137,7 @@ public abstract class JavaIRTests extends IRTests { @Test public void testInheritance1() throws IllegalArgumentException, CancelException, IOException { runTest(singleTestSrc(), rtJar, simpleTestEntryPoint(), Arrays.asList( - (IRAssertion) cg -> { + cg -> { final String typeStr = "Derived"; final TypeReference type = findOrCreateTypeReference("Source", typeStr, cg.getClassHierarchy()); @@ -189,7 +189,7 @@ public abstract class JavaIRTests extends IRTests { @Test public void testArrayLiteral1() throws IllegalArgumentException, CancelException, IOException { runTest(singleTestSrc(), rtJar, simpleTestEntryPoint(), Arrays.asList( - (IRAssertion) cg -> { + cg -> { MethodReference mref = descriptorToMethodRef("Source#ArrayLiteral1#main#([Ljava/lang/String;)V", cg.getClassHierarchy()); @@ -202,7 +202,7 @@ public abstract class JavaIRTests extends IRTests { @Test public void testArrayLiteral2() throws IllegalArgumentException, CancelException, IOException { runTest(singleTestSrc(), rtJar, simpleTestEntryPoint(), Arrays.asList( - (IRAssertion) cg -> { + cg -> { MethodReference mref = descriptorToMethodRef("Source#ArrayLiteral2#main#([Ljava/lang/String;)V", cg.getClassHierarchy()); @@ -256,7 +256,7 @@ public abstract class JavaIRTests extends IRTests { @Test public void testQualifiedStatic() throws IllegalArgumentException, CancelException, IOException { runTest(singleTestSrc(), rtJar, simpleTestEntryPoint(), Arrays.asList( - (IRAssertion) cg -> { + cg -> { MethodReference mref = descriptorToMethodRef("Source#QualifiedStatic#main#([Ljava/lang/String;)V", cg.getClassHierarchy()); @@ -274,7 +274,7 @@ public abstract class JavaIRTests extends IRTests { @Test public void testStaticNesting() throws IllegalArgumentException, CancelException, IOException { runTest(singleTestSrc(), rtJar, simpleTestEntryPoint(), Arrays.asList( - (IRAssertion) cg -> { + cg -> { final String typeStr = singleInputForTest() + "$WhatsIt"; final TypeReference type = findOrCreateTypeReference("Source", typeStr, cg.getClassHierarchy()); @@ -301,7 +301,7 @@ public abstract class JavaIRTests extends IRTests { @Test public void testInnerClass() throws IllegalArgumentException, CancelException, IOException { runTest(singleTestSrc(), rtJar, simpleTestEntryPoint(), Arrays.asList( - (IRAssertion) cg -> { + cg -> { final String typeStr = singleInputForTest(); final TypeReference type = findOrCreateTypeReference("Source", typeStr + "$WhatsIt", cg.getClassHierarchy()); @@ -412,7 +412,7 @@ public abstract class JavaIRTests extends IRTests { @Test public void testLocalClass() throws IllegalArgumentException, CancelException, IOException { runTest(singleTestSrc(), rtJar, simpleTestEntryPoint(), Arrays.asList( - (IRAssertion) cg -> { + cg -> { final String typeStr = singleInputForTest(); final String localClassStr = "Foo"; @@ -445,7 +445,7 @@ public abstract class JavaIRTests extends IRTests { @Test public void testAnonymousClass() throws IllegalArgumentException, CancelException, IOException { runTest(singleTestSrc(), rtJar, simpleTestEntryPoint(), Arrays.asList( - (IRAssertion) cg -> { + cg -> { final String typeStr = singleInputForTest(); final TypeReference type = findOrCreateTypeReference("Source", typeStr, cg.getClassHierarchy()); diff --git a/com.ibm.wala.dalvik.test/source/com/ibm/wala/dalvik/test/util/Util.java b/com.ibm.wala.dalvik.test/source/com/ibm/wala/dalvik/test/util/Util.java index cf16e8a69..fafc9eb7e 100644 --- a/com.ibm.wala.dalvik.test/source/com/ibm/wala/dalvik/test/util/Util.java +++ b/com.ibm.wala.dalvik.test/source/com/ibm/wala/dalvik/test/util/Util.java @@ -4,7 +4,6 @@ import static com.ibm.wala.properties.WalaProperties.ANDROID_RT_DEX_DIR; import static com.ibm.wala.properties.WalaProperties.ANDROID_RT_JAVA_JAR; import java.io.File; -import java.io.FileFilter; import java.io.IOException; import java.net.URI; import java.util.ArrayList; @@ -85,7 +84,7 @@ public class Util { } } else { assert "Dalvik".equals(System.getProperty("java.vm.name")); - for(File f : new File("/system/framework/").listFiles((FileFilter) pathname -> { + for(File f : new File("/system/framework/").listFiles(pathname -> { String name = pathname.getName(); return (name.startsWith("core") || name.startsWith("framework")) && From 8ef6ad5069d25c1cbc4309a285ad6610a2e1f23c Mon Sep 17 00:00:00 2001 From: Ben Liblit Date: Tue, 28 Nov 2017 14:02:37 -0600 Subject: [PATCH 21/69] Add proper type parameters to nearly all uses of Iterator Java sources used as test data have been excluded. --- .../IntraproceduralExceptionAnalysis.java | 2 +- .../analysis/pointers/BasicHeapGraph.java | 2 +- .../analysis/reflection/CloneInterpreter.java | 2 +- .../reflection/FactoryBypassInterpreter.java | 10 ++-- .../stackMachine/AbstractIntStackMachine.java | 3 +- .../wala/analysis/typeInference/ConeType.java | 2 +- .../analysis/typeInference/TypeInference.java | 6 +- .../src/com/ibm/wala/cfg/CFGSanitizer.java | 26 ++++----- .../src/com/ibm/wala/cfg/InducedCFG.java | 12 ++-- .../src/com/ibm/wala/cfg/ShrikeCFG.java | 12 ++-- .../src/com/ibm/wala/cfg/Util.java | 2 +- .../wala/cfg/cdg/ControlDependenceGraph.java | 6 +- .../ibm/wala/classLoader/ClassLoaderImpl.java | 8 +-- .../com/ibm/wala/classLoader/CodeScanner.java | 12 ++-- .../ibm/wala/classLoader/ShrikeBTMethod.java | 8 +-- .../com/ibm/wala/classLoader/ShrikeClass.java | 2 +- .../wala/client/AbstractAnalysisEngine.java | 2 +- .../wala/dataflow/IFDS/LocalPathEdges.java | 20 +++---- .../wala/dataflow/IFDS/LocalSummaryEdges.java | 4 +- .../ibm/wala/dataflow/ssa/SSAInference.java | 12 ++-- .../ibm/wala/escape/FILiveObjectAnalysis.java | 8 +-- .../wala/escape/LocalLiveRangeAnalysis.java | 14 ++--- .../ibm/wala/escape/TrivialMethodEscape.java | 14 ++--- .../wala/ipa/callgraph/CallGraphStats.java | 4 +- .../impl/AllApplicationEntrypoints.java | 4 +- .../impl/ArgumentTypeEntrypoint.java | 6 +- .../ipa/callgraph/impl/BasicCallGraph.java | 12 ++-- .../ipa/callgraph/impl/PartialCallGraph.java | 16 +++--- .../com/ibm/wala/ipa/callgraph/impl/Util.java | 4 +- .../propagation/ConcreteTypeKey.java | 6 +- .../propagation/PointerAnalysisImpl.java | 44 +++++++-------- .../callgraph/propagation/PointsToMap.java | 4 +- .../PropagationCallGraphBuilder.java | 4 +- .../propagation/PropagationGraph.java | 55 ++++++++++--------- .../propagation/PropagationSystem.java | 26 ++++----- .../propagation/ReflectionHandler.java | 4 +- .../SSAPropagationCallGraphBuilder.java | 8 +-- .../propagation/cfa/ZeroXInstanceKeys.java | 4 +- .../propagation/rta/AbstractRTABuilder.java | 16 +++--- .../propagation/rta/BasicRTABuilder.java | 8 +-- .../rta/DelegatingExplicitCallGraph.java | 4 +- .../propagation/rta/TypeBasedHeapModel.java | 4 +- .../rta/TypeBasedPointerAnalysis.java | 6 +- .../ipa/cfg/AbstractInterproceduralCFG.java | 8 +-- .../src/com/ibm/wala/ipa/cfg/PrunedCFG.java | 4 +- .../com/ibm/wala/ipa/cha/ClassHierarchy.java | 20 +++---- .../wala/ipa/summaries/ReflectionSummary.java | 6 +- .../src/com/ibm/wala/ssa/AuxiliaryCache.java | 5 +- .../src/com/ibm/wala/ssa/DefUse.java | 4 +- .../src/com/ibm/wala/ssa/IR.java | 16 +++--- .../src/com/ibm/wala/ssa/SSABuilder.java | 4 +- .../src/com/ibm/wala/ssa/SSACFG.java | 10 ++-- .../analysis/DeadAssignmentElimination.java | 30 +++++----- .../ibm/wala/util/ref/ReferenceCleanser.java | 4 +- .../ibm/wala/util/scope/JUnitEntryPoints.java | 14 ++--- .../src/com/ibm/wala/viz/PDFViewUtil.java | 10 ++-- .../ssa/AbstractIntRegisterMachine.java | 3 +- .../com/ibm/wala/ide/ui/SWTTreeViewer.java | 6 +- .../impl/AbstractFixedPointSolver.java | 9 +-- .../impl/DefaultFixedPointSystem.java | 4 +- .../ibm/wala/fixpoint/IFixedPointSystem.java | 11 ++-- 61 files changed, 300 insertions(+), 296 deletions(-) diff --git a/com.ibm.wala.core/src/com/ibm/wala/analysis/exceptionanalysis/IntraproceduralExceptionAnalysis.java b/com.ibm.wala.core/src/com/ibm/wala/analysis/exceptionanalysis/IntraproceduralExceptionAnalysis.java index 62bc2515d..3258ad3df 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/analysis/exceptionanalysis/IntraproceduralExceptionAnalysis.java +++ b/com.ibm.wala.core/src/com/ibm/wala/analysis/exceptionanalysis/IntraproceduralExceptionAnalysis.java @@ -226,7 +226,7 @@ public class IntraproceduralExceptionAnalysis { if (pointerAnalysis != null) { PointerKey pointerKey = pointerAnalysis.getHeapModel().getPointerKeyForLocal(node, exceptionVariable); - Iterator it = pointerAnalysis.getHeapGraph().getSuccNodes(pointerKey); + Iterator it = pointerAnalysis.getHeapGraph().getSuccNodes(pointerKey); while (it.hasNext()) { Object next = it.next(); if (next instanceof InstanceKey) { 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 03734880a..cfaa70a46 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 @@ -516,7 +516,7 @@ public class BasicHeapGraph extends HeapGraphImpl { Object node = getNode(i); if (node != null) { result.append(i).append(" -> "); - for (Iterator it = getSuccNodes(node); it.hasNext();) { + for (Iterator it = getSuccNodes(node); it.hasNext();) { Object s = it.next(); result.append(getNumber(s)).append(" "); } diff --git a/com.ibm.wala.core/src/com/ibm/wala/analysis/reflection/CloneInterpreter.java b/com.ibm.wala.core/src/com/ibm/wala/analysis/reflection/CloneInterpreter.java index 386346a95..08ca2f983 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/analysis/reflection/CloneInterpreter.java +++ b/com.ibm.wala.core/src/com/ibm/wala/analysis/reflection/CloneInterpreter.java @@ -258,7 +258,7 @@ public class CloneInterpreter implements SSAContextInterpreter { return CodeScanner.hasObjectArrayStore(statements); } - public Iterator iterateCastTypes(CGNode node) { + public Iterator iterateCastTypes(CGNode node) { SSAInstruction[] statements = getIR(node).getInstructions(); return CodeScanner.iterateCastTypes(statements); } diff --git a/com.ibm.wala.core/src/com/ibm/wala/analysis/reflection/FactoryBypassInterpreter.java b/com.ibm.wala.core/src/com/ibm/wala/analysis/reflection/FactoryBypassInterpreter.java index 8b24e1e27..45d9b7aea 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/analysis/reflection/FactoryBypassInterpreter.java +++ b/com.ibm.wala.core/src/com/ibm/wala/analysis/reflection/FactoryBypassInterpreter.java @@ -263,7 +263,7 @@ public class FactoryBypassInterpreter extends AbstractReflectionInterpreter { private SpecializedFactoryMethod findOrCreateSpecializedFactoryMethod(CGNode node) { SpecializedFactoryMethod m = syntheticMethodCache.get(node.getContext()); if (m == null) { - Set types = getTypesForContext(node.getContext()); + Set types = getTypesForContext(node.getContext()); m = new SpecializedFactoryMethod((SummarizedMethod) node.getMethod(), node.getContext(), types); syntheticMethodCache.put(node.getContext(), m); } @@ -312,7 +312,7 @@ public class FactoryBypassInterpreter extends AbstractReflectionInterpreter { } } - public Iterator iterateCastTypes(CGNode node) { + public Iterator iterateCastTypes(CGNode node) { if (node == null) { throw new IllegalArgumentException("node is null"); } @@ -378,7 +378,7 @@ public class FactoryBypassInterpreter extends AbstractReflectionInterpreter { } } - protected SpecializedFactoryMethod(final SummarizedMethod m, Context context, final Set S) { + protected SpecializedFactoryMethod(final SummarizedMethod m, Context context, final Set S) { super(m, m.getDeclaringClass(), m.isStatic(), true); this.context = context; @@ -393,8 +393,8 @@ public class FactoryBypassInterpreter extends AbstractReflectionInterpreter { // add original statements from the method summary nextLocal = addOriginalStatements(m); - for (Iterator it = S.iterator(); it.hasNext();) { - TypeReference type = (TypeReference) it.next(); + for (Iterator it = S.iterator(); it.hasNext();) { + TypeReference type = it.next(); TypeAbstraction T = typeRef2TypeAbstraction(m.getClassHierarchy(), type); addStatementsForTypeAbstraction(T); } diff --git a/com.ibm.wala.core/src/com/ibm/wala/analysis/stackMachine/AbstractIntStackMachine.java b/com.ibm.wala.core/src/com/ibm/wala/analysis/stackMachine/AbstractIntStackMachine.java index db784a8bd..91ac1bb7d 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/analysis/stackMachine/AbstractIntStackMachine.java +++ b/com.ibm.wala.core/src/com/ibm/wala/analysis/stackMachine/AbstractIntStackMachine.java @@ -54,6 +54,7 @@ import com.ibm.wala.types.ClassLoaderReference; import com.ibm.wala.types.TypeReference; import com.ibm.wala.util.CancelException; import com.ibm.wala.util.CancelRuntimeException; +import com.ibm.wala.util.graph.INodeWithNumber; import com.ibm.wala.util.shrike.ShrikeUtil; /** @@ -215,7 +216,7 @@ public abstract class AbstractIntStackMachine implements FixedPointConstants { /* * Add only the entry variable to the work list. */ - for (Iterator it = getFixedPointSystem().getStatementsThatUse(entry); it.hasNext();) { + for (Iterator it = getFixedPointSystem().getStatementsThatUse(entry); it.hasNext();) { AbstractStatement s = (AbstractStatement) it.next(); addToWorkList(s); } diff --git a/com.ibm.wala.core/src/com/ibm/wala/analysis/typeInference/ConeType.java b/com.ibm.wala.core/src/com/ibm/wala/analysis/typeInference/ConeType.java index 01718c64a..97a0acbf7 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/analysis/typeInference/ConeType.java +++ b/com.ibm.wala.core/src/com/ibm/wala/analysis/typeInference/ConeType.java @@ -106,7 +106,7 @@ public class ConeType extends TypeAbstraction { /** * @return an Iterator of IClass that implement this interface */ - public Iterator iterateImplementors() { + public Iterator iterateImplementors() { return type.getClassHierarchy().getImplementors(getType().getReference()).iterator(); } diff --git a/com.ibm.wala.core/src/com/ibm/wala/analysis/typeInference/TypeInference.java b/com.ibm.wala.core/src/com/ibm/wala/analysis/typeInference/TypeInference.java index 1d2c51e1f..62332aefe 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/analysis/typeInference/TypeInference.java +++ b/com.ibm.wala.core/src/com/ibm/wala/analysis/typeInference/TypeInference.java @@ -668,8 +668,8 @@ public class TypeInference extends SSAInference implements FixedPo private TypeAbstraction meetDeclaredExceptionTypes(SSAGetCaughtExceptionInstruction s) { ExceptionHandlerBasicBlock bb = (ExceptionHandlerBasicBlock) ir.getControlFlowGraph().getNode(s.getBasicBlockNumber()); - Iterator it = bb.getCaughtExceptionTypes(); - TypeReference t = (TypeReference) it.next(); + Iterator it = bb.getCaughtExceptionTypes(); + TypeReference t = it.next(); IClass klass = cha.lookupClass(t); TypeAbstraction result = null; if (klass == null) { @@ -680,7 +680,7 @@ public class TypeInference extends SSAInference implements FixedPo result = new ConeType(klass); } while (it.hasNext()) { - t = (TypeReference) it.next(); + t = it.next(); IClass tClass = cha.lookupClass(t); if (tClass == null) { result = BOTTOM; diff --git a/com.ibm.wala.core/src/com/ibm/wala/cfg/CFGSanitizer.java b/com.ibm.wala.core/src/com/ibm/wala/cfg/CFGSanitizer.java index 0ec338358..3ed6649a4 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/cfg/CFGSanitizer.java +++ b/com.ibm.wala.core/src/com/ibm/wala/cfg/CFGSanitizer.java @@ -53,10 +53,10 @@ public class CFGSanitizer { } // add all edges to the graph, except those that go to exit - for (Iterator it = cfg.iterator(); it.hasNext();) { - ISSABasicBlock b = (ISSABasicBlock) it.next(); - for (Iterator it2 = cfg.getSuccNodes(b); it2.hasNext();) { - ISSABasicBlock b2 = (ISSABasicBlock) it2.next(); + for (Iterator it = cfg.iterator(); it.hasNext();) { + ISSABasicBlock b = it.next(); + for (Iterator it2 = cfg.getSuccNodes(b); it2.hasNext();) { + ISSABasicBlock b2 = it2.next(); if (!b2.isExitBlock()) { g.addEdge(b, b2); @@ -67,9 +67,9 @@ public class CFGSanitizer { // now add edges to exit, ignoring undeclared exceptions ISSABasicBlock exit = cfg.exit(); - for (Iterator it = cfg.getPredNodes(exit); it.hasNext();) { + for (Iterator it = cfg.getPredNodes(exit); it.hasNext();) { // for each predecessor of exit ... - ISSABasicBlock b = (ISSABasicBlock) it.next(); + ISSABasicBlock b = it.next(); SSAInstruction s = ir.getInstructions()[b.getLastInstructionIndex()]; if (s == null) { @@ -90,14 +90,14 @@ public class CFGSanitizer { Assertions.UNREACHABLE(); } // remove any exceptions that are caught by catch blocks - for (Iterator it2 = cfg.getSuccNodes(b); it2.hasNext();) { - IBasicBlock c = (IBasicBlock) it2.next(); + for (Iterator it2 = cfg.getSuccNodes(b); it2.hasNext();) { + IBasicBlock c = it2.next(); if (c.isCatchBlock()) { SSACFG.ExceptionHandlerBasicBlock cb = (ExceptionHandlerBasicBlock) c; - for (Iterator it3 = cb.getCaughtExceptionTypes(); it3.hasNext();) { - TypeReference ex = (TypeReference) it3.next(); + for (Iterator it3 = cb.getCaughtExceptionTypes(); it3.hasNext();) { + TypeReference ex = it3.next(); IClass exClass = cha.lookupClass(ex); if (exClass == null) { throw new WalaException("failed to find " + ex); @@ -158,7 +158,7 @@ public class CFGSanitizer { * What are the exception types which s may throw? */ private static TypeReference[] computeExceptions(IClassHierarchy cha, IR ir, SSAInstruction s) throws InvalidClassFileException { - Collection c = null; + Collection c = null; Language l = ir.getMethod().getDeclaringClass().getClassLoader().getLanguage(); if (s instanceof SSAInvokeInstruction) { SSAInvokeInstruction call = (SSAInvokeInstruction) s; @@ -170,9 +170,9 @@ public class CFGSanitizer { return null; } else { TypeReference[] exceptions = new TypeReference[c.size()]; - Iterator it = c.iterator(); + Iterator it = c.iterator(); for (int i = 0; i < exceptions.length; i++) { - exceptions[i] = (TypeReference) it.next(); + exceptions[i] = it.next(); } return exceptions; } diff --git a/com.ibm.wala.core/src/com/ibm/wala/cfg/InducedCFG.java b/com.ibm.wala.core/src/com/ibm/wala/cfg/InducedCFG.java index 93095713a..f6fddc3c9 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/cfg/InducedCFG.java +++ b/com.ibm.wala.core/src/com/ibm/wala/cfg/InducedCFG.java @@ -120,8 +120,8 @@ public class InducedCFG extends AbstractCFG it = iterator(); it.hasNext();) { + BasicBlock b = it.next(); if (b.equals(exit())) continue; b.computeOutgoingEdges(); @@ -471,8 +471,8 @@ public class InducedCFG extends AbstractCFG it = InducedCFG.this.iterator(); it.hasNext();) { + final BasicBlock candid = it.next(); if (candid.getFirstInstructionIndex() == tgtNd) { target = candid; break; @@ -623,8 +623,8 @@ public class InducedCFG extends AbstractCFG it = iterator(); it.hasNext();) { + BasicBlock bb = it.next(); s.append("BB").append(getNumber(bb)).append("\n"); for (int j = bb.getFirstInstructionIndex(); j <= bb.getLastInstructionIndex(); j++) { s.append(" ").append(j).append(" ").append(getInstructions()[j]).append("\n"); diff --git a/com.ibm.wala.core/src/com/ibm/wala/cfg/ShrikeCFG.java b/com.ibm.wala.core/src/com/ibm/wala/cfg/ShrikeCFG.java index f9d7c5fa0..043bdc71a 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/cfg/ShrikeCFG.java +++ b/com.ibm.wala.core/src/com/ibm/wala/cfg/ShrikeCFG.java @@ -111,8 +111,8 @@ public class ShrikeCFG extends AbstractCFG i */ private void computeI2BMapping() { instruction2Block = new int[getInstructions().length]; - for (Iterator it = iterator(); it.hasNext();) { - final BasicBlock b = (BasicBlock) it.next(); + for (Iterator it = iterator(); it.hasNext();) { + final BasicBlock b = it.next(); for (int j = b.getFirstInstructionIndex(); j <= b.getLastInstructionIndex(); j++) { instruction2Block[j] = getNumber(b); } @@ -123,8 +123,8 @@ public class ShrikeCFG extends AbstractCFG i * Compute outgoing edges in the control flow graph. */ private void computeEdges() { - for (Iterator it = iterator(); it.hasNext();) { - BasicBlock b = (BasicBlock) it.next(); + for (Iterator it = iterator(); it.hasNext();) { + BasicBlock b = it.next(); if (b.equals(exit())) { continue; } else if (b.equals(entry())) { @@ -502,8 +502,8 @@ public class ShrikeCFG extends AbstractCFG i @Override public String toString() { StringBuffer s = new StringBuffer(""); - for (Iterator it = iterator(); it.hasNext();) { - BasicBlock bb = (BasicBlock) it.next(); + for (Iterator it = iterator(); it.hasNext();) { + BasicBlock bb = it.next(); s.append("BB").append(getNumber(bb)).append("\n"); for (int j = bb.getFirstInstructionIndex(); j <= bb.getLastInstructionIndex(); j++) { s.append(" ").append(j).append(" ").append(getInstructions()[j]).append("\n"); diff --git a/com.ibm.wala.core/src/com/ibm/wala/cfg/Util.java b/com.ibm.wala.core/src/com/ibm/wala/cfg/Util.java index d8dd88781..34d5447a6 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/cfg/Util.java +++ b/com.ibm.wala.core/src/com/ibm/wala/cfg/Util.java @@ -214,7 +214,7 @@ public class Util { throw new IllegalArgumentException("b is null"); } int i = 0; - for (Iterator it = cfg.getPredNodes(b); it.hasNext();) { + for (Iterator it = cfg.getPredNodes(b); it.hasNext();) { if (it.next().equals(a)) { return i; } diff --git a/com.ibm.wala.core/src/com/ibm/wala/cfg/cdg/ControlDependenceGraph.java b/com.ibm.wala.core/src/com/ibm/wala/cfg/cdg/ControlDependenceGraph.java index d8b30293a..1ba02b148 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/cfg/cdg/ControlDependenceGraph.java +++ b/com.ibm.wala.core/src/com/ibm/wala/cfg/cdg/ControlDependenceGraph.java @@ -110,7 +110,7 @@ public class ControlDependenceGraph extends AbstractNumberedGraph { } for (Iterator ps = forwardEdges.keySet().iterator(); ps.hasNext();) { T p = ps.next(); - for (Iterator ns = ((Set) forwardEdges.get(p)).iterator(); ns.hasNext();) { + for (Iterator ns = forwardEdges.get(p).iterator(); ns.hasNext();) { Object n = ns.next(); backwardEdges.get(n).add(p); } @@ -209,11 +209,11 @@ public class ControlDependenceGraph extends AbstractNumberedGraph { for (Iterator ns = iterator(); ns.hasNext();) { T n = ns.next(); sb.append(n.toString()).append("\n"); - for (Iterator ss = getSuccNodes(n); ss.hasNext();) { + for (Iterator ss = getSuccNodes(n); ss.hasNext();) { Object s = ss.next(); sb.append(" --> ").append(s); if (edgeLabels != null) - for (Iterator labels = ((Set) edgeLabels.get(Pair.make(n, s))).iterator(); labels.hasNext();) + for (Iterator labels = edgeLabels.get(Pair.make(n, s)).iterator(); labels.hasNext();) sb.append("\n label: ").append(labels.next()); sb.append("\n"); } diff --git a/com.ibm.wala.core/src/com/ibm/wala/classLoader/ClassLoaderImpl.java b/com.ibm.wala.core/src/com/ibm/wala/classLoader/ClassLoaderImpl.java index 8f5bcd308..6c36f0ad1 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/classLoader/ClassLoaderImpl.java +++ b/com.ibm.wala.core/src/com/ibm/wala/classLoader/ClassLoaderImpl.java @@ -125,8 +125,8 @@ public class ClassLoaderImpl implements IClassLoader { System.err.println("Get source files for " + M); } HashSet result = HashSetFactory.make(); - for (Iterator it = M.getEntries(); it.hasNext();) { - ModuleEntry entry = (ModuleEntry) it.next(); + for (Iterator it = M.getEntries(); it.hasNext();) { + ModuleEntry entry = it.next(); if (DEBUG_LEVEL > 0) { System.err.println("consider entry for source information: " + entry); } @@ -155,8 +155,8 @@ public class ClassLoaderImpl implements IClassLoader { System.err.println("Get class files for " + M); } HashSet result = HashSetFactory.make(); - for (Iterator it = M.getEntries(); it.hasNext();) { - ModuleEntry entry = (ModuleEntry) it.next(); + for (Iterator it = M.getEntries(); it.hasNext();) { + ModuleEntry entry = it.next(); if (DEBUG_LEVEL > 0) { System.err.println("ClassLoaderImpl.getClassFiles:Got entry: " + entry); } diff --git a/com.ibm.wala.core/src/com/ibm/wala/classLoader/CodeScanner.java b/com.ibm.wala.core/src/com/ibm/wala/classLoader/CodeScanner.java index a41f8c163..c7048bda8 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/classLoader/CodeScanner.java +++ b/com.ibm.wala.core/src/com/ibm/wala/classLoader/CodeScanner.java @@ -161,7 +161,7 @@ public class CodeScanner { * @throws InvalidClassFileException * @throws IllegalArgumentException if m is null */ - public static Iterator iterateCastTypes(IMethod m) throws InvalidClassFileException { + public static Iterator iterateCastTypes(IMethod m) throws InvalidClassFileException { if (m == null) { throw new IllegalArgumentException("m is null"); } @@ -173,7 +173,7 @@ public class CodeScanner { } } - private static Iterator iterateShrikeBTCastTypes(ShrikeCTMethod wrapper) throws InvalidClassFileException { + private static Iterator iterateShrikeBTCastTypes(ShrikeCTMethod wrapper) throws InvalidClassFileException { return wrapper.getCastTypes(); } @@ -182,8 +182,8 @@ public class CodeScanner { } private static boolean hasShrikeBTObjectArrayStore(ShrikeCTMethod M) throws InvalidClassFileException { - for (Iterator it = M.getArraysWritten(); it.hasNext();) { - TypeReference t = (TypeReference) it.next(); + for (Iterator it = M.getArraysWritten(); it.hasNext();) { + TypeReference t = it.next(); if (t.isReferenceType()) { return true; } @@ -232,8 +232,8 @@ public class CodeScanner { } private static boolean hasShrikeBTObjectArrayLoad(ShrikeCTMethod M) throws InvalidClassFileException { - for (Iterator it = M.getArraysRead(); it.hasNext();) { - TypeReference t = (TypeReference) it.next(); + for (Iterator it = M.getArraysRead(); it.hasNext();) { + TypeReference t = it.next(); if (t.isReferenceType()) { return true; } diff --git a/com.ibm.wala.core/src/com/ibm/wala/classLoader/ShrikeBTMethod.java b/com.ibm.wala.core/src/com/ibm/wala/classLoader/ShrikeBTMethod.java index e6b9a4027..385271e2a 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/classLoader/ShrikeBTMethod.java +++ b/com.ibm.wala.core/src/com/ibm/wala/classLoader/ShrikeBTMethod.java @@ -309,7 +309,7 @@ public abstract class ShrikeBTMethod implements IMethod, BytecodeConstants { * @return Iterator of TypeReference * @throws InvalidClassFileException */ - public Iterator getArraysRead() throws InvalidClassFileException { + public Iterator getArraysRead() throws InvalidClassFileException { if (isNative()) { return EmptyIterator.instance(); } @@ -336,7 +336,7 @@ public abstract class ShrikeBTMethod implements IMethod, BytecodeConstants { * @return Iterator of TypeReference * @throws InvalidClassFileException */ - public Iterator getCastTypes() throws InvalidClassFileException { + public Iterator getCastTypes() throws InvalidClassFileException { if (isNative()) { return EmptyIterator.instance(); } @@ -541,8 +541,8 @@ public abstract class ShrikeBTMethod implements IMethod, BytecodeConstants { info.implicitExceptions = new TypeReference[simpleVisitor.implicitExceptions.size()]; i = 0; - for (Iterator it = simpleVisitor.implicitExceptions.iterator(); it.hasNext();) { - info.implicitExceptions[i++] = (TypeReference) it.next(); + for (Iterator it = simpleVisitor.implicitExceptions.iterator(); it.hasNext();) { + info.implicitExceptions[i++] = it.next(); } info.castTypes = new TypeReference[simpleVisitor.castTypes.size()]; diff --git a/com.ibm.wala.core/src/com/ibm/wala/classLoader/ShrikeClass.java b/com.ibm.wala.core/src/com/ibm/wala/classLoader/ShrikeClass.java index 3b32487d7..a2615d8e3 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/classLoader/ShrikeClass.java +++ b/com.ibm.wala.core/src/com/ibm/wala/classLoader/ShrikeClass.java @@ -228,7 +228,7 @@ public final class ShrikeClass extends JVMClass { public void clearSoftCaches() { // toss optional information from each method. if (methodMap != null) { - for (Iterator it = getDeclaredMethods().iterator(); it.hasNext();) { + for (Iterator it = getDeclaredMethods().iterator(); it.hasNext();) { ShrikeCTMethod m = (ShrikeCTMethod) it.next(); m.clearCaches(); } 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 86f48b4db..839541bb0 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 @@ -215,7 +215,7 @@ public abstract class AbstractAnalysisEngine implements A */ protected void addApplicationModulesToScope() { ClassLoaderReference app = scope.getApplicationLoader(); - for (Iterator it = moduleFiles.iterator(); it.hasNext();) { + for (Iterator it = moduleFiles.iterator(); it.hasNext();) { Object o = it.next(); if (!(o instanceof Module)) { Assertions.UNREACHABLE("Unexpected type: " + o.getClass()); diff --git a/com.ibm.wala.core/src/com/ibm/wala/dataflow/IFDS/LocalPathEdges.java b/com.ibm.wala.core/src/com/ibm/wala/dataflow/IFDS/LocalPathEdges.java index a13718e3b..60b88ecb2 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/dataflow/IFDS/LocalPathEdges.java +++ b/com.ibm.wala.core/src/com/ibm/wala/dataflow/IFDS/LocalPathEdges.java @@ -334,10 +334,10 @@ public class LocalPathEdges { // this is convoluted on purpose for efficiency: to avoid random access to // the sparse vector, we do parallel iteration with the vector's indices // and contents. TODO: better data structure? - Iterator contents = paths.iterator(); + Iterator contents = paths.iterator(); for (IntIterator it = paths.iterateIndices(); it.hasNext();) { int d2 = it.next(); - IBinaryNaturalRelation R = (IBinaryNaturalRelation) contents.next(); + IBinaryNaturalRelation R = contents.next(); if (R != null && R.contains(n, d1)) { result.add(d2); } @@ -353,10 +353,10 @@ public class LocalPathEdges { // this is convoluted on purpose for efficiency: to avoid random access to // the sparse vector, we do parallel iteration with the vector's indices // and contents. TODO: better data structure? - Iterator contents = zeroPaths.iterator(); + Iterator contents = zeroPaths.iterator(); for (IntIterator it = zeroPaths.iterateIndices(); it.hasNext();) { int d2 = it.next(); - BitVectorIntSet s = (BitVectorIntSet) contents.next(); + IntSet s = contents.next(); if (s != null && s.contains(n)) { result.add(d2); } @@ -389,10 +389,10 @@ public class LocalPathEdges { // this is convoluted on purpose for efficiency: to avoid random access to // the sparse vector, we do parallel iteration with the vector's indices // and contents. TODO: better data structure? - Iterator contents = paths.iterator(); + Iterator contents = paths.iterator(); for (IntIterator it = paths.iterateIndices(); it.hasNext();) { int d2 = it.next(); - IBinaryNaturalRelation R = (IBinaryNaturalRelation) contents.next(); + IBinaryNaturalRelation R = contents.next(); if (R != null && R.anyRelated(n)) { result.add(d2); } @@ -402,10 +402,10 @@ public class LocalPathEdges { // this is convoluted on purpose for efficiency: to avoid random access to // the sparse vector, we do parallel iteration with the vector's indices // and contents. TODO: better data structure? - Iterator contents = identityPaths.iterator(); + Iterator contents = identityPaths.iterator(); for (IntIterator it = identityPaths.iterateIndices(); it.hasNext();) { int d1 = it.next(); - BitVectorIntSet s = (BitVectorIntSet) contents.next(); + IntSet s = contents.next(); if (s != null && s.contains(n)) { result.add(d1); } @@ -415,10 +415,10 @@ public class LocalPathEdges { // this is convoluted on purpose for efficiency: to avoid random access to // the sparse vector, we do parallel iteration with the vector's indices // and contents. TODO: better data structure? - Iterator contents = zeroPaths.iterator(); + Iterator contents = zeroPaths.iterator(); for (IntIterator it = zeroPaths.iterateIndices(); it.hasNext();) { int d2 = it.next(); - BitVectorIntSet s = (BitVectorIntSet) contents.next(); + IntSet s = contents.next(); if (s != null && s.contains(n)) { result.add(d2); } diff --git a/com.ibm.wala.core/src/com/ibm/wala/dataflow/IFDS/LocalSummaryEdges.java b/com.ibm.wala.core/src/com/ibm/wala/dataflow/IFDS/LocalSummaryEdges.java index d78cd0d6e..07a1ceaed 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/dataflow/IFDS/LocalSummaryEdges.java +++ b/com.ibm.wala.core/src/com/ibm/wala/dataflow/IFDS/LocalSummaryEdges.java @@ -133,8 +133,8 @@ public class LocalSummaryEdges { return null; } else { MutableSparseIntSet result = MutableSparseIntSet.makeEmpty(); - for (Iterator it = R.iterator(); it.hasNext();) { - IntPair p = (IntPair) it.next(); + for (Iterator it = R.iterator(); it.hasNext();) { + IntPair p = it.next(); if (p.getY() == d2) { result.add(p.getX()); } diff --git a/com.ibm.wala.core/src/com/ibm/wala/dataflow/ssa/SSAInference.java b/com.ibm.wala.core/src/com/ibm/wala/dataflow/ssa/SSAInference.java index 4a50745fe..14274b0b3 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/dataflow/ssa/SSAInference.java +++ b/com.ibm.wala.core/src/com/ibm/wala/dataflow/ssa/SSAInference.java @@ -86,16 +86,16 @@ public abstract class SSAInference> extends DefaultFixedP SSAInstruction s = instructions[i]; makeEquationForInstruction(opFactory, s); } - for (Iterator it = ir.iteratePhis(); it.hasNext();) { - SSAInstruction s = (SSAInstruction) it.next(); + for (Iterator it = ir.iteratePhis(); it.hasNext();) { + SSAInstruction s = it.next(); makeEquationForInstruction(opFactory, s); } - for (Iterator it = ir.iteratePis(); it.hasNext();) { - SSAInstruction s = (SSAInstruction) it.next(); + for (Iterator it = ir.iteratePis(); it.hasNext();) { + SSAInstruction s = it.next(); makeEquationForInstruction(opFactory, s); } - for (Iterator it = ir.iterateCatchInstructions(); it.hasNext();) { - SSAInstruction s = (SSAInstruction) it.next(); + for (Iterator it = ir.iterateCatchInstructions(); it.hasNext();) { + SSAInstruction s = it.next(); makeEquationForInstruction(opFactory, s); } } 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 8d10daf4f..c8934cbc1 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 @@ -125,8 +125,8 @@ public class FILiveObjectAnalysis implements ILiveObjectAnalysis { } private boolean mayBeLiveInSomeCaller(InstanceKey ik, CGNode m) { - for (Iterator it = callGraph.getPredNodes(m); it.hasNext();) { - CGNode n = (CGNode) it.next(); + for (Iterator it = callGraph.getPredNodes(m); it.hasNext();) { + CGNode n = it.next(); if (mayBeLive(ik, n, -1)) { return true; } @@ -144,7 +144,7 @@ public class FILiveObjectAnalysis implements ILiveObjectAnalysis { IR ir = m.getIR(); DefUse du = m.getDU(); - for (Iterator it = DFS.iterateDiscoverTime(GraphInverter.invert(heapGraph), ik); it.hasNext();) { + for (Iterator it = DFS.iterateDiscoverTime(GraphInverter.invert(heapGraph), ik); it.hasNext();) { Object p = it.next(); if (p instanceof LocalPointerKey) { LocalPointerKey lpk = (LocalPointerKey) p; @@ -164,7 +164,7 @@ public class FILiveObjectAnalysis implements ILiveObjectAnalysis { */ private Set computeLiveNodes(InstanceKey ik) { Set localRootNodes = HashSetFactory.make(); - for (Iterator it = DFS.iterateDiscoverTime(GraphInverter.invert(heapGraph), ik); it.hasNext();) { + for (Iterator it = DFS.iterateDiscoverTime(GraphInverter.invert(heapGraph), ik); it.hasNext();) { Object node = it.next(); if (node instanceof StaticFieldKey) { liveEverywhere.add(ik); diff --git a/com.ibm.wala.core/src/com/ibm/wala/escape/LocalLiveRangeAnalysis.java b/com.ibm.wala.core/src/com/ibm/wala/escape/LocalLiveRangeAnalysis.java index e66993697..b773846dd 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/escape/LocalLiveRangeAnalysis.java +++ b/com.ibm.wala.core/src/com/ibm/wala/escape/LocalLiveRangeAnalysis.java @@ -99,10 +99,10 @@ public class LocalLiveRangeAnalysis { private static Collection findBlocks(IR ir, Iterator statements) { Collection s = Iterator2Collection.toSet(statements); Collection result = HashSetFactory.make(); - outer: for (Iterator it = ir.getControlFlowGraph().iterator(); it.hasNext();) { + outer: for (Iterator it = ir.getControlFlowGraph().iterator(); it.hasNext();) { SSACFG.BasicBlock b = (SSACFG.BasicBlock) it.next(); - for (Iterator it2 = b.iterator(); it2.hasNext();) { - SSAInstruction x = (SSAInstruction) it2.next(); + for (Iterator it2 = b.iterator(); it2.hasNext();) { + SSAInstruction x = it2.next(); if (s.contains(x)) { result.add(b); continue outer; @@ -124,10 +124,10 @@ public class LocalLiveRangeAnalysis { if (s == null) { Assertions.UNREACHABLE(); } - for (Iterator it = ir.getControlFlowGraph().iterator(); it.hasNext();) { + for (Iterator it = ir.getControlFlowGraph().iterator(); it.hasNext();) { SSACFG.BasicBlock b = (SSACFG.BasicBlock) it.next(); - for (Iterator it2 = b.iterator(); it2.hasNext();) { - SSAInstruction x = (SSAInstruction) it2.next(); + for (Iterator it2 = b.iterator(); it2.hasNext();) { + SSAInstruction x = it2.next(); if (s.equals(x)) { return b; } @@ -143,7 +143,7 @@ public class LocalLiveRangeAnalysis { * @return the basic block which contains the ith instruction */ private static ISSABasicBlock findBlock(IR ir, int i) { - for (Iterator it = ir.getControlFlowGraph().iterator(); it.hasNext();) { + for (Iterator it = ir.getControlFlowGraph().iterator(); it.hasNext();) { SSACFG.BasicBlock b = (SSACFG.BasicBlock) it.next(); if (i >= b.getFirstInstructionIndex() && i <= b.getLastInstructionIndex()) { return b; 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 16487f188..872934140 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 @@ -69,7 +69,7 @@ public class TrivialMethodEscape implements IMethodEscapeAnalysis, INodeEscapeAn } // allocN := set of call graph nodes representing method allocMethod - Set allocN = cg.getNodes(allocMethod); + Set allocN = cg.getNodes(allocMethod); if (allocN.size() == 0) { throw new WalaException("could not find call graph node for allocation method " + allocMethod); } @@ -89,11 +89,11 @@ public class TrivialMethodEscape implements IMethodEscapeAnalysis, INodeEscapeAn * { nodes } * @throws WalaException */ - private boolean mayEscape(Set allocN, int allocPC, Set nodes) throws WalaException { + private boolean mayEscape(Set allocN, int allocPC, Set nodes) throws WalaException { Set instances = HashSetFactory.make(); // instances := set of instance key allocated at <allocMethod, allocPC> - for (Iterator it = allocN.iterator(); it.hasNext();) { - CGNode n = (CGNode) it.next(); + for (Iterator it = allocN.iterator(); it.hasNext();) { + CGNode n = it.next(); NewSiteReference site = findAlloc(n, allocPC); InstanceKey ik = hg.getHeapModel().getInstanceKeyForAllocation(n, site); if (ik == null) { @@ -104,7 +104,7 @@ public class TrivialMethodEscape implements IMethodEscapeAnalysis, INodeEscapeAn for (Iterator it = instances.iterator(); it.hasNext();) { InstanceKey ik = it.next(); - for (Iterator it2 = hg.getPredNodes(ik); it2.hasNext();) { + for (Iterator it2 = hg.getPredNodes(ik); it2.hasNext();) { PointerKey p = (PointerKey) it2.next(); if (!(p instanceof AbstractLocalPointerKey)) { // a pointer from the heap. give up. @@ -136,8 +136,8 @@ public class TrivialMethodEscape implements IMethodEscapeAnalysis, INodeEscapeAn if (n == null) { throw new IllegalArgumentException("null n"); } - for (Iterator it = n.iterateNewSites(); it.hasNext();) { - NewSiteReference site = (NewSiteReference) it.next(); + for (Iterator it = n.iterateNewSites(); it.hasNext();) { + NewSiteReference site = it.next(); if (site.getProgramCounter() == allocPC) { return site; } diff --git a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/CallGraphStats.java b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/CallGraphStats.java index 8e37f04e0..c23486157 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/CallGraphStats.java +++ b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/CallGraphStats.java @@ -169,8 +169,8 @@ public class CallGraphStats { throw new IllegalArgumentException("cg is null"); } HashSet result = HashSetFactory.make(); - for (Iterator it = cg.iterator(); it.hasNext();) { - CGNode N = (CGNode) it.next(); + for (Iterator it = cg.iterator(); it.hasNext();) { + CGNode N = it.next(); result.add(N.getMethod().getReference()); } return result; diff --git a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/impl/AllApplicationEntrypoints.java b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/impl/AllApplicationEntrypoints.java index d85f1a8cc..2a1be1d91 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/impl/AllApplicationEntrypoints.java +++ b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/impl/AllApplicationEntrypoints.java @@ -40,8 +40,8 @@ public class AllApplicationEntrypoints extends HashSet { for (IClass klass : cha) { if (!klass.isInterface()) { if (isApplicationClass(scope, klass)) { - for (Iterator methodIt = klass.getDeclaredMethods().iterator(); methodIt.hasNext();) { - IMethod method = (IMethod) methodIt.next(); + for (Iterator methodIt = klass.getDeclaredMethods().iterator(); methodIt.hasNext();) { + IMethod method = methodIt.next(); if (!method.isAbstract()) { add(new ArgumentTypeEntrypoint(method, cha)); } diff --git a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/impl/ArgumentTypeEntrypoint.java b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/impl/ArgumentTypeEntrypoint.java index fee883bb5..882f4040d 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/impl/ArgumentTypeEntrypoint.java +++ b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/impl/ArgumentTypeEntrypoint.java @@ -81,9 +81,9 @@ public class ArgumentTypeEntrypoint extends Entrypoint { } private TypeReference chooseAConcreteSubClass(IClass klass) { - Collection subclasses = cha.computeSubClasses(klass.getReference()); - for (Iterator it = subclasses.iterator(); it.hasNext();) { - IClass c = (IClass) it.next(); + Collection subclasses = cha.computeSubClasses(klass.getReference()); + for (Iterator it = subclasses.iterator(); it.hasNext();) { + IClass c = it.next(); if (!c.isAbstract()) { return c.getReference(); } 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 684a9b50d..beb0c46ca 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 @@ -231,8 +231,8 @@ public abstract class BasicCallGraph extends AbstractNumberedGraph im @Override public String toString() { StringBuffer result = new StringBuffer(""); - for (Iterator i = DFS.iterateDiscoverTime(this, new NonNullSingletonIterator(getFakeRootNode())); i.hasNext();) { - CGNode n = (CGNode) i.next(); + for (Iterator i = DFS.iterateDiscoverTime(this, new NonNullSingletonIterator(getFakeRootNode())); i.hasNext();) { + CGNode n = i.next(); result.append(nodeToString(this, n) + "\n"); } return result.toString(); @@ -241,14 +241,14 @@ public abstract class BasicCallGraph extends AbstractNumberedGraph im public static String nodeToString(CallGraph CG, CGNode n) { StringBuffer result = new StringBuffer(n.toString() + "\n"); if (n.getMethod() != null) { - for (Iterator sites = n.iterateCallSites(); sites.hasNext();) { - CallSiteReference site = (CallSiteReference) sites.next(); - Iterator targets = CG.getPossibleTargets(n, site).iterator(); + for (Iterator sites = n.iterateCallSites(); sites.hasNext();) { + CallSiteReference site = sites.next(); + Iterator targets = CG.getPossibleTargets(n, site).iterator(); if (targets.hasNext()) { result.append(" - " + site + "\n"); } for (; targets.hasNext();) { - CGNode target = (CGNode) targets.next(); + CGNode target = targets.next(); result.append(" -> " + target + "\n"); } } diff --git a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/impl/PartialCallGraph.java b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/impl/PartialCallGraph.java index da36ebd4c..7606c48c6 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/impl/PartialCallGraph.java +++ b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/impl/PartialCallGraph.java @@ -105,8 +105,8 @@ public class PartialCallGraph extends DelegatingGraph implements CallGra @Override public Set getNodes(MethodReference m) { Set result = HashSetFactory.make(); - for (Iterator xs = cg.getNodes(m).iterator(); xs.hasNext();) { - CGNode x = (CGNode) xs.next(); + for (Iterator xs = cg.getNodes(m).iterator(); xs.hasNext();) { + CGNode x = xs.next(); if (containsNode(x)) { result.add(x); } @@ -149,8 +149,8 @@ public class PartialCallGraph extends DelegatingGraph implements CallGra public IntSet getSuccNodeNumbers(CGNode node) { assert containsNode(node); MutableIntSet x = IntSetUtil.make(); - for (Iterator ns = getSuccNodes(node); ns.hasNext();) { - CGNode succ = (CGNode) ns.next(); + for (Iterator ns = getSuccNodes(node); ns.hasNext();) { + CGNode succ = ns.next(); if (containsNode(succ)) { x.add(getNumber(succ)); } @@ -163,8 +163,8 @@ public class PartialCallGraph extends DelegatingGraph implements CallGra public IntSet getPredNodeNumbers(CGNode node) { assert containsNode(node); MutableIntSet x = IntSetUtil.make(); - for (Iterator ns = getPredNodes(node); ns.hasNext();) { - CGNode pred = (CGNode) ns.next(); + for (Iterator ns = getPredNodes(node); ns.hasNext();) { + CGNode pred = ns.next(); if (containsNode(pred)) { x.add(getNumber(pred)); } @@ -189,8 +189,8 @@ public class PartialCallGraph extends DelegatingGraph implements CallGra return null; } Set result = HashSetFactory.make(); - for (Iterator ns = cg.getPossibleTargets(node, site).iterator(); ns.hasNext();) { - CGNode target = (CGNode) ns.next(); + for (Iterator ns = cg.getPossibleTargets(node, site).iterator(); ns.hasNext();) { + CGNode target = ns.next(); if (containsNode(target)) { result.add(target); } 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 a1359d5dd..c2faba2e8 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 @@ -282,7 +282,7 @@ public class Util { System.err.println("subgraph: "); System.err.println(subG.toString()); System.err.println("nodeDiff: "); - for (Iterator it = nodeDiff.iterator(); it.hasNext();) { + for (Iterator it = nodeDiff.iterator(); it.hasNext();) { System.err.println(it.next().toString()); } Assertions.productionAssertion(nodeDiff.isEmpty(), "bad superset, see tracefile\n"); @@ -305,7 +305,7 @@ public class Util { System.err.println("subgraph: "); System.err.println(subG.toString()); System.err.println("predDiff: "); - for (Iterator it = predDiff.iterator(); it.hasNext();) { + for (Iterator it = predDiff.iterator(); it.hasNext();) { System.err.println(it.next().toString()); } Assertions.UNREACHABLE("bad superset for predecessors of " + m + ":" + predDiff); diff --git a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/ConcreteTypeKey.java b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/ConcreteTypeKey.java index 7e31075f8..705e49fb9 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/ConcreteTypeKey.java +++ b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/ConcreteTypeKey.java @@ -86,15 +86,15 @@ public final class ConcreteTypeKey implements InstanceKey { if (pei == null) { throw new IllegalArgumentException("pei is null"); } - Collection types = pei.getExceptionTypes(); + Collection types = pei.getExceptionTypes(); // TODO: institute a cache? if (types == null) { return null; } InstanceKey[] result = new InstanceKey[types.size()]; int i = 0; - for (Iterator it = types.iterator(); it.hasNext();) { - TypeReference type = (TypeReference) it.next(); + for (Iterator it = types.iterator(); it.hasNext();) { + TypeReference type = it.next(); assert type != null; IClass klass = cha.lookupClass(type); result[i++] = new ConcreteTypeKey(klass); diff --git a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/PointerAnalysisImpl.java b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/PointerAnalysisImpl.java index e76367e57..a991a4601 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/PointerAnalysisImpl.java +++ b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/PointerAnalysisImpl.java @@ -89,11 +89,11 @@ public class PointerAnalysisImpl extends AbstractPointerAnalysis { @Override public String toString() { StringBuffer result = new StringBuffer("PointerAnalysis:\n"); - for (Iterator it = pointsToMap.iterateKeys(); it.hasNext();) { - PointerKey p = (PointerKey) it.next(); - OrdinalSet O = getPointsToSet(p); + for (Iterator it = pointsToMap.iterateKeys(); it.hasNext();) { + PointerKey p = it.next(); + OrdinalSet O = getPointsToSet(p); result.append(" ").append(p).append(" ->\n"); - for (Iterator it2 = O.iterator(); it2.hasNext();) { + for (Iterator it2 = O.iterator(); it2.hasNext();) { result.append(" ").append(it2.next()).append("\n"); } } @@ -283,9 +283,9 @@ public class PointerAnalysisImpl extends AbstractPointerAnalysis { private OrdinalSet computeImplicitPointsToSetAtALoad(CGNode node, SSAArrayLoadInstruction instruction) { PointerKey arrayRef = pointerKeys.getPointerKeyForLocal(node, instruction.getArrayRef()); MutableSparseIntSet S = MutableSparseIntSet.makeEmpty(); - OrdinalSet refs = getPointsToSet(arrayRef); - for (Iterator it = refs.iterator(); it.hasNext();) { - InstanceKey ik = (InstanceKey) it.next(); + OrdinalSet refs = getPointsToSet(arrayRef); + for (Iterator it = refs.iterator(); it.hasNext();) { + InstanceKey ik = it.next(); PointerKey key = pointerKeys.getPointerKeyForArrayContents(ik); OrdinalSet pointees = getPointsToSet(key); IntSet set = pointees.getBackingSet(); @@ -311,9 +311,9 @@ public class PointerAnalysisImpl extends AbstractPointerAnalysis { } else { PointerKey ref = pointerKeys.getPointerKeyForLocal(node, refVn); MutableSparseIntSet S = MutableSparseIntSet.makeEmpty(); - OrdinalSet refs = getPointsToSet(ref); - for (Iterator it = refs.iterator(); it.hasNext();) { - InstanceKey ik = (InstanceKey) it.next(); + OrdinalSet refs = getPointsToSet(ref); + for (Iterator it = refs.iterator(); it.hasNext();) { + InstanceKey ik = it.next(); PointerKey fkey = pointerKeys.getPointerKeyForInstanceField(ik, f); if (fkey != null) { OrdinalSet pointees = getPointsToSet(fkey); @@ -346,9 +346,9 @@ public class PointerAnalysisImpl extends AbstractPointerAnalysis { e = pointerKeys.getPointerKeyForLocal(node, s.getException()); } if (e != null) { - OrdinalSet ep = getPointsToSet(e); - for (Iterator it2 = ep.iterator(); it2.hasNext();) { - InstanceKey ik = (InstanceKey) it2.next(); + OrdinalSet ep = getPointsToSet(e); + for (Iterator it2 = ep.iterator(); it2.hasNext();) { + InstanceKey ik = it2.next(); if (PropagationCallGraphBuilder.catches(caughtTypes, ik.getConcreteType(), getCallGraph().getClassHierarchy())) { S.add(instanceKeys.getMappedIndex(ik)); } @@ -358,10 +358,10 @@ public class PointerAnalysisImpl extends AbstractPointerAnalysis { // Account for those exceptions for which we do not actually have a // points-to set for // the pei, but just instance keys - Collection types = pei.getExceptionTypes(); + Collection types = pei.getExceptionTypes(); if (types != null) { - for (Iterator it2 = types.iterator(); it2.hasNext();) { - TypeReference type = (TypeReference) it2.next(); + for (Iterator it2 = types.iterator(); it2.hasNext();) { + TypeReference type = it2.next(); if (type != null) { InstanceKey ik = SSAPropagationCallGraphBuilder.getInstanceKeyForPEI(node, peiLoc, type, iKeyFactory); ConcreteTypeKey ck = (ConcreteTypeKey) ik; @@ -388,15 +388,15 @@ public class PointerAnalysisImpl extends AbstractPointerAnalysis { return rhsSet; } else { if (klass.isInterface()) { - for (Iterator it = rhsSet.iterator(); it.hasNext();) { - InstanceKey ik = (InstanceKey) it.next(); + for (Iterator it = rhsSet.iterator(); it.hasNext();) { + InstanceKey ik = it.next(); if (getCallGraph().getClassHierarchy().implementsInterface(ik.getConcreteType(), klass)) { S.add(getInstanceKeyMapping().getMappedIndex(ik)); } } } else { - for (Iterator it = rhsSet.iterator(); it.hasNext();) { - InstanceKey ik = (InstanceKey) it.next(); + for (Iterator it = rhsSet.iterator(); it.hasNext();) { + InstanceKey ik = it.next(); if (getCallGraph().getClassHierarchy().isSubclassOf(ik.getConcreteType(), klass)) { S.add(getInstanceKeyMapping().getMappedIndex(ik)); } @@ -435,8 +435,8 @@ public class PointerAnalysisImpl extends AbstractPointerAnalysis { */ private OrdinalSet computeImplicitExceptionsForCall(CGNode node, SSAInvokeInstruction call) { MutableSparseIntSet S = MutableSparseIntSet.makeEmpty(); - for (Iterator it = getCallGraph().getPossibleTargets(node, call.getCallSite()).iterator(); it.hasNext();) { - CGNode target = (CGNode) it.next(); + for (Iterator it = getCallGraph().getPossibleTargets(node, call.getCallSite()).iterator(); it.hasNext();) { + CGNode target = it.next(); PointerKey retVal = pointerKeys.getPointerKeyForExceptionalReturnValue(target); IntSet set = getPointsToSet(retVal).getBackingSet(); if (set != null) { diff --git a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/PointsToMap.java b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/PointsToMap.java index e3079b05c..d5a70d9af 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/PointsToMap.java +++ b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/PointsToMap.java @@ -188,8 +188,8 @@ public class PointsToMap { * Wipe out the cached transitive closure information */ public void revertToPreTransitive() { - for (Iterator it = iterateKeys(); it.hasNext();) { - PointerKey key = (PointerKey) it.next(); + for (Iterator it = iterateKeys(); it.hasNext();) { + PointerKey key = it.next(); if (!isTransitiveRoot(key) && !isImplicit(key) && !isUnified(key)) { PointsToSetVariable v = getPointsToSet(key); v.removeAll(); 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 20d1b6945..a694ff6a1 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 @@ -244,8 +244,8 @@ public abstract class PropagationCallGraphBuilder implements CallGraphBuilder it = options.getEntrypoints().iterator(); it.hasNext();) { + Entrypoint E = it.next(); if (DEBUG_ENTRYPOINTS) { System.err.println("Entrypoint: " + E); } diff --git a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/PropagationGraph.java b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/PropagationGraph.java index a0d85a4e8..13d35f6ea 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/PropagationGraph.java +++ b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/PropagationGraph.java @@ -16,6 +16,7 @@ import java.util.HashSet; import java.util.Iterator; import java.util.List; import java.util.Map; +import java.util.Map.Entry; import java.util.function.Predicate; import com.ibm.wala.fixedpoint.impl.GeneralStatement; @@ -372,7 +373,7 @@ public class PropagationGraph implements IFixedPointSystem private final Iterator> outerKeyDelegate = implicitUnaryMap.keySet().iterator(); - private Iterator innerDelegate; + private Iterator innerDelegate; private UnaryOperator currentOperator; @@ -388,7 +389,7 @@ public class PropagationGraph implements IFixedPointSystem while (outerKeyDelegate.hasNext()) { currentOperator = outerKeyDelegate.next(); IBinaryNaturalRelation R = implicitUnaryMap.get(currentOperator); - Iterator it = R.iterator(); + Iterator it = R.iterator(); if (it.hasNext()) { innerDelegate = it; return; @@ -403,7 +404,7 @@ public class PropagationGraph implements IFixedPointSystem @Override public AbstractStatement next() { - IntPair p = (IntPair) innerDelegate.next(); + IntPair p = innerDelegate.next(); int lhs = p.getX(); int rhs = p.getY(); UnaryStatement result = currentOperator.makeEquation((PointsToSetVariable) delegateGraph.getNode(lhs), @@ -514,7 +515,7 @@ public class PropagationGraph implements IFixedPointSystem */ @Override public Iterator getPredNodes(PointsToSetVariable v) { - final Iterator eqs = getStatementsThatDef(v); + final Iterator eqs = getStatementsThatDef(v); return new Iterator() { Iterator inner; @@ -532,7 +533,7 @@ public class PropagationGraph implements IFixedPointSystem } return result; } else { - AbstractStatement eq = (AbstractStatement) eqs.next(); + AbstractStatement eq = eqs.next(); if (useImplicitRepresentation(eq)) { return (PointsToSetVariable) ((UnaryStatement) eq).getRightHandSide(); } else { @@ -557,8 +558,8 @@ public class PropagationGraph implements IFixedPointSystem public int getPredNodeCount(INodeWithNumber N) { PointsToSetVariable v = (PointsToSetVariable) N; int result = 0; - for (Iterator eqs = getStatementsThatDef(v); eqs.hasNext();) { - AbstractStatement eq = (AbstractStatement) eqs.next(); + for (Iterator eqs = getStatementsThatDef(v); eqs.hasNext();) { + AbstractStatement eq = eqs.next(); if (useImplicitRepresentation(eq)) { result++; } else { @@ -573,7 +574,7 @@ public class PropagationGraph implements IFixedPointSystem */ @Override public Iterator getSuccNodes(PointsToSetVariable v) { - final Iterator eqs = getStatementsThatUse(v); + final Iterator eqs = getStatementsThatUse(v); return new Iterator() { PointsToSetVariable nextResult; { @@ -595,7 +596,7 @@ public class PropagationGraph implements IFixedPointSystem private void advance() { nextResult = null; while (eqs.hasNext() && nextResult == null) { - AbstractStatement eq = (AbstractStatement) eqs.next(); + AbstractStatement eq = eqs.next(); nextResult = (PointsToSetVariable) eq.getLHS(); } } @@ -614,8 +615,8 @@ public class PropagationGraph implements IFixedPointSystem @Override public int getSuccNodeCount(PointsToSetVariable v) { int result = 0; - for (Iterator eqs = getStatementsThatUse(v); eqs.hasNext();) { - AbstractStatement eq = (AbstractStatement) eqs.next(); + for (Iterator eqs = getStatementsThatUse(v); eqs.hasNext();) { + AbstractStatement eq = eqs.next(); IVariable lhs = eq.getLHS(); if (lhs != null) { result++; @@ -732,8 +733,8 @@ public class PropagationGraph implements IFixedPointSystem return 0; } int result = delegateGraph.getSuccNodeCount(v); - for (Iterator it = invImplicitUnaryMap.keySet().iterator(); it.hasNext();) { - UnaryOperator op = (UnaryOperator) it.next(); + for (Iterator> it = invImplicitUnaryMap.keySet().iterator(); it.hasNext();) { + UnaryOperator op = it.next(); IBinaryNaturalRelation R = invImplicitUnaryMap.get(op); IntSet s = R.getRelated(number); if (s != null) { @@ -753,8 +754,8 @@ public class PropagationGraph implements IFixedPointSystem return 0; } int result = delegateGraph.getPredNodeCount(v); - for (Iterator it = implicitUnaryMap.keySet().iterator(); it.hasNext();) { - UnaryOperator op = (UnaryOperator) it.next(); + for (Iterator> it = implicitUnaryMap.keySet().iterator(); it.hasNext();) { + UnaryOperator op = it.next(); IBinaryNaturalRelation R = implicitUnaryMap.get(op); IntSet s = R.getRelated(number); if (s != null) { @@ -787,10 +788,10 @@ public class PropagationGraph implements IFixedPointSystem System.err.println("implicit map:"); int count = 0; int totalBytes = 0; - for (Iterator it = implicitUnaryMap.entrySet().iterator(); it.hasNext();) { + for (Iterator, IBinaryNaturalRelation>> it = implicitUnaryMap.entrySet().iterator(); it.hasNext();) { count++; - Map.Entry e = (Map.Entry) it.next(); - IBinaryNaturalRelation R = (IBinaryNaturalRelation) e.getValue(); + Map.Entry e = it.next(); + IBinaryNaturalRelation R = e.getValue(); System.err.println(("entry " + count)); R.performVerboseAction(); HeapTracer.Result result = HeapTracer.traceHeap(Collections.singleton(R), false); @@ -954,7 +955,7 @@ public class PropagationGraph implements IFixedPointSystem */ @Override public Iterator getPredNodes(PointsToSetVariable v) { - final Iterator eqs = getStatementsThatDef(v); + final Iterator eqs = getStatementsThatDef(v); return new Iterator() { PointsToSetVariable nextResult; { @@ -976,7 +977,7 @@ public class PropagationGraph implements IFixedPointSystem private void advance() { nextResult = null; while (eqs.hasNext() && nextResult == null) { - AbstractStatement eq = (AbstractStatement) eqs.next(); + AbstractStatement eq = eqs.next(); if (isInteresting(eq)) { nextResult = (PointsToSetVariable) ((UnaryStatement) eq).getRightHandSide(); } @@ -996,8 +997,8 @@ public class PropagationGraph implements IFixedPointSystem @Override public int getPredNodeCount(PointsToSetVariable v) { int result = 0; - for (Iterator eqs = getStatementsThatDef(v); eqs.hasNext();) { - AbstractStatement eq = (AbstractStatement) eqs.next(); + for (Iterator eqs = getStatementsThatDef(v); eqs.hasNext();) { + AbstractStatement eq = eqs.next(); if (isInteresting(eq)) { result++; } @@ -1010,7 +1011,7 @@ public class PropagationGraph implements IFixedPointSystem */ @Override public Iterator getSuccNodes(PointsToSetVariable v) { - final Iterator eqs = getStatementsThatUse(v); + final Iterator eqs = getStatementsThatUse(v); return new Iterator() { PointsToSetVariable nextResult; { @@ -1032,7 +1033,7 @@ public class PropagationGraph implements IFixedPointSystem private void advance() { nextResult = null; while (eqs.hasNext() && nextResult == null) { - AbstractStatement eq = (AbstractStatement) eqs.next(); + AbstractStatement eq = eqs.next(); if (isInteresting(eq)) { nextResult = (PointsToSetVariable) ((UnaryStatement) eq).getLHS(); } @@ -1053,8 +1054,8 @@ public class PropagationGraph implements IFixedPointSystem @Override public int getSuccNodeCount(PointsToSetVariable v) { int result = 0; - for (Iterator eqs = getStatementsThatUse(v); eqs.hasNext();) { - AbstractStatement eq = (AbstractStatement) eqs.next(); + for (Iterator eqs = getStatementsThatUse(v); eqs.hasNext();) { + AbstractStatement eq = eqs.next(); if (isInteresting(eq)) { result++; } @@ -1109,7 +1110,7 @@ public class PropagationGraph implements IFixedPointSystem private int countImplicitEdges() { int result = 0; - for (Iterator it = new GlobalImplicitIterator(); it.hasNext();) { + for (Iterator it = new GlobalImplicitIterator(); it.hasNext();) { it.next(); result++; } diff --git a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/PropagationSystem.java b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/PropagationSystem.java index 0841ed720..0b304d95f 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/PropagationSystem.java +++ b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/PropagationSystem.java @@ -147,8 +147,8 @@ public class PropagationSystem extends DefaultFixedPointSolver set = fixedSetMap.get(p); if (set != null) { - for (Iterator it = set.iterator(); it.hasNext();) { - UnarySideEffect s = (UnarySideEffect) it.next(); + for (Iterator it = set.iterator(); it.hasNext();) { + UnarySideEffect s = it.next(); s.replaceFixedSet(rep); } Set s2 = MapUtil.findOrCreateSet(fixedSetMap, rep); @@ -484,10 +484,10 @@ public class PropagationSystem extends DefaultFixedPointSolver ifaces = null; ifaces = elementClass.getAllImplementedInterfaces(); - for (Iterator it = ifaces.iterator(); it.hasNext();) { - IClass I = (IClass) it.next(); + for (Iterator it = ifaces.iterator(); it.hasNext();) { + IClass I = it.next(); TypeReference iArrayRef = makeArray(I.getReference(), dim); IClass iArrayClass = null; iArrayClass = I.getClassLoader().lookupClass(iArrayRef.getName()); @@ -530,9 +530,9 @@ public class PropagationSystem extends DefaultFixedPointSolver ifaces = klass.getAllImplementedInterfaces(); + for (Iterator it = ifaces.iterator(); it.hasNext();) { + IClass I = it.next(); MutableIntSet set = findOrCreateSparseSetForClass(I); set.add(index); if (DEBUG) { @@ -724,7 +724,7 @@ public class PropagationSystem extends DefaultFixedPointSolver getTransitiveRoots() { return pointsToMap.getTransitiveRoots(); } @@ -819,8 +819,8 @@ public class PropagationSystem extends DefaultFixedPointSolver d = Iterator2Collection.toSet(getStatementsThatDef(p)).iterator(); d.hasNext();) { + AbstractStatement as = d.next(); if (as instanceof AssignEquation) { AssignEquation assign = (AssignEquation) as; @@ -836,8 +836,8 @@ public class PropagationSystem extends DefaultFixedPointSolver u = Iterator2Collection.toSet(getStatementsThatUse(p)).iterator(); u.hasNext();) { + AbstractStatement as = u.next(); if (as instanceof AssignEquation) { AssignEquation assign = (AssignEquation) as; PointsToSetVariable lhs = assign.getLHS(); 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 9fefb1433..5b6817617 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 @@ -93,8 +93,8 @@ public class ReflectionHandler { private Collection computeFactoryReturnStatements() { // todo: clean up logic with inheritance, delegation. HashSet result = HashSetFactory.make(); - for (Iterator it = builder.getCallGraph().iterator(); it.hasNext();) { - CGNode n = (CGNode) it.next(); + for (Iterator it = builder.getCallGraph().iterator(); it.hasNext();) { + CGNode n = it.next(); if (n.getMethod() instanceof SyntheticMethod) { SyntheticMethod m = (SyntheticMethod) n.getMethod(); if (m.isFactoryMethod()) { diff --git a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/SSAPropagationCallGraphBuilder.java b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/SSAPropagationCallGraphBuilder.java index aece1d709..21038bead 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/SSAPropagationCallGraphBuilder.java +++ b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/SSAPropagationCallGraphBuilder.java @@ -301,7 +301,7 @@ public abstract class SSAPropagationCallGraphBuilder extends PropagationCallGrap private void addPhiConstraints(CGNode node, ControlFlowGraph controlFlowGraph, BasicBlock b, ConstraintVisitor v) { // visit each phi instruction in each successor block - for (Iterator sbs = controlFlowGraph.getSuccNodes(b); sbs.hasNext();) { + for (Iterator sbs = controlFlowGraph.getSuccNodes(b); sbs.hasNext();) { BasicBlock sb = (BasicBlock) sbs.next(); if (!sb.hasPhi()) { continue; @@ -487,7 +487,7 @@ public abstract class SSAPropagationCallGraphBuilder extends PropagationCallGrap } ControlFlowGraph g = ir.getControlFlowGraph(); List result = new ArrayList(g.getPredNodeCount(bb)); - for (Iterator it = g.getPredNodes(bb); it.hasNext();) { + for (Iterator it = g.getPredNodes(bb); it.hasNext();) { BasicBlock pred = (BasicBlock) it.next(); if (DEBUG) { System.err.println("pred: " + pred); @@ -2059,8 +2059,8 @@ public abstract class SSAPropagationCallGraphBuilder extends PropagationCallGrap // todo: enhance this by solving a dead-code elimination // problem. InterestingVisitor v = makeInterestingVisitor(node, vn); - for (Iterator it = du.getUses(v.vn); it.hasNext();) { - SSAInstruction s = (SSAInstruction) it.next(); + for (Iterator it = du.getUses(v.vn); it.hasNext();) { + SSAInstruction s = it.next(); s.visit(v); if (v.bingo) { return false; diff --git a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/cfa/ZeroXInstanceKeys.java b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/cfa/ZeroXInstanceKeys.java index a23270bde..989497fa8 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/cfa/ZeroXInstanceKeys.java +++ b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/cfa/ZeroXInstanceKeys.java @@ -232,8 +232,8 @@ public class ZeroXInstanceKeys implements InstanceKeyFactory { */ private Map countAllocsByType(CGNode node) { Map count = HashMapFactory.make(); - for (Iterator it = contextInterpreter.iterateNewSites(node); it.hasNext();) { - NewSiteReference n = (NewSiteReference) it.next(); + for (Iterator it = contextInterpreter.iterateNewSites(node); it.hasNext();) { + NewSiteReference n = it.next(); IClass alloc = cha.lookupClass(n.getDeclaredType()); if (alloc != null) { Integer old = count.get(alloc); 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 20956696d..680d14588 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 @@ -136,8 +136,8 @@ public abstract class AbstractRTABuilder extends PropagationCallGraphBuilder { * Add a constraint for each allocate */ private void addNewConstraints(CGNode node) { - for (Iterator it = getRTAContextInterpreter().iterateNewSites(node); it.hasNext();) { - NewSiteReference n = (NewSiteReference) it.next(); + for (Iterator it = getRTAContextInterpreter().iterateNewSites(node); it.hasNext();) { + NewSiteReference n = it.next(); visitNew(node, n); } } @@ -146,8 +146,8 @@ public abstract class AbstractRTABuilder extends PropagationCallGraphBuilder { * Add a constraint for each invoke */ private void addCallConstraints(CGNode node) { - for (Iterator it = getRTAContextInterpreter().iterateCallSites(node); it.hasNext();) { - CallSiteReference c = (CallSiteReference) it.next(); + for (Iterator it = getRTAContextInterpreter().iterateCallSites(node); it.hasNext();) { + CallSiteReference c = it.next(); visitInvoke(node, c); } } @@ -156,12 +156,12 @@ public abstract class AbstractRTABuilder extends PropagationCallGraphBuilder { * Handle accesses to static fields */ private void addFieldConstraints(CGNode node) { - for (Iterator it = getRTAContextInterpreter().iterateFieldsRead(node); it.hasNext();) { - FieldReference f = (FieldReference) it.next(); + for (Iterator it = getRTAContextInterpreter().iterateFieldsRead(node); it.hasNext();) { + FieldReference f = it.next(); processFieldAccess(f); } - for (Iterator it = getRTAContextInterpreter().iterateFieldsWritten(node); it.hasNext();) { - FieldReference f = (FieldReference) it.next(); + for (Iterator it = getRTAContextInterpreter().iterateFieldsWritten(node); it.hasNext();) { + FieldReference f = it.next(); processFieldAccess(f); } } 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 9b465ec6f..163d6ab67 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 @@ -55,8 +55,8 @@ public class BasicRTABuilder extends AbstractRTABuilder { // set up the selector map to record each method that class implements registerImplementedMethods(klass, iKey); - for (Iterator ifaces = klass.getAllImplementedInterfaces().iterator(); ifaces.hasNext();) { - IClass c = (IClass) ifaces.next(); + for (Iterator ifaces = klass.getAllImplementedInterfaces().iterator(); ifaces.hasNext();) { + IClass c = ifaces.next(); registerImplementedMethods(c, iKey); } klass = klass.getSuperclass(); @@ -73,8 +73,8 @@ public class BasicRTABuilder extends AbstractRTABuilder { if (DEBUG) { System.err.println(("registerImplementedMethods: " + declarer + " " + iKey)); } - for (Iterator it = declarer.getDeclaredMethods().iterator(); it.hasNext();) { - IMethod M = (IMethod) it.next(); + for (Iterator it = declarer.getDeclaredMethods().iterator(); it.hasNext();) { + IMethod M = it.next(); Selector selector = M.getReference().getSelector(); PointerKey sKey = getKeyForSelector(selector); if (DEBUG) { diff --git a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/rta/DelegatingExplicitCallGraph.java b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/rta/DelegatingExplicitCallGraph.java index 520c27554..eb1b1be26 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/rta/DelegatingExplicitCallGraph.java +++ b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/rta/DelegatingExplicitCallGraph.java @@ -73,7 +73,7 @@ public class DelegatingExplicitCallGraph extends ExplicitCallGraph { @Override public MutableSharedBitVectorIntSet getAllTargetNumbers() { MutableSharedBitVectorIntSet result = new MutableSharedBitVectorIntSet(super.getAllTargetNumbers()); - for (Iterator it = targets.iterator(); it.hasNext();) { + for (Iterator it = targets.iterator(); it.hasNext();) { Object n = it.next(); if (n instanceof CallSite) { ExplicitNode delegate = (ExplicitNode) ((CallSite) n).getNode(); @@ -119,7 +119,7 @@ public class DelegatingExplicitCallGraph extends ExplicitCallGraph { if (super.getAllTargetNumbers().contains(y)) { return true; } else { - for (Iterator it = targets.iterator(); it.hasNext();) { + for (Iterator it = targets.iterator(); it.hasNext();) { Object n = it.next(); if (n instanceof CallSite) { ExplicitNode delegate = (ExplicitNode) ((CallSite) n).getNode(); diff --git a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/rta/TypeBasedHeapModel.java b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/rta/TypeBasedHeapModel.java index f66a61a33..34d90ce5f 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/rta/TypeBasedHeapModel.java +++ b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/rta/TypeBasedHeapModel.java @@ -93,8 +93,8 @@ public class TypeBasedHeapModel implements HeapModel { IClass klass = it.next(); pKeys.putAll(computePointerKeys(klass)); } - for (Iterator it = cg.iterator(); it.hasNext();) { - CGNode node = (CGNode) it.next(); + for (Iterator it = cg.iterator(); it.hasNext();) { + CGNode node = it.next(); initPKeysForNode(node); } } diff --git a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/rta/TypeBasedPointerAnalysis.java b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/rta/TypeBasedPointerAnalysis.java index a68208ec2..97e12d620 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/rta/TypeBasedPointerAnalysis.java +++ b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/rta/TypeBasedPointerAnalysis.java @@ -139,10 +139,10 @@ public class TypeBasedPointerAnalysis extends AbstractPointerAnalysis { return result; } - private OrdinalSet toOrdinalInstanceKeySet(Collection c) { + private OrdinalSet toOrdinalInstanceKeySet(Collection c) { BimodalMutableIntSet s = new BimodalMutableIntSet(); - for (Iterator it = c.iterator(); it.hasNext();) { - IClass klass = (IClass) it.next(); + for (Iterator it = c.iterator(); it.hasNext();) { + IClass klass = it.next(); int index = getInstanceKeyMapping().add(new ConcreteTypeKey(klass)); s.add(index); } diff --git a/com.ibm.wala.core/src/com/ibm/wala/ipa/cfg/AbstractInterproceduralCFG.java b/com.ibm.wala.core/src/com/ibm/wala/ipa/cfg/AbstractInterproceduralCFG.java index 91223aa70..563cc2c57 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/ipa/cfg/AbstractInterproceduralCFG.java +++ b/com.ibm.wala.core/src/com/ibm/wala/ipa/cfg/AbstractInterproceduralCFG.java @@ -290,8 +290,8 @@ public abstract class AbstractInterproceduralCFG imple System.err.println("addInterproceduralEdgesForEntryAndExitBlocks " + n); } - for (Iterator callers = cg.getPredNodes(n); callers.hasNext();) { - CGNode caller = (CGNode) callers.next(); + for (Iterator callers = cg.getPredNodes(n); callers.hasNext();) { + CGNode caller = callers.next(); if (DEBUG_LEVEL > 1) { System.err.println("got caller " + caller); } @@ -499,8 +499,8 @@ public abstract class AbstractInterproceduralCFG imple System.err.println("got Site: " + site); } boolean irrelevantTargets = false; - for (Iterator ts = cg.getPossibleTargets(n, site).iterator(); ts.hasNext();) { - CGNode tn = (CGNode) ts.next(); + for (Iterator ts = cg.getPossibleTargets(n, site).iterator(); ts.hasNext();) { + CGNode tn = ts.next(); if (!relevant.test(tn)) { if (DEBUG_LEVEL > 1) { System.err.println("Irrelevant target: " + tn); diff --git a/com.ibm.wala.core/src/com/ibm/wala/ipa/cfg/PrunedCFG.java b/com.ibm.wala.core/src/com/ibm/wala/ipa/cfg/PrunedCFG.java index d754fced4..b88987aa4 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/ipa/cfg/PrunedCFG.java +++ b/com.ibm.wala.core/src/com/ibm/wala/ipa/cfg/PrunedCFG.java @@ -150,7 +150,7 @@ public class PrunedCFG> extends AbstractNumberedGrap @Override public boolean hasEdge(T src, T dst) { - for (Iterator EE = getSuccNodes(src); EE.hasNext();) { + for (Iterator EE = getSuccNodes(src); EE.hasNext();) { if (EE.next().equals(dst)) { return true; } @@ -225,7 +225,7 @@ public class PrunedCFG> extends AbstractNumberedGrap return max; } - private Iterator filterNodes(Iterator nodeIterator) { + private Iterator filterNodes(Iterator nodeIterator) { return new FilterIterator(nodeIterator, new Predicate() { @Override public boolean test(Object o) { return subset.contains(o); diff --git a/com.ibm.wala.core/src/com/ibm/wala/ipa/cha/ClassHierarchy.java b/com.ibm.wala.core/src/com/ibm/wala/ipa/cha/ClassHierarchy.java index 328ceacc7..e5df156bf 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/ipa/cha/ClassHierarchy.java +++ b/com.ibm.wala.core/src/com/ibm/wala/ipa/cha/ClassHierarchy.java @@ -307,7 +307,7 @@ public class ClassHierarchy implements IClassHierarchy { System.err.println(("Attempt to add class " + klass)); } Set loadedSuperclasses; - Collection loadedSuperInterfaces; + Collection loadedSuperInterfaces; try { loadedSuperclasses = computeSuperclasses(klass); loadedSuperInterfaces = klass.getAllImplementedInterfaces(); @@ -352,8 +352,8 @@ public class ClassHierarchy implements IClassHierarchy { } if (loadedSuperInterfaces != null) { - for (Iterator it3 = loadedSuperInterfaces.iterator(); it3.hasNext();) { - final IClass iface = (IClass) it3.next(); + for (Iterator it3 = loadedSuperInterfaces.iterator(); it3.hasNext();) { + final IClass iface = it3.next(); try { // make sure we'll be able to load the interface! computeSuperclasses(iface); @@ -454,13 +454,13 @@ public class ClassHierarchy implements IClassHierarchy { } if (declaredClass.isInterface()) { HashSet result = HashSetFactory.make(3); - Set impls = implementors.get(declaredClass); + Set impls = implementors.get(declaredClass); if (impls == null) { // give up and return no receivers return Collections.emptySet(); } - for (Iterator it = impls.iterator(); it.hasNext();) { - IClass klass = (IClass) it.next(); + for (Iterator it = impls.iterator(); it.hasNext();) { + IClass klass = it.next(); if (!klass.isInterface() && !klass.isAbstract()) { result.addAll(computeTargetsNotInterface(ref, klass)); } @@ -1014,8 +1014,8 @@ public class ClassHierarchy implements IClassHierarchy { if (subTypeRefsOfError == null) { computeSubClasses(TypeReference.JavaLangError); subTypeRefsOfError = HashSetFactory.make(subclassesOfError.size()); - for (Iterator it = subclassesOfError.iterator(); it.hasNext();) { - IClass klass = (IClass) it.next(); + for (Iterator it = subclassesOfError.iterator(); it.hasNext();) { + IClass klass = it.next(); subTypeRefsOfError.add(klass.getReference()); } } @@ -1032,8 +1032,8 @@ public class ClassHierarchy implements IClassHierarchy { if (runtimeExceptionTypeRefs == null) { computeSubClasses(TypeReference.JavaLangRuntimeException); runtimeExceptionTypeRefs = HashSetFactory.make(runtimeExceptionClasses.size()); - for (Iterator it = runtimeExceptionClasses.iterator(); it.hasNext();) { - IClass klass = (IClass) it.next(); + for (Iterator it = runtimeExceptionClasses.iterator(); it.hasNext();) { + IClass klass = it.next(); runtimeExceptionTypeRefs.add(klass.getReference()); } } diff --git a/com.ibm.wala.core/src/com/ibm/wala/ipa/summaries/ReflectionSummary.java b/com.ibm.wala.core/src/com/ibm/wala/ipa/summaries/ReflectionSummary.java index c71dcb65e..f62d6d58b 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/ipa/summaries/ReflectionSummary.java +++ b/com.ibm.wala.core/src/com/ibm/wala/ipa/summaries/ReflectionSummary.java @@ -51,14 +51,14 @@ public class ReflectionSummary { if (cha == null) { throw new IllegalArgumentException("null cha"); } - Set S = map.get(new Integer(bcIndex)); + Set S = map.get(new Integer(bcIndex)); if (S == null) { return null; } else { PointType[] p = new PointType[S.size()]; - Iterator it = S.iterator(); + Iterator it = S.iterator(); for (int i = 0; i < p.length; i++) { - TypeReference T = (TypeReference) it.next(); + TypeReference T = it.next(); IClass klass = cha.lookupClass(T); assert klass != null : "null type for " + T; p[i] = new PointType(klass); diff --git a/com.ibm.wala.core/src/com/ibm/wala/ssa/AuxiliaryCache.java b/com.ibm.wala.core/src/com/ibm/wala/ssa/AuxiliaryCache.java index e53a7f645..dd7e25159 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/ssa/AuxiliaryCache.java +++ b/com.ibm.wala.core/src/com/ibm/wala/ssa/AuxiliaryCache.java @@ -14,6 +14,7 @@ import java.util.HashMap; import java.util.HashSet; import java.util.Iterator; import java.util.Map; +import java.util.Map.Entry; import com.ibm.wala.classLoader.IMethod; import com.ibm.wala.ipa.callgraph.Context; @@ -69,8 +70,8 @@ public class AuxiliaryCache implements IAuxiliaryCache { Map.Entry, Map> e = it.next(); Map m = e.getValue(); HashSet toRemove = HashSetFactory.make(); - for (Iterator it2 = m.entrySet().iterator(); it2.hasNext();) { - Map.Entry e2 = (Map.Entry) it2.next(); + for (Iterator> it2 = m.entrySet().iterator(); it2.hasNext();) { + Map.Entry e2 = it2.next(); Object key = e2.getKey(); Object val = e2.getValue(); if (CacheReference.get(val) == null) { diff --git a/com.ibm.wala.core/src/com/ibm/wala/ssa/DefUse.java b/com.ibm.wala.core/src/com/ibm/wala/ssa/DefUse.java index b0ee436f1..660f5d7dc 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/ssa/DefUse.java +++ b/com.ibm.wala.core/src/com/ibm/wala/ssa/DefUse.java @@ -63,9 +63,9 @@ public class DefUse { if (DEBUG) { System.err.println(("DefUse: defs.length " + defs.length)); } - Iterator it = allInstructions.iterator(); + Iterator it = allInstructions.iterator(); for (int i = 0; i < allInstructions.size(); i++) { - SSAInstruction s = (SSAInstruction) it.next(); + SSAInstruction s = it.next(); if (s == null) { continue; } diff --git a/com.ibm.wala.core/src/com/ibm/wala/ssa/IR.java b/com.ibm.wala.core/src/com/ibm/wala/ssa/IR.java index 0dcb4af78..c85a6d16f 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/ssa/IR.java +++ b/com.ibm.wala.core/src/com/ibm/wala/ssa/IR.java @@ -167,8 +167,8 @@ public abstract class IR implements IRView { result.append(")"); } result.append("\n"); - for (Iterator it = bb.iteratePhis(); it.hasNext();) { - SSAPhiInstruction phi = (SSAPhiInstruction) it.next(); + for (Iterator it = bb.iteratePhis(); it.hasNext();) { + SSAPhiInstruction phi = it.next(); if (phi != null) { result.append(" " + phi.toString(symbolTable)).append("\n"); } @@ -234,8 +234,8 @@ public abstract class IR implements IRView { } } } - for (Iterator it = bb.iteratePis(); it.hasNext();) { - SSAPiInstruction pi = (SSAPiInstruction) it.next(); + for (Iterator it = bb.iteratePis(); it.hasNext();) { + SSAPiInstruction pi = it.next(); if (pi != null) { result.append(" " + pi.toString(symbolTable)).append("\n"); } @@ -464,8 +464,8 @@ public abstract class IR implements IRView { * visit each normal (non-phi, non-pi, non-catch) instruction in this IR */ public void visitNormalInstructions(SSAInstruction.Visitor v) { - for (Iterator i = iterateNormalInstructions(); i.hasNext();) { - ((SSAInstruction) i.next()).visit(v); + for (Iterator i = iterateNormalInstructions(); i.hasNext();) { + i.next().visit(v); } } @@ -473,8 +473,8 @@ public abstract class IR implements IRView { * visit each instruction in this IR */ public void visitAllInstructions(SSAInstruction.Visitor v) { - for (Iterator i = iterateAllInstructions(); i.hasNext();) { - ((SSAInstruction) i.next()).visit(v); + for (Iterator i = iterateAllInstructions(); i.hasNext();) { + i.next().visit(v); } } diff --git a/com.ibm.wala.core/src/com/ibm/wala/ssa/SSABuilder.java b/com.ibm.wala.core/src/com/ibm/wala/ssa/SSABuilder.java index 9c3e3bf6d..fb33dcf89 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/ssa/SSABuilder.java +++ b/com.ibm.wala.core/src/com/ibm/wala/ssa/SSABuilder.java @@ -965,8 +965,8 @@ public class SSABuilder extends AbstractIntStackMachine { * Finish populating the map of local variable information */ private void finishLocalMap(SSABuilder builder) { - for (Iterator it = shrikeCFG.iterator(); it.hasNext();) { - ShrikeCFG.BasicBlock bb = (ShrikeCFG.BasicBlock) it.next(); + for (Iterator it = shrikeCFG.iterator(); it.hasNext();) { + ShrikeCFG.BasicBlock bb = it.next(); MachineState S = builder.getIn(bb); int number = bb.getNumber(); block2LocalState[number] = S.getLocals(); diff --git a/com.ibm.wala.core/src/com/ibm/wala/ssa/SSACFG.java b/com.ibm.wala.core/src/com/ibm/wala/ssa/SSACFG.java index eb7464ed9..aa3e982d1 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/ssa/SSACFG.java +++ b/com.ibm.wala.core/src/com/ibm/wala/ssa/SSACFG.java @@ -767,7 +767,7 @@ public class SSACFG implements ControlFlowGraph, s.append("BB").append(i).append("[").append(bb.getFirstInstructionIndex()).append("..").append(bb.getLastInstructionIndex()) .append("]\n"); - Iterator succNodes = getSuccNodes(bb); + Iterator succNodes = getSuccNodes(bb); while (succNodes.hasNext()) { s.append(" -> BB").append(((BasicBlock) succNodes.next()).getNumber()).append("\n"); } @@ -861,7 +861,7 @@ public class SSACFG implements ControlFlowGraph, throw new IllegalArgumentException("b == null"); } IBasicBlock n = delegate.getNode(b.getNumber()); - final Iterator i = delegate.getPredNodes(n); + final Iterator> i = delegate.getPredNodes(n); return new Iterator() { @Override public boolean hasNext() { @@ -870,7 +870,7 @@ public class SSACFG implements ControlFlowGraph, @Override public BasicBlock next() { - IBasicBlock n = (IBasicBlock) i.next(); + IBasicBlock n = i.next(); int number = n.getNumber(); return basicBlocks[number]; } @@ -903,7 +903,7 @@ public class SSACFG implements ControlFlowGraph, throw new IllegalArgumentException("b == null"); } IBasicBlock n = delegate.getNode(b.getNumber()); - final Iterator i = delegate.getSuccNodes(n); + final Iterator> i = delegate.getSuccNodes(n); return new Iterator() { @Override public boolean hasNext() { @@ -912,7 +912,7 @@ public class SSACFG implements ControlFlowGraph, @Override public ISSABasicBlock next() { - IBasicBlock n = (IBasicBlock) i.next(); + IBasicBlock n = i.next(); int number = n.getNumber(); return basicBlocks[number]; } diff --git a/com.ibm.wala.core/src/com/ibm/wala/ssa/analysis/DeadAssignmentElimination.java b/com.ibm.wala.core/src/com/ibm/wala/ssa/analysis/DeadAssignmentElimination.java index d157768f6..884e3a63d 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/ssa/analysis/DeadAssignmentElimination.java +++ b/com.ibm.wala.core/src/com/ibm/wala/ssa/analysis/DeadAssignmentElimination.java @@ -13,16 +13,14 @@ package com.ibm.wala.ssa.analysis; import java.util.HashSet; import java.util.Iterator; import java.util.Map; +import java.util.Map.Entry; import com.ibm.wala.cfg.ControlFlowGraph; import com.ibm.wala.fixedpoint.impl.DefaultFixedPointSolver; import com.ibm.wala.fixpoint.BooleanVariable; import com.ibm.wala.fixpoint.UnaryOr; -import com.ibm.wala.ssa.DefUse; -import com.ibm.wala.ssa.IR; +import com.ibm.wala.ssa.*; import com.ibm.wala.ssa.SSACFG.BasicBlock; -import com.ibm.wala.ssa.SSAInstruction; -import com.ibm.wala.ssa.SSAPhiInstruction; import com.ibm.wala.util.CancelException; import com.ibm.wala.util.CancelRuntimeException; import com.ibm.wala.util.collections.HashMapFactory; @@ -59,16 +57,16 @@ public class DeadAssignmentElimination { * @param solution dataflow solution for dead assignment elimination */ private static void doTransformation(IR ir, DeadValueSystem solution) { - ControlFlowGraph cfg = ir.getControlFlowGraph(); - for (Iterator x = cfg.iterator(); x.hasNext();) { + ControlFlowGraph cfg = ir.getControlFlowGraph(); + for (Iterator x = cfg.iterator(); x.hasNext();) { BasicBlock b = (BasicBlock) x.next(); if (DEBUG) { System.err.println("eliminateDeadPhis: " + b); } if (b.hasPhi()) { HashSet toRemove = HashSetFactory.make(5); - for (Iterator it = b.iteratePhis(); it.hasNext();) { - SSAPhiInstruction phi = (SSAPhiInstruction) it.next(); + for (Iterator it = b.iteratePhis(); it.hasNext();) { + SSAPhiInstruction phi = it.next(); if (phi != null) { int def = phi.getDef(); if (solution.isDead(def)) { @@ -105,7 +103,7 @@ public class DeadAssignmentElimination { */ DeadValueSystem(IR ir, DefUse DU) { // create a variable for each potentially dead phi instruction. - for (Iterator it = ir.iteratePhis(); it.hasNext();) { + for (Iterator it = ir.iteratePhis(); it.hasNext();) { SSAPhiInstruction phi = (SSAPhiInstruction) it.next(); if (phi == null) { continue; @@ -116,8 +114,8 @@ public class DeadAssignmentElimination { trivialDead.add(new Integer(def)); } else { boolean maybeDead = true; - for (Iterator uses = DU.getUses(def); uses.hasNext();) { - SSAInstruction u = (SSAInstruction) uses.next(); + for (Iterator uses = DU.getUses(def); uses.hasNext();) { + SSAInstruction u = uses.next(); if (!(u instanceof SSAPhiInstruction)) { // certainly not dead maybeDead = false; @@ -133,11 +131,11 @@ public class DeadAssignmentElimination { } // Now create dataflow equations; v is live iff any phi that uses v is live - for (Iterator it = vars.entrySet().iterator(); it.hasNext();) { - Map.Entry E = (Map.Entry) it.next(); - Integer def = (Integer) E.getKey(); - BooleanVariable B = (BooleanVariable) E.getValue(); - for (Iterator uses = DU.getUses(def.intValue()); uses.hasNext();) { + for (Iterator> it = vars.entrySet().iterator(); it.hasNext();) { + Map.Entry E = it.next(); + Integer def = E.getKey(); + BooleanVariable B = E.getValue(); + for (Iterator uses = DU.getUses(def.intValue()); uses.hasNext();) { SSAPhiInstruction u = (SSAPhiInstruction) uses.next(); Integer ud = new Integer(u.getDef()); if (trivialDead.contains(ud)) { diff --git a/com.ibm.wala.core/src/com/ibm/wala/util/ref/ReferenceCleanser.java b/com.ibm.wala.core/src/com/ibm/wala/util/ref/ReferenceCleanser.java index 6365ad845..7dd35593d 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/util/ref/ReferenceCleanser.java +++ b/com.ibm.wala.core/src/com/ibm/wala/util/ref/ReferenceCleanser.java @@ -81,8 +81,8 @@ public class ReferenceCleanser { ShrikeClass c = (ShrikeClass) klass; c.clearSoftCaches(); } else { - for (Iterator it2 = klass.getDeclaredMethods().iterator(); it2.hasNext(); ) { - IMethod m = (IMethod)it2.next(); + for (Iterator it2 = klass.getDeclaredMethods().iterator(); it2.hasNext(); ) { + IMethod m = it2.next(); if (m instanceof ShrikeCTMethod) { ((ShrikeCTMethod)m).clearCaches(); } diff --git a/com.ibm.wala.core/src/com/ibm/wala/util/scope/JUnitEntryPoints.java b/com.ibm.wala.core/src/com/ibm/wala/util/scope/JUnitEntryPoints.java index f391b27fa..852310b0d 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/util/scope/JUnitEntryPoints.java +++ b/com.ibm.wala.core/src/com/ibm/wala/util/scope/JUnitEntryPoints.java @@ -54,11 +54,11 @@ public class JUnitEntryPoints { System.out.println("application class: " + klass); // return all the tests methods - Collection methods = klass.getAllMethods(); - Iterator methodsIt = methods.iterator(); + Collection methods = klass.getAllMethods(); + Iterator methodsIt = methods.iterator(); while (methodsIt.hasNext()) { - IMethod m = (IMethod) methodsIt.next(); + IMethod m = methodsIt.next(); if (isJUnitMethod(m)) { result.add(new DefaultEntrypoint(m, cha)); System.out.println("- adding test method as entry point: " + m.getName().toString()); @@ -104,8 +104,8 @@ public class JUnitEntryPoints { System.err.println("found test class"); } // add entry point corresponding to the target method - for (Iterator methodsIt = klass.getDeclaredMethods().iterator(); methodsIt.hasNext();) { - IMethod method = (IMethod) methodsIt.next(); + for (Iterator methodsIt = klass.getDeclaredMethods().iterator(); methodsIt.hasNext();) { + IMethod method = methodsIt.next(); Atom methodAtom = method.getName(); if (methodAtom.equals(targetMethodAtom)) { entryPts.add(new DefaultEntrypoint(method, cha)); @@ -191,9 +191,9 @@ public class JUnitEntryPoints { IClass currClass = testClass; while (currClass != null && !currClass.getName().equals(junitTestCaseType) && !currClass.getName().equals(junitTestSuiteType)) { - for (Iterator methodsIt = currClass.getDeclaredMethods().iterator(); methodsIt.hasNext();) { + for (Iterator methodsIt = currClass.getDeclaredMethods().iterator(); methodsIt.hasNext();) { - IMethod method = (IMethod) methodsIt.next(); + IMethod method = methodsIt.next(); final Atom methodAtom = method.getName(); if (methodAtom.equals(setUpMethodAtom) || methodAtom.equals(tearDownMethodAtom) || method.isClinit() || method.isInit()) { result.add(method); diff --git a/com.ibm.wala.core/src/com/ibm/wala/viz/PDFViewUtil.java b/com.ibm.wala.core/src/com/ibm/wala/viz/PDFViewUtil.java index b56c66f68..729908e98 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/viz/PDFViewUtil.java +++ b/com.ibm.wala.core/src/com/ibm/wala/viz/PDFViewUtil.java @@ -75,7 +75,7 @@ public class PDFViewUtil { throw new IllegalArgumentException("ir is null"); } final HashMap labelMap = HashMapFactory.make(); - for (Iterator it = ir.getControlFlowGraph().iterator(); it.hasNext();) { + for (Iterator it = ir.getControlFlowGraph().iterator(); it.hasNext();) { SSACFG.BasicBlock bb = (SSACFG.BasicBlock) it.next(); labelMap.put(bb, getNodeLabel(ir, bb)); } @@ -125,8 +125,8 @@ public class PDFViewUtil { result.append(""); } result.append("\\n"); - for (Iterator it = bb.iteratePhis(); it.hasNext();) { - SSAPhiInstruction phi = (SSAPhiInstruction) it.next(); + for (Iterator it = bb.iteratePhis(); it.hasNext();) { + SSAPhiInstruction phi = it.next(); if (phi != null) { result.append(" " + phi.toString(ir.getSymbolTable())).append("\\l"); } @@ -149,8 +149,8 @@ public class PDFViewUtil { result.append("\\l"); } } - for (Iterator it = bb.iteratePis(); it.hasNext();) { - SSAPiInstruction pi = (SSAPiInstruction) it.next(); + for (Iterator it = bb.iteratePis(); it.hasNext();) { + SSAPiInstruction pi = it.next(); if (pi != null) { result.append(" " + pi.toString(ir.getSymbolTable())).append("\\l"); } diff --git a/com.ibm.wala.dalvik/src/com/ibm/wala/dalvik/ssa/AbstractIntRegisterMachine.java b/com.ibm.wala.dalvik/src/com/ibm/wala/dalvik/ssa/AbstractIntRegisterMachine.java index 5d78363be..331e5f0b3 100644 --- a/com.ibm.wala.dalvik/src/com/ibm/wala/dalvik/ssa/AbstractIntRegisterMachine.java +++ b/com.ibm.wala.dalvik/src/com/ibm/wala/dalvik/ssa/AbstractIntRegisterMachine.java @@ -60,6 +60,7 @@ import com.ibm.wala.shrikeBT.ThrowInstruction; import com.ibm.wala.util.CancelException; import com.ibm.wala.util.CancelRuntimeException; import com.ibm.wala.util.debug.UnimplementedError; +import com.ibm.wala.util.graph.INodeWithNumber; /** * Skeleton of functionality to propagate information through the Java bytecode stack machine using ShrikeBT. @@ -232,7 +233,7 @@ public abstract class AbstractIntRegisterMachine implements FixedPointConstants /* * Add only the entry variable to the work list. */ - for (Iterator it = getFixedPointSystem().getStatementsThatUse(entry); it.hasNext();) { + for (Iterator it = getFixedPointSystem().getStatementsThatUse(entry); it.hasNext();) { AbstractStatement s = (AbstractStatement) it.next(); addToWorkList(s); } diff --git a/com.ibm.wala.ide/src/com/ibm/wala/ide/ui/SWTTreeViewer.java b/com.ibm.wala.ide/src/com/ibm/wala/ide/ui/SWTTreeViewer.java index 2516003cb..4bc73d866 100644 --- a/com.ibm.wala.ide/src/com/ibm/wala/ide/ui/SWTTreeViewer.java +++ b/com.ibm.wala.ide/src/com/ibm/wala/ide/ui/SWTTreeViewer.java @@ -171,7 +171,7 @@ public class SWTTreeViewer extends AbstractJFaceRunner { /** * Graph to visualize */ - private final Graph graph; + private final Graph graph; /** * JFace component implementing the tree viewer @@ -181,7 +181,7 @@ public class SWTTreeViewer extends AbstractJFaceRunner { /** * @throws WalaException */ - public GraphViewer(Graph graph) throws WalaException { + public GraphViewer(Graph graph) throws WalaException { super(null); this.graph = graph; if (graph == null) { @@ -242,7 +242,7 @@ public class SWTTreeViewer extends AbstractJFaceRunner { Object[] result = new Object[graph.getSuccNodeCount(parentElement)]; int i = 0; - for (Iterator it = graph.getSuccNodes(parentElement); it.hasNext();) { + for (Iterator it = graph.getSuccNodes(parentElement); it.hasNext();) { result[i++] = it.next(); } return result; diff --git a/com.ibm.wala.util/src/com/ibm/wala/fixedpoint/impl/AbstractFixedPointSolver.java b/com.ibm.wala.util/src/com/ibm/wala/fixedpoint/impl/AbstractFixedPointSolver.java index 9eaf1a548..6f32915a9 100644 --- a/com.ibm.wala.util/src/com/ibm/wala/fixedpoint/impl/AbstractFixedPointSolver.java +++ b/com.ibm.wala.util/src/com/ibm/wala/fixedpoint/impl/AbstractFixedPointSolver.java @@ -25,6 +25,7 @@ import com.ibm.wala.util.CancelException; import com.ibm.wala.util.MonitorUtil; import com.ibm.wala.util.MonitorUtil.IProgressMonitor; import com.ibm.wala.util.debug.VerboseAction; +import com.ibm.wala.util.graph.INodeWithNumber; /** * Represents a set of {@link IFixedPointStatement}s to be solved by a {@link IFixedPointSolver} @@ -215,13 +216,13 @@ public abstract class AbstractFixedPointSolver> implement @Override public String toString() { StringBuffer result = new StringBuffer("Fixed Point System:\n"); - for (Iterator it = getStatements(); it.hasNext();) { + for (Iterator it = getStatements(); it.hasNext();) { result.append(it.next()).append("\n"); } return result.toString(); } - public Iterator getStatements() { + public Iterator getStatements() { return getFixedPointSystem().getStatements(); } @@ -238,7 +239,7 @@ public abstract class AbstractFixedPointSolver> implement * Add all to the work list. */ public void addAllStatementsToWorkList() { - for (Iterator i = getStatements(); i.hasNext();) { + for (Iterator i = getStatements(); i.hasNext();) { AbstractStatement eq = (AbstractStatement) i.next(); addToWorkList(eq); } @@ -251,7 +252,7 @@ public abstract class AbstractFixedPointSolver> implement * @param v the variable that has changed */ public void changedVariable(T v) { - for (Iterator it = getFixedPointSystem().getStatementsThatUse(v); it.hasNext();) { + for (Iterator it = getFixedPointSystem().getStatementsThatUse(v); it.hasNext();) { AbstractStatement s = (AbstractStatement) it.next(); addToWorkList(s); } diff --git a/com.ibm.wala.util/src/com/ibm/wala/fixedpoint/impl/DefaultFixedPointSystem.java b/com.ibm.wala.util/src/com/ibm/wala/fixedpoint/impl/DefaultFixedPointSystem.java index ae32f46ce..d141dc577 100644 --- a/com.ibm.wala.util/src/com/ibm/wala/fixedpoint/impl/DefaultFixedPointSystem.java +++ b/com.ibm.wala.util/src/com/ibm/wala/fixedpoint/impl/DefaultFixedPointSystem.java @@ -233,12 +233,12 @@ public class DefaultFixedPointSystem> implements IFixedPo } @Override - public Iterator getStatementsThatUse(T v) { + public Iterator getStatementsThatUse(T v) { return (graph.containsNode(v) ? graph.getSuccNodes(v) : EmptyIterator.instance()); } @Override - public Iterator getStatementsThatDef(T v) { + public Iterator getStatementsThatDef(T v) { return (graph.containsNode(v) ? graph.getPredNodes(v) : EmptyIterator.instance()); } diff --git a/com.ibm.wala.util/src/com/ibm/wala/fixpoint/IFixedPointSystem.java b/com.ibm.wala.util/src/com/ibm/wala/fixpoint/IFixedPointSystem.java index 2bf7cc7c0..f355044d2 100644 --- a/com.ibm.wala.util/src/com/ibm/wala/fixpoint/IFixedPointSystem.java +++ b/com.ibm.wala.util/src/com/ibm/wala/fixpoint/IFixedPointSystem.java @@ -12,10 +12,11 @@ package com.ibm.wala.fixpoint; import java.util.Iterator; +import com.ibm.wala.util.graph.INodeWithNumber; + /** * Represents a set of {@link IFixedPointStatement}s to be solved by a {@link IFixedPointSolver} */ -@SuppressWarnings("rawtypes") public interface IFixedPointSystem> { /** @@ -33,14 +34,14 @@ public interface IFixedPointSystem> { * * @return {@link Iterator}<Constraint> */ - public Iterator getStatements(); + public Iterator getStatements(); /** * Return an Iterator of the variables in this graph * * @return {@link Iterator}<{@link IVariable}> */ - public Iterator getVariables(); + public Iterator getVariables(); /** * @return true iff this system already contains an equation that is equal() to s @@ -55,12 +56,12 @@ public interface IFixedPointSystem> { /** * @return {@link Iterator}<statement>, the statements that use the variable */ - Iterator getStatementsThatUse(T v); + Iterator getStatementsThatUse(T v); /** * @return {@link Iterator}<statement>, the statements that def the variable */ - Iterator getStatementsThatDef(T v); + Iterator getStatementsThatDef(T v); int getNumberOfStatementsThatUse(T v); From 12ca05ddb7210911bdcc32ac581cef1895a0ca15 Mon Sep 17 00:00:00 2001 From: Ben Liblit Date: Tue, 28 Nov 2017 14:09:42 -0600 Subject: [PATCH 22/69] Enforce not using raw types more forcefully where possible These are all modules where no such warnings currently arise. If any arise in the future, then, let's treat them as errors so we keep things clean. --- com.ibm.wala.dalvik/.settings/org.eclipse.jdt.core.prefs | 2 +- com.ibm.wala.scandroid/.settings/org.eclipse.jdt.core.prefs | 2 +- com.ibm.wala.util/.settings/org.eclipse.jdt.core.prefs | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/com.ibm.wala.dalvik/.settings/org.eclipse.jdt.core.prefs b/com.ibm.wala.dalvik/.settings/org.eclipse.jdt.core.prefs index f83ad1514..9fc028613 100644 --- a/com.ibm.wala.dalvik/.settings/org.eclipse.jdt.core.prefs +++ b/com.ibm.wala.dalvik/.settings/org.eclipse.jdt.core.prefs @@ -78,7 +78,7 @@ org.eclipse.jdt.core.compiler.problem.pessimisticNullAnalysisForFreeTypeVariable org.eclipse.jdt.core.compiler.problem.possibleAccidentalBooleanAssignment=error org.eclipse.jdt.core.compiler.problem.potentialNullReference=ignore org.eclipse.jdt.core.compiler.problem.potentiallyUnclosedCloseable=error -org.eclipse.jdt.core.compiler.problem.rawTypeReference=warning +org.eclipse.jdt.core.compiler.problem.rawTypeReference=error org.eclipse.jdt.core.compiler.problem.redundantNullAnnotation=error org.eclipse.jdt.core.compiler.problem.redundantNullCheck=error org.eclipse.jdt.core.compiler.problem.redundantSpecificationOfTypeArguments=error diff --git a/com.ibm.wala.scandroid/.settings/org.eclipse.jdt.core.prefs b/com.ibm.wala.scandroid/.settings/org.eclipse.jdt.core.prefs index af6bb5393..83c5116b1 100644 --- a/com.ibm.wala.scandroid/.settings/org.eclipse.jdt.core.prefs +++ b/com.ibm.wala.scandroid/.settings/org.eclipse.jdt.core.prefs @@ -63,7 +63,7 @@ org.eclipse.jdt.core.compiler.problem.pessimisticNullAnalysisForFreeTypeVariable org.eclipse.jdt.core.compiler.problem.possibleAccidentalBooleanAssignment=error org.eclipse.jdt.core.compiler.problem.potentialNullReference=ignore org.eclipse.jdt.core.compiler.problem.potentiallyUnclosedCloseable=error -org.eclipse.jdt.core.compiler.problem.rawTypeReference=warning +org.eclipse.jdt.core.compiler.problem.rawTypeReference=error org.eclipse.jdt.core.compiler.problem.redundantNullAnnotation=error org.eclipse.jdt.core.compiler.problem.redundantNullCheck=error org.eclipse.jdt.core.compiler.problem.redundantSpecificationOfTypeArguments=warning diff --git a/com.ibm.wala.util/.settings/org.eclipse.jdt.core.prefs b/com.ibm.wala.util/.settings/org.eclipse.jdt.core.prefs index e5f887587..da125699c 100644 --- a/com.ibm.wala.util/.settings/org.eclipse.jdt.core.prefs +++ b/com.ibm.wala.util/.settings/org.eclipse.jdt.core.prefs @@ -77,7 +77,7 @@ org.eclipse.jdt.core.compiler.problem.pessimisticNullAnalysisForFreeTypeVariable org.eclipse.jdt.core.compiler.problem.possibleAccidentalBooleanAssignment=error org.eclipse.jdt.core.compiler.problem.potentialNullReference=ignore org.eclipse.jdt.core.compiler.problem.potentiallyUnclosedCloseable=error -org.eclipse.jdt.core.compiler.problem.rawTypeReference=warning +org.eclipse.jdt.core.compiler.problem.rawTypeReference=error org.eclipse.jdt.core.compiler.problem.redundantNullAnnotation=error org.eclipse.jdt.core.compiler.problem.redundantNullCheck=error org.eclipse.jdt.core.compiler.problem.redundantSpecificationOfTypeArguments=warning From ebfd885d22e1aab539b9dd6a03de1fe09fd86d33 Mon Sep 17 00:00:00 2001 From: Ben Liblit Date: Tue, 28 Nov 2017 14:26:09 -0600 Subject: [PATCH 23/69] Use modern for-each loops where possible Java sources used as test data have been excluded from this mass clean-up. --- .../java/ecj/util/SourceDirCallGraph.java | 4 +- .../jdt/JDTJava2CAstTranslator.java | 3 +- .../jdt/ecj/ECJSourceModuleTranslator.java | 5 +- .../typeInference/AstJavaTypeInference.java | 5 +- ...AstJavaSSAPropagationCallGraphBuilder.java | 4 +- .../ipa/callgraph/AstJavaZeroXCFABuilder.java | 4 +- .../JavaScopeMappingInstanceKeys.java | 4 +- .../cast/java/ipa/slicer/AstJavaSlicer.java | 4 +- .../java/loader/JavaSourceLoaderImpl.java | 4 +- .../FieldBasedCallGraphBuilder.java | 3 +- .../js/html/jericho/JerichoHtmlParser.java | 7 +- .../JSSSAPropagationCallGraphBuilder.java | 30 +++--- .../ipa/callgraph/JSZeroOrOneXCFABuilder.java | 4 +- .../extraction/ClosureExtractor.java | 8 +- .../wala/cast/test/TestCAstTranslator.java | 52 +++++----- .../wala/cast/test/TestCallGraphShape.java | 22 ++--- .../wala/cast/ipa/callgraph/AstCallGraph.java | 4 +- .../AstSSAPropagationCallGraphBuilder.java | 92 ++++++++--------- .../cast/ipa/callgraph/CAstAnalysisScope.java | 8 +- .../MiscellaneousHacksContextSelector.java | 3 +- .../wala/cast/ir/ssa/AstEchoInstruction.java | 8 +- .../wala/cast/ir/ssa/AstLexicalAccess.java | 4 +- .../ibm/wala/cast/ir/ssa/SSAConversion.java | 20 ++-- .../cast/ir/translator/AstTranslator.java | 36 +++---- .../com/ibm/wala/cast/loader/AstClass.java | 11 +-- .../wala/cast/loader/CAstAbstractLoader.java | 3 +- .../cast/loader/CAstAbstractModuleLoader.java | 7 +- .../tree/impl/CAstControlFlowRecorder.java | 4 +- .../wala/cast/tree/impl/CAstValueImpl.java | 4 +- .../wala/cast/tree/rewrite/CAstRewriter.java | 22 ++--- .../com/ibm/wala/cast/util/CAstPattern.java | 4 +- .../com/ibm/wala/cast/util/CAstPrinter.java | 4 +- .../wala/core/tests/basic/PrimitivesTest.java | 4 +- .../core/tests/basic/WelshPowellTest.java | 12 +-- .../tests/callGraph/AcyclicCallGraphTest.java | 4 +- .../core/tests/callGraph/CallGraphTest.java | 15 ++- .../wala/core/tests/callGraph/CloneTest.java | 4 +- .../core/tests/demandpa/AbstractPtrTest.java | 6 +- .../core/tests/ir/DeterministicIRTest.java | 4 +- .../core/tests/ptrs/MultiDimArrayTest.java | 5 +- .../tests/ptrs/TypeBasedArrayAliasTest.java | 5 +- .../wala/core/tests/slicer/SlicerTest.java | 3 +- .../driver/CompareToZeroOneCFADriver.java | 5 +- .../driver/TestAgainstSimpleDriver.java | 6 +- .../ibm/wala/demandpa/driver/WalaUtil.java | 4 +- .../analysis/SimpleThreadEscapeAnalysis.java | 48 ++++----- .../wala/examples/drivers/PDFCallGraph.java | 5 +- .../analysis/pointers/BasicHeapGraph.java | 19 ++-- .../analysis/reflection/CloneInterpreter.java | 3 +- .../reflection/FactoryBypassInterpreter.java | 14 ++- .../stackMachine/AbstractIntStackMachine.java | 4 +- .../analysis/typeInference/TypeInference.java | 13 +-- .../src/com/ibm/wala/cfg/AbstractCFG.java | 3 +- .../src/com/ibm/wala/cfg/CFGSanitizer.java | 21 ++-- .../src/com/ibm/wala/cfg/InducedCFG.java | 12 +-- .../src/com/ibm/wala/cfg/ShrikeCFG.java | 25 +++-- .../wala/cfg/cdg/ControlDependenceGraph.java | 25 +++-- .../wala/cfg/exc/intra/NullPointerState.java | 4 +- .../ibm/wala/classLoader/BytecodeClass.java | 21 ++-- .../ibm/wala/classLoader/ClassLoaderImpl.java | 24 ++--- .../com/ibm/wala/classLoader/CodeScanner.java | 32 +++--- .../wala/classLoader/DirectoryTreeModule.java | 10 +- .../ibm/wala/classLoader/ShrikeBTMethod.java | 42 ++++---- .../com/ibm/wala/classLoader/ShrikeClass.java | 5 +- .../wala/client/AbstractAnalysisEngine.java | 8 +- .../wala/dataflow/IFDS/LocalSummaryEdges.java | 5 +- .../wala/dataflow/IFDS/TabulationSolver.java | 15 +-- .../ibm/wala/dataflow/ssa/SSAInference.java | 3 +- .../alg/DemandRefinementPointsTo.java | 9 +- .../flowgraph/AbstractDemandFlowGraph.java | 9 +- .../demandpa/flowgraph/AbstractFlowGraph.java | 12 +-- .../flowgraph/DemandPointerFlowGraph.java | 6 +- .../SimpleDemandPointerFlowGraph.java | 6 +- .../demandpa/util/SimpleMemoryAccessMap.java | 23 ++--- .../wala/escape/LocalLiveRangeAnalysis.java | 18 ++-- .../ibm/wala/escape/TrivialMethodEscape.java | 6 +- .../wala/ipa/callgraph/CallGraphStats.java | 10 +- .../callgraph/CallGraphTransitiveClosure.java | 7 +- .../callgraph/impl/AbstractRootMethod.java | 16 +-- .../impl/AllApplicationEntrypoints.java | 5 +- .../impl/ArgumentTypeEntrypoint.java | 4 +- .../callgraph/impl/ComposedEntrypoints.java | 8 +- .../ipa/callgraph/impl/PartialCallGraph.java | 6 +- .../com/ibm/wala/ipa/callgraph/impl/Util.java | 22 ++--- .../propagation/ConcreteTypeKey.java | 3 +- .../propagation/PointerAnalysisImpl.java | 34 +++---- .../PropagationCallGraphBuilder.java | 6 +- .../propagation/PropagationGraph.java | 10 +- .../propagation/PropagationSystem.java | 23 ++--- .../propagation/ReflectionHandler.java | 8 +- .../SSAPropagationCallGraphBuilder.java | 99 +++++++++---------- .../propagation/cfa/ZeroXCFABuilder.java | 4 +- .../propagation/cfa/ZeroXInstanceKeys.java | 6 +- .../propagation/rta/AbstractRTABuilder.java | 4 +- .../propagation/rta/BasicRTABuilder.java | 8 +- .../rta/DelegatingExplicitCallGraph.java | 7 +- .../propagation/rta/TypeBasedHeapModel.java | 9 +- .../rta/TypeBasedPointerAnalysis.java | 7 +- .../ipa/cfg/AbstractInterproceduralCFG.java | 12 +-- .../src/com/ibm/wala/ipa/cfg/PrunedCFG.java | 3 +- .../com/ibm/wala/ipa/cha/ClassHierarchy.java | 21 ++-- .../ibm/wala/ipa/cha/ClassHierarchyStats.java | 8 +- .../src/com/ibm/wala/ipa/slicer/PDG.java | 6 +- .../src/com/ibm/wala/ipa/slicer/SDG.java | 7 +- .../summaries/BypassSyntheticClassLoader.java | 3 +- .../ibm/wala/ipa/summaries/SyntheticIR.java | 5 +- .../ipa/summaries/XMLMethodSummaryReader.java | 4 +- .../src/com/ibm/wala/ssa/AuxiliaryCache.java | 36 +++---- .../src/com/ibm/wala/ssa/IR.java | 4 +- .../src/com/ibm/wala/ssa/SSABuilder.java | 31 +++--- .../src/com/ibm/wala/ssa/SSACFG.java | 37 ++++--- .../com/ibm/wala/ssa/SSANewInstruction.java | 4 +- .../analysis/DeadAssignmentElimination.java | 7 +- .../analysis/ExplodedControlFlowGraph.java | 3 +- .../src/com/ibm/wala/types/Descriptor.java | 6 +- .../wala/util/config/AnalysisScopeReader.java | 4 +- .../ibm/wala/util/ref/ReferenceCleanser.java | 5 +- .../ibm/wala/util/scope/JUnitEntryPoints.java | 6 +- .../src/com/ibm/wala/util/strings/Atom.java | 4 +- .../src/com/ibm/wala/viz/PDFViewUtil.java | 4 +- .../ibm/wala/dalvik/classLoader/DexCFG.java | 23 ++--- .../classLoader/WDexClassLoaderImpl.java | 16 +-- .../parameters/ReuseParameters.java | 4 +- .../ipa/callgraph/impl/DexFakeRootMethod.java | 10 +- .../cfa/IntentContextSelector.java | 8 +- .../ibm/wala/dalvik/ssa/DexSSABuilder.java | 13 ++- .../dalvik/util/AndroidAnalysisScope.java | 12 +-- .../demandpa/driver/DemandCastChecker.java | 4 +- .../jdt/JDTSourceModuleTranslator.java | 5 +- .../com/ibm/wala/ide/ui/SWTTreeViewer.java | 4 +- .../org/scandroid/flow/FlowAnalysis.java | 8 +- .../org/scandroid/flow/InflowAnalysis.java | 14 +-- .../org/scandroid/flow/OutflowAnalysis.java | 36 +++---- .../UriPrefixTransferGraph.java | 3 +- .../org/scandroid/spec/CallArgSourceSpec.java | 4 +- .../org/scandroid/util/CGAnalysisContext.java | 4 +- .../source/org/scandroid/util/DexDotUtil.java | 7 +- .../org/scandroid/util/EntryPoints.java | 8 +- .../wala/shrike/bench/AddBytecodeDebug.java | 6 +- .../wala/shrike/bench/InterfaceAnalyzer.java | 9 +- .../com/ibm/wala/shrike/bench/Statistics.java | 6 +- .../wala/shrike/copywriter/CopyWriter.java | 4 +- .../src/com/ibm/wala/shrikeBT/Compiler.java | 81 +++++++-------- .../src/com/ibm/wala/shrikeBT/Decoder.java | 20 ++-- .../com/ibm/wala/shrikeBT/MethodEditor.java | 4 +- .../ibm/wala/shrikeBT/SwitchInstruction.java | 4 +- .../src/com/ibm/wala/shrikeBT/Util.java | 10 +- .../ibm/wala/shrikeBT/analysis/Analyzer.java | 66 ++++++------- .../shrikeBT/analysis/ClassHierarchy.java | 11 +-- .../shrikeBT/info/InstructionTypeCounter.java | 4 +- .../wala/shrikeBT/info/LocalAllocator.java | 4 +- .../shrikeBT/info/ThisAssignmentChecker.java | 3 +- .../shrikeBT/shrikeCT/ClassInstrumenter.java | 3 +- .../shrikeCT/tools/AddSerialVersion.java | 4 +- .../shrikeCT/tools/BatchVerifier.java | 4 +- .../shrikeBT/shrikeCT/tools/ClassPrinter.java | 6 +- .../wala/shrikeBT/tools/MethodOptimizer.java | 40 ++++---- .../tools/OfflineInstrumenterBase.java | 3 +- .../com/ibm/wala/shrikeCT/ClassWriter.java | 11 +-- .../src/com/ibm/wala/shrikeCT/CodeWriter.java | 12 +-- .../ibm/wala/shrikeCT/ExceptionsWriter.java | 10 +- .../ibm/wala/shrikeCT/InnerClassesWriter.java | 4 +- .../wala/shrikeCT/LineNumberTableWriter.java | 7 +- .../shrikeCT/LocalVariableTableWriter.java | 10 +- .../shrikeCT/SourceDebugExtensionWriter.java | 10 +- .../ibm/wala/shrikeCT/StackMapConstants.java | 8 +- .../wala/shrikeCT/TypeAnnotationsReader.java | 8 +- .../wala/dataflow/graph/BitVectorUnion.java | 3 +- .../ibm/wala/dataflow/graph/BooleanUnion.java | 3 +- .../wala/dataflow/graph/DataflowSolver.java | 24 ++--- .../impl/AbstractFixedPointSolver.java | 3 +- .../impl/DefaultFixedPointSystem.java | 3 +- .../fixedpoint/impl/GeneralStatement.java | 4 +- .../ibm/wala/util/collections/BimodalMap.java | 4 +- .../wala/util/collections/ImmutableStack.java | 4 +- .../ibm/wala/util/collections/MapUtil.java | 13 +-- .../util/collections/ParanoidHashSet.java | 9 +- .../wala/util/collections/SimpleVector.java | 4 +- .../com/ibm/wala/util/collections/Util.java | 16 ++- .../ibm/wala/util/graph/AbstractGraph.java | 3 +- .../ibm/wala/util/graph/GraphIntegrity.java | 14 ++- .../com/ibm/wala/util/graph/GraphPrint.java | 7 +- .../com/ibm/wala/util/graph/GraphSlicer.java | 3 +- .../ibm/wala/util/graph/InferGraphRoots.java | 4 +- .../util/graph/dominators/Dominators.java | 6 +- .../graph/impl/SlowSparseNumberedGraph.java | 7 +- .../SlowSparseNumberedLabeledGraph.java | 7 +- .../SparseNumberedLabeledEdgeManager.java | 6 +- .../util/graph/traverse/DFSPathFinder.java | 4 +- .../ibm/wala/util/heapTrace/HeapTracer.java | 56 +++++------ .../util/intset/BasicNaturalRelation.java | 28 +++--- .../ibm/wala/util/intset/BitVectorBase.java | 8 +- .../util/intset/BitVectorIntSetFactory.java | 12 +-- .../wala/util/intset/FixedSizeBitVector.java | 4 +- .../wala/util/intset/MultiModalIntVector.java | 12 +-- .../intset/MutableSparseIntSetFactory.java | 8 +- .../intset/MutableSparseLongSetFactory.java | 8 +- .../com/ibm/wala/util/intset/OrdinalSet.java | 4 +- .../SemiSparseMutableIntSetFactory.java | 12 +-- .../ibm/wala/util/intset/SimpleIntVector.java | 4 +- .../ibm/wala/util/intset/SparseIntSet.java | 4 +- .../ibm/wala/util/intset/SparseLongSet.java | 4 +- .../src/com/ibm/wala/util/io/FileUtil.java | 10 +- .../com/ibm/wala/util/processes/Launcher.java | 4 +- .../src/com/ibm/wala/viz/DotUtil.java | 7 +- 205 files changed, 1001 insertions(+), 1340 deletions(-) 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 10e1625bf..438990c7f 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 @@ -52,8 +52,8 @@ public class SourceDirCallGraph { AnalysisScope scope = new JavaSourceAnalysisScope(); // add standard libraries to scope String[] stdlibs = WalaProperties.getJ2SEJarFiles(); - for (int i = 0; i < stdlibs.length; i++) { - scope.addToScope(ClassLoaderReference.Primordial, new JarFile(stdlibs[i])); + for (String stdlib : stdlibs) { + scope.addToScope(ClassLoaderReference.Primordial, new JarFile(stdlib)); } // add the source directory scope.addToScope(JavaSourceAnalysisScope.SOURCE, new SourceDirectoryTreeModule(new File(sourceDir))); 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 c9b7e28d0..92298d2cf 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 @@ -1411,8 +1411,7 @@ public abstract class JDTJava2CAstTranslator { argNodes[idx++] = fFactory.makeConstant(callSiteRef); // rest of args - for (Iterator iter = arguments.iterator(); iter.hasNext();) { - Object arg = iter.next(); + for (Object arg : arguments) { argNodes[idx++] = (arg instanceof CAstNode) ? ((CAstNode) arg) : visitNode((Expression) arg, context); } callNode = makeNode(context, fFactory, nn, CAstNode.CALL, argNodes); 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 692bb3cec..4ef6d2dfe 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 @@ -42,7 +42,6 @@ import java.io.IOException; import java.net.MalformedURLException; import java.net.URL; import java.util.Hashtable; -import java.util.Iterator; import java.util.LinkedList; import java.util.List; import java.util.Map; @@ -136,9 +135,7 @@ public class ECJSourceModuleTranslator implements SourceModuleTranslator { while (cl != null) { List modules = scope.getModules(cl); - for (Iterator iter = modules.iterator(); iter.hasNext();) { - Module m = iter.next(); - + for (Module m : modules) { if (m instanceof JarFileModule) { JarFileModule jarFileModule = (JarFileModule) m; diff --git a/com.ibm.wala.cast.java/src/com/ibm/wala/cast/java/analysis/typeInference/AstJavaTypeInference.java b/com.ibm.wala.cast.java/src/com/ibm/wala/cast/java/analysis/typeInference/AstJavaTypeInference.java index fe9138df3..1f00f3c0c 100644 --- a/com.ibm.wala.cast.java/src/com/ibm/wala/cast/java/analysis/typeInference/AstJavaTypeInference.java +++ b/com.ibm.wala.cast.java/src/com/ibm/wala/cast/java/analysis/typeInference/AstJavaTypeInference.java @@ -132,9 +132,8 @@ public class AstJavaTypeInference extends AstTypeInference { public byte evaluate(TypeVariable lhs, TypeVariable[] rhs) { TypeAbstraction meet = null; - for (int i = 0; i < rhs.length; i++) { - if (rhs[i] != null) { - TypeVariable r = rhs[i]; + for (TypeVariable r : rhs) { + if (r != null) { TypeAbstraction ta = r.getType(); if (ta instanceof PointType) { if (ta.getType().equals(getStringClass())) { diff --git a/com.ibm.wala.cast.java/src/com/ibm/wala/cast/java/ipa/callgraph/AstJavaSSAPropagationCallGraphBuilder.java b/com.ibm.wala.cast.java/src/com/ibm/wala/cast/java/ipa/callgraph/AstJavaSSAPropagationCallGraphBuilder.java index d7e86f064..beea88c83 100644 --- a/com.ibm.wala.cast.java/src/com/ibm/wala/cast/java/ipa/callgraph/AstJavaSSAPropagationCallGraphBuilder.java +++ b/com.ibm.wala.cast.java/src/com/ibm/wala/cast/java/ipa/callgraph/AstJavaSSAPropagationCallGraphBuilder.java @@ -173,8 +173,8 @@ public class AstJavaSSAPropagationCallGraphBuilder extends AstSSAPropagationCall InstanceKey[] objs = getInvariantContents(objVal); - for (int i = 0; i < objs.length; i++) { - PointerKey enclosing = new EnclosingObjectReferenceKey(objs[i], cls); + for (InstanceKey obj : objs) { + PointerKey enclosing = new EnclosingObjectReferenceKey(obj, cls); system.newConstraint(lvalKey, assignOperator, enclosing); } diff --git a/com.ibm.wala.cast.java/src/com/ibm/wala/cast/java/ipa/callgraph/AstJavaZeroXCFABuilder.java b/com.ibm.wala.cast.java/src/com/ibm/wala/cast/java/ipa/callgraph/AstJavaZeroXCFABuilder.java index a5245ab8f..c80b5c737 100644 --- a/com.ibm.wala.cast.java/src/com/ibm/wala/cast/java/ipa/callgraph/AstJavaZeroXCFABuilder.java +++ b/com.ibm.wala.cast.java/src/com/ibm/wala/cast/java/ipa/callgraph/AstJavaZeroXCFABuilder.java @@ -53,8 +53,8 @@ public class AstJavaZeroXCFABuilder extends AstJavaCFABuilder { AnalysisScope scope, String[] xmlFiles, byte instancePolicy) { com.ibm.wala.ipa.callgraph.impl.Util.addDefaultSelectors(options, cha); - for (int i = 0; i < xmlFiles.length; i++) { - com.ibm.wala.ipa.callgraph.impl.Util.addBypassLogic(options, scope, cl, xmlFiles[i], cha); + for (String xmlFile : xmlFiles) { + com.ibm.wala.ipa.callgraph.impl.Util.addBypassLogic(options, scope, cl, xmlFile, cha); } return new AstJavaZeroXCFABuilder(cha, options, cache, null, null, instancePolicy); diff --git a/com.ibm.wala.cast.java/src/com/ibm/wala/cast/java/ipa/callgraph/JavaScopeMappingInstanceKeys.java b/com.ibm.wala.cast.java/src/com/ibm/wala/cast/java/ipa/callgraph/JavaScopeMappingInstanceKeys.java index 77b276fef..3e114a591 100644 --- a/com.ibm.wala.cast.java/src/com/ibm/wala/cast/java/ipa/callgraph/JavaScopeMappingInstanceKeys.java +++ b/com.ibm.wala.cast.java/src/com/ibm/wala/cast/java/ipa/callgraph/JavaScopeMappingInstanceKeys.java @@ -44,8 +44,8 @@ public class JavaScopeMappingInstanceKeys extends ScopeMappingInstanceKeys { if ((m instanceof AstMethod) && !m.isStatic()) { AstMethod M = (AstMethod) m; LexicalParent[] parents = M.getParents(); - for (int i = 0; i < parents.length; i++) { - result.add(parents[i]); + for (LexicalParent parent : parents) { + result.add(parent); } } } 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 04d7476fd..9d540904b 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 @@ -12,7 +12,6 @@ package com.ibm.wala.cast.java.ipa.slicer; import java.util.Collection; import java.util.HashSet; -import java.util.Iterator; import java.util.LinkedHashSet; import java.util.Set; import java.util.function.Predicate; @@ -59,8 +58,7 @@ public class AstJavaSlicer extends Slicer { public static Set gatherStatements(CallGraph CG, Collection partialRoots, Predicate filter) { Set result = new HashSet<>(); - for (Iterator ns = DFS.getReachableNodes(CG, partialRoots).iterator(); ns.hasNext();) { - CGNode n = ns.next(); + for (CGNode n : DFS.getReachableNodes(CG, partialRoots)) { IR nir = n.getIR(); if (nir != null) { SSAInstruction insts[] = nir.getInstructions(); diff --git a/com.ibm.wala.cast.java/src/com/ibm/wala/cast/java/loader/JavaSourceLoaderImpl.java b/com.ibm.wala.cast.java/src/com/ibm/wala/cast/java/loader/JavaSourceLoaderImpl.java index 90cf8d750..2b5171b08 100644 --- a/com.ibm.wala.cast.java/src/com/ibm/wala/cast/java/loader/JavaSourceLoaderImpl.java +++ b/com.ibm.wala.cast.java/src/com/ibm/wala/cast/java/loader/JavaSourceLoaderImpl.java @@ -17,7 +17,6 @@ import java.io.IOException; import java.util.ArrayList; import java.util.Collection; import java.util.HashMap; -import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Set; @@ -123,8 +122,7 @@ public abstract class JavaSourceLoaderImpl extends ClassLoaderImpl { @Override public IClass getSuperclass() { boolean excludedSupertype=false; - for (Iterator iter = superTypeNames.iterator(); iter.hasNext();) { - TypeName name = iter.next(); + for (TypeName name : superTypeNames) { IClass domoType = lookupClass(name); if (domoType != null && !domoType.isInterface()) { return domoType; diff --git a/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/callgraph/fieldbased/FieldBasedCallGraphBuilder.java b/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/callgraph/fieldbased/FieldBasedCallGraphBuilder.java index 8c48797cc..330e179ab 100644 --- a/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/callgraph/fieldbased/FieldBasedCallGraphBuilder.java +++ b/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/callgraph/fieldbased/FieldBasedCallGraphBuilder.java @@ -158,8 +158,7 @@ public abstract class FieldBasedCallGraphBuilder { // set up call edges from fake root to all script nodes AbstractRootMethod fakeRootMethod = (AbstractRootMethod)cg.getFakeRootNode().getMethod(); CGNode fakeRootNode = cg.findOrCreateNode(fakeRootMethod, Everywhere.EVERYWHERE); - for(Iterator iter = eps.iterator(); iter.hasNext();) { - Entrypoint ep = iter.next(); + for (Entrypoint ep : eps) { CGNode nd = cg.findOrCreateNode(ep.getMethod(), Everywhere.EVERYWHERE); SSAAbstractInvokeInstruction invk = ep.addCall(fakeRootMethod); fakeRootNode.addTarget(invk.getCallSite(), nd); diff --git a/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/html/jericho/JerichoHtmlParser.java b/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/html/jericho/JerichoHtmlParser.java index 9dc945d7f..60b9b3537 100644 --- a/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/html/jericho/JerichoHtmlParser.java +++ b/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/html/jericho/JerichoHtmlParser.java @@ -13,7 +13,6 @@ package com.ibm.wala.cast.js.html.jericho; import java.io.IOException; import java.io.Reader; import java.net.URL; -import java.util.Iterator; import java.util.List; import java.util.Set; @@ -110,8 +109,7 @@ public class JerichoHtmlParser implements IHtmlParser{ src = new Source(reader); src.setLogger(Config.LoggerProvider.getLogger(fileName)); List childElements = src.getChildElements(); - for (Iterator nodeIterator = childElements.iterator(); nodeIterator.hasNext();) { - Element e = nodeIterator.next(); + for (Element e : childElements) { parser.parse(e); } if (! warnings.isEmpty()) { @@ -139,8 +137,7 @@ public class JerichoHtmlParser implements IHtmlParser{ handler.handleStartTag(tag); handler.handleText(tag.getElementPosition(), tag.getBodyText().snd); List childElements = root.getChildElements(); - for (Iterator nodeIterator = childElements.iterator(); nodeIterator.hasNext();) { - Element child = nodeIterator.next(); + for (Element child : childElements) { parse(child); } handler.handleEndTag(tag); diff --git a/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/ipa/callgraph/JSSSAPropagationCallGraphBuilder.java b/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/ipa/callgraph/JSSSAPropagationCallGraphBuilder.java index 1503a29ba..834ecf3ff 100755 --- a/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/ipa/callgraph/JSSSAPropagationCallGraphBuilder.java +++ b/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/ipa/callgraph/JSSSAPropagationCallGraphBuilder.java @@ -528,8 +528,8 @@ public class JSSSAPropagationCallGraphBuilder extends AstSSAPropagationCallGraph if (contentsAreInvariant(symbolTable, du, rval)) { system.recordImplicitPointsToSet(rvalKey); InstanceKey[] ik = getInvariantContents(rval); - for (int i = 0; i < ik.length; i++) { - system.newConstraint(p, ik[i]); + for (InstanceKey element : ik) { + system.newConstraint(p, element); } } else { system.newConstraint(p, assignOperator, rvalKey); @@ -668,8 +668,8 @@ public class JSSSAPropagationCallGraphBuilder extends AstSSAPropagationCallGraph if (contentsAreInvariant(symbolTable, du, receiverVn)) { system.recordImplicitPointsToSet(receiverKey); InstanceKey[] ik = getInvariantContents(receiverVn); - for (int i = 0; i < ik.length; i++) { - handleJavascriptDispatch(instruction, ik[i]); + for (InstanceKey element : ik) { + handleJavascriptDispatch(instruction, element); } } else { class ReceiverForDispatchOp extends UnaryOperator { @@ -810,17 +810,17 @@ public class JSSSAPropagationCallGraphBuilder extends AstSSAPropagationCallGraph InstanceKey[] iks2 = getInstancesArray(arg2); if ((instruction.getOperator() == BinaryOpInstruction.Operator.ADD) && (getOptions().getTraceStringConstants())) { - for (int i = 0; i < iks1.length; i++) { - if (isStringConstant(iks1[i])) { - for (int j = 0; j < iks2.length; j++) { - if (isStringConstant(iks2[j])) { + for (InstanceKey element : iks1) { + if (isStringConstant(element)) { + for (InstanceKey element2 : iks2) { + if (isStringConstant(element2)) { try { MonitorUtil.throwExceptionIfCanceled(builder.monitor); } catch (CancelException e) { throw new CancelRuntimeException(e); } - String v1 = (String) ((ConstantKey) iks1[i]).getValue(); - String v2 = (String) ((ConstantKey) iks2[j]).getValue(); + String v1 = (String) ((ConstantKey) element).getValue(); + String v2 = (String) ((ConstantKey) element2).getValue(); if (v1.indexOf(v2) == -1 && v2.indexOf(v1) == -1) { InstanceKey lvalKey = getInstanceKeyForConstant(v1 + v2); if (addKey(lvalKey)) { @@ -842,14 +842,14 @@ public class JSSSAPropagationCallGraphBuilder extends AstSSAPropagationCallGraph } if (doDefault) { - for (int i = 0; i < iks1.length; i++) { - for (int j = 0; j < iks2.length; j++) { + for (InstanceKey element : iks1) { + for (InstanceKey element2 : iks2) { try { MonitorUtil.throwExceptionIfCanceled(builder.monitor); } catch (CancelException e) { throw new CancelRuntimeException(e); } - if (handleBinaryOperatorArgs(iks1[i], iks2[j])) { + if (handleBinaryOperatorArgs(element, element2)) { changed = CHANGED; } } @@ -1097,8 +1097,8 @@ public class JSSSAPropagationCallGraphBuilder extends AstSSAPropagationCallGraph InstanceKey[] nullkeys = builder.getInvariantContents(sourceST, sourceDU, caller, nullvn, builder); for (int i = argCount; i < paramCount; i++) { PointerKey F = builder.getPointerKeyForLocal(target, targetST.getParameter(i)); - for (int k = 0; k < nullkeys.length; k++) { - builder.getSystem().newConstraint(F, nullkeys[k]); + for (InstanceKey nullkey : nullkeys) { + builder.getSystem().newConstraint(F, nullkey); } } } diff --git a/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/ipa/callgraph/JSZeroOrOneXCFABuilder.java b/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/ipa/callgraph/JSZeroOrOneXCFABuilder.java index 6b7d5b9cb..67ebfa746 100644 --- a/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/ipa/callgraph/JSZeroOrOneXCFABuilder.java +++ b/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/ipa/callgraph/JSZeroOrOneXCFABuilder.java @@ -110,8 +110,8 @@ public class JSZeroOrOneXCFABuilder extends JSCFABuilder { public static JSCFABuilder make(JSAnalysisOptions options, IAnalysisCacheView cache, IClassHierarchy cha, ClassLoader cl, AnalysisScope scope, String[] xmlFiles, byte instancePolicy, boolean doOneCFA) { com.ibm.wala.ipa.callgraph.impl.Util.addDefaultSelectors(options, cha); - for (int i = 0; i < xmlFiles.length; i++) { - com.ibm.wala.ipa.callgraph.impl.Util.addBypassLogic(options, scope, cl, xmlFiles[i], cha); + for (String xmlFile : xmlFiles) { + com.ibm.wala.ipa.callgraph.impl.Util.addBypassLogic(options, scope, cl, xmlFile, cha); } return new JSZeroOrOneXCFABuilder(cha, options, cache, null, null, instancePolicy, doOneCFA); diff --git a/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/ipa/callgraph/correlations/extraction/ClosureExtractor.java b/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/ipa/callgraph/correlations/extraction/ClosureExtractor.java index 826e0eb49..110e318ce 100644 --- a/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/ipa/callgraph/correlations/extraction/ClosureExtractor.java +++ b/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/ipa/callgraph/correlations/extraction/ClosureExtractor.java @@ -464,8 +464,8 @@ public class ClosureExtractor extends CAstRewriterExt { CAstNode[] before = new CAstNode[tler.getStartInner()]; for(i=0;i[] instanceMethods = (Pair[]) entry[4]; if (instanceMethods != null) { - for (int i = 0; i < instanceMethods.length; i++) { - this.instanceMethods.put(Pair.make(clsName, (Object) instanceMethods[i].fst), instanceMethods[i].snd); + for (Pair instanceMethod : instanceMethods) { + this.instanceMethods.put(Pair.make(clsName, (Object) instanceMethod.fst), instanceMethod.snd); } } Pair[] staticMethods = (Pair[]) entry[5]; if (staticMethods != null) { - for (int i = 0; i < staticMethods.length; i++) { - this.staticMethods.put(Pair.make(clsName, (Object) staticMethods[i].fst), staticMethods[i].snd); + for (Pair staticMethod : staticMethods) { + this.staticMethods.put(Pair.make(clsName, (Object) staticMethod.fst), staticMethod.snd); } } } @@ -138,19 +136,19 @@ public abstract class TestCAstTranslator extends WalaTestCase { } protected void dump(ClassHierarchy cha) { - for (Iterator clss = cha.iterator(); clss.hasNext();) { - IClass cls = (IClass) clss.next(); + for (Object name : cha) { + IClass cls = (IClass) name; System.err.println(("class " + cls)); - for (Iterator flds = cls.getDeclaredInstanceFields().iterator(); flds.hasNext();) { - IField fld = (IField) flds.next(); + for (Object name2 : cls.getDeclaredInstanceFields()) { + IField fld = (IField) name2; System.err.println(("instance field " + fld)); } - for (Iterator flds = cls.getDeclaredStaticFields().iterator(); flds.hasNext();) { - IField fld = (IField) flds.next(); + for (Object name2 : cls.getDeclaredStaticFields()) { + IField fld = (IField) name2; System.err.println(("static field " + fld)); } - for (Iterator mths = cls.getDeclaredMethods().iterator(); mths.hasNext();) { - IMethod mth = (IMethod) mths.next(); + for (Object name2 : cls.getDeclaredMethods()) { + IMethod mth = (IMethod) name2; if (mth.isStatic()) System.err.print("static "); System.err.println(("method " + mth + " with " + mth.getNumberOfParameters() + " parameters")); @@ -171,8 +169,8 @@ public abstract class TestCAstTranslator extends WalaTestCase { Map, Object> staticMethods = assertions.getStaticMethods(); int clsCount = 0; - for (Iterator clss = cha.iterator(); clss.hasNext();) { - IClass cls = (IClass) clss.next(); + for (Object name : cha) { + IClass cls = (IClass) name; clsCount++; Assert.assertTrue("found class " + cls.getName().toString(), classes.contains(cls.getName().toString())); @@ -183,20 +181,20 @@ public abstract class TestCAstTranslator extends WalaTestCase { .get(cls.getName().toString()).equals(cls.getSuperclass().getName().toString())); } - for (Iterator flds = cls.getDeclaredInstanceFields().iterator(); flds.hasNext();) { - IField fld = (IField) flds.next(); + for (Object name2 : cls.getDeclaredInstanceFields()) { + IField fld = (IField) name2; Assert.assertTrue(cls.getName() + " has field " + fld.getName(), instanceFields.contains(Pair.make( cls.getName().toString(), fld.getName().toString()))); } - for (Iterator flds = cls.getDeclaredStaticFields().iterator(); flds.hasNext();) { - IField fld = (IField) flds.next(); + for (Object name2 : cls.getDeclaredStaticFields()) { + IField fld = (IField) name2; Assert.assertTrue(cls.getName() + " has static field " + fld.getName(), staticFields.contains(Pair.make(cls.getName() .toString(), fld.getName().toString()))); } - for (Iterator mths = cls.getDeclaredMethods().iterator(); mths.hasNext();) { - IMethod mth = (IMethod) mths.next(); + for (Object name2 : cls.getDeclaredMethods()) { + IMethod mth = (IMethod) name2; Integer np = new Integer(mth.getNumberOfParameters()); Pair key = Pair.make(cls.getName().toString(), mth.getName().toString()); diff --git a/com.ibm.wala.cast.test/harness-src/java/com/ibm/wala/cast/test/TestCallGraphShape.java b/com.ibm.wala.cast.test/harness-src/java/com/ibm/wala/cast/test/TestCallGraphShape.java index 559487b59..d9895f78c 100644 --- a/com.ibm.wala.cast.test/harness-src/java/com/ibm/wala/cast/test/TestCallGraphShape.java +++ b/com.ibm.wala.cast.test/harness-src/java/com/ibm/wala/cast/test/TestCallGraphShape.java @@ -100,26 +100,26 @@ public abstract class TestCallGraphShape extends WalaTestCase { } protected void verifyNameAssertions(CallGraph CG, Object[][] assertionData) { - for (int i = 0; i < assertionData.length; i++) { - Iterator NS = getNodes(CG, (String) assertionData[i][0]).iterator(); + for (Object[] element : assertionData) { + Iterator NS = getNodes(CG, (String) element[0]).iterator(); while (NS.hasNext()) { CGNode N = NS.next(); IR ir = N.getIR(); - Name[] names = (Name[]) assertionData[i][1]; - for (int j = 0; j < names.length; j++) { + Name[] names = (Name[]) element[1]; + for (Name name : names) { - System.err.println("looking for " + names[j].name + ", " + names[j].vn + " in " + N); + System.err.println("looking for " + name.name + ", " + name.vn + " in " + N); - String[] localNames = ir.getLocalNames(names[j].instructionIndex, names[j].vn); + String[] localNames = ir.getLocalNames(name.instructionIndex, name.vn); boolean found = false; - for (int k = 0; k < localNames.length; k++) { - if (localNames[k].equals(names[j].name)) { + for (String localName : localNames) { + if (localName.equals(name.name)) { found = true; } } - Assert.assertTrue("no name " + names[j].name + " for " + N + "\n" + ir, found); + Assert.assertTrue("no name " + name.name + " for " + N + "\n" + ir, found); } } } @@ -159,8 +159,8 @@ public abstract class TestCallGraphShape extends WalaTestCase { while (dsts.hasNext()) { CGNode dst = dsts.next(); - for (Iterator tos = CG.getPossibleTargets(src, sr).iterator(); tos.hasNext();) { - if (tos.next().equals(dst)) { + for (CGNode cgNode : CG.getPossibleTargets(src, sr)) { + if (cgNode.equals(dst)) { if (checkAbsence) { System.err.println(("found unexpected " + src + " --> " + dst + " at " + sr)); Assert.assertTrue("found edge " + assertionData[i][0] + " ---> " + targetName, false); diff --git a/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ipa/callgraph/AstCallGraph.java b/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ipa/callgraph/AstCallGraph.java index 28a180bb9..29e2a0697 100644 --- a/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ipa/callgraph/AstCallGraph.java +++ b/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ipa/callgraph/AstCallGraph.java @@ -90,8 +90,8 @@ public class AstCallGraph extends ExplicitCallGraph { boolean done = false; while (!done) { try { - for (Iterator> x = callbacks.iterator(); x.hasNext();) { - x.next().apply(null); + for (Function function : callbacks) { + function.apply(null); } } catch (ConcurrentModificationException e) { done = false; diff --git a/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ipa/callgraph/AstSSAPropagationCallGraphBuilder.java b/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ipa/callgraph/AstSSAPropagationCallGraphBuilder.java index e2d98976c..52ba8bd0e 100644 --- a/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ipa/callgraph/AstSSAPropagationCallGraphBuilder.java +++ b/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ipa/callgraph/AstSSAPropagationCallGraphBuilder.java @@ -384,9 +384,9 @@ public abstract class AstSSAPropagationCallGraphBuilder extends SSAPropagationCa if (contentsAreInvariant(lsymtab, ldu, lvn)) { InstanceKey[] ik = getInvariantContents(lsymtab, ldu, lnode, lvn); system.recordImplicitPointsToSet(lexicalKey); - for (int i = 0; i < ik.length; i++) { - system.findOrCreateIndexForInstanceKey(ik[i]); - system.newConstraint(lval, ik[i]); + for (InstanceKey element : ik) { + system.findOrCreateIndexForInstanceKey(element); + system.newConstraint(lval, element); } return; @@ -407,9 +407,9 @@ public abstract class AstSSAPropagationCallGraphBuilder extends SSAPropagationCa if (contentsAreInvariant(symbolTable, du, vn)) { InstanceKey[] ik = getInvariantContents(vn); system.recordImplicitPointsToSet(rval); - for (int i = 0; i < ik.length; i++) { - system.findOrCreateIndexForInstanceKey(ik[i]); - system.newConstraint(lexicalKey, ik[i]); + for (InstanceKey element : ik) { + system.findOrCreateIndexForInstanceKey(element); + system.newConstraint(lexicalKey, element); } } else { system.newConstraint(lexicalKey, assignOperator, rval); @@ -527,8 +527,8 @@ public abstract class AstSSAPropagationCallGraphBuilder extends SSAPropagationCa if (contentsAreInvariant(symbolTable, du, rval)) { InstanceKey objects[] = getInvariantContents(rval); - for (int i = 0; i < objects.length; i++) { - PointerKey catalog = getPointerKeyForObjectCatalog(objects[i]); + for (InstanceKey object : objects) { + PointerKey catalog = getPointerKeyForObjectCatalog(object); system.newConstraint(lk, assignOperator, catalog); } } @@ -619,10 +619,10 @@ public abstract class AstSSAPropagationCallGraphBuilder extends SSAPropagationCa * . */ private void doLexicalPointerKeys() { - for (int i = 0; i < accesses.length; i++) { - final String name = accesses[i].variableName; - final String definer = accesses[i].variableDefiner; - final int vn = accesses[i].valueNumber; + for (Access accesse : accesses) { + final String name = accesse.variableName; + final String definer = accesse.variableDefiner; + final int vn = accesse.valueNumber; if (AstTranslator.DEBUG_LEXICAL) System.err.println(("looking up lexical parent " + definer)); @@ -707,9 +707,9 @@ public abstract class AstSSAPropagationCallGraphBuilder extends SSAPropagationCa if (contentsAreInvariant(symtab, du, 1)) { system.recordImplicitPointsToSet(F); final InstanceKey[] functionKeys = getInvariantContents(symtab, du, opNode, 1); - for (int f = 0; f < functionKeys.length; f++) { - system.findOrCreateIndexForInstanceKey(functionKeys[f]); - ScopeMappingInstanceKey K = (ScopeMappingInstanceKey) functionKeys[f]; + for (InstanceKey functionKey : functionKeys) { + system.findOrCreateIndexForInstanceKey(functionKey); + ScopeMappingInstanceKey K = (ScopeMappingInstanceKey) functionKey; Iterator x = K.getFunargNodes(definer); while (x.hasNext()) { result.add(x.next()); @@ -764,9 +764,9 @@ public abstract class AstSSAPropagationCallGraphBuilder extends SSAPropagationCa if (contentsAreInvariant(st, du, vn)) { system.recordImplicitPointsToSet(rhs); final InstanceKey[] objs = getInvariantContents(st, du, definingNode, vn); - for (int f = 0; f < objs.length; f++) { - system.findOrCreateIndexForInstanceKey(objs[f]); - system.newConstraint(lhs, objs[f]); + for (InstanceKey obj : objs) { + system.findOrCreateIndexForInstanceKey(obj); + system.newConstraint(lhs, obj); } } else { system.newConstraint(lhs, assignOperator, rhs); @@ -861,8 +861,8 @@ public abstract class AstSSAPropagationCallGraphBuilder extends SSAPropagationCa if (contentsAreInvariant(symtab, du, objVn)) { System.err.print(" constant obj:"); InstanceKey[] x = getInvariantContents(symtab, du, opNode, objVn); - for (int i = 0; i < x.length; i++) { - System.err.print((x[i].toString() + " ")); + for (InstanceKey element : x) { + System.err.print((element.toString() + " ")); } } else { System.err.print((" obj:" + system.findOrCreatePointsToSet(objKey))); @@ -871,8 +871,8 @@ public abstract class AstSSAPropagationCallGraphBuilder extends SSAPropagationCa if (contentsAreInvariant(symtab, du, fieldsVn)) { System.err.print(" constant prop:"); InstanceKey[] x = getInvariantContents(symtab, du, opNode, fieldsVn); - for (int i = 0; i < x.length; i++) { - System.err.print((x[i].toString() + " ")); + for (InstanceKey element : x) { + System.err.print((element.toString() + " ")); } } else { System.err.print((" props:" + system.findOrCreatePointsToSet(fieldKey))); @@ -884,14 +884,14 @@ public abstract class AstSSAPropagationCallGraphBuilder extends SSAPropagationCa // make sure instance keys get mapped for PointerAnalysisImpl if (contentsAreInvariant(symtab, du, objVn)) { InstanceKey[] x = getInvariantContents(symtab, du, opNode, objVn); - for (int i = 0; i < x.length; i++) { - system.findOrCreateIndexForInstanceKey(x[i]); + for (InstanceKey element : x) { + system.findOrCreateIndexForInstanceKey(element); } } if (contentsAreInvariant(symtab, du, fieldsVn)) { InstanceKey[] x = getInvariantContents(symtab, du, opNode, fieldsVn); - for (int i = 0; i < x.length; i++) { - system.findOrCreateIndexForInstanceKey(x[i]); + for (InstanceKey element : x) { + system.findOrCreateIndexForInstanceKey(element); } } @@ -1022,9 +1022,9 @@ public abstract class AstSSAPropagationCallGraphBuilder extends SSAPropagationCa public void act(int optr) { InstanceKey object = system.getInstanceKey(optr); PointerKey objCatalog = getPointerKeyForObjectCatalog(object); - for (int f = 0; f < fieldsKeys.length; f++) { + for (InstanceKey fieldsKey : fieldsKeys) { if (isLoadOperation) { - for (Iterator keys = getPointerKeysForReflectedFieldRead(object, fieldsKeys[f]); keys.hasNext();) { + for (Iterator keys = getPointerKeysForReflectedFieldRead(object, fieldsKey); keys.hasNext();) { AbstractFieldPointerKey key = (AbstractFieldPointerKey) keys.next(); if (DEBUG_PROPERTIES) action.dump(key, true, false); @@ -1032,9 +1032,9 @@ public abstract class AstSSAPropagationCallGraphBuilder extends SSAPropagationCa } } else { if (objCatalog != null) { - system.newConstraint(objCatalog, fieldsKeys[f]); + system.newConstraint(objCatalog, fieldsKey); } - for (Iterator keys = getPointerKeysForReflectedFieldWrite(object, fieldsKeys[f]); keys.hasNext();) { + for (Iterator keys = getPointerKeysForReflectedFieldWrite(object, fieldsKey); keys.hasNext();) { AbstractFieldPointerKey key = (AbstractFieldPointerKey) keys.next(); if (DEBUG_PROPERTIES) action.dump(key, true, false); @@ -1068,8 +1068,8 @@ public abstract class AstSSAPropagationCallGraphBuilder extends SSAPropagationCa protected void newFieldOperationOnlyObjectConstant(final boolean isLoadOperation, final ReflectedFieldAction action, final PointerKey fieldKey, final InstanceKey[] objKeys) { if (!isLoadOperation) { - for (int o = 0; o < objKeys.length; o++) { - PointerKey objCatalog = getPointerKeyForObjectCatalog(objKeys[o]); + for (InstanceKey objKey : objKeys) { + PointerKey objCatalog = getPointerKeyForObjectCatalog(objKey); if (objCatalog != null) { system.newConstraint(objCatalog, assignOperator, fieldKey); } @@ -1085,9 +1085,9 @@ public abstract class AstSSAPropagationCallGraphBuilder extends SSAPropagationCa @Override public void act(int fptr) { InstanceKey field = system.getInstanceKey(fptr); - for (int o = 0; o < objKeys.length; o++) { - for (Iterator keys = isLoadOperation ? getPointerKeysForReflectedFieldRead(objKeys[o], field) - : getPointerKeysForReflectedFieldWrite(objKeys[o], field); keys.hasNext();) { + for (InstanceKey objKey : objKeys) { + for (Iterator keys = isLoadOperation ? getPointerKeysForReflectedFieldRead(objKey, field) + : getPointerKeysForReflectedFieldWrite(objKey, field); keys.hasNext();) { AbstractFieldPointerKey key = (AbstractFieldPointerKey) keys.next(); if (DEBUG_PROPERTIES) action.dump(key, false, true); @@ -1119,11 +1119,11 @@ public abstract class AstSSAPropagationCallGraphBuilder extends SSAPropagationCa protected void newFieldOperationObjectAndFieldConstant(final boolean isLoadOperation, final ReflectedFieldAction action, final InstanceKey[] objKeys, InstanceKey[] fieldsKeys) { - for (int o = 0; o < objKeys.length; o++) { - PointerKey objCatalog = getPointerKeyForObjectCatalog(objKeys[o]); - for (int f = 0; f < fieldsKeys.length; f++) { + for (InstanceKey objKey : objKeys) { + PointerKey objCatalog = getPointerKeyForObjectCatalog(objKey); + for (InstanceKey fieldsKey : fieldsKeys) { if (isLoadOperation) { - for (Iterator keys = getPointerKeysForReflectedFieldRead(objKeys[o], fieldsKeys[f]); keys.hasNext();) { + for (Iterator keys = getPointerKeysForReflectedFieldRead(objKey, fieldsKey); keys.hasNext();) { AbstractFieldPointerKey key = (AbstractFieldPointerKey) keys.next(); if (DEBUG_PROPERTIES) action.dump(key, true, true); @@ -1131,9 +1131,9 @@ public abstract class AstSSAPropagationCallGraphBuilder extends SSAPropagationCa } } else { if (objCatalog != null) { - system.newConstraint(objCatalog, fieldsKeys[f]); + system.newConstraint(objCatalog, fieldsKey); } - for (Iterator keys = getPointerKeysForReflectedFieldWrite(objKeys[o], fieldsKeys[f]); keys.hasNext();) { + for (Iterator keys = getPointerKeysForReflectedFieldWrite(objKey, fieldsKey); keys.hasNext();) { AbstractFieldPointerKey key = (AbstractFieldPointerKey) keys.next(); if (DEBUG_PROPERTIES) action.dump(key, true, true); @@ -1167,17 +1167,17 @@ public abstract class AstSSAPropagationCallGraphBuilder extends SSAPropagationCa @Override public void dump(AbstractFieldPointerKey fieldKey, boolean constObj, boolean constProp) { System.err.println(("writing fixed rvals to " + fieldKey + " " + constObj + ", " + constProp)); - for (int i = 0; i < rhsFixedValues.length; i++) { - System.err.println(("writing " + rhsFixedValues[i])); + for (InstanceKey rhsFixedValue : rhsFixedValues) { + System.err.println(("writing " + rhsFixedValue)); } } @Override public void action(AbstractFieldPointerKey fieldKey) { if (!representsNullType(fieldKey.getInstanceKey())) { - for (int i = 0; i < rhsFixedValues.length; i++) { - system.findOrCreateIndexForInstanceKey(rhsFixedValues[i]); - system.newConstraint(fieldKey, rhsFixedValues[i]); + for (InstanceKey rhsFixedValue : rhsFixedValues) { + system.findOrCreateIndexForInstanceKey(rhsFixedValue); + system.newConstraint(fieldKey, rhsFixedValue); } } } diff --git a/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ipa/callgraph/CAstAnalysisScope.java b/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ipa/callgraph/CAstAnalysisScope.java index 89c69301c..39380de0b 100644 --- a/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ipa/callgraph/CAstAnalysisScope.java +++ b/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ipa/callgraph/CAstAnalysisScope.java @@ -32,16 +32,16 @@ public class CAstAnalysisScope extends AnalysisScope { public CAstAnalysisScope(String[] sourceFileNames, SingleClassLoaderFactory loaders, Collection languages) { this(loaders, languages); - for (int i = 0; i < sourceFileNames.length; i++) { - File F = new File(sourceFileNames[i]); + for (String sourceFileName : sourceFileNames) { + File F = new File(sourceFileName); addSourceFileToScope(theLoader, F, F.getPath()); } } public CAstAnalysisScope(Module[] sources, SingleClassLoaderFactory loaders, Collection languages) { this(loaders, languages); - for (int i = 0; i < sources.length; i++) { - addToScope(theLoader, sources[i]); + for (Module source : sources) { + addToScope(theLoader, source); } } diff --git a/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ipa/callgraph/MiscellaneousHacksContextSelector.java b/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ipa/callgraph/MiscellaneousHacksContextSelector.java index 1adf24167..e4563836c 100644 --- a/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ipa/callgraph/MiscellaneousHacksContextSelector.java +++ b/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ipa/callgraph/MiscellaneousHacksContextSelector.java @@ -45,8 +45,7 @@ public class MiscellaneousHacksContextSelector implements ContextSelector { basePolicy = base; specialPolicy = special; methodsToSpecialize = HashSetFactory.make(); - for (int i = 0; i < descriptors.length; i++) { - String[] descr = descriptors[i]; + for (String[] descr : descriptors) { switch (descr.length) { // loader name, loader language, classname, method name, method descr diff --git a/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ir/ssa/AstEchoInstruction.java b/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ir/ssa/AstEchoInstruction.java index 63a4429be..e36e136e3 100644 --- a/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ir/ssa/AstEchoInstruction.java +++ b/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ir/ssa/AstEchoInstruction.java @@ -56,8 +56,8 @@ public class AstEchoInstruction extends SSAInstruction { @Override public int hashCode() { int v = 1; - for(int i = 0;i < rvals.length; i++) { - v *= rvals[i]; + for (int rval : rvals) { + v *= rval; } return v; @@ -66,8 +66,8 @@ public class AstEchoInstruction extends SSAInstruction { @Override public String toString(SymbolTable symbolTable) { StringBuffer result = new StringBuffer("echo/print "); - for(int i = 0; i < rvals.length; i++) { - result.append(getValueString(symbolTable, rvals[i])).append(" "); + for (int rval : rvals) { + result.append(getValueString(symbolTable, rval)).append(" "); } return result.toString(); diff --git a/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ir/ssa/AstLexicalAccess.java b/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ir/ssa/AstLexicalAccess.java index 3a693e029..7eae6cf09 100644 --- a/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ir/ssa/AstLexicalAccess.java +++ b/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ir/ssa/AstLexicalAccess.java @@ -116,8 +116,8 @@ public abstract class AstLexicalAccess extends SSAInstruction { @Override public int hashCode() { int v = 1; - for(int i = 0; i < accesses.length; i++) - v *= accesses[i].variableName.hashCode(); + for (Access accesse : accesses) + v *= accesse.variableName.hashCode(); return v; } diff --git a/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ir/ssa/SSAConversion.java b/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ir/ssa/SSAConversion.java index 6b3bfeb63..df01b9431 100644 --- a/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ir/ssa/SSAConversion.java +++ b/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ir/ssa/SSAConversion.java @@ -209,8 +209,7 @@ public class SSAConversion extends AbstractSSAConversion { if (DEBUG_UNDO) System.err.println(("recreating assignment at " + instructionIndex + " as " + lhs + " = " + rhs)); - for (Iterator uses = renamedUses.iterator(); uses.hasNext();) { - Object x = uses.next(); + for (Object x : renamedUses) { if (x instanceof UseRecord) { UseRecord use = (UseRecord) x; int idx = use.instructionIndex; @@ -235,8 +234,8 @@ public class SSAConversion extends AbstractSSAConversion { } } - for (Iterator cs = childRecords.iterator(); cs.hasNext();) { - cs.next().undo(lhs); + for (CopyPropagationRecord copyPropagationRecord : childRecords) { + copyPropagationRecord.undo(lhs); } } @@ -545,9 +544,9 @@ public class SSAConversion extends AbstractSSAConversion { int[] exitLive = lexicalInfo.getExitExposedUses(); BitVector v = new BitVector(); if (exitLive != null) { - for (int i = 0; i < exitLive.length; i++) { - if (exitLive[i] > -1) { - v.set(exitLive[i]); + for (int element : exitLive) { + if (element > -1) { + v.set(element); } } } @@ -624,8 +623,8 @@ public class SSAConversion extends AbstractSSAConversion { int[] lexicalUses = lexicalInfo.getExposedUses(i); if (lexicalUses != null) { System.err.print(("extra uses for " + instructions[i] + ": ")); - for (int j = 0; j < lexicalUses.length; j++) { - System.err.print((new Integer(lexicalUses[j]).toString() + " ")); + for (int lexicalUse : lexicalUses) { + System.err.print((new Integer(lexicalUse).toString() + " ")); } System.err.println(""); } @@ -640,8 +639,7 @@ public class SSAConversion extends AbstractSSAConversion { SSAInstruction[] insts = ir.getInstructions(); MutableIntSet foundOne = new BitVectorIntSet(); MutableIntSet foundTwo = new BitVectorIntSet(); - for (int i = 0; i < insts.length; i++) { - SSAInstruction inst = insts[i]; + for (SSAInstruction inst : insts) { if (inst != null) { for (int j = 0; j < inst.getNumberOfDefs(); j++) { int def = inst.getDef(j); diff --git a/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ir/translator/AstTranslator.java b/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ir/translator/AstTranslator.java index 2c5b5ad06..eb7e73ca2 100644 --- a/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ir/translator/AstTranslator.java +++ b/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ir/translator/AstTranslator.java @@ -944,8 +944,7 @@ public abstract class AstTranslator extends CAstVisitor> ss = delayedEdges.get(n).iterator(); ss.hasNext();) { - Pair s = ss.next(); + for (Pair s : delayedEdges.get(n)) { PreBasicBlock src = s.fst; boolean exception = s.snd; if (unwind == null) { @@ -965,8 +964,7 @@ public abstract class AstTranslator extends CAstVisitor> ss = delayedEdges.get(exitMarker).iterator(); ss.hasNext();) { - Pair s = ss.next(); + for (Pair s : delayedEdges.get(exitMarker)) { PreBasicBlock src = s.fst; boolean exception = s.snd; addEdge(src, exitBlock); @@ -1362,8 +1360,8 @@ public abstract class AstTranslator extends CAstVisitor parents = new LinkedHashSet<>(); - for (Iterator ACS = accesses.iterator(); ACS.hasNext();) { - Access AC = ACS.next(); + for (Access AC : accesses) { if (AC.variableDefiner != null) { parents.add(AC.variableDefiner); } @@ -2928,18 +2925,18 @@ public abstract class AstTranslator extends CAstVisitor 0) { - allExposedUses.add(exitLexicalUses[i]); + for (int exitLexicalUse : exitLexicalUses) { + if (exitLexicalUse > 0) { + allExposedUses.add(exitLexicalUse); } } } if (instructionLexicalUses != null) { - for (int i = 0; i < instructionLexicalUses.length; i++) { - if (instructionLexicalUses[i] != null) { - for (int j = 0; j < instructionLexicalUses[i].length; j++) { - if (instructionLexicalUses[i][j] > 0) { - allExposedUses.add(instructionLexicalUses[i][j]); + for (int[] instructionLexicalUse : instructionLexicalUses) { + if (instructionLexicalUse != null) { + for (int j = 0; j < instructionLexicalUse.length; j++) { + if (instructionLexicalUse[j] > 0) { + allExposedUses.add(instructionLexicalUse[j]); } } } @@ -3120,8 +3117,7 @@ public abstract class AstTranslator extends CAstVisitor S = scopes.iterator(); S.hasNext();) { - Scope scope = S.next(); + for (Scope scope : scopes) { for (Iterator I = scope.getAllNames(); I.hasNext();) { String nm = I.next(); diff --git a/com.ibm.wala.cast/source/java/com/ibm/wala/cast/loader/AstClass.java b/com.ibm.wala.cast/source/java/com/ibm/wala/cast/loader/AstClass.java index c70a949f5..cea3a713f 100644 --- a/com.ibm.wala.cast/source/java/com/ibm/wala/cast/loader/AstClass.java +++ b/com.ibm.wala.cast/source/java/com/ibm/wala/cast/loader/AstClass.java @@ -13,7 +13,6 @@ package com.ibm.wala.cast.loader; import java.io.Reader; import java.net.URL; import java.util.Collection; -import java.util.Iterator; import java.util.Map; import java.util.Set; @@ -184,8 +183,7 @@ abstract public class AstClass implements IClass, ClassConstants { @Override public Collection getDeclaredInstanceFields() { Set result = HashSetFactory.make(); - for (Iterator FS = declaredFields.values().iterator(); FS.hasNext();) { - IField F = FS.next(); + for (IField F : declaredFields.values()) { if (!F.isStatic()) { result.add(F); } @@ -197,8 +195,7 @@ abstract public class AstClass implements IClass, ClassConstants { @Override public Collection getDeclaredStaticFields() { Set result = HashSetFactory.make(); - for (Iterator FS = declaredFields.values().iterator(); FS.hasNext();) { - IField F = FS.next(); + for (IField F : declaredFields.values()) { if (F.isStatic()) { result.add(F); } @@ -240,8 +237,8 @@ abstract public class AstClass implements IClass, ClassConstants { @Override public Collection getAllMethods() { Collection result = HashSetFactory.make(); - for (Iterator ms = getDeclaredMethods().iterator(); ms.hasNext();) { - result.add(ms.next()); + for (IMethod iMethod : getDeclaredMethods()) { + result.add(iMethod); } if (getSuperclass() != null) { result.addAll(getSuperclass().getAllMethods()); diff --git a/com.ibm.wala.cast/source/java/com/ibm/wala/cast/loader/CAstAbstractLoader.java b/com.ibm.wala.cast/source/java/com/ibm/wala/cast/loader/CAstAbstractLoader.java index 1ec6a3b2c..fe2d1ba18 100644 --- a/com.ibm.wala.cast/source/java/com/ibm/wala/cast/loader/CAstAbstractLoader.java +++ b/com.ibm.wala.cast/source/java/com/ibm/wala/cast/loader/CAstAbstractLoader.java @@ -196,8 +196,7 @@ public abstract class CAstAbstractLoader implements IClassLoader { public void removeAll(Collection toRemove) { Set keys = HashSetFactory.make(); - for (Iterator> EE = types.entrySet().iterator(); EE.hasNext();) { - Map.Entry E = EE.next(); + for (Entry E : types.entrySet()) { if (toRemove.contains(E.getValue())) { keys.add(E.getKey()); } diff --git a/com.ibm.wala.cast/source/java/com/ibm/wala/cast/loader/CAstAbstractModuleLoader.java b/com.ibm.wala.cast/source/java/com/ibm/wala/cast/loader/CAstAbstractModuleLoader.java index e3e379f9e..21c9dd777 100644 --- a/com.ibm.wala.cast/source/java/com/ibm/wala/cast/loader/CAstAbstractModuleLoader.java +++ b/com.ibm.wala.cast/source/java/com/ibm/wala/cast/loader/CAstAbstractModuleLoader.java @@ -96,15 +96,14 @@ public abstract class CAstAbstractModuleLoader extends CAstAbstractLoader { // convert everything to CAst final Set> topLevelEntities = new LinkedHashSet<>(); - for (Iterator mes = modules.iterator(); mes.hasNext();) { - translateModuleToCAst(mes.next(), ast, topLevelEntities); + for (Module module : modules) { + translateModuleToCAst(module, ast, topLevelEntities); } // generate IR as needed final TranslatorToIR xlatorToIR = initTranslator(); - for (Iterator> tles = topLevelEntities.iterator(); tles.hasNext();) { - Pair p = tles.next(); + for (Pair p : topLevelEntities) { if (shouldTranslate(p.fst)) { xlatorToIR.translate(p.fst, p.snd); } diff --git a/com.ibm.wala.cast/source/java/com/ibm/wala/cast/tree/impl/CAstControlFlowRecorder.java b/com.ibm.wala.cast/source/java/com/ibm/wala/cast/tree/impl/CAstControlFlowRecorder.java index 46a416332..ad0d7a244 100644 --- a/com.ibm.wala.cast/source/java/com/ibm/wala/cast/tree/impl/CAstControlFlowRecorder.java +++ b/com.ibm.wala.cast/source/java/com/ibm/wala/cast/tree/impl/CAstControlFlowRecorder.java @@ -12,7 +12,6 @@ package com.ibm.wala.cast.tree.impl; import java.util.Collection; import java.util.Collections; -import java.util.Iterator; import java.util.LinkedHashMap; import java.util.LinkedHashSet; import java.util.Map; @@ -127,8 +126,7 @@ public class CAstControlFlowRecorder implements CAstControlFlowMap { Collection nodes = cachedMappedNodes; if (nodes == null) { nodes = new LinkedHashSet<>(); - for (Iterator keys = table.keySet().iterator(); keys.hasNext();) { - Key key = keys.next(); + for (Key key : table.keySet()) { nodes.add(nodeToCAst.get(key.from)); nodes.add(nodeToCAst.get(table.get(key))); } diff --git a/com.ibm.wala.cast/source/java/com/ibm/wala/cast/tree/impl/CAstValueImpl.java b/com.ibm.wala.cast/source/java/com/ibm/wala/cast/tree/impl/CAstValueImpl.java index 2cd6f59f8..4d50fdbc7 100644 --- a/com.ibm.wala.cast/source/java/com/ibm/wala/cast/tree/impl/CAstValueImpl.java +++ b/com.ibm.wala.cast/source/java/com/ibm/wala/cast/tree/impl/CAstValueImpl.java @@ -33,8 +33,8 @@ public class CAstValueImpl extends CAstImpl { @Override public int hashCode() { int value = 1237 * kind; - for(int i = 0; i < cs.length; i++) - value *= cs[i].hashCode(); + for (CAstNode element : cs) + value *= element.hashCode(); return value; } diff --git a/com.ibm.wala.cast/source/java/com/ibm/wala/cast/tree/rewrite/CAstRewriter.java b/com.ibm.wala.cast/source/java/com/ibm/wala/cast/tree/rewrite/CAstRewriter.java index 94117f7b8..427f20320 100644 --- a/com.ibm.wala.cast/source/java/com/ibm/wala/cast/tree/rewrite/CAstRewriter.java +++ b/com.ibm.wala.cast/source/java/com/ibm/wala/cast/tree/rewrite/CAstRewriter.java @@ -159,8 +159,7 @@ public abstract class CAstRewriter, K e Set allNewTargetNodes = HashSetFactory.make(1); Collection oldSources = orig.getMappedNodes(); - for (Iterator, CAstNode>> NS = nodeMap.entrySet().iterator(); NS.hasNext();) { - Entry, CAstNode> entry = NS.next(); + for (Entry, CAstNode> entry : nodeMap.entrySet()) { Pair N = entry.getKey(); CAstNode oldSource = N.fst; K key = N.snd; @@ -272,8 +271,7 @@ public abstract class CAstRewriter, K e protected CAstSourcePositionMap copySource(Map, CAstNode> nodeMap, CAstSourcePositionMap orig) { CAstSourcePositionRecorder newMap = new CAstSourcePositionRecorder(); - for (Iterator, CAstNode>> NS = nodeMap.entrySet().iterator(); NS.hasNext();) { - Map.Entry, CAstNode> entry = NS.next(); + for (Entry, CAstNode> entry : nodeMap.entrySet()) { Pair N = entry.getKey(); CAstNode oldNode = N.fst; @@ -290,8 +288,7 @@ public abstract class CAstRewriter, K e protected CAstNodeTypeMap copyTypes(Map, CAstNode> nodeMap, CAstNodeTypeMap orig) { if (orig != null) { CAstNodeTypeMapRecorder newMap = new CAstNodeTypeMapRecorder(); - for (Iterator, CAstNode>> NS = nodeMap.entrySet().iterator(); NS.hasNext();) { - Entry, CAstNode> entry = NS.next(); + for (Entry, CAstNode> entry : nodeMap.entrySet()) { Pair N = entry.getKey(); CAstNode oldNode = N.fst; @@ -312,8 +309,7 @@ public abstract class CAstRewriter, K e Map> children) { final Map> newChildren = new LinkedHashMap<>(); - for (Iterator, CAstNode>> NS = nodeMap.entrySet().iterator(); NS.hasNext();) { - Entry, CAstNode> entry = NS.next(); + for (Entry, CAstNode> entry : nodeMap.entrySet()) { Pair N = entry.getKey(); CAstNode oldNode = N.fst; @@ -322,14 +318,13 @@ public abstract class CAstRewriter, K e if (children.containsKey(oldNode)) { Set newEntities = new LinkedHashSet<>(); newChildren.put(newNode, newEntities); - for (Iterator oldEntities = children.get(oldNode).iterator(); oldEntities.hasNext();) { - newEntities.add(rewrite(oldEntities.next())); + for (CAstEntity cAstEntity : children.get(oldNode)) { + newEntities.add(rewrite(cAstEntity)); } } } - for (Iterator>> keys = children.entrySet().iterator(); keys.hasNext();) { - Map.Entry> entry = keys.next(); + for (Entry> entry : children.entrySet()) { CAstNode key = entry.getKey(); if (key == null) { Set newEntities = new LinkedHashSet<>(); @@ -450,8 +445,7 @@ public abstract class CAstRewriter, K e Map> children = root.getAllScopedEntities(); final Map> newChildren = new LinkedHashMap<>(); - for (Iterator>> keys = children.entrySet().iterator(); keys.hasNext();) { - Map.Entry> entry = keys.next(); + for (Entry> entry : children.entrySet()) { CAstNode key = entry.getKey(); Set newValues = new LinkedHashSet<>(); newChildren.put(key, newValues); diff --git a/com.ibm.wala.cast/source/java/com/ibm/wala/cast/util/CAstPattern.java b/com.ibm.wala.cast/source/java/com/ibm/wala/cast/util/CAstPattern.java index 9707376e7..385094438 100644 --- a/com.ibm.wala.cast/source/java/com/ibm/wala/cast/util/CAstPattern.java +++ b/com.ibm.wala.cast/source/java/com/ibm/wala/cast/util/CAstPattern.java @@ -292,8 +292,8 @@ public class CAstPattern { return references.get(value).match(tree, s); } else if (kind == ALTERNATIVE_PATTERN_KIND) { - for (int i = 0; i < children.length; i++) { - if (children[i].tryMatch(tree, s)) { + for (CAstPattern element : children) { + if (element.tryMatch(tree, s)) { if (s != null && name != null) s.add(name, tree); diff --git a/com.ibm.wala.cast/source/java/com/ibm/wala/cast/util/CAstPrinter.java b/com.ibm.wala.cast/source/java/com/ibm/wala/cast/util/CAstPrinter.java index ecfc35657..17479a13e 100644 --- a/com.ibm.wala.cast/source/java/com/ibm/wala/cast/util/CAstPrinter.java +++ b/com.ibm.wala.cast/source/java/com/ibm/wala/cast/util/CAstPrinter.java @@ -294,8 +294,8 @@ public class CAstPrinter { if (e.getArgumentNames().length > 0) { w.write("("); String[] names = e.getArgumentNames(); - for(int i = 0; i < names.length; i++) { - w.write(" " + names[i]); + for (String name : names) { + w.write(" " + name); } w.write(" )\n"); } diff --git a/com.ibm.wala.core.tests/src/com/ibm/wala/core/tests/basic/PrimitivesTest.java b/com.ibm.wala.core.tests/src/com/ibm/wala/core/tests/basic/PrimitivesTest.java index 647d89b3c..a82b3cdca 100644 --- a/com.ibm.wala.core.tests/src/com/ibm/wala/core/tests/basic/PrimitivesTest.java +++ b/com.ibm.wala.core.tests/src/com/ibm/wala/core/tests/basic/PrimitivesTest.java @@ -790,8 +790,8 @@ public class PrimitivesTest extends WalaTestCase { R.add(3, 11); R.add(5, 1); int count = 0; - for (Iterator it = R.iterator(); it.hasNext();) { - System.err.println(it.next()); + for (IntPair intPair : R) { + System.err.println(intPair); count++; } Assert.assertTrue(count == 5); diff --git a/com.ibm.wala.core.tests/src/com/ibm/wala/core/tests/basic/WelshPowellTest.java b/com.ibm.wala.core.tests/src/com/ibm/wala/core/tests/basic/WelshPowellTest.java index 4c4111dd0..9cc3bf93d 100644 --- a/com.ibm.wala.core.tests/src/com/ibm/wala/core/tests/basic/WelshPowellTest.java +++ b/com.ibm.wala.core.tests/src/com/ibm/wala/core/tests/basic/WelshPowellTest.java @@ -61,14 +61,14 @@ public class WelshPowellTest { private NumberedGraph> buildGraph(T[][] data) { DelegatingNumberedGraph> G = new DelegatingNumberedGraph<>(); Map> nodes = HashMapFactory.make(); - for(int i = 0; i < data.length; i++) { - TypedNode n = new TypedNode<>(data[i][0]); - nodes.put(data[i][0], n); + for (T[] element : data) { + TypedNode n = new TypedNode<>(element[0]); + nodes.put(element[0], n); G.addNode(n); } - for(int i = 0; i < data.length; i++) { - for(int j = 1; j < data[i].length; j++) { - G.addEdge(nodes.get(data[i][0]), nodes.get(data[i][j])); + for (T[] element : data) { + for(int j = 1; j < element.length; j++) { + G.addEdge(nodes.get(element[0]), nodes.get(element[j])); } } diff --git a/com.ibm.wala.core.tests/src/com/ibm/wala/core/tests/callGraph/AcyclicCallGraphTest.java b/com.ibm.wala.core.tests/src/com/ibm/wala/core/tests/callGraph/AcyclicCallGraphTest.java index 8501a9992..72f52997c 100644 --- a/com.ibm.wala.core.tests/src/com/ibm/wala/core/tests/callGraph/AcyclicCallGraphTest.java +++ b/com.ibm.wala.core.tests/src/com/ibm/wala/core/tests/callGraph/AcyclicCallGraphTest.java @@ -1,7 +1,6 @@ package com.ibm.wala.core.tests.callGraph; import java.io.IOException; -import java.util.Iterator; import java.util.Map; import java.util.Set; @@ -45,8 +44,7 @@ public class AcyclicCallGraphTest extends WalaTestCase { Assert.assertTrue("NList should have cycles", backEdges.iterator().hasNext()); Map> cgBackEdges = HashMapFactory.make(); - for (Iterator ps = backEdges.iterator(); ps.hasNext(); ) { - IntPair p = ps.next(); + for (IntPair p : backEdges) { CGNode src = cg.getNode(p.getX()); if (!cgBackEdges.containsKey(src)) { cgBackEdges.put(src, HashSetFactory.make()); diff --git a/com.ibm.wala.core.tests/src/com/ibm/wala/core/tests/callGraph/CallGraphTest.java b/com.ibm.wala.core.tests/src/com/ibm/wala/core/tests/callGraph/CallGraphTest.java index 6c1daa594..043608324 100644 --- a/com.ibm.wala.core.tests/src/com/ibm/wala/core/tests/callGraph/CallGraphTest.java +++ b/com.ibm.wala.core.tests/src/com/ibm/wala/core/tests/callGraph/CallGraphTest.java @@ -406,8 +406,7 @@ public class CallGraphTest extends WalaTestCase { // perform a little icfg exercise @SuppressWarnings("unused") int count = 0; - for (Iterator> it = icfg.iterator(); it.hasNext();) { - BasicBlockInContext bb = it.next(); + for (BasicBlockInContext bb : icfg) { if (icfg.hasCall(bb)) { count++; } @@ -468,8 +467,8 @@ public class CallGraphTest extends WalaTestCase { throw new IllegalArgumentException("cg is null"); } final Set nodes = HashSetFactory.make(); - for (Iterator nodesI = cg.iterator(); nodesI.hasNext();) { - nodes.add((nodesI.next()).getMethod().getReference()); + for (CGNode cgNode : cg) { + nodes.add((cgNode).getMethod().getReference()); } return new Graph() { @@ -513,8 +512,8 @@ public class CallGraphTest extends WalaTestCase { public Iterator getPredNodes(MethodReference N) { Set pred = HashSetFactory.make(10); MethodReference methodReference = N; - for (Iterator i = cg.getNodes(methodReference).iterator(); i.hasNext();) - for (Iterator ps = cg.getPredNodes(i.next()); ps.hasNext();) + for (CGNode cgNode : cg.getNodes(methodReference)) + for (Iterator ps = cg.getPredNodes(cgNode); ps.hasNext();) pred.add(((CGNode) ps.next()).getMethod().getReference()); return pred.iterator(); @@ -538,8 +537,8 @@ public class CallGraphTest extends WalaTestCase { public Iterator getSuccNodes(MethodReference N) { Set succ = HashSetFactory.make(10); MethodReference methodReference = N; - for (Iterator i = cg.getNodes(methodReference).iterator(); i.hasNext();) - for (Iterator ps = cg.getSuccNodes(i.next()); ps.hasNext();) + for (CGNode node : cg.getNodes(methodReference)) + for (Iterator ps = cg.getSuccNodes(node); ps.hasNext();) succ.add(((CGNode) ps.next()).getMethod().getReference()); return succ.iterator(); diff --git a/com.ibm.wala.core.tests/src/com/ibm/wala/core/tests/callGraph/CloneTest.java b/com.ibm.wala.core.tests/src/com/ibm/wala/core/tests/callGraph/CloneTest.java index ada9f270c..bfa3d65b9 100644 --- a/com.ibm.wala.core.tests/src/com/ibm/wala/core/tests/callGraph/CloneTest.java +++ b/com.ibm.wala.core.tests/src/com/ibm/wala/core/tests/callGraph/CloneTest.java @@ -63,8 +63,8 @@ public class CloneTest extends WalaTestCase { Set targets = cg.getPossibleTargets(node, site); if (targets.size() != 1) { System.err.println(targets.size() + " targets found for " + site); - for (Iterator k = targets.iterator(); k.hasNext();) { - System.err.println(" " + k.next()); + for (CGNode cgNode : targets) { + System.err.println(" " + cgNode); } Assert.fail("found " + targets.size() + " targets for " + site + " in " + node); } diff --git a/com.ibm.wala.core.tests/src/com/ibm/wala/core/tests/demandpa/AbstractPtrTest.java b/com.ibm.wala.core.tests/src/com/ibm/wala/core/tests/demandpa/AbstractPtrTest.java index 03cf0579c..6548f789a 100644 --- a/com.ibm.wala.core.tests/src/com/ibm/wala/core/tests/demandpa/AbstractPtrTest.java +++ b/com.ibm.wala.core.tests/src/com/ibm/wala/core/tests/demandpa/AbstractPtrTest.java @@ -116,8 +116,7 @@ public abstract class AbstractPtrTest { } public static CGNode findStaticMethod(CallGraph cg, Atom name, Descriptor args) { - for (Iterator it = cg.iterator(); it.hasNext();) { - CGNode n = it.next(); + for (CGNode n : cg) { // System.err.println(n.getMethod().getName() + " " + // n.getMethod().getDescriptor()); if (n.getMethod().getName().equals(name) && n.getMethod().getDescriptor().equals(args)) { @@ -129,8 +128,7 @@ public abstract class AbstractPtrTest { } public static CGNode findInstanceMethod(CallGraph cg, IClass declaringClass, Atom name, Descriptor args) { - for (Iterator it = cg.iterator(); it.hasNext();) { - CGNode n = it.next(); + for (CGNode n : cg) { // System.err.println(n.getMethod().getDeclaringClass() + " " + // n.getMethod().getName() + " " + n.getMethod().getDescriptor()); if (n.getMethod().getDeclaringClass().equals(declaringClass) && n.getMethod().getName().equals(name) diff --git a/com.ibm.wala.core.tests/src/com/ibm/wala/core/tests/ir/DeterministicIRTest.java b/com.ibm.wala.core.tests/src/com/ibm/wala/core/tests/ir/DeterministicIRTest.java index 7d0383353..7b17aaa00 100644 --- a/com.ibm.wala.core.tests/src/com/ibm/wala/core/tests/ir/DeterministicIRTest.java +++ b/com.ibm.wala.core.tests/src/com/ibm/wala/core/tests/ir/DeterministicIRTest.java @@ -109,8 +109,8 @@ public class DeterministicIRTest extends WalaTestCase { * @param instructions */ private static void checkNotAllNull(SSAInstruction[] instructions) { - for (int i = 0; i < instructions.length; i++) { - if (instructions[i] != null) { + for (SSAInstruction instruction : instructions) { + if (instruction != null) { return; } } diff --git a/com.ibm.wala.core.tests/src/com/ibm/wala/core/tests/ptrs/MultiDimArrayTest.java b/com.ibm.wala.core.tests/src/com/ibm/wala/core/tests/ptrs/MultiDimArrayTest.java index 04ddfb5bc..2c2bbeffc 100644 --- a/com.ibm.wala.core.tests/src/com/ibm/wala/core/tests/ptrs/MultiDimArrayTest.java +++ b/com.ibm.wala.core.tests/src/com/ibm/wala/core/tests/ptrs/MultiDimArrayTest.java @@ -11,8 +11,6 @@ package com.ibm.wala.core.tests.ptrs; import java.io.IOException; -import java.util.Iterator; - import org.junit.Assert; import org.junit.Test; @@ -75,8 +73,7 @@ public class MultiDimArrayTest extends WalaTestCase { } private final static CGNode findDoNothingNode(CallGraph cg) { - for (Iterator it = cg.iterator(); it.hasNext(); ) { - CGNode n = it.next(); + for (CGNode n : cg) { if (n.getMethod().getName().toString().equals("doNothing")) { return n; } diff --git a/com.ibm.wala.core.tests/src/com/ibm/wala/core/tests/ptrs/TypeBasedArrayAliasTest.java b/com.ibm.wala.core.tests/src/com/ibm/wala/core/tests/ptrs/TypeBasedArrayAliasTest.java index e56e7d89a..74cc6d151 100644 --- a/com.ibm.wala.core.tests/src/com/ibm/wala/core/tests/ptrs/TypeBasedArrayAliasTest.java +++ b/com.ibm.wala.core.tests/src/com/ibm/wala/core/tests/ptrs/TypeBasedArrayAliasTest.java @@ -11,8 +11,6 @@ package com.ibm.wala.core.tests.ptrs; import java.io.IOException; -import java.util.Iterator; - import org.junit.Assert; import org.junit.Test; @@ -68,8 +66,7 @@ public class TypeBasedArrayAliasTest extends WalaTestCase { } private final static CGNode findNode(CallGraph cg, String methodName) { - for (Iterator it = cg.iterator(); it.hasNext(); ) { - CGNode n = it.next(); + for (CGNode n : cg) { if (n.getMethod().getName().toString().equals(methodName)) { return n; } 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 766be3150..527c433d9 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 @@ -1090,8 +1090,7 @@ public class SlicerTest { public static CGNode findMethod(CallGraph cg, String name) { Atom a = Atom.findOrCreateUnicodeAtom(name); - for (Iterator it = cg.iterator(); it.hasNext();) { - CGNode n = it.next(); + for (CGNode n : cg) { if (n.getMethod().getName().equals(a)) { return n; } diff --git a/com.ibm.wala.core.tests/src/com/ibm/wala/demandpa/driver/CompareToZeroOneCFADriver.java b/com.ibm.wala.core.tests/src/com/ibm/wala/demandpa/driver/CompareToZeroOneCFADriver.java index c48d5ca77..21181e189 100644 --- a/com.ibm.wala.core.tests/src/com/ibm/wala/demandpa/driver/CompareToZeroOneCFADriver.java +++ b/com.ibm.wala.core.tests/src/com/ibm/wala/demandpa/driver/CompareToZeroOneCFADriver.java @@ -43,8 +43,6 @@ package com.ibm.wala.demandpa.driver; import java.io.File; import java.io.IOException; import java.util.Collection; -import java.util.Iterator; - import com.ibm.wala.analysis.reflection.InstanceKeyWithNode; import com.ibm.wala.analysis.typeInference.TypeAbstraction; import com.ibm.wala.analysis.typeInference.TypeInference; @@ -206,8 +204,7 @@ public class CompareToZeroOneCFADriver { } Helper h = new Helper(); - for (Iterator nodeIter = cg.iterator(); nodeIter.hasNext();) { - CGNode node = nodeIter.next(); + for (CGNode node : cg) { h.checkPointersInMethod(node); } } diff --git a/com.ibm.wala.core.tests/src/com/ibm/wala/demandpa/driver/TestAgainstSimpleDriver.java b/com.ibm.wala.core.tests/src/com/ibm/wala/demandpa/driver/TestAgainstSimpleDriver.java index 05ab40939..073be7f47 100644 --- a/com.ibm.wala.core.tests/src/com/ibm/wala/demandpa/driver/TestAgainstSimpleDriver.java +++ b/com.ibm.wala.core.tests/src/com/ibm/wala/demandpa/driver/TestAgainstSimpleDriver.java @@ -42,8 +42,6 @@ package com.ibm.wala.demandpa.driver; import java.io.IOException; import java.util.Collection; -import java.util.Iterator; - import com.ibm.wala.analysis.typeInference.TypeAbstraction; import com.ibm.wala.analysis.typeInference.TypeInference; import com.ibm.wala.core.tests.callGraph.CallGraphTestUtil; @@ -156,8 +154,8 @@ public class TestAgainstSimpleDriver { if (result.isEmpty()) { System.err.println(" EMPTY!"); } - for (Iterator it = result.iterator(); it.hasNext();) { - System.err.println(" " + it.next()); + for (InstanceKey instanceKey : result) { + System.err.println(" " + instanceKey); } } } diff --git a/com.ibm.wala.core.tests/src/com/ibm/wala/demandpa/driver/WalaUtil.java b/com.ibm.wala.core.tests/src/com/ibm/wala/demandpa/driver/WalaUtil.java index 812f8df64..e5249871e 100644 --- a/com.ibm.wala.core.tests/src/com/ibm/wala/demandpa/driver/WalaUtil.java +++ b/com.ibm.wala.core.tests/src/com/ibm/wala/demandpa/driver/WalaUtil.java @@ -42,7 +42,6 @@ import java.io.File; import java.io.FileWriter; import java.io.IOException; import java.io.PrintWriter; -import java.util.Iterator; import java.util.Properties; import com.ibm.wala.ipa.callgraph.CGNode; @@ -68,8 +67,7 @@ public class WalaUtil { System.err.print("dumping ir..."); String irFile = p.getProperty(WalaProperties.OUTPUT_DIR) + File.separatorChar + benchName + "-ir.txt"; try (final PrintWriter writer = new PrintWriter(new BufferedWriter(new FileWriter(irFile)))) { - for (Iterator iter = cg.iterator(); iter.hasNext();) { - CGNode node = iter.next(); + for (CGNode node : cg) { IR ir = node.getIR(); if (ir == null) continue; 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 61dd498bf..7ec3206ae 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 @@ -13,7 +13,6 @@ package com.ibm.wala.examples.analysis; import java.io.File; import java.io.IOException; import java.util.Collection; -import java.util.Iterator; import java.util.Properties; import java.util.Set; import java.util.jar.JarFile; @@ -99,8 +98,8 @@ public class SimpleThreadEscapeAnalysis extends AbstractAnalysisEngine result) throws IOException { if (f.isDirectory()) { File[] files = f.listFiles(); - for (int i = 0; i < files.length; i++) { - collectJars(files[i], result); + for (File file : files) { + collectJars(file, result); } } else if (f.getAbsolutePath().endsWith(".jar")) { try (final JarFile jar = new JarFile(f, false)) { @@ -148,8 +147,8 @@ public class SimpleThreadEscapeAnalysis extends AbstractAnalysisEngine getModuleFiles() { Set result = HashSetFactory.make(); - for (Iterator jars = applicationJarFiles.iterator(); jars.hasNext();) { - result.add(new JarFileModule(jars.next())); + for (JarFile jarFile : applicationJarFiles) { + result.add(new JarFileModule(jarFile)); } return result; @@ -218,8 +217,7 @@ public class SimpleThreadEscapeAnalysis extends AbstractAnalysisEngine staticFields = cls.getDeclaredStaticFields(); - for (Iterator sfs = staticFields.iterator(); sfs.hasNext();) { - IField sf = sfs.next(); + for (IField sf : staticFields) { if (sf.getFieldTypeReference().isReferenceType()) { escapeAnalysisRoots.add(heapModel.getPointerKeyForStaticField(sf)); } @@ -232,14 +230,11 @@ public class SimpleThreadEscapeAnalysis extends AbstractAnalysisEngine threads = cha.computeSubClasses(TypeReference.JavaLangThread); - for (Iterator clss = threads.iterator(); clss.hasNext();) { - IClass cls = clss.next(); - for (Iterator ms = cls.getDeclaredMethods().iterator(); ms.hasNext();) { - IMethod m = ms.next(); + for (IClass cls : threads) { + for (IMethod m : cls.getDeclaredMethods()) { if (m.isInit()) { Set nodes = cg.getNodes(m.getReference()); - for (Iterator ns = nodes.iterator(); ns.hasNext();) { - CGNode n = ns.next(); + for (CGNode n : nodes) { escapeAnalysisRoots.add(heapModel.getPointerKeyForLocal(n, 1)); } } @@ -255,11 +250,9 @@ public class SimpleThreadEscapeAnalysis extends AbstractAnalysisEngine rts = escapeAnalysisRoots.iterator(); rts.hasNext();) { - PointerKey root = rts.next(); + for (PointerKey root : escapeAnalysisRoots) { OrdinalSet objects = pa.getPointsToSet(root); - for (Iterator objs = objects.iterator(); objs.hasNext();) { - InstanceKey obj = objs.next(); + for (InstanceKey obj : objects) { escapingInstanceKeys.add(obj); } } @@ -270,16 +263,14 @@ public class SimpleThreadEscapeAnalysis extends AbstractAnalysisEngine newKeys = HashSetFactory.make(); do { newKeys.clear(); - for (Iterator keys = escapingInstanceKeys.iterator(); keys.hasNext();) { - InstanceKey key = keys.next(); + for (InstanceKey key : escapingInstanceKeys) { IClass type = key.getConcreteType(); if (type.isReferenceType()) { if (type.isArrayClass()) { if (((ArrayClass) type).getElementClass() != null) { PointerKey fk = heapModel.getPointerKeyForArrayContents(key); OrdinalSet fobjects = pa.getPointsToSet(fk); - for (Iterator fobjs = fobjects.iterator(); fobjs.hasNext();) { - InstanceKey fobj = fobjs.next(); + for (InstanceKey fobj : fobjects) { if (!escapingInstanceKeys.contains(fobj)) { newKeys.add(fobj); } @@ -287,13 +278,11 @@ public class SimpleThreadEscapeAnalysis extends AbstractAnalysisEngine fields = type.getAllInstanceFields(); - for (Iterator fs = fields.iterator(); fs.hasNext();) { - IField f = fs.next(); + for (IField f : fields) { if (f.getFieldTypeReference().isReferenceType()) { PointerKey fk = heapModel.getPointerKeyForInstanceField(key, f); OrdinalSet fobjects = pa.getPointsToSet(fk); - for (Iterator fobjs = fobjects.iterator(); fobjs.hasNext();) { - InstanceKey fobj = fobjs.next(); + for (InstanceKey fobj : fobjects) { if (!escapingInstanceKeys.contains(fobj)) { newKeys.add(fobj); } @@ -310,8 +299,7 @@ public class SimpleThreadEscapeAnalysis extends AbstractAnalysisEngine escapingTypes = HashSetFactory.make(); - for (Iterator keys = escapingInstanceKeys.iterator(); keys.hasNext();) { - InstanceKey key = keys.next(); + for (InstanceKey key : escapingInstanceKeys) { escapingTypes.add(key.getConcreteType()); } @@ -336,11 +324,9 @@ public class SimpleThreadEscapeAnalysis extends AbstractAnalysisEngine escapingTypes = (new SimpleThreadEscapeAnalysis(jars, mainClassName)).gatherThreadEscapingClasses(); - for (Iterator types = escapingTypes.iterator(); types.hasNext();) { - IClass cls = types.next(); + for (IClass cls : escapingTypes) { if (!cls.isArrayClass()) { - for (Iterator fs = cls.getAllFields().iterator(); fs.hasNext();) { - IField f = fs.next(); + for (IField f : cls.getAllFields()) { if (!f.isVolatile() && !f.isFinal()) { System.err.println(f.getReference()); } diff --git a/com.ibm.wala.core.tests/src/com/ibm/wala/examples/drivers/PDFCallGraph.java b/com.ibm.wala.core.tests/src/com/ibm/wala/examples/drivers/PDFCallGraph.java index 37692296f..d72aaa0dd 100644 --- a/com.ibm.wala.core.tests/src/com/ibm/wala/examples/drivers/PDFCallGraph.java +++ b/com.ibm.wala.core.tests/src/com/ibm/wala/examples/drivers/PDFCallGraph.java @@ -55,9 +55,8 @@ public class PDFCallGraph { public static String findJarFiles(String[] directories) { Collection result = HashSetFactory.make(); - for (int i = 0; i < directories.length; i++) { - for (Iterator it = FileUtil.listFiles(directories[i], ".*\\.jar", true).iterator(); it.hasNext();) { - File f = it.next(); + for (String directorie : directories) { + for (File f : FileUtil.listFiles(directorie, ".*\\.jar", true)) { result.add(f.getAbsolutePath()); } } 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 cfaa70a46..e7eb093bc 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 @@ -245,8 +245,7 @@ public class BasicHeapGraph extends HeapGraphImpl { private OrdinalSetMapping getPointerKeys() { MutableMapping result = MutableMapping.make(); - for (Iterator it = getPointerAnalysis().getPointerKeys().iterator(); it.hasNext();) { - PointerKey p = it.next(); + for (PointerKey p : getPointerAnalysis().getPointerKeys()) { result.add(p); } return result; @@ -259,8 +258,8 @@ public class BasicHeapGraph extends HeapGraphImpl { OrdinalSet S = getPointerAnalysis().getPointsToSet(P); int[] result = new int[S.size()]; int i = 0; - for (Iterator it = S.iterator(); it.hasNext();) { - result[i] = nodeManager.getNumber(it.next()); + for (T t : S) { + result[i] = nodeManager.getNumber(t); i++; } return result; @@ -280,8 +279,7 @@ public class BasicHeapGraph extends HeapGraphImpl { IClass klass = getHeapModel().getClassHierarchy().lookupClass(T); assert klass != null : "null klass for type " + T; MutableSparseIntSet result = MutableSparseIntSet.makeEmpty(); - for (Iterator it = klass.getAllInstanceFields().iterator(); it.hasNext();) { - IField f = it.next(); + for (IField f : klass.getAllInstanceFields()) { if (!f.getReference().getFieldType().isPrimitiveType()) { PointerKey p = getHeapModel().getPointerKeyForInstanceField(I, f); if (p != null && nodeManager.containsNode(p)) { @@ -326,8 +324,7 @@ public class BasicHeapGraph extends HeapGraphImpl { if (!(n instanceof LocalPointerKey)) { int[] succ = computeSuccNodeNumbers(n, nodeManager); if (succ != null) { - for (int z = 0; z < succ.length; z++) { - int j = succ[z]; + for (int j : succ) { R.add(j, i); } } @@ -341,8 +338,7 @@ public class BasicHeapGraph extends HeapGraphImpl { private void computePredecessorsForLocals(NumberedNodeManager nodeManager, BasicNaturalRelation R) { ArrayList list = new ArrayList(); - for (Iterator it = nodeManager.iterator(); it.hasNext();) { - Object n = it.next(); + for (Object n : nodeManager) { if (n instanceof LocalPointerKey) { list.add((LocalPointerKey) n); } @@ -360,8 +356,7 @@ public class BasicHeapGraph extends HeapGraphImpl { int num = nodeManager.getNumber(n); int[] succ = computeSuccNodeNumbers(n, nodeManager); if (succ != null) { - for (int z = 0; z < succ.length; z++) { - int j = succ[z]; + for (int j : succ) { R.add(j, num); } } diff --git a/com.ibm.wala.core/src/com/ibm/wala/analysis/reflection/CloneInterpreter.java b/com.ibm.wala.core/src/com/ibm/wala/analysis/reflection/CloneInterpreter.java index 08ca2f983..01224d1fc 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/analysis/reflection/CloneInterpreter.java +++ b/com.ibm.wala.core/src/com/ibm/wala/analysis/reflection/CloneInterpreter.java @@ -189,8 +189,7 @@ public class CloneInterpreter implements SSAContextInterpreter { // TODO: IClass k = klass; while (k != null) { - for (Iterator it = klass.getDeclaredInstanceFields().iterator(); it.hasNext();) { - IField f = it.next(); + for (IField f : klass.getDeclaredInstanceFields()) { int tempValue = nextLocal++; SSAGetInstruction G = insts.GetInstruction(statements.size(), tempValue, 1, f.getReference()); statements.add(G); diff --git a/com.ibm.wala.core/src/com/ibm/wala/analysis/reflection/FactoryBypassInterpreter.java b/com.ibm.wala.core/src/com/ibm/wala/analysis/reflection/FactoryBypassInterpreter.java index 45d9b7aea..0ba17f0af 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/analysis/reflection/FactoryBypassInterpreter.java +++ b/com.ibm.wala.core/src/com/ibm/wala/analysis/reflection/FactoryBypassInterpreter.java @@ -157,8 +157,8 @@ public class FactoryBypassInterpreter extends AbstractReflectionInterpreter { } SpecializedFactoryMethod m = findOrCreateSpecializedFactoryMethod(node); HashSet result = HashSetFactory.make(5); - for (Iterator it = m.getAllocationStatements().iterator(); it.hasNext();) { - SSANewInstruction s = (SSANewInstruction) it.next(); + for (SSAInstruction ssaInstruction : m.getAllocationStatements()) { + SSANewInstruction s = (SSANewInstruction) ssaInstruction; result.add(s.getNewSite()); } return result.iterator(); @@ -393,8 +393,7 @@ public class FactoryBypassInterpreter extends AbstractReflectionInterpreter { // add original statements from the method summary nextLocal = addOriginalStatements(m); - for (Iterator it = S.iterator(); it.hasNext();) { - TypeReference type = it.next(); + for (TypeReference type : S) { TypeAbstraction T = typeRef2TypeAbstraction(m.getClassHierarchy(), type); addStatementsForTypeAbstraction(T); } @@ -506,8 +505,7 @@ public class FactoryBypassInterpreter extends AbstractReflectionInterpreter { SSAInstruction[] original = m.getStatements(options.getSSAOptions()); // local value number 1 is "this", so the next free value number is 2 int nextLocal = 2; - for (int i = 0; i < original.length; i++) { - SSAInstruction s = original[i]; + for (SSAInstruction s : original) { allInstructions.add(s); if (s instanceof SSAInvokeInstruction) { calls.add(s); @@ -603,8 +601,8 @@ public class FactoryBypassInterpreter extends AbstractReflectionInterpreter { public SSAInstruction[] getStatements() { SSAInstruction[] result = new SSAInstruction[allInstructions.size()]; int i = 0; - for (Iterator it = allInstructions.iterator(); it.hasNext();) { - result[i++] = it.next(); + for (SSAInstruction ssaInstruction : allInstructions) { + result[i++] = ssaInstruction; } return result; } diff --git a/com.ibm.wala.core/src/com/ibm/wala/analysis/stackMachine/AbstractIntStackMachine.java b/com.ibm.wala.core/src/com/ibm/wala/analysis/stackMachine/AbstractIntStackMachine.java index 91ac1bb7d..d49aa9ce0 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/analysis/stackMachine/AbstractIntStackMachine.java +++ b/com.ibm.wala.core/src/com/ibm/wala/analysis/stackMachine/AbstractIntStackMachine.java @@ -684,8 +684,8 @@ public abstract class AbstractIntStackMachine implements FixedPointConstants { return true; if (locals != null) - for (int i = 0; i < locals.length; i++) - if (locals[i] == val) + for (int local : locals) + if (local == val) return true; return false; diff --git a/com.ibm.wala.core/src/com/ibm/wala/analysis/typeInference/TypeInference.java b/com.ibm.wala.core/src/com/ibm/wala/analysis/typeInference/TypeInference.java index 62332aefe..75daf03e7 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/analysis/typeInference/TypeInference.java +++ b/com.ibm.wala.core/src/com/ibm/wala/analysis/typeInference/TypeInference.java @@ -217,8 +217,7 @@ public class TypeInference extends SSAInference implements FixedPo x = new TypeReference[]{ language.getThrowableType() }; } if (x != null) { - for (int i = 0; i < x.length; i++) { - TypeReference tx = x[i]; + for (TypeReference tx : x) { IClass tc = cha.lookupClass(tx); if (tc != null) { v.setType(v.getType().meet(new ConeType(tc))); @@ -308,9 +307,8 @@ public class TypeInference extends SSAInference implements FixedPo TypeAbstraction lhsType = lhs.getType(); TypeAbstraction meet = TypeAbstraction.TOP; - for (int i = 0; i < rhs.length; i++) { - if (rhs[i] != null && rhs[i].getType() != null) { - TypeVariable r = rhs[i]; + for (TypeVariable r : rhs) { + if (r != null && r.getType() != null) { meet = meet.meet(r.getType()); } } @@ -386,9 +384,8 @@ public class TypeInference extends SSAInference implements FixedPo public byte evaluate(TypeVariable lhs, TypeVariable[] rhs) { TypeAbstraction lhsType = lhs.getType(); TypeAbstraction meet = TypeAbstraction.TOP; - for (int i = 0; i < rhs.length; i++) { - if (rhs[i] != null && rhs[i].getType() != null) { - TypeVariable r = rhs[i]; + for (TypeVariable r : rhs) { + if (r != null && r.getType() != null) { meet = meet.meet(r.getType()); } } diff --git a/com.ibm.wala.core/src/com/ibm/wala/cfg/AbstractCFG.java b/com.ibm.wala.core/src/com/ibm/wala/cfg/AbstractCFG.java index 740c4b6b5..88ff99a04 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/cfg/AbstractCFG.java +++ b/com.ibm.wala.core/src/com/ibm/wala/cfg/AbstractCFG.java @@ -547,8 +547,7 @@ public abstract class AbstractCFG> implements Contro @Override public String toString() { StringBuffer s = new StringBuffer(""); - for (Iterator it = iterator(); it.hasNext();) { - T bb = it.next(); + for (T bb : this) { s.append("BB").append(getNumber(bb)).append("\n"); Iterator succNodes = getSuccNodes(bb); diff --git a/com.ibm.wala.core/src/com/ibm/wala/cfg/CFGSanitizer.java b/com.ibm.wala.core/src/com/ibm/wala/cfg/CFGSanitizer.java index 3ed6649a4..bfbc53905 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/cfg/CFGSanitizer.java +++ b/com.ibm.wala.core/src/com/ibm/wala/cfg/CFGSanitizer.java @@ -48,13 +48,12 @@ public class CFGSanitizer { ControlFlowGraph cfg = ir.getControlFlowGraph(); Graph g = SlowSparseNumberedGraph.make(); // add all nodes to the graph - for (Iterator it = cfg.iterator(); it.hasNext();) { - g.addNode(it.next()); + for (ISSABasicBlock basicBlock : cfg) { + g.addNode(basicBlock); } // add all edges to the graph, except those that go to exit - for (Iterator it = cfg.iterator(); it.hasNext();) { - ISSABasicBlock b = it.next(); + for (ISSABasicBlock b : cfg) { for (Iterator it2 = cfg.getSuccNodes(b); it2.hasNext();) { ISSABasicBlock b2 = it2.next(); @@ -125,17 +124,17 @@ public class CFGSanitizer { Assertions.UNREACHABLE(); } if (declared != null && exceptions != null) { - for (int i = 0; i < exceptions.length; i++) { + for (TypeReference exception : exceptions) { boolean isDeclared = false; - if (exceptions[i] != null) { - IClass exi = cha.lookupClass(exceptions[i]); + if (exception != null) { + IClass exi = cha.lookupClass(exception); if (exi == null) { - throw new WalaException("failed to find " + exceptions[i]); + throw new WalaException("failed to find " + exception); } - for (int j = 0; j < declared.length; j++) { - IClass dc = cha.lookupClass(declared[j]); + for (TypeReference element : declared) { + IClass dc = cha.lookupClass(element); if (dc == null) { - throw new WalaException("failed to find " + declared[j]); + throw new WalaException("failed to find " + element); } if (cha.isSubclassOf(exi, dc)) { isDeclared = true; diff --git a/com.ibm.wala.core/src/com/ibm/wala/cfg/InducedCFG.java b/com.ibm.wala.core/src/com/ibm/wala/cfg/InducedCFG.java index f6fddc3c9..db5054f6c 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/cfg/InducedCFG.java +++ b/com.ibm.wala.core/src/com/ibm/wala/cfg/InducedCFG.java @@ -120,8 +120,7 @@ public class InducedCFG extends AbstractCFG it = iterator(); it.hasNext();) { - BasicBlock b = it.next(); + for (BasicBlock b : this) { if (b.equals(exit())) continue; b.computeOutgoingEdges(); @@ -471,8 +470,7 @@ public class InducedCFG extends AbstractCFG it = InducedCFG.this.iterator(); it.hasNext();) { - final BasicBlock candid = it.next(); + for (BasicBlock candid : InducedCFG.this) { if (candid.getFirstInstructionIndex() == tgtNd) { target = candid; break; @@ -623,8 +621,7 @@ public class InducedCFG extends AbstractCFG it = iterator(); it.hasNext();) { - BasicBlock bb = it.next(); + for (BasicBlock bb : this) { s.append("BB").append(getNumber(bb)).append("\n"); for (int j = bb.getFirstInstructionIndex(); j <= bb.getLastInstructionIndex(); j++) { s.append(" ").append(j).append(" ").append(getInstructions()[j]).append("\n"); @@ -697,8 +694,7 @@ public class InducedCFG extends AbstractCFG getAllPhiInstructions() { Collection result = HashSetFactory.make(); - for (Iterator it = iterator(); it.hasNext();) { - BasicBlock b = it.next(); + for (BasicBlock b : this) { result.addAll(b.getPhis()); } return result; diff --git a/com.ibm.wala.core/src/com/ibm/wala/cfg/ShrikeCFG.java b/com.ibm.wala.core/src/com/ibm/wala/cfg/ShrikeCFG.java index 043bdc71a..9479902db 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/cfg/ShrikeCFG.java +++ b/com.ibm.wala.core/src/com/ibm/wala/cfg/ShrikeCFG.java @@ -111,8 +111,7 @@ public class ShrikeCFG extends AbstractCFG i */ private void computeI2BMapping() { instruction2Block = new int[getInstructions().length]; - for (Iterator it = iterator(); it.hasNext();) { - final BasicBlock b = it.next(); + for (BasicBlock b : this) { for (int j = b.getFirstInstructionIndex(); j <= b.getLastInstructionIndex(); j++) { instruction2Block[j] = getNumber(b); } @@ -123,8 +122,7 @@ public class ShrikeCFG extends AbstractCFG i * Compute outgoing edges in the control flow graph. */ private void computeEdges() { - for (Iterator it = iterator(); it.hasNext();) { - BasicBlock b = it.next(); + for (BasicBlock b : this) { if (b.equals(exit())) { continue; } else if (b.equals(entry())) { @@ -238,8 +236,8 @@ public class ShrikeCFG extends AbstractCFG i IInstruction last = getInstructions()[getLastInstructionIndex()]; int[] targets = last.getBranchTargets(); - for (int i = 0; i < targets.length; i++) { - BasicBlock b = getBlockForInstruction(targets[i]); + for (int target : targets) { + BasicBlock b = getBlockForInstruction(target); addNormalEdgeTo(b); } addExceptionalEdges(last); @@ -310,11 +308,11 @@ public class ShrikeCFG extends AbstractCFG i // this var gets set to false if goToAllHandlers is true but some enclosing exception handler catches all // exceptions. in such a case, we need not add an exceptional edge to the method exit boolean needEdgeToExitForAllHandlers = true; - for (int j = 0; j < hs.length; j++) { + for (ExceptionHandler element : hs) { if (DEBUG) { - System.err.println(" handler " + hs[j]); + System.err.println(" handler " + element); } - BasicBlock b = getBlockForInstruction(hs[j].getHandler()); + BasicBlock b = getBlockForInstruction(element.getHandler()); if (DEBUG) { System.err.println(" target " + b); } @@ -325,15 +323,15 @@ public class ShrikeCFG extends AbstractCFG i } addExceptionalEdgeTo(b); // if the handler catches all exceptions, we don't need to add an edge to the exit or any other handlers - if (hs[j].getCatchClass() == null) { + if (element.getCatchClass() == null) { needEdgeToExitForAllHandlers = false; break; } } else { TypeReference caughtException = null; - if (hs[j].getCatchClass() != null) { + if (element.getCatchClass() != null) { ClassLoaderReference loader = ShrikeCFG.this.getMethod().getDeclaringClass().getReference().getClassLoader(); - caughtException = ShrikeUtil.makeTypeReference(loader, hs[j].getCatchClass()); + caughtException = ShrikeUtil.makeTypeReference(loader, element.getCatchClass()); if (DEBUG) { System.err.println(" caughtException " + caughtException); } @@ -502,8 +500,7 @@ public class ShrikeCFG extends AbstractCFG i @Override public String toString() { StringBuffer s = new StringBuffer(""); - for (Iterator it = iterator(); it.hasNext();) { - BasicBlock bb = it.next(); + for (BasicBlock bb : this) { s.append("BB").append(getNumber(bb)).append("\n"); for (int j = bb.getFirstInstructionIndex(); j <= bb.getLastInstructionIndex(); j++) { s.append(" ").append(j).append(" ").append(getInstructions()[j]).append("\n"); diff --git a/com.ibm.wala.core/src/com/ibm/wala/cfg/cdg/ControlDependenceGraph.java b/com.ibm.wala.core/src/com/ibm/wala/cfg/cdg/ControlDependenceGraph.java index 1ba02b148..393824fb8 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/cfg/cdg/ControlDependenceGraph.java +++ b/com.ibm.wala.core/src/com/ibm/wala/cfg/cdg/ControlDependenceGraph.java @@ -66,13 +66,12 @@ public class ControlDependenceGraph extends AbstractNumberedGraph { edgeLabels = HashMapFactory.make(); } - for (Iterator ns = cfg.iterator(); ns.hasNext();) { + for (T name : cfg) { HashSet s = HashSetFactory.make(2); - controlDependence.put(ns.next(), s); + controlDependence.put(name, s); } - for (Iterator ns = cfg.iterator(); ns.hasNext();) { - T y = ns.next(); + for (T y : cfg) { for (Iterator ns2 = RDF.getDominanceFrontier(y); ns2.hasNext();) { T x = ns2.next(); controlDependence.get(x).add(y); @@ -104,14 +103,13 @@ public class ControlDependenceGraph extends AbstractNumberedGraph { return new NumberedEdgeManager() { Map> backwardEdges = HashMapFactory.make(forwardEdges.size()); { - for (Iterator x = cfg.iterator(); x.hasNext();) { + for (T name : cfg) { Set s = HashSetFactory.make(); - backwardEdges.put(x.next(), s); + backwardEdges.put(name, s); } - for (Iterator ps = forwardEdges.keySet().iterator(); ps.hasNext();) { - T p = ps.next(); - for (Iterator ns = forwardEdges.get(p).iterator(); ns.hasNext();) { - Object n = ns.next(); + for (T p : forwardEdges.keySet()) { + for (T t : forwardEdges.get(p)) { + Object n = t; backwardEdges.get(n).add(p); } } @@ -206,15 +204,14 @@ public class ControlDependenceGraph extends AbstractNumberedGraph { @Override public String toString() { StringBuffer sb = new StringBuffer(); - for (Iterator ns = iterator(); ns.hasNext();) { - T n = ns.next(); + for (T n : this) { sb.append(n.toString()).append("\n"); for (Iterator ss = getSuccNodes(n); ss.hasNext();) { Object s = ss.next(); sb.append(" --> ").append(s); if (edgeLabels != null) - for (Iterator labels = edgeLabels.get(Pair.make(n, s)).iterator(); labels.hasNext();) - sb.append("\n label: ").append(labels.next()); + for (Object name : edgeLabels.get(Pair.make(n, s))) + sb.append("\n label: ").append(name); sb.append("\n"); } } diff --git a/com.ibm.wala.core/src/com/ibm/wala/cfg/exc/intra/NullPointerState.java b/com.ibm.wala.core/src/com/ibm/wala/cfg/exc/intra/NullPointerState.java index e5bb05dad..a06c86708 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/cfg/exc/intra/NullPointerState.java +++ b/com.ibm.wala.core/src/com/ibm/wala/cfg/exc/intra/NullPointerState.java @@ -221,8 +221,8 @@ public class NullPointerState extends AbstractVariable { @Override public String toString() { StringBuffer buf = new StringBuffer("<"); - for (int i = 0; i < vars.length; i++) { - switch (vars[i]) { + for (State var : vars) { + switch (var) { case BOTH: buf.append('*'); break; diff --git a/com.ibm.wala.core/src/com/ibm/wala/classLoader/BytecodeClass.java b/com.ibm.wala.core/src/com/ibm/wala/classLoader/BytecodeClass.java index 64e6dfa45..2696a498e 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/classLoader/BytecodeClass.java +++ b/com.ibm.wala.core/src/com/ibm/wala/classLoader/BytecodeClass.java @@ -503,8 +503,7 @@ public abstract class BytecodeClass implements IClass { protected Collection computeAllInterfacesAsCollection() { Collection c = getDirectInterfaces(); Set result = HashSetFactory.make(); - for (Iterator it = c.iterator(); it.hasNext();) { - IClass klass = it.next(); + for (IClass klass : c) { if (klass.isInterface()) { result.add(klass); } else { @@ -538,8 +537,7 @@ public abstract class BytecodeClass implements IClass { */ private Collection array2IClassSet(ImmutableByteArray[] interfaces) { ArrayList result = new ArrayList(interfaces.length); - for (int i = 0; i < interfaces.length; i++) { - ImmutableByteArray name = interfaces[i]; + for (ImmutableByteArray name : interfaces) { IClass klass = null; klass = loader.lookupClass(TypeName.findOrCreate(name)); if (klass == null) { @@ -556,17 +554,17 @@ public abstract class BytecodeClass implements IClass { List result = new ArrayList(1); if (instanceFields != null) { - for (int i = 0; i < instanceFields.length; i++) { - if (instanceFields[i].getName() == name) { - result.add(instanceFields[i]); + for (IField instanceField : instanceFields) { + if (instanceField.getName() == name) { + result.add(instanceField); } } } if (staticFields != null) { - for (int i = 0; i < staticFields.length; i++) { - if (staticFields[i].getName() == name) { - result.add(staticFields[i]); + for (IField staticField : staticFields) { + if (staticField.getName() == name) { + result.add(staticField); } } } @@ -603,8 +601,7 @@ public abstract class BytecodeClass implements IClass { } else { tmpMethodMap= new SmallMap(); } - for (int i = 0; i < methods.length; i++) { - IMethod m = methods[i]; + for (IMethod m : methods) { tmpMethodMap.put(m.getReference().getSelector(), m); } diff --git a/com.ibm.wala.core/src/com/ibm/wala/classLoader/ClassLoaderImpl.java b/com.ibm.wala.core/src/com/ibm/wala/classLoader/ClassLoaderImpl.java index 6c36f0ad1..208fb3dd5 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/classLoader/ClassLoaderImpl.java +++ b/com.ibm.wala.core/src/com/ibm/wala/classLoader/ClassLoaderImpl.java @@ -183,13 +183,11 @@ public class ClassLoaderImpl implements IClassLoader { */ private static void removeClassFiles(Set s, Set t) { Set old = HashSetFactory.make(); - for (Iterator it = t.iterator(); it.hasNext();) { - ModuleEntry m = it.next(); + for (ModuleEntry m : t) { old.add(m.getClassName()); } HashSet toRemove = HashSetFactory.make(); - for (Iterator it = s.iterator(); it.hasNext();) { - ModuleEntry m = it.next(); + for (ModuleEntry m : s) { if (old.contains(m.getClassName())) { toRemove.add(m); } @@ -243,8 +241,7 @@ public class ClassLoaderImpl implements IClassLoader { */ @SuppressWarnings("unused") private void loadAllClasses(Collection moduleEntries, Map fileContents) { - for (Iterator it = moduleEntries.iterator(); it.hasNext();) { - ModuleEntry entry = it.next(); + for (ModuleEntry entry : moduleEntries) { if (!entry.isClassFile()) { continue; } @@ -411,8 +408,7 @@ public class ClassLoaderImpl implements IClassLoader { */ @SuppressWarnings("unused") protected void loadAllSources(Set sourceModules) { - for (Iterator it = sourceModules.iterator(); it.hasNext();) { - ModuleEntry entry = it.next(); + for (ModuleEntry entry : sourceModules) { String className = entry.getClassName().replace('.', '/'); className = className.replace(File.separatorChar, '/'); className = "L" + ((className.startsWith("/")) ? className.substring(1) : className); @@ -489,8 +485,7 @@ public class ClassLoaderImpl implements IClassLoader { // module are loaded according to the given order (same as in Java VM) Set classModuleEntries = HashSetFactory.make(); Set sourceModuleEntries = HashSetFactory.make(); - for (Iterator it = modules.iterator(); it.hasNext();) { - Module archive = it.next(); + for (Module archive : modules) { if (DEBUG_LEVEL > 0) { System.err.println("add archive: " + archive); } @@ -524,12 +519,10 @@ public class ClassLoaderImpl implements IClassLoader { } loadAllClasses(classFiles, allClassAndSourceFileContents); loadAllSources(sourceFiles); - for (Iterator it2 = classFiles.iterator(); it2.hasNext();) { - ModuleEntry file = it2.next(); + for (ModuleEntry file : classFiles) { classModuleEntries.add(file); } - for (Iterator it2 = sourceFiles.iterator(); it2.hasNext();) { - ModuleEntry file = it2.next(); + for (ModuleEntry file : sourceFiles) { sourceModuleEntries.add(file); } } @@ -703,8 +696,7 @@ public class ClassLoaderImpl implements IClassLoader { if (toRemove == null) { throw new IllegalArgumentException("toRemove is null"); } - for (Iterator it = toRemove.iterator(); it.hasNext();) { - IClass klass = it.next(); + for (IClass klass : toRemove) { if (DEBUG_LEVEL > 0) { System.err.println("removing " + klass.getName()); } diff --git a/com.ibm.wala.core/src/com/ibm/wala/classLoader/CodeScanner.java b/com.ibm.wala.core/src/com/ibm/wala/classLoader/CodeScanner.java index c7048bda8..b9a166b8a 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/classLoader/CodeScanner.java +++ b/com.ibm.wala.core/src/com/ibm/wala/classLoader/CodeScanner.java @@ -257,8 +257,7 @@ public class CodeScanner { result.addAll(t); } }; - for (int i = 0; i < statements.length; i++) { - SSAInstruction s = statements[i]; + for (SSAInstruction s : statements) { if (s != null) { s.visit(v); } @@ -274,10 +273,10 @@ public class CodeScanner { throw new IllegalArgumentException("statements == null"); } final HashSet result = HashSetFactory.make(10); - for (int i = 0; i < statements.length; i++) { - if (statements[i] != null) { - if (statements[i] instanceof SSACheckCastInstruction) { - SSACheckCastInstruction c = (SSACheckCastInstruction) statements[i]; + for (SSAInstruction statement : statements) { + if (statement != null) { + if (statement instanceof SSACheckCastInstruction) { + SSACheckCastInstruction c = (SSACheckCastInstruction) statement; for(TypeReference t : c.getDeclaredResultTypes()) { result.add(t); } @@ -299,8 +298,7 @@ public class CodeScanner { result.add(instruction.getCallSite()); } }; - for (int i = 0; i < statements.length; i++) { - SSAInstruction s = statements[i]; + for (SSAInstruction s : statements) { if (s != null) { s.visit(v); } @@ -320,8 +318,7 @@ public class CodeScanner { result.add(instruction.getNewSite()); } }; - for (int i = 0; i < statements.length; i++) { - SSAInstruction s = statements[i]; + for (SSAInstruction s : statements) { if (s != null) { s.visit(v); } @@ -345,8 +342,7 @@ public class CodeScanner { result.add(instruction.getDeclaredField()); } }; - for (int i = 0; i < statements.length; i++) { - SSAInstruction s = statements[i]; + for (SSAInstruction s : statements) { if (s != null) { s.visit(v); } @@ -370,8 +366,7 @@ public class CodeScanner { result.add(instruction.getDeclaredField()); } }; - for (int i = 0; i < statements.length; i++) { - SSAInstruction s = statements[i]; + for (SSAInstruction s : statements) { if (s != null) { s.visit(v); } @@ -397,8 +392,7 @@ public class CodeScanner { } }; - for (int i = 0; i < statements.length; i++) { - SSAInstruction s = statements[i]; + for (SSAInstruction s : statements) { if (s != null) { s.visit(v); } @@ -422,8 +416,7 @@ public class CodeScanner { } } ScanVisitor v = new ScanVisitor(); - for (int i = 0; i < statements.length; i++) { - SSAInstruction s = statements[i]; + for (SSAInstruction s : statements) { if (s != null) { s.visit(v); } @@ -450,8 +443,7 @@ public class CodeScanner { } } ScanVisitor v = new ScanVisitor(); - for (int i = 0; i < statements.length; i++) { - SSAInstruction s = statements[i]; + for (SSAInstruction s : statements) { if (s != null) { s.visit(v); } diff --git a/com.ibm.wala.core/src/com/ibm/wala/classLoader/DirectoryTreeModule.java b/com.ibm.wala.core/src/com/ibm/wala/classLoader/DirectoryTreeModule.java index 88617e26f..01831c949 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/classLoader/DirectoryTreeModule.java +++ b/com.ibm.wala.core/src/com/ibm/wala/classLoader/DirectoryTreeModule.java @@ -50,11 +50,11 @@ public abstract class DirectoryTreeModule implements Module { Set result = HashSetFactory.make(); File[] files = dir.listFiles(); if (files != null) { - for (int i = 0; i < files.length; i++) { - if (files[i].isDirectory()) { - result.addAll(getEntriesRecursive(files[i])); - } else if (includeFile(files[i])) { - FileModule fileModule = makeFile(files[i]); + for (File file : files) { + if (file.isDirectory()) { + result.addAll(getEntriesRecursive(file)); + } else if (includeFile(file)) { + FileModule fileModule = makeFile(file); if (fileModule != null) { result.add(fileModule); } diff --git a/com.ibm.wala.core/src/com/ibm/wala/classLoader/ShrikeBTMethod.java b/com.ibm.wala.core/src/com/ibm/wala/classLoader/ShrikeBTMethod.java index 385271e2a..3d91ca36a 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/classLoader/ShrikeBTMethod.java +++ b/com.ibm.wala.core/src/com/ibm/wala/classLoader/ShrikeBTMethod.java @@ -499,56 +499,56 @@ public abstract class ShrikeBTMethod implements IMethod, BytecodeConstants { private static void copyVisitorSetsToArrays(SimpleVisitor simpleVisitor, BytecodeInfo info) { info.newSites = new NewSiteReference[simpleVisitor.newSites.size()]; int i = 0; - for (Iterator it = simpleVisitor.newSites.iterator(); it.hasNext();) { - info.newSites[i++] = it.next(); + for (NewSiteReference newSiteReference : simpleVisitor.newSites) { + info.newSites[i++] = newSiteReference; } info.fieldsRead = new FieldReference[simpleVisitor.fieldsRead.size()]; i = 0; - for (Iterator it = simpleVisitor.fieldsRead.iterator(); it.hasNext();) { - info.fieldsRead[i++] = it.next(); + for (FieldReference fieldReference : simpleVisitor.fieldsRead) { + info.fieldsRead[i++] = fieldReference; } info.fieldsRead = new FieldReference[simpleVisitor.fieldsRead.size()]; i = 0; - for (Iterator it = simpleVisitor.fieldsRead.iterator(); it.hasNext();) { - info.fieldsRead[i++] = it.next(); + for (FieldReference fieldReference : simpleVisitor.fieldsRead) { + info.fieldsRead[i++] = fieldReference; } info.fieldsWritten = new FieldReference[simpleVisitor.fieldsWritten.size()]; i = 0; - for (Iterator it = simpleVisitor.fieldsWritten.iterator(); it.hasNext();) { - info.fieldsWritten[i++] = it.next(); + for (FieldReference fieldReference : simpleVisitor.fieldsWritten) { + info.fieldsWritten[i++] = fieldReference; } info.callSites = new CallSiteReference[simpleVisitor.callSites.size()]; i = 0; - for (Iterator it = simpleVisitor.callSites.iterator(); it.hasNext();) { - info.callSites[i++] = it.next(); + for (CallSiteReference callSiteReference : simpleVisitor.callSites) { + info.callSites[i++] = callSiteReference; } info.arraysRead = new TypeReference[simpleVisitor.arraysRead.size()]; i = 0; - for (Iterator it = simpleVisitor.arraysRead.iterator(); it.hasNext();) { - info.arraysRead[i++] = it.next(); + for (TypeReference typeReference : simpleVisitor.arraysRead) { + info.arraysRead[i++] = typeReference; } info.arraysWritten = new TypeReference[simpleVisitor.arraysWritten.size()]; i = 0; - for (Iterator it = simpleVisitor.arraysWritten.iterator(); it.hasNext();) { - info.arraysWritten[i++] = it.next(); + for (TypeReference typeReference : simpleVisitor.arraysWritten) { + info.arraysWritten[i++] = typeReference; } info.implicitExceptions = new TypeReference[simpleVisitor.implicitExceptions.size()]; i = 0; - for (Iterator it = simpleVisitor.implicitExceptions.iterator(); it.hasNext();) { - info.implicitExceptions[i++] = it.next(); + for (TypeReference typeReference : simpleVisitor.implicitExceptions) { + info.implicitExceptions[i++] = typeReference; } info.castTypes = new TypeReference[simpleVisitor.castTypes.size()]; i = 0; - for (Iterator it = simpleVisitor.castTypes.iterator(); it.hasNext();) { - info.castTypes[i++] = it.next(); + for (TypeReference typeReference : simpleVisitor.castTypes) { + info.castTypes[i++] = typeReference; } info.hasMonitorOp = simpleVisitor.hasMonitorOp; @@ -842,9 +842,9 @@ public abstract class ShrikeBTMethod implements IMethod, BytecodeConstants { } HashSet result = HashSetFactory.make(10); ClassLoaderReference loader = getReference().getDeclaringClass().getClassLoader(); - for (int i = 0; i < handlers.length; i++) { - for (int j = 0; j < handlers[i].length; j++) { - TypeReference t = ShrikeUtil.makeTypeReference(loader, handlers[i][j].getCatchClass()); + for (ExceptionHandler[] handler : handlers) { + for (int j = 0; j < handler.length; j++) { + TypeReference t = ShrikeUtil.makeTypeReference(loader, handler[j].getCatchClass()); if (t == null) { t = TypeReference.JavaLangThrowable; } diff --git a/com.ibm.wala.core/src/com/ibm/wala/classLoader/ShrikeClass.java b/com.ibm.wala.core/src/com/ibm/wala/classLoader/ShrikeClass.java index a2615d8e3..3749f5338 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/classLoader/ShrikeClass.java +++ b/com.ibm.wala.core/src/com/ibm/wala/classLoader/ShrikeClass.java @@ -12,7 +12,6 @@ package com.ibm.wala.classLoader; import java.util.ArrayList; import java.util.Collection; -import java.util.Iterator; import java.util.List; import com.ibm.wala.ipa.cha.IClassHierarchy; @@ -228,8 +227,8 @@ public final class ShrikeClass extends JVMClass { public void clearSoftCaches() { // toss optional information from each method. if (methodMap != null) { - for (Iterator it = getDeclaredMethods().iterator(); it.hasNext();) { - ShrikeCTMethod m = (ShrikeCTMethod) it.next(); + for (IMethod iMethod : getDeclaredMethods()) { + ShrikeCTMethod m = (ShrikeCTMethod) iMethod; m.clearCaches(); } } 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 839541bb0..9c413894e 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 @@ -12,7 +12,6 @@ package com.ibm.wala.client; import java.io.IOException; import java.util.Collection; -import java.util.Iterator; import java.util.jar.JarFile; import com.ibm.wala.analysis.pointers.BasicHeapGraph; @@ -166,8 +165,8 @@ public abstract class AbstractAnalysisEngine implements A .getClassLoader()); // add standard libraries - for (int i = 0; i < j2seLibs.length; i++) { - scope.addToScope(scope.getPrimordialLoader(), j2seLibs[i]); + for (Module j2seLib : j2seLibs) { + scope.addToScope(scope.getPrimordialLoader(), j2seLib); } // add user stuff @@ -215,8 +214,7 @@ public abstract class AbstractAnalysisEngine implements A */ protected void addApplicationModulesToScope() { ClassLoaderReference app = scope.getApplicationLoader(); - for (Iterator it = moduleFiles.iterator(); it.hasNext();) { - Object o = it.next(); + for (Object o : moduleFiles) { if (!(o instanceof Module)) { Assertions.UNREACHABLE("Unexpected type: " + o.getClass()); } diff --git a/com.ibm.wala.core/src/com/ibm/wala/dataflow/IFDS/LocalSummaryEdges.java b/com.ibm.wala.core/src/com/ibm/wala/dataflow/IFDS/LocalSummaryEdges.java index 07a1ceaed..d3f04b6ce 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/dataflow/IFDS/LocalSummaryEdges.java +++ b/com.ibm.wala.core/src/com/ibm/wala/dataflow/IFDS/LocalSummaryEdges.java @@ -10,8 +10,6 @@ *******************************************************************************/ package com.ibm.wala.dataflow.IFDS; -import java.util.Iterator; - import com.ibm.wala.util.collections.SparseVector; import com.ibm.wala.util.intset.BasicNaturalRelation; import com.ibm.wala.util.intset.IBinaryNaturalRelation; @@ -133,8 +131,7 @@ public class LocalSummaryEdges { return null; } else { MutableSparseIntSet result = MutableSparseIntSet.makeEmpty(); - for (Iterator it = R.iterator(); it.hasNext();) { - IntPair p = it.next(); + for (IntPair p : R) { if (p.getY() == d2) { result.add(p.getX()); } diff --git a/com.ibm.wala.core/src/com/ibm/wala/dataflow/IFDS/TabulationSolver.java b/com.ibm.wala.core/src/com/ibm/wala/dataflow/IFDS/TabulationSolver.java index f2460de76..bd5c0b0fd 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/dataflow/IFDS/TabulationSolver.java +++ b/com.ibm.wala.core/src/com/ibm/wala/dataflow/IFDS/TabulationSolver.java @@ -498,8 +498,7 @@ public class TabulationSolver { // with respect to one s_profOf(c), we have to propagate // for each // potential entry node s_p /in s_procof(c) - for (int i = 0; i < entries.length; i++) { - final T s_p = entries[i]; + for (final T s_p : entries) { if (DEBUG_LEVEL > 1) { System.err.println(" do entry " + s_p); } @@ -674,8 +673,7 @@ public class TabulationSolver { // for each exit from the callee P p = supergraph.getProcOf(calleeEntry); T[] exits = supergraph.getExitsForProcedure(p); - for (int e = 0; e < exits.length; e++) { - final T exit = exits[e]; + for (final T exit : exits) { if (DEBUG_LEVEL > 0) { assert supergraph.containsNode(exit); } @@ -959,8 +957,7 @@ public class TabulationSolver { return bb1.getNumber() - bb2.getNumber(); } }; - for (Iterator it = supergraph.iterator(); it.hasNext();) { - T n = it.next(); + for (T n : supergraph) { P proc = supergraph.getProcOf(n); TreeSet s = map.get(proc); if (s == null) { @@ -970,11 +967,9 @@ public class TabulationSolver { s.add(n); } - for (Iterator>> it = map.entrySet().iterator(); it.hasNext();) { - Map.Entry> e = it.next(); + for (Entry> e : map.entrySet()) { Set s = e.getValue(); - for (Iterator it2 = s.iterator(); it2.hasNext();) { - T o = it2.next(); + for (T o : s) { result.append(o + " : " + getResult(o) + "\n"); } } diff --git a/com.ibm.wala.core/src/com/ibm/wala/dataflow/ssa/SSAInference.java b/com.ibm.wala.core/src/com/ibm/wala/dataflow/ssa/SSAInference.java index 14274b0b3..e2ab57f7f 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/dataflow/ssa/SSAInference.java +++ b/com.ibm.wala.core/src/com/ibm/wala/dataflow/ssa/SSAInference.java @@ -82,8 +82,7 @@ public abstract class SSAInference> extends DefaultFixedP private void createEquations(OperatorFactory opFactory) { SSAInstruction[] instructions = ir.getInstructions(); - for (int i = 0; i < instructions.length; i++) { - SSAInstruction s = instructions[i]; + for (SSAInstruction s : instructions) { makeEquationForInstruction(opFactory, s); } for (Iterator it = ir.iteratePhis(); it.hasNext();) { diff --git a/com.ibm.wala.core/src/com/ibm/wala/demandpa/alg/DemandRefinementPointsTo.java b/com.ibm.wala.core/src/com/ibm/wala/demandpa/alg/DemandRefinementPointsTo.java index e604fda7d..91f00a9ac 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/demandpa/alg/DemandRefinementPointsTo.java +++ b/com.ibm.wala.core/src/com/ibm/wala/demandpa/alg/DemandRefinementPointsTo.java @@ -1340,8 +1340,7 @@ public class DemandRefinementPointsTo extends AbstractDemandPointsTo { // } g.addSubgraphForNode(caller); SSAAbstractInvokeInstruction[] callInstrs = getCallInstrs(caller, call); - for (int i = 0; i < callInstrs.length; i++) { - SSAAbstractInvokeInstruction callInstr = callInstrs[i]; + for (SSAAbstractInvokeInstruction callInstr : callInstrs) { PointerKey actualPk = heapModel.getPointerKeyForLocal(caller, callInstr.getUse(paramPos)); assert g.containsNode(actualPk); assert g.containsNode(localPk); @@ -1628,8 +1627,7 @@ public class DemandRefinementPointsTo extends AbstractDemandPointsTo { // } g.addSubgraphForNode(caller); SSAAbstractInvokeInstruction[] callInstrs = getCallInstrs(caller, call); - for (int i = 0; i < callInstrs.length; i++) { - SSAAbstractInvokeInstruction callInstr = callInstrs[i]; + for (SSAAbstractInvokeInstruction callInstr : callInstrs) { PointerKey returnAtCallerKey = heapModel.getPointerKeyForLocal(caller, isExceptional ? callInstr.getException() : callInstr.getDef()); assert g.containsNode(returnAtCallerKey); @@ -2122,8 +2120,7 @@ public class DemandRefinementPointsTo extends AbstractDemandPointsTo { // } g.addSubgraphForNode(caller); SSAAbstractInvokeInstruction[] callInstrs = getCallInstrs(caller, call); - for (int i = 0; i < callInstrs.length; i++) { - SSAAbstractInvokeInstruction callInstr = callInstrs[i]; + for (SSAAbstractInvokeInstruction callInstr : callInstrs) { final PointerKey actualPk = heapModel.getPointerKeyForLocal(caller, callInstr.getUse(paramPos)); assert g.containsNode(actualPk); assert g.containsNode(localPk); diff --git a/com.ibm.wala.core/src/com/ibm/wala/demandpa/flowgraph/AbstractDemandFlowGraph.java b/com.ibm.wala.core/src/com/ibm/wala/demandpa/flowgraph/AbstractDemandFlowGraph.java index 43ad98542..5983f831f 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/demandpa/flowgraph/AbstractDemandFlowGraph.java +++ b/com.ibm.wala.core/src/com/ibm/wala/demandpa/flowgraph/AbstractDemandFlowGraph.java @@ -134,8 +134,7 @@ public abstract class AbstractDemandFlowGraph extends AbstractFlowGraph { CallSiteReference call = iterator.next(); if (cg.getPossibleTargets(caller, call).contains(cgNode)) { SSAAbstractInvokeInstruction[] callInstrs = ir.getCalls(call); - for (int i = 0; i < callInstrs.length; i++) { - SSAAbstractInvokeInstruction callInstr = callInstrs[i]; + for (SSAAbstractInvokeInstruction callInstr : callInstrs) { PointerKey actualPk = heapModel.getPointerKeyForLocal(caller, callInstr.getUse(paramPos)); assert containsNode(actualPk); assert containsNode(pk); @@ -224,8 +223,7 @@ public abstract class AbstractDemandFlowGraph extends AbstractFlowGraph { CallSiteReference call = iterator.next(); if (cg.getPossibleTargets(caller, call).contains(cgNode)) { SSAAbstractInvokeInstruction[] callInstrs = ir.getCalls(call); - for (int i = 0; i < callInstrs.length; i++) { - SSAAbstractInvokeInstruction callInstr = callInstrs[i]; + for (SSAAbstractInvokeInstruction callInstr : callInstrs) { PointerKey returnPk = heapModel.getPointerKeyForLocal(caller, isExceptional ? callInstr.getException() : callInstr .getDef()); assert containsNode(returnPk); @@ -284,8 +282,7 @@ public abstract class AbstractDemandFlowGraph extends AbstractFlowGraph { v.setBasicBlock(b); // visit each instruction in the basic block. - for (Iterator it = b.iterator(); it.hasNext();) { - SSAInstruction s = it.next(); + for (SSAInstruction s : b) { if (s != null) { s.visit(v); } diff --git a/com.ibm.wala.core/src/com/ibm/wala/demandpa/flowgraph/AbstractFlowGraph.java b/com.ibm.wala.core/src/com/ibm/wala/demandpa/flowgraph/AbstractFlowGraph.java index 9938e252c..667491597 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/demandpa/flowgraph/AbstractFlowGraph.java +++ b/com.ibm.wala.core/src/com/ibm/wala/demandpa/flowgraph/AbstractFlowGraph.java @@ -385,13 +385,11 @@ public abstract class AbstractFlowGraph extends SlowSparseNumberedLabeledGraph getArrayReads(PointerKey arrayRef) { arrayRef = convertPointerKeyToHeapModel(arrayRef, mam.getHeapModel()); Collection arrayReads = mam.getArrayReads(arrayRef); - for (Iterator it = arrayReads.iterator(); it.hasNext();) { - MemoryAccess a = it.next(); + for (MemoryAccess a : arrayReads) { addSubgraphForNode(a.getNode()); } ArrayList read = new ArrayList(); - for (Iterator it = arrayReads.iterator(); it.hasNext();) { - MemoryAccess a = it.next(); + for (MemoryAccess a : arrayReads) { IR ir = a.getNode().getIR(); SSAArrayLoadInstruction s = (SSAArrayLoadInstruction) ir.getInstructions()[a.getInstructionIndex()]; if (s == null) { @@ -430,8 +428,7 @@ public abstract class AbstractFlowGraph extends SlowSparseNumberedLabeledGraph peis, PointerKey exceptionVar, Set catchClasses) { - for (Iterator it = peis.iterator(); it.hasNext();) { - ProgramCounter peiLoc = it.next(); + for (ProgramCounter peiLoc : peis) { SSAInstruction pei = ir.getPEI(peiLoc); if (pei instanceof SSAAbstractInvokeInstruction) { @@ -454,8 +451,7 @@ public abstract class AbstractFlowGraph extends SlowSparseNumberedLabeledGraph types = pei.getExceptionTypes(); if (types != null) { - for (Iterator it2 = types.iterator(); it2.hasNext();) { - TypeReference type = it2.next(); + for (TypeReference type : types) { if (type != null) { InstanceKey ik = heapModel.getInstanceKeyForPEI(node, peiLoc, type); if (ik == null) { diff --git a/com.ibm.wala.core/src/com/ibm/wala/demandpa/flowgraph/DemandPointerFlowGraph.java b/com.ibm.wala.core/src/com/ibm/wala/demandpa/flowgraph/DemandPointerFlowGraph.java index fb9b9b475..23578c254 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/demandpa/flowgraph/DemandPointerFlowGraph.java +++ b/com.ibm.wala.core/src/com/ibm/wala/demandpa/flowgraph/DemandPointerFlowGraph.java @@ -409,8 +409,7 @@ public class DemandPointerFlowGraph extends AbstractDemandFlowGraph implements I */ protected void addExceptionDefConstraints(IR ir, CGNode node, List peis, PointerKey exceptionVar, Set catchClasses) { - for (Iterator it = peis.iterator(); it.hasNext();) { - ProgramCounter peiLoc = it.next(); + for (ProgramCounter peiLoc : peis) { SSAInstruction pei = ir.getPEI(peiLoc); if (pei instanceof SSAAbstractInvokeInstruction) { @@ -433,8 +432,7 @@ public class DemandPointerFlowGraph extends AbstractDemandFlowGraph implements I // the pei, but just instance keys Collection types = pei.getExceptionTypes(); if (types != null) { - for (Iterator it2 = types.iterator(); it2.hasNext();) { - TypeReference type = it2.next(); + for (TypeReference type : types) { if (type != null) { InstanceKey ik = heapModel.getInstanceKeyForPEI(node, peiLoc, type); if (ik == null) { diff --git a/com.ibm.wala.core/src/com/ibm/wala/demandpa/flowgraph/SimpleDemandPointerFlowGraph.java b/com.ibm.wala.core/src/com/ibm/wala/demandpa/flowgraph/SimpleDemandPointerFlowGraph.java index 66709d4f6..68b8f69b6 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/demandpa/flowgraph/SimpleDemandPointerFlowGraph.java +++ b/com.ibm.wala.core/src/com/ibm/wala/demandpa/flowgraph/SimpleDemandPointerFlowGraph.java @@ -305,8 +305,7 @@ public class SimpleDemandPointerFlowGraph extends SlowSparseNumberedGraph it = b.iterator(); it.hasNext();) { - SSAInstruction s = it.next(); + for (SSAInstruction s : b) { if (s != null) { s.visit(v); } diff --git a/com.ibm.wala.core/src/com/ibm/wala/demandpa/util/SimpleMemoryAccessMap.java b/com.ibm.wala.core/src/com/ibm/wala/demandpa/util/SimpleMemoryAccessMap.java index 67fd8589e..63d9dd9e9 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/demandpa/util/SimpleMemoryAccessMap.java +++ b/com.ibm.wala.core/src/com/ibm/wala/demandpa/util/SimpleMemoryAccessMap.java @@ -12,7 +12,6 @@ package com.ibm.wala.demandpa.util; import java.util.Collection; import java.util.Collections; -import java.util.Iterator; import java.util.Map; import java.util.Set; @@ -94,8 +93,7 @@ public class SimpleMemoryAccessMap implements MemoryAccessMap { } private void populate(CallGraph cg) { - for (Iterator it = cg.iterator(); it.hasNext();) { - CGNode n = it.next(); + for (CGNode n : cg) { populate(n); } } @@ -387,21 +385,20 @@ public class SimpleMemoryAccessMap implements MemoryAccessMap { allFields.addAll(readMap.keySet()); allFields.addAll(writeMap.keySet()); - for (Iterator it = allFields.iterator(); it.hasNext();) { - IField f = it.next(); + for (IField f : allFields) { result.append("FIELD ").append(f).append(":\n"); Collection reads = getFieldReads(null, f); if (!reads.isEmpty()) { result.append(" reads:\n"); - for (Iterator it2 = reads.iterator(); it2.hasNext();) { - result.append(" ").append(it2.next()).append("\n"); + for (MemoryAccess memoryAccess : reads) { + result.append(" ").append(memoryAccess).append("\n"); } } Collection writes = getFieldWrites(null, f); if (!writes.isEmpty()) { result.append(" writes:\n"); - for (Iterator it2 = writes.iterator(); it2.hasNext();) { - result.append(" ").append(it2.next()).append("\n"); + for (MemoryAccess memoryAccess : writes) { + result.append(" ").append(memoryAccess).append("\n"); } } } @@ -410,14 +407,14 @@ public class SimpleMemoryAccessMap implements MemoryAccessMap { result.append("ARRAY CONTENTS:\n"); if (!arrayReads.isEmpty()) { result.append(" reads:\n"); - for (Iterator it2 = arrayReads.iterator(); it2.hasNext();) { - result.append(" ").append(it2.next()).append("\n"); + for (MemoryAccess memoryAccess : arrayReads) { + result.append(" ").append(memoryAccess).append("\n"); } } if (!arrayWrites.isEmpty()) { result.append(" writes:\n"); - for (Iterator it2 = arrayWrites.iterator(); it2.hasNext();) { - result.append(" ").append(it2.next()).append("\n"); + for (MemoryAccess memoryAccess : arrayWrites) { + result.append(" ").append(memoryAccess).append("\n"); } } return result.toString(); diff --git a/com.ibm.wala.core/src/com/ibm/wala/escape/LocalLiveRangeAnalysis.java b/com.ibm.wala.core/src/com/ibm/wala/escape/LocalLiveRangeAnalysis.java index b773846dd..649f6dd48 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/escape/LocalLiveRangeAnalysis.java +++ b/com.ibm.wala.core/src/com/ibm/wala/escape/LocalLiveRangeAnalysis.java @@ -99,10 +99,9 @@ public class LocalLiveRangeAnalysis { private static Collection findBlocks(IR ir, Iterator statements) { Collection s = Iterator2Collection.toSet(statements); Collection result = HashSetFactory.make(); - outer: for (Iterator it = ir.getControlFlowGraph().iterator(); it.hasNext();) { - SSACFG.BasicBlock b = (SSACFG.BasicBlock) it.next(); - for (Iterator it2 = b.iterator(); it2.hasNext();) { - SSAInstruction x = it2.next(); + outer: for (ISSABasicBlock issaBasicBlock : ir.getControlFlowGraph()) { + SSACFG.BasicBlock b = (SSACFG.BasicBlock) issaBasicBlock; + for (SSAInstruction x : b) { if (s.contains(x)) { result.add(b); continue outer; @@ -124,10 +123,9 @@ public class LocalLiveRangeAnalysis { if (s == null) { Assertions.UNREACHABLE(); } - for (Iterator it = ir.getControlFlowGraph().iterator(); it.hasNext();) { - SSACFG.BasicBlock b = (SSACFG.BasicBlock) it.next(); - for (Iterator it2 = b.iterator(); it2.hasNext();) { - SSAInstruction x = it2.next(); + for (ISSABasicBlock issaBasicBlock : ir.getControlFlowGraph()) { + SSACFG.BasicBlock b = (SSACFG.BasicBlock) issaBasicBlock; + for (SSAInstruction x : b) { if (s.equals(x)) { return b; } @@ -143,8 +141,8 @@ public class LocalLiveRangeAnalysis { * @return the basic block which contains the ith instruction */ private static ISSABasicBlock findBlock(IR ir, int i) { - for (Iterator it = ir.getControlFlowGraph().iterator(); it.hasNext();) { - SSACFG.BasicBlock b = (SSACFG.BasicBlock) it.next(); + for (ISSABasicBlock issaBasicBlock : ir.getControlFlowGraph()) { + SSACFG.BasicBlock b = (SSACFG.BasicBlock) issaBasicBlock; if (i >= b.getFirstInstructionIndex() && i <= b.getLastInstructionIndex()) { return b; } 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 872934140..379d841ea 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 @@ -92,8 +92,7 @@ public class TrivialMethodEscape implements IMethodEscapeAnalysis, INodeEscapeAn private boolean mayEscape(Set allocN, int allocPC, Set nodes) throws WalaException { Set instances = HashSetFactory.make(); // instances := set of instance key allocated at <allocMethod, allocPC> - for (Iterator it = allocN.iterator(); it.hasNext();) { - CGNode n = it.next(); + for (CGNode n : allocN) { NewSiteReference site = findAlloc(n, allocPC); InstanceKey ik = hg.getHeapModel().getInstanceKeyForAllocation(n, site); if (ik == null) { @@ -102,8 +101,7 @@ public class TrivialMethodEscape implements IMethodEscapeAnalysis, INodeEscapeAn instances.add(ik); } - for (Iterator it = instances.iterator(); it.hasNext();) { - InstanceKey ik = it.next(); + for (InstanceKey ik : instances) { for (Iterator it2 = hg.getPredNodes(ik); it2.hasNext();) { PointerKey p = (PointerKey) it2.next(); if (!(p instanceof AbstractLocalPointerKey)) { diff --git a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/CallGraphStats.java b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/CallGraphStats.java index c23486157..75c50f03a 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/CallGraphStats.java +++ b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/CallGraphStats.java @@ -12,7 +12,6 @@ package com.ibm.wala.ipa.callgraph; import java.util.Collections; import java.util.HashSet; -import java.util.Iterator; import java.util.Set; import com.ibm.wala.classLoader.IMethod; @@ -116,8 +115,7 @@ public class CallGraphStats { Set reachableNodes = DFS.getReachableNodes(cg, Collections.singleton(cg.getFakeRootNode())); int nNodes = 0; int nEdges = 0; - for (Iterator it = reachableNodes.iterator(); it.hasNext();) { - CGNode n = it.next(); + for (CGNode n : reachableNodes) { nNodes++; nEdges += cg.getSuccNodeCount(n); } @@ -142,8 +140,7 @@ public class CallGraphStats { } int ret = 0; HashSet counted = HashSetFactory.make(); - for (Iterator iter = cg.iterator(); iter.hasNext();) { - CGNode node = iter.next(); + for (CGNode node : cg) { IMethod method = node.getMethod(); if (counted.add(method)) { if (method instanceof ShrikeCTMethod) { @@ -169,8 +166,7 @@ public class CallGraphStats { throw new IllegalArgumentException("cg is null"); } HashSet result = HashSetFactory.make(); - for (Iterator it = cg.iterator(); it.hasNext();) { - CGNode N = it.next(); + for (CGNode N : cg) { result.add(N.getMethod().getReference()); } return result; diff --git a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/CallGraphTransitiveClosure.java b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/CallGraphTransitiveClosure.java index 04edc5aee..79b9fee90 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/CallGraphTransitiveClosure.java +++ b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/CallGraphTransitiveClosure.java @@ -11,7 +11,6 @@ package com.ibm.wala.ipa.callgraph; import java.util.Collection; -import java.util.Iterator; import java.util.Map; import java.util.function.Function; @@ -46,8 +45,7 @@ public class CallGraphTransitiveClosure { BitVectorSolver solver = new BitVectorSolver(gr); solver.solve(null); Map> result = HashMapFactory.make(); - for (Iterator it = cg.iterator(); it.hasNext();) { - CGNode n = it.next(); + for (CGNode n : cg) { BitVectorVariable bv = solver.getOut(n); result.put(n, new OrdinalSet(bv.getValue(), gr.getLatticeValues())); } @@ -62,8 +60,7 @@ public class CallGraphTransitiveClosure { */ public static Map> collectNodeResults(CallGraph cg, Function> nodeResultComputer) { Map> result = HashMapFactory.make(); - for (Iterator it = cg.iterator(); it.hasNext();) { - CGNode n = it.next(); + for (CGNode n : cg) { result.put(n, nodeResultComputer.apply(n)); } return result; diff --git a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/impl/AbstractRootMethod.java b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/impl/AbstractRootMethod.java index 0c77c2ecb..c857370e4 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/impl/AbstractRootMethod.java +++ b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/impl/AbstractRootMethod.java @@ -100,8 +100,8 @@ public abstract class AbstractRootMethod extends SyntheticMethod { public SSAInstruction[] getStatements(SSAOptions options) { SSAInstruction[] result = new SSAInstruction[statements.size()]; int i = 0; - for (Iterator it = statements.iterator(); it.hasNext();) { - result[i++] = it.next(); + for (SSAInstruction ssaInstruction : statements) { + result[i++] = ssaInstruction; } return result; @@ -363,9 +363,9 @@ public abstract class AbstractRootMethod extends SyntheticMethod { public Iterator iterateNewSites(CGNode node) { ArrayList result = new ArrayList(); SSAInstruction[] statements = getStatements(options.getSSAOptions()); - for (int i = 0; i < statements.length; i++) { - if (statements[i] instanceof SSANewInstruction) { - SSANewInstruction s = (SSANewInstruction) statements[i]; + for (SSAInstruction statement : statements) { + if (statement instanceof SSANewInstruction) { + SSANewInstruction s = (SSANewInstruction) statement; result.add(s.getNewSite()); } } @@ -375,9 +375,9 @@ public abstract class AbstractRootMethod extends SyntheticMethod { public Iterator getInvokeStatements() { ArrayList result = new ArrayList(); SSAInstruction[] statements = getStatements(options.getSSAOptions()); - for (int i = 0; i < statements.length; i++) { - if (statements[i] instanceof SSAInvokeInstruction) { - result.add(statements[i]); + for (SSAInstruction statement : statements) { + if (statement instanceof SSAInvokeInstruction) { + result.add(statement); } } return result.iterator(); diff --git a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/impl/AllApplicationEntrypoints.java b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/impl/AllApplicationEntrypoints.java index 2a1be1d91..324fc4cf0 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/impl/AllApplicationEntrypoints.java +++ b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/impl/AllApplicationEntrypoints.java @@ -11,8 +11,6 @@ package com.ibm.wala.ipa.callgraph.impl; import java.util.HashSet; -import java.util.Iterator; - import com.ibm.wala.classLoader.IClass; import com.ibm.wala.classLoader.IMethod; import com.ibm.wala.ipa.callgraph.AnalysisScope; @@ -40,8 +38,7 @@ public class AllApplicationEntrypoints extends HashSet { for (IClass klass : cha) { if (!klass.isInterface()) { if (isApplicationClass(scope, klass)) { - for (Iterator methodIt = klass.getDeclaredMethods().iterator(); methodIt.hasNext();) { - IMethod method = methodIt.next(); + for (IMethod method : klass.getDeclaredMethods()) { if (!method.isAbstract()) { add(new ArgumentTypeEntrypoint(method, cha)); } diff --git a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/impl/ArgumentTypeEntrypoint.java b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/impl/ArgumentTypeEntrypoint.java index 882f4040d..5736363db 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/impl/ArgumentTypeEntrypoint.java +++ b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/impl/ArgumentTypeEntrypoint.java @@ -11,7 +11,6 @@ package com.ibm.wala.ipa.callgraph.impl; import java.util.Collection; -import java.util.Iterator; import java.util.Set; import com.ibm.wala.classLoader.ArrayClass; @@ -82,8 +81,7 @@ public class ArgumentTypeEntrypoint extends Entrypoint { private TypeReference chooseAConcreteSubClass(IClass klass) { Collection subclasses = cha.computeSubClasses(klass.getReference()); - for (Iterator it = subclasses.iterator(); it.hasNext();) { - IClass c = it.next(); + for (IClass c : subclasses) { if (!c.isAbstract()) { return c.getReference(); } diff --git a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/impl/ComposedEntrypoints.java b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/impl/ComposedEntrypoints.java index 68882d2e5..509298a6a 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/impl/ComposedEntrypoints.java +++ b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/impl/ComposedEntrypoints.java @@ -31,11 +31,11 @@ public class ComposedEntrypoints implements Iterable { if (B == null) { throw new IllegalArgumentException("B is null"); } - for (Iterator it = A.iterator(); it.hasNext(); ) { - entrypoints.add(it.next()); + for (Entrypoint entrypoint : A) { + entrypoints.add(entrypoint); } - for (Iterator it = B.iterator(); it.hasNext(); ) { - entrypoints.add(it.next()); + for (Entrypoint entrypoint : B) { + entrypoints.add(entrypoint); } } diff --git a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/impl/PartialCallGraph.java b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/impl/PartialCallGraph.java index 7606c48c6..d78cec8a8 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/impl/PartialCallGraph.java +++ b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/impl/PartialCallGraph.java @@ -105,8 +105,7 @@ public class PartialCallGraph extends DelegatingGraph implements CallGra @Override public Set getNodes(MethodReference m) { Set result = HashSetFactory.make(); - for (Iterator xs = cg.getNodes(m).iterator(); xs.hasNext();) { - CGNode x = xs.next(); + for (CGNode x : cg.getNodes(m)) { if (containsNode(x)) { result.add(x); } @@ -189,8 +188,7 @@ public class PartialCallGraph extends DelegatingGraph implements CallGra return null; } Set result = HashSetFactory.make(); - for (Iterator ns = cg.getPossibleTargets(node, site).iterator(); ns.hasNext();) { - CGNode target = ns.next(); + for (CGNode target : cg.getPossibleTargets(node, site)) { if (containsNode(target)) { result.add(target); } 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 c2faba2e8..40cbd0dde 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 @@ -209,12 +209,12 @@ public class Util { throw new IllegalArgumentException("(0 < classNames.length) and (classNames[0] == null)"); } - for (int i = 0; i < classNames.length; i++) { - if (classNames[i].indexOf("L") != 0) { - throw new IllegalArgumentException("Expected class name to start with L " + classNames[i]); + for (String className : classNames) { + if (className.indexOf("L") != 0) { + throw new IllegalArgumentException("Expected class name to start with L " + className); } - if (classNames[i].indexOf(".") > 0) { - Assertions.productionAssertion(false, "Expected class name formatted with /, not . " + classNames[i]); + if (className.indexOf(".") > 0) { + Assertions.productionAssertion(false, "Expected class name formatted with /, not . " + className); } } @@ -282,15 +282,13 @@ public class Util { System.err.println("subgraph: "); System.err.println(subG.toString()); System.err.println("nodeDiff: "); - for (Iterator it = nodeDiff.iterator(); it.hasNext();) { - System.err.println(it.next().toString()); + for (T t : nodeDiff) { + System.err.println(t.toString()); } Assertions.productionAssertion(nodeDiff.isEmpty(), "bad superset, see tracefile\n"); } - for (Iterator subNodes = subG.iterator(); subNodes.hasNext();) { - T m = subNodes.next(); - + for (T m : subG) { Set succDiff = setify(subG.getSuccNodes(m)); succDiff.removeAll(setify(supG.getSuccNodes(m))); if (!succDiff.isEmpty()) { @@ -305,8 +303,8 @@ public class Util { System.err.println("subgraph: "); System.err.println(subG.toString()); System.err.println("predDiff: "); - for (Iterator it = predDiff.iterator(); it.hasNext();) { - System.err.println(it.next().toString()); + for (T t : predDiff) { + System.err.println(t.toString()); } Assertions.UNREACHABLE("bad superset for predecessors of " + m + ":" + predDiff); } diff --git a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/ConcreteTypeKey.java b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/ConcreteTypeKey.java index 705e49fb9..33314df73 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/ConcreteTypeKey.java +++ b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/ConcreteTypeKey.java @@ -93,8 +93,7 @@ public final class ConcreteTypeKey implements InstanceKey { } InstanceKey[] result = new InstanceKey[types.size()]; int i = 0; - for (Iterator it = types.iterator(); it.hasNext();) { - TypeReference type = it.next(); + for (TypeReference type : types) { assert type != null; IClass klass = cha.lookupClass(type); result[i++] = new ConcreteTypeKey(klass); diff --git a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/PointerAnalysisImpl.java b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/PointerAnalysisImpl.java index a991a4601..d74b60ddd 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/PointerAnalysisImpl.java +++ b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/PointerAnalysisImpl.java @@ -93,8 +93,8 @@ public class PointerAnalysisImpl extends AbstractPointerAnalysis { PointerKey p = it.next(); OrdinalSet O = getPointsToSet(p); result.append(" ").append(p).append(" ->\n"); - for (Iterator it2 = O.iterator(); it2.hasNext();) { - result.append(" ").append(it2.next()).append("\n"); + for (InstanceKey instanceKey : O) { + result.append(" ").append(instanceKey).append("\n"); } } return result.toString(); @@ -284,8 +284,7 @@ public class PointerAnalysisImpl extends AbstractPointerAnalysis { PointerKey arrayRef = pointerKeys.getPointerKeyForLocal(node, instruction.getArrayRef()); MutableSparseIntSet S = MutableSparseIntSet.makeEmpty(); OrdinalSet refs = getPointsToSet(arrayRef); - for (Iterator it = refs.iterator(); it.hasNext();) { - InstanceKey ik = it.next(); + for (InstanceKey ik : refs) { PointerKey key = pointerKeys.getPointerKeyForArrayContents(ik); OrdinalSet pointees = getPointsToSet(key); IntSet set = pointees.getBackingSet(); @@ -312,8 +311,7 @@ public class PointerAnalysisImpl extends AbstractPointerAnalysis { PointerKey ref = pointerKeys.getPointerKeyForLocal(node, refVn); MutableSparseIntSet S = MutableSparseIntSet.makeEmpty(); OrdinalSet refs = getPointsToSet(ref); - for (Iterator it = refs.iterator(); it.hasNext();) { - InstanceKey ik = it.next(); + for (InstanceKey ik : refs) { PointerKey fkey = pointerKeys.getPointerKeyForInstanceField(ik, f); if (fkey != null) { OrdinalSet pointees = getPointsToSet(fkey); @@ -333,8 +331,7 @@ public class PointerAnalysisImpl extends AbstractPointerAnalysis { Set caughtTypes = SSAPropagationCallGraphBuilder.getCaughtExceptionTypes(instruction, ir); MutableSparseIntSet S = MutableSparseIntSet.makeEmpty(); // add the instances from each incoming pei ... - for (Iterator it = peis.iterator(); it.hasNext();) { - ProgramCounter peiLoc = it.next(); + for (ProgramCounter peiLoc : peis) { SSAInstruction pei = ir.getPEI(peiLoc); PointerKey e = null; // first deal with exception variables from calls and throws. @@ -347,8 +344,7 @@ public class PointerAnalysisImpl extends AbstractPointerAnalysis { } if (e != null) { OrdinalSet ep = getPointsToSet(e); - for (Iterator it2 = ep.iterator(); it2.hasNext();) { - InstanceKey ik = it2.next(); + for (InstanceKey ik : ep) { if (PropagationCallGraphBuilder.catches(caughtTypes, ik.getConcreteType(), getCallGraph().getClassHierarchy())) { S.add(instanceKeys.getMappedIndex(ik)); } @@ -360,8 +356,7 @@ public class PointerAnalysisImpl extends AbstractPointerAnalysis { // the pei, but just instance keys Collection types = pei.getExceptionTypes(); if (types != null) { - for (Iterator it2 = types.iterator(); it2.hasNext();) { - TypeReference type = it2.next(); + for (TypeReference type : types) { if (type != null) { InstanceKey ik = SSAPropagationCallGraphBuilder.getInstanceKeyForPEI(node, peiLoc, type, iKeyFactory); ConcreteTypeKey ck = (ConcreteTypeKey) ik; @@ -388,15 +383,13 @@ public class PointerAnalysisImpl extends AbstractPointerAnalysis { return rhsSet; } else { if (klass.isInterface()) { - for (Iterator it = rhsSet.iterator(); it.hasNext();) { - InstanceKey ik = it.next(); + for (InstanceKey ik : rhsSet) { if (getCallGraph().getClassHierarchy().implementsInterface(ik.getConcreteType(), klass)) { S.add(getInstanceKeyMapping().getMappedIndex(ik)); } } } else { - for (Iterator it = rhsSet.iterator(); it.hasNext();) { - InstanceKey ik = it.next(); + for (InstanceKey ik : rhsSet) { if (getCallGraph().getClassHierarchy().isSubclassOf(ik.getConcreteType(), klass)) { S.add(getInstanceKeyMapping().getMappedIndex(ik)); } @@ -419,12 +412,12 @@ public class PointerAnalysisImpl extends AbstractPointerAnalysis { private OrdinalSet toOrdinalSet(InstanceKey[] ik) { MutableSparseIntSet s = MutableSparseIntSet.makeEmpty(); - for (int i = 0; i < ik.length; i++) { - int index = instanceKeys.getMappedIndex(ik[i]); + for (InstanceKey element : ik) { + int index = instanceKeys.getMappedIndex(element); if (index != -1) { s.add(index); } else { - assert index != -1 : "instance " + ik[i] + " not mapped!"; + assert index != -1 : "instance " + element + " not mapped!"; } } return new OrdinalSet(s, instanceKeys); @@ -435,8 +428,7 @@ public class PointerAnalysisImpl extends AbstractPointerAnalysis { */ private OrdinalSet computeImplicitExceptionsForCall(CGNode node, SSAInvokeInstruction call) { MutableSparseIntSet S = MutableSparseIntSet.makeEmpty(); - for (Iterator it = getCallGraph().getPossibleTargets(node, call.getCallSite()).iterator(); it.hasNext();) { - CGNode target = it.next(); + for (CGNode target : getCallGraph().getPossibleTargets(node, call.getCallSite())) { PointerKey retVal = pointerKeys.getPointerKeyForExceptionalReturnValue(target); IntSet set = getPointsToSet(retVal).getBackingSet(); if (set != null) { 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 a694ff6a1..947c2aec4 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 @@ -244,8 +244,7 @@ public abstract class PropagationCallGraphBuilder implements CallGraphBuilder it = options.getEntrypoints().iterator(); it.hasNext();) { - Entrypoint E = it.next(); + for (Entrypoint E : options.getEntrypoints()) { if (DEBUG_ENTRYPOINTS) { System.err.println("Entrypoint: " + E); } @@ -927,8 +926,7 @@ public abstract class PropagationCallGraphBuilder implements CallGraphBuilder instances = system.getInstances(rhs.getValue()); boolean sideEffect = false; - for (Iterator it = instances.iterator(); it.hasNext();) { - InstanceKey I = it.next(); + for (InstanceKey I : instances) { if (!I.getConcreteType().isArrayClass()) { continue; } diff --git a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/PropagationGraph.java b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/PropagationGraph.java index 13d35f6ea..c1ea4f04f 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/PropagationGraph.java +++ b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/PropagationGraph.java @@ -733,8 +733,7 @@ public class PropagationGraph implements IFixedPointSystem return 0; } int result = delegateGraph.getSuccNodeCount(v); - for (Iterator> it = invImplicitUnaryMap.keySet().iterator(); it.hasNext();) { - UnaryOperator op = it.next(); + for (UnaryOperator op : invImplicitUnaryMap.keySet()) { IBinaryNaturalRelation R = invImplicitUnaryMap.get(op); IntSet s = R.getRelated(number); if (s != null) { @@ -754,8 +753,7 @@ public class PropagationGraph implements IFixedPointSystem return 0; } int result = delegateGraph.getPredNodeCount(v); - for (Iterator> it = implicitUnaryMap.keySet().iterator(); it.hasNext();) { - UnaryOperator op = it.next(); + for (UnaryOperator op : implicitUnaryMap.keySet()) { IBinaryNaturalRelation R = implicitUnaryMap.get(op); IntSet s = R.getRelated(number); if (s != null) { @@ -788,9 +786,9 @@ public class PropagationGraph implements IFixedPointSystem System.err.println("implicit map:"); int count = 0; int totalBytes = 0; - for (Iterator, IBinaryNaturalRelation>> it = implicitUnaryMap.entrySet().iterator(); it.hasNext();) { + for (Entry, IBinaryNaturalRelation> entry : implicitUnaryMap.entrySet()) { count++; - Map.Entry e = it.next(); + Map.Entry e = entry; IBinaryNaturalRelation R = e.getValue(); System.err.println(("entry " + count)); R.performVerboseAction(); diff --git a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/PropagationSystem.java b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/PropagationSystem.java index 0b304d95f..2d6fc7e6e 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/PropagationSystem.java +++ b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/PropagationSystem.java @@ -147,8 +147,7 @@ public class PropagationSystem extends DefaultFixedPointSolver set = fixedSetMap.get(p); if (set != null) { - for (Iterator it = set.iterator(); it.hasNext();) { - UnarySideEffect s = it.next(); + for (UnarySideEffect s : set) { s.replaceFixedSet(rep); } Set s2 = MapUtil.findOrCreateSet(fixedSetMap, rep); @@ -486,8 +485,7 @@ public class PropagationSystem extends DefaultFixedPointSolver ifaces = null; ifaces = elementClass.getAllImplementedInterfaces(); - for (Iterator it = ifaces.iterator(); it.hasNext();) { - IClass I = it.next(); + for (IClass I : ifaces) { TypeReference iArrayRef = makeArray(I.getReference(), dim); IClass iArrayClass = null; iArrayClass = I.getClassLoader().lookupClass(iArrayRef.getName()); @@ -531,8 +529,7 @@ public class PropagationSystem extends DefaultFixedPointSolver ifaces = klass.getAllImplementedInterfaces(); - for (Iterator it = ifaces.iterator(); it.hasNext();) { - IClass I = it.next(); + for (IClass I : ifaces) { MutableIntSet set = findOrCreateSparseSetForClass(I); set.add(index); if (DEBUG) { @@ -798,8 +795,7 @@ public class PropagationSystem extends DefaultFixedPointSolver s, int rep) { PointsToSetVariable pRef = pointsToMap.getPointsToSet(rep); - for (Iterator it = s.iterator(); it.hasNext();) { - PointsToSetVariable p = it.next(); + for (PointsToSetVariable p : s) { updateSideEffects(p, pRef); } } @@ -813,15 +809,11 @@ public class PropagationSystem extends DefaultFixedPointSolver s, int rep) { PointsToSetVariable pRef = pointsToMap.getPointsToSet(rep); - for (Iterator it = s.iterator(); it.hasNext();) { - PointsToSetVariable p = it.next(); - + for (PointsToSetVariable p : s) { if (p != pRef) { // pRef is the representative for p. // be careful: cache the defs before mucking with the underlying system - for (Iterator d = Iterator2Collection.toSet(getStatementsThatDef(p)).iterator(); d.hasNext();) { - AbstractStatement as = d.next(); - + for (AbstractStatement as : Iterator2Collection.toSet(getStatementsThatDef(p))) { if (as instanceof AssignEquation) { AssignEquation assign = (AssignEquation) as; PointsToSetVariable rhs = assign.getRightHandSide(); @@ -836,8 +828,7 @@ public class PropagationSystem extends DefaultFixedPointSolver u = Iterator2Collection.toSet(getStatementsThatUse(p)).iterator(); u.hasNext();) { - AbstractStatement as = u.next(); + for (AbstractStatement as : Iterator2Collection.toSet(getStatementsThatUse(p))) { if (as instanceof AssignEquation) { AssignEquation assign = (AssignEquation) as; PointsToSetVariable lhs = assign.getLHS(); 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 5b6817617..c585496f4 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 @@ -12,7 +12,6 @@ package com.ibm.wala.ipa.callgraph.propagation; import java.util.Collection; import java.util.HashSet; -import java.util.Iterator; import java.util.Set; import java.util.function.Predicate; @@ -83,8 +82,8 @@ public class ReflectionHandler { Collection casts = Iterator2Collection.toSet(new FilterIterator<>(slice.iterator(), f)); changedNodes.addAll(modifyFactoryInterpreter(st, casts, builder.getContextInterpreter(), builder.getClassHierarchy())); } - for (Iterator it = changedNodes.iterator(); it.hasNext();) { - builder.addConstraintsFromChangedNode(it.next(), monitor); + for (CGNode cgNode : changedNodes) { + builder.addConstraintsFromChangedNode(cgNode, monitor); } return changedNodes.size() > 0; @@ -93,8 +92,7 @@ public class ReflectionHandler { private Collection computeFactoryReturnStatements() { // todo: clean up logic with inheritance, delegation. HashSet result = HashSetFactory.make(); - for (Iterator it = builder.getCallGraph().iterator(); it.hasNext();) { - CGNode n = it.next(); + for (CGNode n : builder.getCallGraph()) { if (n.getMethod() instanceof SyntheticMethod) { SyntheticMethod m = (SyntheticMethod) n.getMethod(); if (m.isFactoryMethod()) { diff --git a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/SSAPropagationCallGraphBuilder.java b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/SSAPropagationCallGraphBuilder.java index 21038bead..918153de4 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/SSAPropagationCallGraphBuilder.java +++ b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/SSAPropagationCallGraphBuilder.java @@ -284,9 +284,8 @@ public abstract class SSAPropagationCallGraphBuilder extends PropagationCallGrap v.setBasicBlock(b); // visit each instruction in the basic block. - for (Iterator it = b.iterator(); it.hasNext();) { + for (SSAInstruction s : b) { MonitorUtil.throwExceptionIfCanceled(monitor); - SSAInstruction s = it.next(); if (s != null) { s.visit(v); if (wasChanged(node)) { @@ -329,8 +328,8 @@ public abstract class SSAPropagationCallGraphBuilder extends PropagationCallGrap if (contentsAreInvariant(v.symbolTable, v.du, phi.getUse(n))) { system.recordImplicitPointsToSet(use); InstanceKey[] ik = getInvariantContents(v.symbolTable, v.du, node, phi.getUse(n), this); - for (int i = 0; i < ik.length; i++) { - system.newConstraint(def, ik[i]); + for (InstanceKey element : ik) { + system.newConstraint(def, element); } } else { system.newConstraint(def, assignOperator, use); @@ -371,8 +370,7 @@ public abstract class SSAPropagationCallGraphBuilder extends PropagationCallGrap if (DEBUG) { System.err.println("Add exception def constraints for node " + node); } - for (Iterator it = peis.iterator(); it.hasNext();) { - ProgramCounter peiLoc = it.next(); + for (ProgramCounter peiLoc : peis) { if (DEBUG) { System.err.println("peiLoc: " + peiLoc); } @@ -398,9 +396,9 @@ public abstract class SSAPropagationCallGraphBuilder extends PropagationCallGrap if (contentsAreInvariant(ir.getSymbolTable(), du, s.getException())) { InstanceKey[] ik = getInvariantContents(ir.getSymbolTable(), du, node, s.getException(), this); - for (int i = 0; i < ik.length; i++) { - system.findOrCreateIndexForInstanceKey(ik[i]); - assignInstanceToCatch(exceptionVar, catchClasses, ik[i]); + for (InstanceKey element : ik) { + system.findOrCreateIndexForInstanceKey(element); + assignInstanceToCatch(exceptionVar, catchClasses, element); } } else { addAssignmentsForCatchPointerKey(exceptionVar, catchClasses, e); @@ -412,8 +410,7 @@ public abstract class SSAPropagationCallGraphBuilder extends PropagationCallGrap // the pei, but just instance keys Collection types = pei.getExceptionTypes(); if (types != null) { - for (Iterator it2 = types.iterator(); it2.hasNext();) { - TypeReference type = it2.next(); + for (TypeReference type : types) { if (type != null) { InstanceKey ik = getInstanceKeyForPEI(node, peiLoc, type, instanceKeyFactory); if (ik == null) { @@ -536,9 +533,9 @@ public abstract class SSAPropagationCallGraphBuilder extends PropagationCallGrap InstanceKey[] ik = invariants != null ? invariants[p] : null; if (ik != null) { if (ik.length > 0) { - for (int i = 0; i < ik.length; i++) { - system.findOrCreateIndexForInstanceKey(ik[i]); - keys[pi] = ik[i]; + for (InstanceKey element : ik) { + system.findOrCreateIndexForInstanceKey(element); + keys[pi] = element; rec(pi + 1, rhsi); } } /* else { @@ -794,11 +791,11 @@ public abstract class SSAPropagationCallGraphBuilder extends PropagationCallGrap if (contentsAreInvariant(symbolTable, du, value)) { system.recordImplicitPointsToSet(valuePtrKey); InstanceKey[] vk = getInvariantContents(value); - for (int j = 0; j < vk.length; j++) { - system.findOrCreateIndexForInstanceKey(vk[j]); - if (vk[j].getConcreteType() != null) { - if (getClassHierarchy().isAssignableFrom(contents, vk[j].getConcreteType())) { - system.newConstraint(p, vk[j]); + for (InstanceKey element : vk) { + system.findOrCreateIndexForInstanceKey(element); + if (element.getConcreteType() != null) { + if (getClassHierarchy().isAssignableFrom(contents, element.getConcreteType())) { + system.newConstraint(p, element); } } } @@ -816,10 +813,10 @@ public abstract class SSAPropagationCallGraphBuilder extends PropagationCallGrap if (contentsAreInvariant(symbolTable, du, value)) { system.recordImplicitPointsToSet(valuePtrKey); InstanceKey[] ik = getInvariantContents(value); - for (int i = 0; i < ik.length; i++) { - system.findOrCreateIndexForInstanceKey(ik[i]); + for (InstanceKey element : ik) { + system.findOrCreateIndexForInstanceKey(element); assert !system.isUnified(arrayRefPtrKey); - system.newSideEffect(getBuilder().new InstanceArrayStoreOperator(ik[i]), arrayRefPtrKey); + system.newSideEffect(getBuilder().new InstanceArrayStoreOperator(element), arrayRefPtrKey); } } else { system.newSideEffect(getBuilder().new ArrayStoreOperator(system.findOrCreatePointsToSet(valuePtrKey)), arrayRefPtrKey); @@ -871,17 +868,17 @@ public abstract class SSAPropagationCallGraphBuilder extends PropagationCallGrap IClass cls = getClassHierarchy().lookupClass(t); if (cls.isInterface()) { - for (int i = 0; i < ik.length; i++) { - system.findOrCreateIndexForInstanceKey(ik[i]); - if (getClassHierarchy().implementsInterface(ik[i].getConcreteType(), cls)) { - system.newConstraint(result, ik[i]); + for (InstanceKey element : ik) { + system.findOrCreateIndexForInstanceKey(element); + if (getClassHierarchy().implementsInterface(element.getConcreteType(), cls)) { + system.newConstraint(result, element); } } } else { - for (int i = 0; i < ik.length; i++) { - system.findOrCreateIndexForInstanceKey(ik[i]); - if (getClassHierarchy().isSubclassOf(ik[i].getConcreteType(), cls)) { - system.newConstraint(result, ik[i]); + for (InstanceKey element : ik) { + system.findOrCreateIndexForInstanceKey(element); + if (getClassHierarchy().isSubclassOf(element.getConcreteType(), cls)) { + system.newConstraint(result, element); } } } @@ -915,11 +912,11 @@ public abstract class SSAPropagationCallGraphBuilder extends PropagationCallGrap if (contentsAreInvariant(symbolTable, du, instruction.getResult())) { system.recordImplicitPointsToSet(result); InstanceKey[] ik = getInvariantContents(instruction.getResult()); - for (int i = 0; i < ik.length; i++) { + for (InstanceKey element : ik) { if (DEBUG) { - System.err.println("invariant contents: " + returnValue + " " + ik[i]); + System.err.println("invariant contents: " + returnValue + " " + element); } - system.newConstraint(returnValue, ik[i]); + system.newConstraint(returnValue, element); } } else { system.newConstraint(returnValue, assignOperator, result); @@ -1047,15 +1044,15 @@ public abstract class SSAPropagationCallGraphBuilder extends PropagationCallGrap if (!representsNullType(refk[j])) { system.findOrCreateIndexForInstanceKey(refk[j]); PointerKey p = getPointerKeyForInstanceField(refk[j], f); - for (int i = 0; i < ik.length; i++) { - system.newConstraint(p, ik[i]); + for (InstanceKey element : ik) { + system.newConstraint(p, element); } } } } else { - for (int i = 0; i < ik.length; i++) { - system.findOrCreateIndexForInstanceKey(ik[i]); - system.newSideEffect(getBuilder().new InstancePutFieldOperator(f, ik[i]), refKey); + for (InstanceKey element : ik) { + system.findOrCreateIndexForInstanceKey(element); + system.newSideEffect(getBuilder().new InstancePutFieldOperator(f, element), refKey); } } } else { @@ -1087,8 +1084,8 @@ public abstract class SSAPropagationCallGraphBuilder extends PropagationCallGrap if (contentsAreInvariant(symbolTable, du, rval)) { system.recordImplicitPointsToSet(rvalKey); InstanceKey[] ik = getInvariantContents(rval); - for (int i = 0; i < ik.length; i++) { - system.newConstraint(fKey, ik[i]); + for (InstanceKey element : ik) { + system.newConstraint(fKey, element); } } else { system.newConstraint(fKey, assignOperator, rvalKey); @@ -1337,8 +1334,8 @@ public abstract class SSAPropagationCallGraphBuilder extends PropagationCallGrap if (contentsAreInvariant(symbolTable, du, instruction.getUse(i))) { system.recordImplicitPointsToSet(use); InstanceKey[] ik = getInvariantContents(instruction.getUse(i)); - for (int j = 0; j < ik.length; j++) { - system.newConstraint(dst, ik[j]); + for (InstanceKey element : ik) { + system.newConstraint(dst, element); } } else { system.newConstraint(dst, assignOperator, use); @@ -1385,10 +1382,10 @@ public abstract class SSAPropagationCallGraphBuilder extends PropagationCallGrap if (contentsAreInvariant(symbolTable, du, val)) { system.recordImplicitPointsToSet(src); InstanceKey[] ik = getInvariantContents(val); - for (int j = 0; j < ik.length; j++) { - boolean assignable = getClassHierarchy().isAssignableFrom(cls, ik[j].getConcreteType()); + for (InstanceKey element : ik) { + boolean assignable = getClassHierarchy().isAssignableFrom(cls, element.getConcreteType()); if ((assignable && useFilter) || (!assignable && !useFilter)) { - system.newConstraint(dst, ik[j]); + system.newConstraint(dst, element); } } } else { @@ -1422,8 +1419,8 @@ public abstract class SSAPropagationCallGraphBuilder extends PropagationCallGrap if (contentsAreInvariant(symbolTable, du, src)) { system.recordImplicitPointsToSet(srcKey); InstanceKey[] ik = getInvariantContents(src); - for (int j = 0; j < ik.length; j++) { - system.newConstraint(dst, ik[j]); + for (InstanceKey element : ik) { + system.newConstraint(dst, element); } } else { system.newConstraint(dst, assignOperator, srcKey); @@ -1648,8 +1645,8 @@ public abstract class SSAPropagationCallGraphBuilder extends PropagationCallGrap PointerKey formal = getTargetPointerKey(target, i); if (constParams != null && constParams[i] != null) { InstanceKey[] ik = constParams[i]; - for (int j = 0; j < ik.length; j++) { - system.newConstraint(formal, ik[j]); + for (InstanceKey element : ik) { + system.newConstraint(formal, element); } } else { if (instruction.getUse(i) < 0) { @@ -2331,8 +2328,8 @@ public abstract class SSAPropagationCallGraphBuilder extends PropagationCallGrap } if (ensureIndexes) { - for (int i = 0; i < result.length; i++) { - system.findOrCreateIndexForInstanceKey(result[i]); + for (InstanceKey element : result) { + system.findOrCreateIndexForInstanceKey(element); } } diff --git a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/cfa/ZeroXCFABuilder.java b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/cfa/ZeroXCFABuilder.java index 480eaa002..e94490321 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/cfa/ZeroXCFABuilder.java +++ b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/cfa/ZeroXCFABuilder.java @@ -76,8 +76,8 @@ public class ZeroXCFABuilder extends SSAPropagationCallGraphBuilder { throw new IllegalArgumentException("options is null"); } Util.addDefaultSelectors(options, cha); - for (int i = 0; i < xmlFiles.length; i++) { - Util.addBypassLogic(options, scope, cl, xmlFiles[i], cha); + for (String xmlFile : xmlFiles) { + Util.addBypassLogic(options, scope, cl, xmlFile, cha); } return new ZeroXCFABuilder(cha, options, cache, null, null, instancePolicy); diff --git a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/cfa/ZeroXInstanceKeys.java b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/cfa/ZeroXInstanceKeys.java index 989497fa8..a41cef186 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/cfa/ZeroXInstanceKeys.java +++ b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/cfa/ZeroXInstanceKeys.java @@ -214,8 +214,7 @@ public class ZeroXInstanceKeys implements InstanceKeyFactory { if (s == null) { Map count = countAllocsByType(node); HashSet smushees = HashSetFactory.make(5); - for (Iterator> it = count.entrySet().iterator(); it.hasNext();) { - Map.Entry e = it.next(); + for (Map.Entry e : count.entrySet()) { Integer i = e.getValue(); if (i.intValue() > SMUSH_LIMIT) { smushees.add(e.getKey()); @@ -336,8 +335,7 @@ public class ZeroXInstanceKeys implements InstanceKeyFactory { if (c.getReference().equals(TypeReference.JavaLangObject)) { return true; } else { - for (Iterator it = c.getDeclaredInstanceFields().iterator(); it.hasNext();) { - IField f = it.next(); + for (IField f : c.getDeclaredInstanceFields()) { if (f.getReference().getFieldType().isReferenceType()) { return false; } 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 680d14588..3ff8eae25 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 @@ -349,8 +349,8 @@ public abstract class AbstractRTABuilder extends PropagationCallGraphBuilder { FakeRootMethod m = (FakeRootMethod) getCallGraph().getFakeRootNode().getMethod(); - for (int i = 0; i < PRE_ALLOC.length; i++) { - SSANewInstruction n = m.addAllocation(PRE_ALLOC[i]); + for (TypeReference element : PRE_ALLOC) { + SSANewInstruction n = m.addAllocation(element); // visit now to ensure java.lang.Object is visited first visitNew(getCallGraph().getFakeRootNode(), n.getNewSite()); } 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 163d6ab67..7b8e2d805 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 @@ -10,8 +10,6 @@ *******************************************************************************/ package com.ibm.wala.ipa.callgraph.propagation.rta; -import java.util.Iterator; - import com.ibm.wala.analysis.reflection.CloneInterpreter; import com.ibm.wala.classLoader.CallSiteReference; import com.ibm.wala.classLoader.IClass; @@ -55,8 +53,7 @@ public class BasicRTABuilder extends AbstractRTABuilder { // set up the selector map to record each method that class implements registerImplementedMethods(klass, iKey); - for (Iterator ifaces = klass.getAllImplementedInterfaces().iterator(); ifaces.hasNext();) { - IClass c = ifaces.next(); + for (IClass c : klass.getAllImplementedInterfaces()) { registerImplementedMethods(c, iKey); } klass = klass.getSuperclass(); @@ -73,8 +70,7 @@ public class BasicRTABuilder extends AbstractRTABuilder { if (DEBUG) { System.err.println(("registerImplementedMethods: " + declarer + " " + iKey)); } - for (Iterator it = declarer.getDeclaredMethods().iterator(); it.hasNext();) { - IMethod M = it.next(); + for (IMethod M : declarer.getDeclaredMethods()) { Selector selector = M.getReference().getSelector(); PointerKey sKey = getKeyForSelector(selector); if (DEBUG) { diff --git a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/rta/DelegatingExplicitCallGraph.java b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/rta/DelegatingExplicitCallGraph.java index eb1b1be26..c838a2837 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/rta/DelegatingExplicitCallGraph.java +++ b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/rta/DelegatingExplicitCallGraph.java @@ -10,7 +10,6 @@ *******************************************************************************/ package com.ibm.wala.ipa.callgraph.propagation.rta; -import java.util.Iterator; import java.util.Set; import com.ibm.wala.classLoader.CallSiteReference; @@ -73,8 +72,7 @@ public class DelegatingExplicitCallGraph extends ExplicitCallGraph { @Override public MutableSharedBitVectorIntSet getAllTargetNumbers() { MutableSharedBitVectorIntSet result = new MutableSharedBitVectorIntSet(super.getAllTargetNumbers()); - for (Iterator it = targets.iterator(); it.hasNext();) { - Object n = it.next(); + for (Object n : targets) { if (n instanceof CallSite) { ExplicitNode delegate = (ExplicitNode) ((CallSite) n).getNode(); IntSet s = DelegatingExplicitCallGraph.this.getPossibleTargetNumbers(delegate, ((CallSite) n).getSite()); @@ -119,8 +117,7 @@ public class DelegatingExplicitCallGraph extends ExplicitCallGraph { if (super.getAllTargetNumbers().contains(y)) { return true; } else { - for (Iterator it = targets.iterator(); it.hasNext();) { - Object n = it.next(); + for (Object n : targets) { if (n instanceof CallSite) { ExplicitNode delegate = (ExplicitNode) ((CallSite) n).getNode(); IntSet s = DelegatingExplicitCallGraph.this.getPossibleTargetNumbers(delegate,((CallSite) n).getSite()); diff --git a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/rta/TypeBasedHeapModel.java b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/rta/TypeBasedHeapModel.java index 34d90ce5f..18c641443 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/rta/TypeBasedHeapModel.java +++ b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/rta/TypeBasedHeapModel.java @@ -89,12 +89,10 @@ public class TypeBasedHeapModel implements HeapModel { if (pKeys == null) { pKeys = HashMapFactory.make(); } - for (Iterator it = klasses.iterator(); it.hasNext();) { - IClass klass = it.next(); + for (IClass klass : klasses) { pKeys.putAll(computePointerKeys(klass)); } - for (Iterator it = cg.iterator(); it.hasNext();) { - CGNode node = it.next(); + for (CGNode node : cg) { initPKeysForNode(node); } } @@ -159,8 +157,7 @@ public class TypeBasedHeapModel implements HeapModel { result.put(p, p); } } else { - for (Iterator it = klass.getAllFields().iterator(); it.hasNext();) { - IField f = it.next(); + for (IField f : klass.getAllFields()) { if (!f.getFieldTypeReference().isPrimitiveType()) { if (f.isStatic()) { PointerKey p = pointerKeys.getPointerKeyForStaticField(f); diff --git a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/rta/TypeBasedPointerAnalysis.java b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/rta/TypeBasedPointerAnalysis.java index 97e12d620..3480cdb28 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/rta/TypeBasedPointerAnalysis.java +++ b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/rta/TypeBasedPointerAnalysis.java @@ -11,7 +11,6 @@ package com.ibm.wala.ipa.callgraph.propagation.rta; import java.util.Collection; -import java.util.Iterator; import java.util.Map; import com.ibm.wala.classLoader.IClass; @@ -71,8 +70,7 @@ public class TypeBasedPointerAnalysis extends AbstractPointerAnalysis { throw new IllegalArgumentException("null c"); } MutableMapping result = MutableMapping.make(); - for (Iterator it = c.iterator(); it.hasNext();) { - IClass klass = it.next(); + for (IClass klass : c) { if (!klass.isAbstract() && !klass.isInterface()) { result.add(new ConcreteTypeKey(klass)); } @@ -141,8 +139,7 @@ public class TypeBasedPointerAnalysis extends AbstractPointerAnalysis { private OrdinalSet toOrdinalInstanceKeySet(Collection c) { BimodalMutableIntSet s = new BimodalMutableIntSet(); - for (Iterator it = c.iterator(); it.hasNext();) { - IClass klass = it.next(); + for (IClass klass : c) { int index = getInstanceKeyMapping().add(new ConcreteTypeKey(klass)); s.add(index); } diff --git a/com.ibm.wala.core/src/com/ibm/wala/ipa/cfg/AbstractInterproceduralCFG.java b/com.ibm.wala.core/src/com/ibm/wala/ipa/cfg/AbstractInterproceduralCFG.java index 563cc2c57..ae05fdc31 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/ipa/cfg/AbstractInterproceduralCFG.java +++ b/com.ibm.wala.core/src/com/ibm/wala/ipa/cfg/AbstractInterproceduralCFG.java @@ -159,8 +159,7 @@ public abstract class AbstractInterproceduralCFG imple addNodeForEachBasicBlock(cfg, n); SSAInstruction[] instrs = cfg.getInstructions(); // create edges for node n. - for (Iterator bbs = cfg.iterator(); bbs.hasNext();) { - T bb = bbs.next(); + for (T bb : cfg) { if (bb != cfg.entry()) addEdgesToNonEntryBlock(n, cfg, instrs, bb); } @@ -352,8 +351,7 @@ public abstract class AbstractInterproceduralCFG imple */ @SuppressWarnings("unused") private void addNodeForEachBasicBlock(ControlFlowGraph cfg, CGNode N) { - for (Iterator bbs = cfg.iterator(); bbs.hasNext();) { - T bb = bbs.next(); + for (T bb : cfg) { if (DEBUG_LEVEL > 1) { System.err.println("IPCFG Add basic block " + bb); } @@ -456,8 +454,7 @@ public abstract class AbstractInterproceduralCFG imple private void addEdgesToCallees(CGNode n) { ControlFlowGraph cfg = getCFG(n); if (cfg != null) { - for (Iterator bbs = cfg.iterator(); bbs.hasNext();) { - T bb = bbs.next(); + for (T bb : cfg) { BasicBlockInContext block = new BasicBlockInContext(n, bb); if (hasCall(block)) { addCalleeEdgesForCall(n, block); @@ -499,8 +496,7 @@ public abstract class AbstractInterproceduralCFG imple System.err.println("got Site: " + site); } boolean irrelevantTargets = false; - for (Iterator ts = cg.getPossibleTargets(n, site).iterator(); ts.hasNext();) { - CGNode tn = ts.next(); + for (CGNode tn : cg.getPossibleTargets(n, site)) { if (!relevant.test(tn)) { if (DEBUG_LEVEL > 1) { System.err.println("Irrelevant target: " + tn); diff --git a/com.ibm.wala.core/src/com/ibm/wala/ipa/cfg/PrunedCFG.java b/com.ibm.wala.core/src/com/ibm/wala/ipa/cfg/PrunedCFG.java index b88987aa4..799f5549d 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/ipa/cfg/PrunedCFG.java +++ b/com.ibm.wala.core/src/com/ibm/wala/ipa/cfg/PrunedCFG.java @@ -215,8 +215,7 @@ public class PrunedCFG> extends AbstractNumberedGrap @Override public int getMaxNumber() { int max = -1; - for (Iterator NS = nodes.iterator(); NS.hasNext();) { - T N = NS.next(); + for (T N : nodes) { if (subset.contains(N) && getNumber(N) > max) { max = getNumber(N); } diff --git a/com.ibm.wala.core/src/com/ibm/wala/ipa/cha/ClassHierarchy.java b/com.ibm.wala.core/src/com/ibm/wala/ipa/cha/ClassHierarchy.java index e5df156bf..f7ba22eb0 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/ipa/cha/ClassHierarchy.java +++ b/com.ibm.wala.core/src/com/ibm/wala/ipa/cha/ClassHierarchy.java @@ -352,8 +352,7 @@ public class ClassHierarchy implements IClassHierarchy { } if (loadedSuperInterfaces != null) { - for (Iterator it3 = loadedSuperInterfaces.iterator(); it3.hasNext();) { - final IClass iface = it3.next(); + for (IClass iface : loadedSuperInterfaces) { try { // make sure we'll be able to load the interface! computeSuperclasses(iface); @@ -459,8 +458,7 @@ public class ClassHierarchy implements IClassHierarchy { // give up and return no receivers return Collections.emptySet(); } - for (Iterator it = impls.iterator(); it.hasNext();) { - IClass klass = it.next(); + for (IClass klass : impls) { if (!klass.isInterface() && !klass.isAbstract()) { result.addAll(computeTargetsNotInterface(ref, klass)); } @@ -663,8 +661,7 @@ public class ClassHierarchy implements IClassHierarchy { private void visitForNumbering(Node N) { N.left = nextNumber++; - for (Iterator it = N.children.iterator(); it.hasNext();) { - Node C = it.next(); + for (Node C : N.children) { visitForNumbering(C); } N.right = nextNumber++; @@ -1014,8 +1011,7 @@ public class ClassHierarchy implements IClassHierarchy { if (subTypeRefsOfError == null) { computeSubClasses(TypeReference.JavaLangError); subTypeRefsOfError = HashSetFactory.make(subclassesOfError.size()); - for (Iterator it = subclassesOfError.iterator(); it.hasNext();) { - IClass klass = it.next(); + for (IClass klass : subclassesOfError) { subTypeRefsOfError.add(klass.getReference()); } } @@ -1032,8 +1028,7 @@ public class ClassHierarchy implements IClassHierarchy { if (runtimeExceptionTypeRefs == null) { computeSubClasses(TypeReference.JavaLangRuntimeException); runtimeExceptionTypeRefs = HashSetFactory.make(runtimeExceptionClasses.size()); - for (Iterator it = runtimeExceptionClasses.iterator(); it.hasNext();) { - IClass klass = it.next(); + for (IClass klass : runtimeExceptionClasses) { runtimeExceptionTypeRefs.add(klass.getReference()); } } @@ -1109,9 +1104,9 @@ public class ClassHierarchy implements IClassHierarchy { @Override public IClassLoader getLoader(ClassLoaderReference loaderRef) { - for (int i = 0; i < loaders.length; i++) { - if (loaders[i].getReference().equals(loaderRef)) { - return loaders[i]; + for (IClassLoader loader : loaders) { + if (loader.getReference().equals(loaderRef)) { + return loader; } } Assertions.UNREACHABLE(); diff --git a/com.ibm.wala.core/src/com/ibm/wala/ipa/cha/ClassHierarchyStats.java b/com.ibm.wala.core/src/com/ibm/wala/ipa/cha/ClassHierarchyStats.java index 363621775..005023bc2 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/ipa/cha/ClassHierarchyStats.java +++ b/com.ibm.wala.core/src/com/ibm/wala/ipa/cha/ClassHierarchyStats.java @@ -25,10 +25,10 @@ public class ClassHierarchyStats { throw new IllegalArgumentException("cha cannot be null"); } IClassLoader[] loaders = cha.getLoaders(); - for (int i = 0; i < loaders.length; i++) { - System.out.println("loader: " + loaders[i]); - System.out.println(" classes: " + loaders[i].getNumberOfClasses()); - System.out.println(" methods: " + loaders[i].getNumberOfMethods()); + for (IClassLoader loader : loaders) { + System.out.println("loader: " + loader); + System.out.println(" classes: " + loader.getNumberOfClasses()); + System.out.println(" methods: " + loader.getNumberOfMethods()); } } } 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 aa45dbc61..f2c166e47 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 @@ -293,8 +293,7 @@ public class PDG implements NumberedGraph { if (src != null) { for (Iterator succ = cdg.getSuccNodes(bb); succ.hasNext();) { ISSABasicBlock bb2 = succ.next(); - for (Iterator it2 = bb2.iterator(); it2.hasNext();) { - SSAInstruction st = it2.next(); + for (SSAInstruction st : bb2) { if (st != null) { Statement dest = ssaInstruction2Statement(st, ir, instructionIndices); assert src != null; @@ -437,8 +436,7 @@ public class PDG implements NumberedGraph { } } - for (Iterator it = iterator(); it.hasNext();) { - Statement s = it.next(); + for (Statement s : this) { switch (s.getKind()) { case NORMAL: case CATCH: 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 73f49e699..f318fd617 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 @@ -180,8 +180,8 @@ public class SDG extends AbstractNumberedGraph if (!statementsAdded.contains(node)) { statementsAdded.add(node); PDG pdg = getPDG(node); - for (Iterator it = pdg.iterator(); it.hasNext();) { - addNode(it.next()); + for (Statement statement : pdg) { + addNode(statement); } } } @@ -190,8 +190,7 @@ public class SDG extends AbstractNumberedGraph * force computation of all PDGs in the SDG */ private void computeAllPDGs() { - for (Iterator it = cg.iterator(); it.hasNext();) { - CGNode n = it.next(); + for (CGNode n : cg) { getPDG(n); } } diff --git a/com.ibm.wala.core/src/com/ibm/wala/ipa/summaries/BypassSyntheticClassLoader.java b/com.ibm.wala.core/src/com/ibm/wala/ipa/summaries/BypassSyntheticClassLoader.java index 9ebb5e7f2..77d7bc205 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/ipa/summaries/BypassSyntheticClassLoader.java +++ b/com.ibm.wala.core/src/com/ibm/wala/ipa/summaries/BypassSyntheticClassLoader.java @@ -188,8 +188,7 @@ public class BypassSyntheticClassLoader implements IClassLoader { if (toRemove == null) { throw new IllegalArgumentException("toRemove is null"); } - for (Iterator it = toRemove.iterator(); it.hasNext();) { - IClass klass = it.next(); + for (IClass klass : toRemove) { syntheticClasses.remove(klass.getName()); } } diff --git a/com.ibm.wala.core/src/com/ibm/wala/ipa/summaries/SyntheticIR.java b/com.ibm.wala.core/src/com/ibm/wala/ipa/summaries/SyntheticIR.java index bc83e220c..4a9fa30a9 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/ipa/summaries/SyntheticIR.java +++ b/com.ibm.wala.core/src/com/ibm/wala/ipa/summaries/SyntheticIR.java @@ -80,9 +80,8 @@ public class SyntheticIR extends IR { SymbolTable symbolTable = new SymbolTable(method.getNumberOfParameters()); // simulate allocation of value numbers - for (int i = 0; i < instructions.length; i++) { - if (instructions[i] != null) { - SSAInstruction s = instructions[i]; + for (SSAInstruction s : instructions) { + if (s != null) { updateForInstruction(constants, symbolTable, s); } } diff --git a/com.ibm.wala.core/src/com/ibm/wala/ipa/summaries/XMLMethodSummaryReader.java b/com.ibm.wala.core/src/com/ibm/wala/ipa/summaries/XMLMethodSummaryReader.java index 496524569..31b2d53bb 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/ipa/summaries/XMLMethodSummaryReader.java +++ b/com.ibm.wala.core/src/com/ibm/wala/ipa/summaries/XMLMethodSummaryReader.java @@ -417,8 +417,8 @@ public class XMLMethodSummaryReader implements BytecodeConstants { Assertions.productionAssertion(governingMethod.getReturnType() != null); if (governingMethod.getReturnType().isReferenceType()) { SSAInstruction[] statements = governingMethod.getStatements(); - for (int i = 0; i < statements.length; i++) { - if (statements[i] instanceof SSAReturnInstruction) { + for (SSAInstruction statement : statements) { + if (statement instanceof SSAReturnInstruction) { return; } } diff --git a/com.ibm.wala.core/src/com/ibm/wala/ssa/AuxiliaryCache.java b/com.ibm.wala.core/src/com/ibm/wala/ssa/AuxiliaryCache.java index dd7e25159..b7f15c7aa 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/ssa/AuxiliaryCache.java +++ b/com.ibm.wala.core/src/com/ibm/wala/ssa/AuxiliaryCache.java @@ -12,7 +12,6 @@ package com.ibm.wala.ssa; import java.util.HashMap; import java.util.HashSet; -import java.util.Iterator; import java.util.Map; import java.util.Map.Entry; @@ -65,26 +64,23 @@ public class AuxiliaryCache implements IAuxiliaryCache { dictionary = HashMapFactory.make(); nItems = 0; - for (Iterator, Map>> it = oldDictionary.entrySet().iterator(); it - .hasNext();) { - Map.Entry, Map> e = it.next(); - Map m = e.getValue(); - HashSet toRemove = HashSetFactory.make(); - for (Iterator> it2 = m.entrySet().iterator(); it2.hasNext();) { - Map.Entry e2 = it2.next(); - Object key = e2.getKey(); - Object val = e2.getValue(); - if (CacheReference.get(val) == null) { - toRemove.add(key); - } - } - for (Iterator it2 = toRemove.iterator(); it2.hasNext();) { - m.remove(it2.next()); - } - if (m.size() > 0) { - dictionary.put(e.getKey(), m); - } + for (Entry, Map> e : oldDictionary.entrySet()) { + Map m = e.getValue(); + HashSet toRemove = HashSetFactory.make(); + for (Entry e2 : m.entrySet()) { + Object key = e2.getKey(); + Object val = e2.getValue(); + if (CacheReference.get(val) == null) { + toRemove.add(key); } + } + for (Object object : toRemove) { + m.remove(object); + } + if (m.size() > 0) { + dictionary.put(e.getKey(), m); + } + } } /* diff --git a/com.ibm.wala.core/src/com/ibm/wala/ssa/IR.java b/com.ibm.wala.core/src/com/ibm/wala/ssa/IR.java index c85a6d16f..a27a3c99d 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/ssa/IR.java +++ b/com.ibm.wala.core/src/com/ibm/wala/ssa/IR.java @@ -699,8 +699,8 @@ public abstract class IR implements IRView { if (instructions == null) return true; - for (int i = 0; i < instructions.length; i++) - if (instructions[i] != null) + for (SSAInstruction instruction : instructions) + if (instruction != null) return false; return true; diff --git a/com.ibm.wala.core/src/com/ibm/wala/ssa/SSABuilder.java b/com.ibm.wala.core/src/com/ibm/wala/ssa/SSABuilder.java index fb33dcf89..27020ea96 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/ssa/SSABuilder.java +++ b/com.ibm.wala.core/src/com/ibm/wala/ssa/SSABuilder.java @@ -10,8 +10,6 @@ *******************************************************************************/ package com.ibm.wala.ssa; -import java.util.Iterator; - import com.ibm.wala.analysis.stackMachine.AbstractIntStackMachine; import com.ibm.wala.cfg.IBasicBlock; import com.ibm.wala.cfg.ShrikeCFG; @@ -144,9 +142,9 @@ public class SSABuilder extends AbstractIntStackMachine { } if (allTheSame(rhs)) { - for (int i = 0; i < rhs.length; i++) { - if (rhs[i] != TOP) { - return rhs[i]; + for (int rh : rhs) { + if (rh != TOP) { + return rh; } } // didn't find anything but TOP @@ -178,9 +176,9 @@ public class SSABuilder extends AbstractIntStackMachine { @Override public int meetLocal(int n, int[] rhs, BasicBlock bb) { if (allTheSame(rhs)) { - for (int i = 0; i < rhs.length; i++) { - if (rhs[i] != TOP) { - return rhs[i]; + for (int rh : rhs) { + if (rh != TOP) { + return rh; } } // didn't find anything but TOP @@ -782,8 +780,8 @@ public class SSABuilder extends AbstractIntStackMachine { } private void doIndirectReads(int[] locals) { - for(int i = 0; i < locals.length; i++) { - ssaIndirections.setUse(getCurrentInstructionIndex(), new ShrikeLocalName(locals[i]), workingState.getLocal(locals[i])); + for (int local : locals) { + ssaIndirections.setUse(getCurrentInstructionIndex(), new ShrikeLocalName(local), workingState.getLocal(local)); } } @@ -798,13 +796,13 @@ public class SSABuilder extends AbstractIntStackMachine { } private void doIndirectWrites(int[] locals, int rval) { - for(int i = 0; i < locals.length; i++) { - ShrikeLocalName name = new ShrikeLocalName(locals[i]); + for (int local : locals) { + ShrikeLocalName name = new ShrikeLocalName(local); int idx = getCurrentInstructionIndex(); if (ssaIndirections.getDef(idx, name) == -1) { ssaIndirections.setDef(idx, name, rval==-1? symbolTable.newSymbol(): rval); } - workingState.setLocal(locals[i], ssaIndirections.getDef(idx, name)); + workingState.setLocal(local, ssaIndirections.getDef(idx, name)); } } @@ -965,8 +963,7 @@ public class SSABuilder extends AbstractIntStackMachine { * Finish populating the map of local variable information */ private void finishLocalMap(SSABuilder builder) { - for (Iterator it = shrikeCFG.iterator(); it.hasNext();) { - ShrikeCFG.BasicBlock bb = it.next(); + for (BasicBlock bb : shrikeCFG) { MachineState S = builder.getIn(bb); int number = bb.getNumber(); block2LocalState[number] = S.getLocals(); @@ -1053,8 +1050,8 @@ public class SSABuilder extends AbstractIntStackMachine { private static int[] extractIndices(int[] x, int y) { assert x != null; int count = 0; - for (int i = 0; i < x.length; i++) { - if (x[i] == y) { + for (int element : x) { + if (element == y) { count++; } } diff --git a/com.ibm.wala.core/src/com/ibm/wala/ssa/SSACFG.java b/com.ibm.wala.core/src/com/ibm/wala/ssa/SSACFG.java index aa3e982d1..161db84a6 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/ssa/SSACFG.java +++ b/com.ibm.wala.core/src/com/ibm/wala/ssa/SSACFG.java @@ -120,8 +120,7 @@ public class SSACFG implements ControlFlowGraph, * SSABasicBlocks */ private void addPisFromInducedCFG(InducedCFG cfg) { - for (Iterator it = cfg.iterator(); it.hasNext();) { - InducedCFG.BasicBlock ib = it.next(); + for (com.ibm.wala.cfg.InducedCFG.BasicBlock ib : cfg) { // we rely on the invariant that basic blocks in this cfg are numbered identically as in the source // InducedCFG BasicBlock b = getBasicBlock(ib.getNumber()); @@ -137,8 +136,7 @@ public class SSACFG implements ControlFlowGraph, * SSABasicBlocks */ private void addPhisFromInducedCFG(InducedCFG cfg) { - for (Iterator it = cfg.iterator(); it.hasNext();) { - InducedCFG.BasicBlock ib = it.next(); + for (com.ibm.wala.cfg.InducedCFG.BasicBlock ib : cfg) { // we rely on the invariant that basic blocks in this cfg are numbered identically as in the source // InducedCFG BasicBlock b = getBasicBlock(ib.getNumber()); @@ -164,8 +162,7 @@ public class SSACFG implements ControlFlowGraph, } private void recordExceptionTypes(Set set, IClassLoader loader) { - for (Iterator it = set.iterator(); it.hasNext();) { - ExceptionHandler handler = it.next(); + for (ExceptionHandler handler : set) { TypeReference t = null; if (handler.getCatchClass() == null) { // by convention, in ShrikeCT this means catch everything @@ -417,9 +414,9 @@ public class SSACFG implements ControlFlowGraph, SSAPhiInstruction[] old = stackSlotPhis; stackSlotPhis = new SSAPhiInstruction[newLength]; int j = 0; - for (int i = 0; i < old.length; i++) { - if (old[i] != null) { - stackSlotPhis[j++] = old[i]; + for (SSAPhiInstruction element : old) { + if (element != null) { + stackSlotPhis[j++] = element; } } } @@ -441,9 +438,9 @@ public class SSACFG implements ControlFlowGraph, SSAPhiInstruction[] old = localPhis; localPhis = new SSAPhiInstruction[newLength]; int j = 0; - for (int i = 0; i < old.length; i++) { - if (old[i] != null) { - localPhis[j++] = old[i]; + for (SSAPhiInstruction element : old) { + if (element != null) { + localPhis[j++] = element; } } } @@ -541,9 +538,9 @@ public class SSACFG implements ControlFlowGraph, SSAPhiInstruction[] old = stackSlotPhis; stackSlotPhis = new SSAPhiInstruction[size]; int j = 0; - for (int i = 0; i < old.length; i++) { - if (old[i] != null) { - stackSlotPhis[j++] = old[i]; + for (SSAPhiInstruction element : old) { + if (element != null) { + stackSlotPhis[j++] = element; } } } @@ -556,9 +553,9 @@ public class SSACFG implements ControlFlowGraph, SSAPhiInstruction[] old = localPhis; localPhis = new SSAPhiInstruction[size]; int j = 0; - for (int i = 0; i < old.length; i++) { - if (old[i] != null) { - localPhis[j++] = old[i]; + for (SSAPhiInstruction element : old) { + if (element != null) { + localPhis[j++] = element; } } } @@ -567,8 +564,8 @@ public class SSACFG implements ControlFlowGraph, private int countNonNull(SSAPhiInstruction[] a) { int result = 0; - for (int i = 0; i < a.length; i++) { - if (a[i] != null) { + for (SSAPhiInstruction element : a) { + if (element != null) { result++; } } diff --git a/com.ibm.wala.core/src/com/ibm/wala/ssa/SSANewInstruction.java b/com.ibm.wala.core/src/com/ibm/wala/ssa/SSANewInstruction.java index fd2fd4770..fe7956b43 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/ssa/SSANewInstruction.java +++ b/com.ibm.wala.core/src/com/ibm/wala/ssa/SSANewInstruction.java @@ -82,8 +82,8 @@ public abstract class SSANewInstruction extends SSAInstruction { private String array2String(int[] params, SymbolTable symbolTable) { StringBuffer result = new StringBuffer(); - for (int i = 0; i < params.length; i++) { - result.append(getValueString(symbolTable, params[i])); + for (int param : params) { + result.append(getValueString(symbolTable, param)); result.append(" "); } return result.toString(); diff --git a/com.ibm.wala.core/src/com/ibm/wala/ssa/analysis/DeadAssignmentElimination.java b/com.ibm.wala.core/src/com/ibm/wala/ssa/analysis/DeadAssignmentElimination.java index 884e3a63d..6160c637c 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/ssa/analysis/DeadAssignmentElimination.java +++ b/com.ibm.wala.core/src/com/ibm/wala/ssa/analysis/DeadAssignmentElimination.java @@ -58,8 +58,8 @@ public class DeadAssignmentElimination { */ private static void doTransformation(IR ir, DeadValueSystem solution) { ControlFlowGraph cfg = ir.getControlFlowGraph(); - for (Iterator x = cfg.iterator(); x.hasNext();) { - BasicBlock b = (BasicBlock) x.next(); + for (ISSABasicBlock issaBasicBlock : cfg) { + BasicBlock b = (BasicBlock) issaBasicBlock; if (DEBUG) { System.err.println("eliminateDeadPhis: " + b); } @@ -131,8 +131,7 @@ public class DeadAssignmentElimination { } // Now create dataflow equations; v is live iff any phi that uses v is live - for (Iterator> it = vars.entrySet().iterator(); it.hasNext();) { - Map.Entry E = it.next(); + for (Entry E : vars.entrySet()) { Integer def = E.getKey(); BooleanVariable B = E.getValue(); for (Iterator uses = DU.getUses(def.intValue()); uses.hasNext();) { diff --git a/com.ibm.wala.core/src/com/ibm/wala/ssa/analysis/ExplodedControlFlowGraph.java b/com.ibm.wala.core/src/com/ibm/wala/ssa/analysis/ExplodedControlFlowGraph.java index 00e8ca90d..16b9dc27f 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/ssa/analysis/ExplodedControlFlowGraph.java +++ b/com.ibm.wala.core/src/com/ibm/wala/ssa/analysis/ExplodedControlFlowGraph.java @@ -644,8 +644,7 @@ public class ExplodedControlFlowGraph implements ControlFlowGraph it = iterator(); it.hasNext();) { - IExplodedBasicBlock bb = it.next(); + for (IExplodedBasicBlock bb : this) { s.append("BB").append(getNumber(bb)).append("\n"); Iterator succNodes = getSuccNodes(bb); diff --git a/com.ibm.wala.core/src/com/ibm/wala/types/Descriptor.java b/com.ibm.wala.core/src/com/ibm/wala/types/Descriptor.java index 5e48e914c..750fe7f92 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/types/Descriptor.java +++ b/com.ibm.wala.core/src/com/ibm/wala/types/Descriptor.java @@ -206,8 +206,7 @@ public final class Descriptor { StringBuffer result = new StringBuffer(); result.append("("); if (parameters != null) { - for (int i = 0; i < parameters.length; i++) { - TypeName p = parameters[i]; + for (TypeName p : parameters) { result.append(p); appendSemicolonIfNeeded(result, p); } @@ -222,8 +221,7 @@ public final class Descriptor { StringBuffer result = new StringBuffer(); result.append("("); if (parameters != null) { - for (int i = 0; i < parameters.length; i++) { - TypeName p = parameters[i]; + for (TypeName p : parameters) { result.append(p.toUnicodeString()); appendSemicolonIfNeeded(result, p); } diff --git a/com.ibm.wala.core/src/com/ibm/wala/util/config/AnalysisScopeReader.java b/com.ibm.wala.core/src/com/ibm/wala/util/config/AnalysisScopeReader.java index f7fdd2fd2..036b75cc5 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/util/config/AnalysisScopeReader.java +++ b/com.ibm.wala.core/src/com/ibm/wala/util/config/AnalysisScopeReader.java @@ -175,8 +175,8 @@ public class AnalysisScopeReader { scope.setLoaderImpl(walaLoader, entryPathname); } else if ("stdlib".equals(entryType)) { String[] stdlibs = WalaProperties.getJ2SEJarFiles(); - for (int i = 0; i < stdlibs.length; i++) { - scope.addToScope(walaLoader, new JarFile(stdlibs[i], false)); + for (String stdlib : stdlibs) { + scope.addToScope(walaLoader, new JarFile(stdlib, false)); } } else { Assertions.UNREACHABLE(); diff --git a/com.ibm.wala.core/src/com/ibm/wala/util/ref/ReferenceCleanser.java b/com.ibm.wala.core/src/com/ibm/wala/util/ref/ReferenceCleanser.java index 7dd35593d..0fd17c9be 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/util/ref/ReferenceCleanser.java +++ b/com.ibm.wala.core/src/com/ibm/wala/util/ref/ReferenceCleanser.java @@ -11,8 +11,6 @@ package com.ibm.wala.util.ref; import java.lang.ref.WeakReference; -import java.util.Iterator; - import com.ibm.wala.classLoader.IClass; import com.ibm.wala.classLoader.IMethod; import com.ibm.wala.classLoader.ShrikeCTMethod; @@ -81,8 +79,7 @@ public class ReferenceCleanser { ShrikeClass c = (ShrikeClass) klass; c.clearSoftCaches(); } else { - for (Iterator it2 = klass.getDeclaredMethods().iterator(); it2.hasNext(); ) { - IMethod m = it2.next(); + for (IMethod m : klass.getDeclaredMethods()) { if (m instanceof ShrikeCTMethod) { ((ShrikeCTMethod)m).clearCaches(); } diff --git a/com.ibm.wala.core/src/com/ibm/wala/util/scope/JUnitEntryPoints.java b/com.ibm.wala.core/src/com/ibm/wala/util/scope/JUnitEntryPoints.java index 852310b0d..ff8c9540d 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/util/scope/JUnitEntryPoints.java +++ b/com.ibm.wala.core/src/com/ibm/wala/util/scope/JUnitEntryPoints.java @@ -104,8 +104,7 @@ public class JUnitEntryPoints { System.err.println("found test class"); } // add entry point corresponding to the target method - for (Iterator methodsIt = klass.getDeclaredMethods().iterator(); methodsIt.hasNext();) { - IMethod method = methodsIt.next(); + for (IMethod method : klass.getDeclaredMethods()) { Atom methodAtom = method.getName(); if (methodAtom.equals(targetMethodAtom)) { entryPts.add(new DefaultEntrypoint(method, cha)); @@ -191,9 +190,8 @@ public class JUnitEntryPoints { IClass currClass = testClass; while (currClass != null && !currClass.getName().equals(junitTestCaseType) && !currClass.getName().equals(junitTestSuiteType)) { - for (Iterator methodsIt = currClass.getDeclaredMethods().iterator(); methodsIt.hasNext();) { + for (IMethod method : currClass.getDeclaredMethods()) { - IMethod method = methodsIt.next(); final Atom methodAtom = method.getName(); if (methodAtom.equals(setUpMethodAtom) || methodAtom.equals(tearDownMethodAtom) || method.isClinit() || method.isInit()) { result.add(method); diff --git a/com.ibm.wala.core/src/com/ibm/wala/util/strings/Atom.java b/com.ibm.wala.core/src/com/ibm/wala/util/strings/Atom.java index 4530dc1e4..3bfab6b15 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/util/strings/Atom.java +++ b/com.ibm.wala.core/src/com/ibm/wala/util/strings/Atom.java @@ -411,8 +411,8 @@ public final class Atom implements Serializable { * @return true iff this atom contains the specified byte */ public boolean contains(byte b) { - for (int i = 0; i < val.length; i++) { - if (val[i] == b) { + for (byte element : val) { + if (element == b) { return true; } } diff --git a/com.ibm.wala.core/src/com/ibm/wala/viz/PDFViewUtil.java b/com.ibm.wala.core/src/com/ibm/wala/viz/PDFViewUtil.java index 729908e98..9f3e1448d 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/viz/PDFViewUtil.java +++ b/com.ibm.wala.core/src/com/ibm/wala/viz/PDFViewUtil.java @@ -75,8 +75,8 @@ public class PDFViewUtil { throw new IllegalArgumentException("ir is null"); } final HashMap labelMap = HashMapFactory.make(); - for (Iterator it = ir.getControlFlowGraph().iterator(); it.hasNext();) { - SSACFG.BasicBlock bb = (SSACFG.BasicBlock) it.next(); + for (ISSABasicBlock issaBasicBlock : ir.getControlFlowGraph()) { + SSACFG.BasicBlock bb = (SSACFG.BasicBlock) issaBasicBlock; labelMap.put(bb, getNodeLabel(ir, bb)); } NodeDecorator labels = new NodeDecorator() { diff --git a/com.ibm.wala.dalvik/src/com/ibm/wala/dalvik/classLoader/DexCFG.java b/com.ibm.wala.dalvik/src/com/ibm/wala/dalvik/classLoader/DexCFG.java index b0630027e..850520b14 100644 --- a/com.ibm.wala.dalvik/src/com/ibm/wala/dalvik/classLoader/DexCFG.java +++ b/com.ibm.wala.dalvik/src/com/ibm/wala/dalvik/classLoader/DexCFG.java @@ -111,8 +111,7 @@ public class DexCFG extends AbstractCFG implemen */ private void computeI2BMapping() { instruction2Block = new int[getInstructions().length]; - for (Iterator it = iterator(); it.hasNext();) { - final BasicBlock b = it.next(); + for (BasicBlock b : this) { for (int j = b.getFirstInstructionIndex(); j <= b.getLastInstructionIndex(); j++) { instruction2Block[j] = getNumber(b); } @@ -123,8 +122,7 @@ public class DexCFG extends AbstractCFG implemen * Compute outgoing edges in the control flow graph. */ private void computeEdges() { - for (Iterator it = iterator(); it.hasNext();) { - BasicBlock b = it.next(); + for (BasicBlock b : this) { if (b.equals(exit())) { continue; } else if (b.equals(entry())) { @@ -240,8 +238,8 @@ public class DexCFG extends AbstractCFG implemen Instruction last = getInstructions()[getLastInstructionIndex()]; int[] targets = last.getBranchTargets(); - for (int i = 0; i < targets.length; i++) { - BasicBlock b = getBlockForInstruction(targets[i]); + for (int target : targets) { + BasicBlock b = getBlockForInstruction(target); addNormalEdgeTo(b); } addExceptionalEdges(last); @@ -310,11 +308,11 @@ public class DexCFG extends AbstractCFG implemen exceptionTypes = HashSetFactory.make(exceptionTypes); } - for (int j = 0; j < hs.length; j++) { + for (ExceptionHandler element : hs) { if (DEBUG) { - System.err.println(" handler " + hs[j]); + System.err.println(" handler " + element); } - BasicBlock b = getBlockForInstruction(hs[j].getHandler()); + BasicBlock b = getBlockForInstruction(element.getHandler()); if (DEBUG) { System.err.println(" target " + b); } @@ -326,9 +324,9 @@ public class DexCFG extends AbstractCFG implemen addExceptionalEdgeTo(b); } else { TypeReference caughtException = null; - if (hs[j].getCatchClass() != null) { + if (element.getCatchClass() != null) { ClassLoaderReference loader = DexCFG.this.getMethod().getDeclaringClass().getReference().getClassLoader(); - caughtException = ShrikeUtil.makeTypeReference(loader, hs[j].getCatchClass()); + caughtException = ShrikeUtil.makeTypeReference(loader, element.getCatchClass()); if (DEBUG) { System.err.println(" caughtException " + caughtException); } @@ -651,8 +649,7 @@ public class DexCFG extends AbstractCFG implemen public String toString() { StringBuffer s = new StringBuffer(""); BitVector catches = this.getCatchBlocks(); - for (Iterator it = iterator(); it.hasNext();) { - BasicBlock bb = it.next(); + for (BasicBlock bb : this) { s.append("BB").append(getNumber(bb)); if (catches.contains(bb.getNumber())) { s.append(""); diff --git a/com.ibm.wala.dalvik/src/com/ibm/wala/dalvik/classLoader/WDexClassLoaderImpl.java b/com.ibm.wala.dalvik/src/com/ibm/wala/dalvik/classLoader/WDexClassLoaderImpl.java index 63ffb439f..4ef09045c 100644 --- a/com.ibm.wala.dalvik/src/com/ibm/wala/dalvik/classLoader/WDexClassLoaderImpl.java +++ b/com.ibm.wala.dalvik/src/com/ibm/wala/dalvik/classLoader/WDexClassLoaderImpl.java @@ -101,15 +101,13 @@ public class WDexClassLoaderImpl extends ClassLoaderImpl { // module are loaded according to the given order (same as in Java VM) Set classModuleEntries = HashSetFactory.make(); - for (Iterator it = modules.iterator(); it.hasNext();) { - Module archive = it.next(); + for (Module archive : modules) { Set classFiles = getDexFiles(archive); removeClassFiles(classFiles, classModuleEntries); loadAllDexClasses(classFiles); - for (Iterator it2 = classFiles.iterator(); it2.hasNext();) { - ModuleEntry file = it2.next(); + for (ModuleEntry file : classFiles) { classModuleEntries.add(file); } } @@ -121,13 +119,11 @@ public class WDexClassLoaderImpl extends ClassLoaderImpl { */ private static void removeClassFiles(Set s, Set t) { Set old = HashSetFactory.make(); - for (Iterator it = t.iterator(); it.hasNext();) { - ModuleEntry m = it.next(); + for (ModuleEntry m : t) { old.add(m.getClassName()); } HashSet toRemove = HashSetFactory.make(); - for (Iterator it = s.iterator(); it.hasNext();) { - ModuleEntry m = it.next(); + for (ModuleEntry m : s) { if (old.contains(m.getClassName())) { toRemove.add(m); } @@ -150,9 +146,7 @@ public class WDexClassLoaderImpl extends ClassLoaderImpl { @SuppressWarnings("unused") private void loadAllDexClasses(Collection moduleEntries) { - for (Iterator it = moduleEntries.iterator(); it.hasNext();) { - ModuleEntry entry = it.next(); - + for (ModuleEntry entry : moduleEntries) { // Dalvik class if (entry instanceof DexModuleEntry) { DexModuleEntry dexEntry = ((DexModuleEntry) entry); diff --git a/com.ibm.wala.dalvik/src/com/ibm/wala/dalvik/ipa/callgraph/androidModel/parameters/ReuseParameters.java b/com.ibm.wala.dalvik/src/com/ibm/wala/dalvik/ipa/callgraph/androidModel/parameters/ReuseParameters.java index 8a2b5c0f4..9efeccc89 100644 --- a/com.ibm.wala.dalvik/src/com/ibm/wala/dalvik/ipa/callgraph/androidModel/parameters/ReuseParameters.java +++ b/com.ibm.wala.dalvik/src/com/ibm/wala/dalvik/ipa/callgraph/androidModel/parameters/ReuseParameters.java @@ -127,8 +127,8 @@ public class ReuseParameters { } // Assert the rest of the types have the same name - for (int j = 0; j < types.length; ++j) { - final TypeName paramType = types[j].getName(); + for (TypeReference type : types) { + final TypeName paramType = type.getName(); if (isReuse(paramType, ALL_TARGETS)) { if (! reuseParameters.contains(paramType)) { // XXX: Why not use a Set? diff --git a/com.ibm.wala.dalvik/src/com/ibm/wala/dalvik/ipa/callgraph/impl/DexFakeRootMethod.java b/com.ibm.wala.dalvik/src/com/ibm/wala/dalvik/ipa/callgraph/impl/DexFakeRootMethod.java index 780cc358f..62fdeb490 100644 --- a/com.ibm.wala.dalvik/src/com/ibm/wala/dalvik/ipa/callgraph/impl/DexFakeRootMethod.java +++ b/com.ibm.wala.dalvik/src/com/ibm/wala/dalvik/ipa/callgraph/impl/DexFakeRootMethod.java @@ -215,12 +215,12 @@ public class DexFakeRootMethod extends AbstractRootMethod { } } if (allocSites!=null) - for (int p=0;p it = dexCFG.iterator(); it.hasNext();) { - BasicBlock bb = it.next(); + for (BasicBlock bb : dexCFG) { MachineState S = builder.getIn(bb); int number = bb.getNumber(); block2LocalState[number] = S.getLocals(); @@ -1505,8 +1504,8 @@ public class DexSSABuilder extends AbstractIntRegisterMachine { */ private static int[] extractIndices(int[] x, int y) { int count = 0; - for (int i = 0; i < x.length; i++) { - if (x[i] == y) { + for (int element : x) { + if (element == y) { count++; } } diff --git a/com.ibm.wala.dalvik/src/com/ibm/wala/dalvik/util/AndroidAnalysisScope.java b/com.ibm.wala.dalvik/src/com/ibm/wala/dalvik/util/AndroidAnalysisScope.java index 9aaa508f4..00a35099d 100644 --- a/com.ibm.wala.dalvik/src/com/ibm/wala/dalvik/util/AndroidAnalysisScope.java +++ b/com.ibm.wala.dalvik/src/com/ibm/wala/dalvik/util/AndroidAnalysisScope.java @@ -82,14 +82,14 @@ public class AndroidAnalysisScope { try { String[] paths = classPath.split(File.pathSeparator); - for (int i = 0; i < paths.length; i++) { - if (paths[i].endsWith(".jar") - || paths[i].endsWith(".apk") - || paths[i].endsWith(".dex")) { // Handle android file. - File f = new File(paths[i]); + for (String path : paths) { + if (path.endsWith(".jar") + || path.endsWith(".apk") + || path.endsWith(".dex")) { // Handle android file. + File f = new File(path); scope.addToScope(loader, DexFileModule.make(f)); } else { - File f = new File(paths[i]); + File f = new File(path); if (f.isDirectory()) { // handle directory FIXME not working // for .dex and .apk files into that // directory diff --git a/com.ibm.wala.ide.jdt.test/source/com/ibm/wala/demandpa/driver/DemandCastChecker.java b/com.ibm.wala.ide.jdt.test/source/com/ibm/wala/demandpa/driver/DemandCastChecker.java index 57c11b55f..cc929f9b9 100644 --- a/com.ibm.wala.ide.jdt.test/source/com/ibm/wala/demandpa/driver/DemandCastChecker.java +++ b/com.ibm.wala.ide.jdt.test/source/com/ibm/wala/demandpa/driver/DemandCastChecker.java @@ -43,7 +43,6 @@ package com.ibm.wala.demandpa.driver; import java.io.IOException; import java.util.ArrayList; import java.util.Collection; -import java.util.Iterator; import java.util.List; import java.util.Properties; import java.util.function.Predicate; @@ -227,8 +226,7 @@ public class DemandCastChecker { List> failing = new ArrayList<>(); int numSafe = 0, numMightFail = 0; - outer: for (Iterator nodeIter = cg.iterator(); nodeIter.hasNext();) { - CGNode node = nodeIter.next(); + outer: for (CGNode node : cg) { TypeReference declaringClass = node.getMethod().getReference().getDeclaringClass(); // skip library classes if (declaringClass.getClassLoader().equals(ClassLoaderReference.Primordial)) { diff --git a/com.ibm.wala.ide.jdt/source/com/ibm/wala/cast/java/translator/jdt/JDTSourceModuleTranslator.java b/com.ibm.wala.ide.jdt/source/com/ibm/wala/cast/java/translator/jdt/JDTSourceModuleTranslator.java index c0f6d9bf3..3b08b7be1 100644 --- a/com.ibm.wala.ide.jdt/source/com/ibm/wala/cast/java/translator/jdt/JDTSourceModuleTranslator.java +++ b/com.ibm.wala.ide.jdt/source/com/ibm/wala/cast/java/translator/jdt/JDTSourceModuleTranslator.java @@ -39,7 +39,6 @@ package com.ibm.wala.cast.java.translator.jdt; import java.io.File; import java.util.HashMap; -import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Map.Entry; @@ -131,9 +130,7 @@ public class JDTSourceModuleTranslator implements SourceModuleTranslator { while (cl != null) { List modules = scope.getModules(cl); - for (Iterator iter = modules.iterator(); iter.hasNext();) { - Module m = iter.next(); - + for (Module m : modules) { if (buf.length() > 0) buf.append(File.pathSeparator); if (m instanceof JarFileModule) { diff --git a/com.ibm.wala.ide/src/com/ibm/wala/ide/ui/SWTTreeViewer.java b/com.ibm.wala.ide/src/com/ibm/wala/ide/ui/SWTTreeViewer.java index 4bc73d866..79aed1f7c 100644 --- a/com.ibm.wala.ide/src/com/ibm/wala/ide/ui/SWTTreeViewer.java +++ b/com.ibm.wala.ide/src/com/ibm/wala/ide/ui/SWTTreeViewer.java @@ -203,8 +203,8 @@ public class SWTTreeViewer extends AbstractJFaceRunner { if (getPopUpActions().size() > 0) { MenuManager mm = new MenuManager(); treeViewer.getTree().setMenu(mm.createContextMenu(treeViewer.getTree())); - for (Iterator it = getPopUpActions().iterator(); it.hasNext();) { - mm.add(it.next()); + for (IAction iAction : getPopUpActions()) { + mm.add(iAction); } } return treeViewer.getTree(); diff --git a/com.ibm.wala.scandroid/source/org/scandroid/flow/FlowAnalysis.java b/com.ibm.wala.scandroid/source/org/scandroid/flow/FlowAnalysis.java index 1cb49cb46..2ac06a05c 100644 --- a/com.ibm.wala.scandroid/source/org/scandroid/flow/FlowAnalysis.java +++ b/com.ibm.wala.scandroid/source/org/scandroid/flow/FlowAnalysis.java @@ -149,9 +149,9 @@ public class FlowAnalysis { for(CodeElement taintElement:bbTaints.get(taintType)) { BasicBlockInContext[] entryBlocks = graph.getEntriesForProcedure(taintBB.getNode()); - for (int i = 0; i < entryBlocks.length; i++) { + for (BasicBlockInContext entryBlock : entryBlocks) { //Add PathEdge -> - initialEdges.add(PathEdge.createPathEdge(entryBlocks[i], 0, taintBB, domain.getMappedIndex(new DomainElement(taintElement,taintType)))); + initialEdges.add(PathEdge.createPathEdge(entryBlock, 0, taintBB, domain.getMappedIndex(new DomainElement(taintElement,taintType)))); } //initialEdges.add(PathEdge.createPathEdge(e.getKey(), 0, e.getKey(), domain.getMappedIndex(new DomainElement(o,e2.getKey())))); } @@ -160,8 +160,8 @@ public class FlowAnalysis { //Add PathEdges to the entry points of the supergraph -> for (CGNode entry : cg.getEntrypointNodes()) { BasicBlockInContext[] bbic = graph.getEntriesForProcedure(entry); - for (int i = 0; i < bbic.length; i++) - initialEdges.add(PathEdge.createPathEdge(bbic[i], 0, bbic[i], 0)); + for (BasicBlockInContext element : bbic) + initialEdges.add(PathEdge.createPathEdge(element, 0, element, 0)); } final TabulationProblem, CGNode, DomainElement> diff --git a/com.ibm.wala.scandroid/source/org/scandroid/flow/InflowAnalysis.java b/com.ibm.wala.scandroid/source/org/scandroid/flow/InflowAnalysis.java index 541427f02..1d332c9d0 100644 --- a/com.ibm.wala.scandroid/source/org/scandroid/flow/InflowAnalysis.java +++ b/com.ibm.wala.scandroid/source/org/scandroid/flow/InflowAnalysis.java @@ -234,13 +234,13 @@ public class InflowAnalysis { SourceSpec[] ss = s.getSourceSpecs(); ArrayList ssAL = new ArrayList<>(); - for (int i = 0; i < ss.length; i++) { - if (ss[i] instanceof EntryArgSourceSpec) - processInputSource(ctx, taintMap, ss[i], cg, graph, cha, pa); - else if (ss[i] instanceof CallRetSourceSpec || ss[i] instanceof CallArgSourceSpec) - ssAL.add(ss[i]); - else if (ss[i] instanceof StaticFieldSourceSpec) { - processStaticFieldSource(ctx, taintMap, (StaticFieldSourceSpec)ss[i], cg, graph, pa); + for (SourceSpec element : ss) { + if (element instanceof EntryArgSourceSpec) + processInputSource(ctx, taintMap, element, cg, graph, cha, pa); + else if (element instanceof CallRetSourceSpec || element instanceof CallArgSourceSpec) + ssAL.add(element); + else if (element instanceof StaticFieldSourceSpec) { + processStaticFieldSource(ctx, taintMap, (StaticFieldSourceSpec)element, cg, graph, pa); } else throw new UnsupportedOperationException("Unrecognized SourceSpec"); } diff --git a/com.ibm.wala.scandroid/source/org/scandroid/flow/OutflowAnalysis.java b/com.ibm.wala.scandroid/source/org/scandroid/flow/OutflowAnalysis.java index 80c2cbcf7..58ff832d7 100644 --- a/com.ibm.wala.scandroid/source/org/scandroid/flow/OutflowAnalysis.java +++ b/com.ibm.wala.scandroid/source/org/scandroid/flow/OutflowAnalysis.java @@ -185,13 +185,13 @@ public class OutflowAnalysis { CGNode node = block.getNode(); IntSet resultSet = flowResult.getResult(block); - for (int j = 0; j < argNums.length; j++) { + for (int argNum : argNums) { // The set of flow types we're looking for: Set> taintTypeSet = HashSetFactory.make(); LocalElement le = new LocalElement( - invInst.getUse(argNums[j])); + invInst.getUse(argNum)); Set elements = domain .getPossibleElements(le); if (elements != null) { @@ -204,7 +204,7 @@ public class OutflowAnalysis { } LocalPointerKey lpkey = new LocalPointerKey(node, - invInst.getUse(argNums[j])); + invInst.getUse(argNum)); for (InstanceKey ik : pa.getPointsToSet(lpkey)) { for (DomainElement de : domain .getPossibleElements(new InstanceKeyElement( @@ -275,12 +275,12 @@ public class OutflowAnalysis { // // } // } - for (int i = 0; i < newArgNums.length; i++) { + for (int newArgNum : newArgNums) { // see if anything flowed into the args as sinks: for (DomainElement de : domain .getPossibleElements(new LocalElement(node.getIR() - .getParameter(newArgNums[i])))) { + .getParameter(newArgNum)))) { for (BasicBlockInContext block : graph .getExitsForProcedure(node)) { @@ -289,7 +289,7 @@ public class OutflowAnalysis { if (flowResult.getResult(block).contains(mappedIndex)) { addEdge(flowGraph, de.taintSource, new ParameterFlow( - entryBlock, newArgNums[i], false)); + entryBlock, newArgNum, false)); } } @@ -297,12 +297,12 @@ public class OutflowAnalysis { if (flowResult.getResult(entryBlock).contains(mappedIndex)) { addEdge(flowGraph, de.taintSource, new ParameterFlow( - entryBlock, newArgNums[i], false)); + entryBlock, newArgNum, false)); } } for (InstanceKey ik : pa.getPointsToSet(new LocalPointerKey( - node, node.getIR().getParameter(newArgNums[i])))) { + node, node.getIR().getParameter(newArgNum)))) { for (DomainElement de : domain .getPossibleElements(new InstanceKeyElement(ik))) { if (flowResult.getResult(entryBlock).contains( @@ -310,7 +310,7 @@ public class OutflowAnalysis { addEdge(flowGraph, de.taintSource, new ParameterFlow( - entryBlock, newArgNums[i], false)); + entryBlock, newArgNum, false)); } } } @@ -425,15 +425,15 @@ public class OutflowAnalysis { SinkSpec[] ss = s.getSinkSpecs(); - for (int i = 0; i < ss.length; i++) { - if (ss[i] instanceof EntryArgSinkSpec) - processSinkSpec(flowResult, domain, taintFlow, ss[i]); - else if (ss[i] instanceof CallArgSinkSpec) - processSinkSpec(flowResult, domain, taintFlow, ss[i]); - else if (ss[i] instanceof EntryRetSinkSpec) - processSinkSpec(flowResult, domain, taintFlow, ss[i]); - else if (ss[i] instanceof StaticFieldSinkSpec) - processSinkSpec(flowResult, domain, taintFlow, ss[i]); + for (SinkSpec element : ss) { + if (element instanceof EntryArgSinkSpec) + processSinkSpec(flowResult, domain, taintFlow, element); + else if (element instanceof CallArgSinkSpec) + processSinkSpec(flowResult, domain, taintFlow, element); + else if (element instanceof EntryRetSinkSpec) + processSinkSpec(flowResult, domain, taintFlow, element); + else if (element instanceof StaticFieldSinkSpec) + processSinkSpec(flowResult, domain, taintFlow, element); else throw new UnsupportedOperationException( "SinkSpec not yet Implemented"); diff --git a/com.ibm.wala.scandroid/source/org/scandroid/prefixtransfer/UriPrefixTransferGraph.java b/com.ibm.wala.scandroid/source/org/scandroid/prefixtransfer/UriPrefixTransferGraph.java index 720e1d223..d6a049680 100644 --- a/com.ibm.wala.scandroid/source/org/scandroid/prefixtransfer/UriPrefixTransferGraph.java +++ b/com.ibm.wala.scandroid/source/org/scandroid/prefixtransfer/UriPrefixTransferGraph.java @@ -232,8 +232,7 @@ public class UriPrefixTransferGraph implements Graph { final OrdinalSet returnSet = pa.getPointsToSet(new LocalPointerKey(caller, invoke.getReturnValue(0))); - for (final Iterator rIK = returnSet.iterator(); rIK.hasNext(); ) { - final InstanceKey returnIK = rIK.next(); + for (InstanceKey returnIK : returnSet) { final UriAppendString node = new UriAppendString(mapping.getMappedIndex(returnIK), mapping.getMappedIndex(uriKey), mapping.getMappedIndex(stringKey)); diff --git a/com.ibm.wala.scandroid/source/org/scandroid/spec/CallArgSourceSpec.java b/com.ibm.wala.scandroid/source/org/scandroid/spec/CallArgSourceSpec.java index bd0b4f83b..d9e0fe29d 100644 --- a/com.ibm.wala.scandroid/source/org/scandroid/spec/CallArgSourceSpec.java +++ b/com.ibm.wala.scandroid/source/org/scandroid/spec/CallArgSourceSpec.java @@ -97,12 +97,12 @@ public class CallArgSourceSpec extends SourceSpec { ISupergraph, CGNode> graph, PointerAnalysis pa, CallGraph cg) { - for (int j = 0; j < newArgNums.length; j++) { + for (int newArgNum : newArgNums) { for (FlowType ft : getFlowType(block)) { // a collection of a LocalElement for this argument's SSA value, // along with a set of InstanceKeyElements for each instance // that this SSA value might point to - final int ssaVal = invInst.getUse(newArgNums[j]); + final int ssaVal = invInst.getUse(newArgNum); final CGNode node = block.getNode(); Set valueElements = CodeElement.valueElements(ssaVal); PointerKey pk = pa.getHeapModel().getPointerKeyForLocal(node, ssaVal); diff --git a/com.ibm.wala.scandroid/source/org/scandroid/util/CGAnalysisContext.java b/com.ibm.wala.scandroid/source/org/scandroid/util/CGAnalysisContext.java index 2cd6f35ee..f48afe1af 100644 --- a/com.ibm.wala.scandroid/source/org/scandroid/util/CGAnalysisContext.java +++ b/com.ibm.wala.scandroid/source/org/scandroid/util/CGAnalysisContext.java @@ -210,8 +210,8 @@ public class CGAnalysisContext { } else { Collection nodes = HashSetFactory.make(); - for (Iterator nIter = partialGraph.iterator(); nIter.hasNext();) { - nodes.add(nIter.next()); + for (CGNode cgNode : partialGraph) { + nodes.add(cgNode); } CallGraph pcg = PartialCallGraph.make(cg, cg.getEntrypointNodes(), nodes); graph = (ISupergraph) ICFGSupergraph.make(pcg); diff --git a/com.ibm.wala.scandroid/source/org/scandroid/util/DexDotUtil.java b/com.ibm.wala.scandroid/source/org/scandroid/util/DexDotUtil.java index dd9e6ad52..2e8aa81f6 100644 --- a/com.ibm.wala.scandroid/source/org/scandroid/util/DexDotUtil.java +++ b/com.ibm.wala.scandroid/source/org/scandroid/util/DexDotUtil.java @@ -209,8 +209,7 @@ public class DexDotUtil extends DotUtil { outputNodes(labels, result, dotNodes); - for (Iterator it = g.iterator(); it.hasNext();) { - T n = it.next(); + for (T n : g) { for (Iterator it2 = g.getSuccNodes(n); it2.hasNext();) { T s = it2.next(); result.append(" "); @@ -226,8 +225,8 @@ public class DexDotUtil extends DotUtil { } private static void outputNodes(NodeDecorator labels, StringBuffer result, Collection dotNodes) throws WalaException { - for (Iterator it = dotNodes.iterator(); it.hasNext();) { - outputNode(labels, result, it.next()); + for (T t : dotNodes) { + outputNode(labels, result, t); } } diff --git a/com.ibm.wala.scandroid/source/org/scandroid/util/EntryPoints.java b/com.ibm.wala.scandroid/source/org/scandroid/util/EntryPoints.java index 4c5843107..8bcc1b813 100644 --- a/com.ibm.wala.scandroid/source/org/scandroid/util/EntryPoints.java +++ b/com.ibm.wala.scandroid/source/org/scandroid/util/EntryPoints.java @@ -137,9 +137,9 @@ public class EntryPoints { // "android.app.Service.onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)B" }; - for (int i = 0; i < methodReferences.length; i++) { + for (String methodReference : methodReferences) { MethodReference mr = - StringStuff.makeMethodReference(methodReferences[i]); + StringStuff.makeMethodReference(methodReference); for (IMethod im : cha.getPossibleTargets(mr)) { @@ -165,9 +165,9 @@ public class EntryPoints { "android.view.View.setOnClickListener(Landroid/view/View$OnClickListener;)V", }; - for (int i = 0; i < methodReferences.length; i++) { + for (String methodReference : methodReferences) { MethodReference mr = - StringStuff.makeMethodReference(methodReferences[i]); + StringStuff.makeMethodReference(methodReference); for (IMethod im : cha.getPossibleTargets(mr)) { diff --git a/com.ibm.wala.shrike/src/com/ibm/wala/shrike/bench/AddBytecodeDebug.java b/com.ibm.wala.shrike/src/com/ibm/wala/shrike/bench/AddBytecodeDebug.java index 36dd5933c..fe43e785a 100644 --- a/com.ibm.wala.shrike/src/com/ibm/wala/shrike/bench/AddBytecodeDebug.java +++ b/com.ibm.wala.shrike/src/com/ibm/wala/shrike/bench/AddBytecodeDebug.java @@ -73,9 +73,9 @@ public class AddBytecodeDebug { me.beginPass(); ExceptionHandler[][] handlers = me.getHandlers(); boolean[] putDumperAt = new boolean[handlers.length]; - for (int i = 0; i < handlers.length; i++) { - for (int j = 0; j < handlers[i].length; j++) { - int offset = handlers[i][j].getHandler(); + for (ExceptionHandler[] handler : handlers) { + for (int j = 0; j < handler.length; j++) { + int offset = handler[j].getHandler(); if (!putDumperAt[offset]) { putDumperAt[offset] = true; me.insertBefore(offset, new MethodEditor.Patch() { diff --git a/com.ibm.wala.shrike/src/com/ibm/wala/shrike/bench/InterfaceAnalyzer.java b/com.ibm.wala.shrike/src/com/ibm/wala/shrike/bench/InterfaceAnalyzer.java index 923a1a165..2f6be2de7 100644 --- a/com.ibm.wala.shrike/src/com/ibm/wala/shrike/bench/InterfaceAnalyzer.java +++ b/com.ibm.wala.shrike/src/com/ibm/wala/shrike/bench/InterfaceAnalyzer.java @@ -14,8 +14,6 @@ import java.io.BufferedWriter; import java.io.OutputStreamWriter; import java.io.Writer; import java.util.HashMap; -import java.util.Iterator; - import com.ibm.wala.shrikeBT.Constants; import com.ibm.wala.shrikeBT.Util; import com.ibm.wala.shrikeBT.shrikeCT.ClassInstrumenter; @@ -55,8 +53,7 @@ public class InterfaceAnalyzer { instrumenter.close(); w.write("Type\t# Total\t# Method\t# Public Method\t# Public Method as Foreign\n"); - for (Iterator i = typeStats.keySet().iterator(); i.hasNext();) { - String k = i.next(); + for (String k : typeStats.keySet()) { TypeStats t = typeStats.get(k); w.write(k + "\t" + t.totalOccurrences + "\t" + t.methodOccurrences + "\t" + t.publicMethodOccurrences + "\t" + t.foreignPublicMethodOccurrences + "\n"); @@ -77,8 +74,8 @@ public class InterfaceAnalyzer { String[] params = Util.getParamsTypes(null, sig); int flags = reader.getMethodAccessFlags(m); int mUID = methodUID++; - for (int p = 0; p < params.length; p++) { - doType(flags, params[p], cType, mUID); + for (String param : params) { + doType(flags, param, cType, mUID); } doType(flags, Util.getReturnType(sig), cType, mUID); } diff --git a/com.ibm.wala.shrike/src/com/ibm/wala/shrike/bench/Statistics.java b/com.ibm.wala.shrike/src/com/ibm/wala/shrike/bench/Statistics.java index c518c15d4..2d63f709f 100644 --- a/com.ibm.wala.shrike/src/com/ibm/wala/shrike/bench/Statistics.java +++ b/com.ibm.wala.shrike/src/com/ibm/wala/shrike/bench/Statistics.java @@ -79,9 +79,9 @@ public class Statistics { int constructorCalls = 0; IInstruction[] instrs = d.getInstructions(); - for (int i = 0; i < instrs.length; i++) { - if (instrs[i] instanceof InvokeInstruction) { - InvokeInstruction invoke = (InvokeInstruction) instrs[i]; + for (IInstruction instr : instrs) { + if (instr instanceof InvokeInstruction) { + InvokeInstruction invoke = (InvokeInstruction) instr; if (invoke.getMethodName().equals("") && invoke.getClassType().equals(Util.makeType(className))) { constructorCalls++; } diff --git a/com.ibm.wala.shrike/src/com/ibm/wala/shrike/copywriter/CopyWriter.java b/com.ibm.wala.shrike/src/com/ibm/wala/shrike/copywriter/CopyWriter.java index dd4d11c05..8c02a11c3 100644 --- a/com.ibm.wala.shrike/src/com/ibm/wala/shrike/copywriter/CopyWriter.java +++ b/com.ibm.wala.shrike/src/com/ibm/wala/shrike/copywriter/CopyWriter.java @@ -13,7 +13,6 @@ package com.ibm.wala.shrike.copywriter; import java.io.OutputStreamWriter; import java.io.Writer; import java.util.ArrayList; -import java.util.Iterator; import java.util.zip.ZipEntry; import com.ibm.wala.shrikeBT.Compiler; @@ -118,8 +117,7 @@ public class CopyWriter { Writer w = new OutputStreamWriter(instrumenter.addOutputJarEntry(new ZipEntry("IBM-Copyright"))); w.write(copyright + "\n"); - for (Iterator iter = entries.iterator(); iter.hasNext();) { - ZipEntry ze = iter.next(); + for (ZipEntry ze : entries) { w.write(" " + ze.getName() + "\n"); } w.write(copyright + "\n"); diff --git a/com.ibm.wala.shrike/src/com/ibm/wala/shrikeBT/Compiler.java b/com.ibm.wala.shrike/src/com/ibm/wala/shrikeBT/Compiler.java index c5ef7c5f1..7c8fc04dd 100644 --- a/com.ibm.wala.shrike/src/com/ibm/wala/shrikeBT/Compiler.java +++ b/com.ibm.wala.shrike/src/com/ibm/wala/shrikeBT/Compiler.java @@ -13,8 +13,6 @@ package com.ibm.wala.shrikeBT; import java.util.ArrayList; import java.util.Arrays; import java.util.BitSet; -import java.util.Iterator; - import com.ibm.wala.shrikeBT.ConstantInstruction.ClassToken; import com.ibm.wala.shrikeBT.IBinaryOpInstruction.Operator; import com.ibm.wala.shrikeBT.analysis.ClassHierarchyProvider; @@ -182,8 +180,8 @@ public abstract class Compiler implements Constants { IInstruction.Visitor visitor = new IInstruction.Visitor() { private void visitTargets(IInstruction instr) { int[] ts = instr.getBranchTargets(); - for (int k = 0; k < ts.length; k++) { - s.set(ts[k]); + for (int element : ts) { + s.set(element); } } @@ -212,14 +210,13 @@ public abstract class Compiler implements Constants { } }; - for (int i = 0; i < instructions.length; i++) { - instructions[i].visit(visitor); + for (IInstruction instruction : instructions) { + instruction.visit(visitor); } String[] paramTypes = Util.getParamsTypes(isStatic ? null : TYPE_Object, signature); int index = 0; - for (int i = 0; i < paramTypes.length; i++) { - String t = paramTypes[i]; + for (String t : paramTypes) { localsUsed.set(index); if (t.equals(TYPE_long) || t.equals(TYPE_double)) { localsWide.set(index); @@ -230,11 +227,10 @@ public abstract class Compiler implements Constants { } ExceptionHandler[] lastHS = null; - for (int i = 0; i < handlers.length; i++) { - ExceptionHandler[] hs = handlers[i]; + for (ExceptionHandler[] hs : handlers) { if (hs != lastHS) { - for (int j = 0; j < hs.length; j++) { - s.set(hs[j].handler); + for (ExceptionHandler element : hs) { + s.set(element.handler); } lastHS = hs; } @@ -359,20 +355,20 @@ public abstract class Compiler implements Constants { } int[] bt = instr.getBranchTargets(); - for (int j = 0; j < bt.length; j++) { - int t = bt[j]; + for (int element : bt) { + int t = element; if (t < 0 || t >= visited.length) { throw new IllegalArgumentException("Branch target at offset " + i + " is out of bounds: " + t + " (max " + visited.length + ")"); } if (!visited[t]) { - computeStackWordsAt(bt[j], stackLen, stackWords.clone(), visited); + computeStackWordsAt(element, stackLen, stackWords.clone(), visited); } } ExceptionHandler[] hs = handlers[i]; - for (int j = 0; j < hs.length; j++) { - int t = hs[j].handler; + for (ExceptionHandler element : hs) { + int t = element.handler; if (!visited[t]) { byte[] newWords = stackWords.clone(); newWords[0] = 1; @@ -449,8 +445,7 @@ public abstract class Compiler implements Constants { } private static boolean applyPatches(ArrayList patches) { - for (Iterator i = patches.iterator(); i.hasNext();) { - Patch p = i.next(); + for (Patch p : patches) { if (!p.apply()) { return false; } @@ -1149,8 +1144,7 @@ public abstract class Compiler implements Constants { int[] rawHandlers = new int[4 * rawHandlerList.size()]; int count = 0; - for (Iterator iter = rawHandlerList.iterator(); iter.hasNext();) { - int[] element = iter.next(); + for (int[] element : rawHandlerList) { System.arraycopy(element, 0, rawHandlers, count, 4); count += 4; } @@ -1244,8 +1238,8 @@ public abstract class Compiler implements Constants { liveLocals[instruction].set(index); int[] back = backEdges[instruction]; if (back != null) { - for (int i = 0; i < back.length; i++) { - addLiveVar(back[i], index); + for (int element : back) { + addLiveVar(element, index); } } @@ -1264,12 +1258,12 @@ public abstract class Compiler implements Constants { for (int i = 0; i < instructions.length; i++) { IInstruction instr = instructions[i]; int[] targets = instr.getBranchTargets(); - for (int j = 0; j < targets.length; j++) { - addBackEdge(targets[j], i); + for (int target : targets) { + addBackEdge(target, i); } ExceptionHandler[] hs = handlers[i]; - for (int j = 0; j < hs.length; j++) { - addBackEdge(hs[j].handler, i); + for (ExceptionHandler element : hs) { + addBackEdge(element.handler, i); } liveLocals[i] = new BitSet(); } @@ -1410,10 +1404,10 @@ public abstract class Compiler implements Constants { ExceptionHandler[] startHS = handlers[start]; ArrayList newHS = new ArrayList<>(); - for (int i = 0; i < startHS.length; i++) { - int t = startHS[i].handler; + for (ExceptionHandler element : startHS) { + int t = element.handler; if (t < start || t >= start + len) { - newHS.add(startHS[i]); + newHS.add(element); } } ExceptionHandler[] patchHS = new ExceptionHandler[newHS.size()]; @@ -1458,8 +1452,8 @@ public abstract class Compiler implements Constants { if (instructions[i] instanceof ReturnInstruction) { outsideBranch = true; } - for (int j = 0; j < targets.length; j++) { - if (targets[j] < start || targets[j] >= start + len) { + for (int target : targets) { + if (target < start || target >= start + len) { outsideBranch = true; } } @@ -1479,15 +1473,14 @@ public abstract class Compiler implements Constants { for (int i = start; i < start + len; i++) { boolean out = false; ExceptionHandler[] hs = handlers[i]; - for (int j = 0; j < hs.length; j++) { - int h = hs[j].handler; + for (ExceptionHandler element : hs) { + int h = element.handler; if (h < start || h >= start + len) { out = true; } } int[] targets = instructions[i].getBranchTargets(); - for (int j = 0; j < targets.length; j++) { - int t = targets[j]; + for (int t : targets) { if (t < start || t >= start + len) { out = true; } @@ -1606,8 +1599,8 @@ public abstract class Compiler implements Constants { // make sure that the same external handlers are used all the way through ExceptionHandler[] startHS = handlers[start]; int numOuts = 0; - for (int j = 0; j < startHS.length; j++) { - int t = startHS[j].handler; + for (ExceptionHandler element : startHS) { + int t = element.handler; if (t < start || t >= start + len) { numOuts++; } @@ -1617,12 +1610,12 @@ public abstract class Compiler implements Constants { for (int i = start + 1; i < start + len; i++) { ExceptionHandler[] hs = handlers[i]; int matchingOuts = 0; - for (int j = 0; j < hs.length; j++) { - int t = hs[j].handler; + for (ExceptionHandler element : hs) { + int t = element.handler; if (t < start || t >= start + len) { boolean match = false; - for (int k = 0; k < startHS.length; k++) { - if (startHS[k].equals(hs[j])) { + for (ExceptionHandler element2 : startHS) { + if (element2.equals(element)) { match = true; break; } @@ -1680,9 +1673,7 @@ public abstract class Compiler implements Constants { } } - for (Iterator i = patches.iterator(); i.hasNext();) { - HelperPatch p = i.next(); - + for (HelperPatch p : patches) { System.arraycopy(p.code, 0, instructions, p.start, p.code.length); for (int j = 0; j < p.length; j++) { int index = j + p.start; diff --git a/com.ibm.wala.shrike/src/com/ibm/wala/shrikeBT/Decoder.java b/com.ibm.wala.shrike/src/com/ibm/wala/shrikeBT/Decoder.java index 330de0769..01eea0472 100644 --- a/com.ibm.wala.shrike/src/com/ibm/wala/shrikeBT/Decoder.java +++ b/com.ibm.wala.shrike/src/com/ibm/wala/shrikeBT/Decoder.java @@ -255,8 +255,8 @@ public abstract class Decoder implements Constants { } private boolean doesSubroutineReturn(int sub) { - for (int j = 0; j < retInfo.length; j++) { - if (retInfo[j] != null && retInfo[j].sub == sub) { + for (RetInfo element : retInfo) { + if (element != null && element.sub == sub) { return true; } } @@ -314,9 +314,9 @@ public abstract class Decoder implements Constants { } int[] targets = instr.getBranchTargets(); - for (int k = 0; k < targets.length; k++) { - if (targets[k] >= 0) { - int r = findReturnToVar(v, targets[k], visited); + for (int target : targets) { + if (target >= 0) { + int r = findReturnToVar(v, target, visited); if (r != 0) { return r; } @@ -407,10 +407,10 @@ public abstract class Decoder implements Constants { int offset = decodedOffset[addr]; instr = decoded.get(offset + size - 1); int[] targets = instr.getBranchTargets(); - for (int k = 0; k < targets.length; k++) { - if (targets[k] >= 0) { + for (int target : targets) { + if (target >= 0) { // only chase real gotos; ignore rets - assignReachablesToSubroutine(targets[k], sub); + assignReachablesToSubroutine(target, sub); } } } @@ -761,9 +761,7 @@ public abstract class Decoder implements Constants { Instruction instr = decoded.get(s + instrCount - 1); int[] targets = instr.getBranchTargets(); - for (int i = 0; i < targets.length; i++) { - int t = targets[i]; - + for (int t : targets) { if (t >= 0) { decodeAt(t, stackLen, stackWords.clone()); } diff --git a/com.ibm.wala.shrike/src/com/ibm/wala/shrikeBT/MethodEditor.java b/com.ibm.wala.shrike/src/com/ibm/wala/shrikeBT/MethodEditor.java index dbf2eeb38..27d14c0f9 100644 --- a/com.ibm.wala.shrike/src/com/ibm/wala/shrikeBT/MethodEditor.java +++ b/com.ibm.wala.shrike/src/com/ibm/wala/shrikeBT/MethodEditor.java @@ -643,8 +643,8 @@ public final class MethodEditor { adjustedHandlers = new IdentityHashMap<>(); } - for (int j = 0; j < hs.length; j++) { - ExceptionHandler h = hs[j]; + for (ExceptionHandler element : hs) { + ExceptionHandler h = element; if (!adjustedHandlers.containsKey(h)) { adjustedHandlers.put(h, null); h.handler = labelDefs[h.handler]; // breaks invariant of ExceptionHandler: immutable! diff --git a/com.ibm.wala.shrike/src/com/ibm/wala/shrikeBT/SwitchInstruction.java b/com.ibm.wala.shrike/src/com/ibm/wala/shrikeBT/SwitchInstruction.java index 8fcbabb52..373bf5df0 100644 --- a/com.ibm.wala.shrike/src/com/ibm/wala/shrikeBT/SwitchInstruction.java +++ b/com.ibm.wala.shrike/src/com/ibm/wala/shrikeBT/SwitchInstruction.java @@ -131,9 +131,9 @@ public final class SwitchInstruction extends Instruction { public String toString() { StringBuffer b = new StringBuffer("Switch("); b.append(defaultLabel); - for (int i = 0; i < casesAndLabels.length; i++) { + for (int casesAndLabel : casesAndLabels) { b.append(','); - b.append(casesAndLabels[i]); + b.append(casesAndLabel); } b.append(")"); return b.toString(); diff --git a/com.ibm.wala.shrike/src/com/ibm/wala/shrikeBT/Util.java b/com.ibm.wala.shrike/src/com/ibm/wala/shrikeBT/Util.java index 1ce8d816b..cb3fbd794 100644 --- a/com.ibm.wala.shrike/src/com/ibm/wala/shrikeBT/Util.java +++ b/com.ibm.wala.shrike/src/com/ibm/wala/shrikeBT/Util.java @@ -372,8 +372,8 @@ public final class Util { } StringBuffer buf = new StringBuffer(); buf.append("("); - for (int i = 0; i < params.length; i++) { - buf.append(makeType(params[i])); + for (Class param : params) { + buf.append(makeType(param)); } buf.append(")"); buf.append(makeType(result)); @@ -447,8 +447,7 @@ public final class Util { } Method[] methods = c.getMethods(); Method result = null; - for (int i = 0; i < methods.length; i++) { - Method m = methods[i]; + for (Method m : methods) { if (m.getName().equals(name) && (paramTypes == null || Arrays.equals(m.getParameterTypes(), paramTypes))) { if (result != null) { throw new IllegalArgumentException("Method " + makeName(name, paramTypes) + " is ambiguous in class " + c); @@ -473,8 +472,7 @@ public final class Util { if (name.equals("")) { Constructor[] cs = c.getConstructors(); - for (int i = 0; i < cs.length; i++) { - Constructor con = cs[i]; + for (Constructor con : cs) { if (paramTypes == null || Arrays.equals(con.getParameterTypes(), paramTypes)) { if (result != null) { throw new IllegalArgumentException("Constructor " + makeName(name, paramTypes) + " is ambiguous in class " + c); diff --git a/com.ibm.wala.shrike/src/com/ibm/wala/shrikeBT/analysis/Analyzer.java b/com.ibm.wala.shrike/src/com/ibm/wala/shrikeBT/analysis/Analyzer.java index d0f931a95..45d310a5a 100644 --- a/com.ibm.wala.shrike/src/com/ibm/wala/shrikeBT/analysis/Analyzer.java +++ b/com.ibm.wala.shrike/src/com/ibm/wala/shrikeBT/analysis/Analyzer.java @@ -156,12 +156,12 @@ public class Analyzer { for (int i = 0; i < instructions.length; i++) { IInstruction instr = instructions[i]; int[] targets = instr.getBranchTargets(); - for (int j = 0; j < targets.length; j++) { - addBackEdge(targets[j], i); + for (int target : targets) { + addBackEdge(target, i); } ExceptionHandler[] hs = handlers[i]; - for (int j = 0; j < hs.length; j++) { - addBackEdge(hs[j].getHandler(), i); + for (ExceptionHandler element : hs) { + addBackEdge(element.getHandler(), i); } } @@ -235,18 +235,17 @@ public class Analyzer { BitSet r = new BitSet(instructions.length); r.set(0); - for (int i = 0; i < instructions.length; i++) { - int[] targets = instructions[i].getBranchTargets(); + for (IInstruction instruction : instructions) { + int[] targets = instruction.getBranchTargets(); - for (int j = 0; j < targets.length; j++) { - r.set(targets[j]); + for (int target : targets) { + r.set(target); } } - for (int i = 0; i < handlers.length; i++) { - ExceptionHandler[] hs = handlers[i]; + for (ExceptionHandler[] hs : handlers) { if (hs != null) { - for (int j = 0; j < hs.length; j++) { - r.set(hs[j].getHandler()); + for (ExceptionHandler element : hs) { + r.set(element.getHandler()); } } } @@ -275,14 +274,14 @@ public class Analyzer { IInstruction instr = instructions[from]; int[] targets = instr.getBranchTargets(); - for (int i = 0; i < targets.length; i++) { - getReachableRecursive(targets[i], reachable, followHandlers, mask); + for (int target : targets) { + getReachableRecursive(target, reachable, followHandlers, mask); } if (followHandlers) { ExceptionHandler[] hs = handlers[from]; - for (int i = 0; i < hs.length; i++) { - getReachableRecursive(hs[i].getHandler(), reachable, followHandlers, mask); + for (ExceptionHandler element : hs) { + getReachableRecursive(element.getHandler(), reachable, followHandlers, mask); } } @@ -324,8 +323,8 @@ public class Analyzer { reaching.set(to); int[] targets = backEdges[to]; - for (int i = 0; i < targets.length; i++) { - getReachingRecursive(targets[i], reaching, mask); + for (int target : targets) { + getReachingRecursive(target, reaching, mask); } if (to > 0 && instructions[to - 1].isFallThrough()) { @@ -339,8 +338,8 @@ public class Analyzer { private void getReachingBase(int to, BitSet reaching, BitSet mask) { int[] targets = backEdges[to]; - for (int i = 0; i < targets.length; i++) { - getReachingRecursive(targets[i], reaching, mask); + for (int target : targets) { + getReachingRecursive(target, reaching, mask); } if (to > 0 && instructions[to - 1].isFallThrough()) { @@ -390,12 +389,12 @@ public class Analyzer { } int[] targets = instr.getBranchTargets(); - for (int j = 0; j < targets.length; j++) { - computeStackSizesAt(stackSizes, targets[j], size); + for (int target : targets) { + computeStackSizesAt(stackSizes, target, size); } ExceptionHandler[] hs = handlers[i]; - for (int j = 0; j < hs.length; j++) { - computeStackSizesAt(stackSizes, hs[j].getHandler(), 1); + for (ExceptionHandler element : hs) { + computeStackSizesAt(stackSizes, element.getHandler(), 1); } if (!instr.isFallThrough()) { @@ -719,9 +718,9 @@ public class Analyzer { } ExceptionHandler[] handler = handlers[i]; - for(int h = 0; h < handler.length; h++) { - int target = handler[h].getHandler(); - String cls = handler[h].getCatchClass(); + for (ExceptionHandler element : handler) { + int target = element.getHandler(); + String cls = element.getCatchClass(); if (cls == null) { cls = "Ljava/lang/Throwable;"; } @@ -732,9 +731,9 @@ public class Analyzer { } int[] targets = instr.getBranchTargets(); - for (int j = 0; j < targets.length; j++) { - if (mergeTypes(targets[j], curStack, curStackSize, curLocals, curLocalsSize[0], path)) { - computeTypes(targets[j], visitor, makeTypesAt, path); + for (int target : targets) { + if (mergeTypes(target, curStack, curStackSize, curLocals, curLocalsSize[0], path)) { + computeTypes(target, visitor, makeTypesAt, path); } } @@ -780,8 +779,7 @@ public class Analyzer { private void computeMaxLocals() { maxLocals = locals[0].length; - for (int i = 0; i < instructions.length; i++) { - IInstruction instr = instructions[i]; + for (IInstruction instr : instructions) { if (instr instanceof LoadInstruction) { maxLocals = Math.max(maxLocals, ((LoadInstruction) instr).getVarIndex() + 1); } else if (instr instanceof StoreInstruction) { @@ -812,8 +810,8 @@ public class Analyzer { } int[] stackSizes = getStackSizes(); maxStack = 0; - for (int i = 0; i < stackSizes.length; i++) { - maxStack = Math.max(maxStack, stackSizes[i]); + for (int stackSize : stackSizes) { + maxStack = Math.max(maxStack, stackSize); } computeMaxLocals(); } diff --git a/com.ibm.wala.shrike/src/com/ibm/wala/shrikeBT/analysis/ClassHierarchy.java b/com.ibm.wala.shrike/src/com/ibm/wala/shrikeBT/analysis/ClassHierarchy.java index 8653d9902..53ac10419 100644 --- a/com.ibm.wala.shrike/src/com/ibm/wala/shrikeBT/analysis/ClassHierarchy.java +++ b/com.ibm.wala.shrike/src/com/ibm/wala/shrikeBT/analysis/ClassHierarchy.java @@ -47,8 +47,8 @@ public final class ClassHierarchy { } int r = NO; - for (int i = 0; i < ifaces.length; i++) { - String iface = ifaces[i]; + for (String iface2 : ifaces) { + String iface = iface2; if (!visited.contains(iface)) { visited.add(iface); if (iface.equals(t2)) { @@ -114,8 +114,8 @@ public final class ClassHierarchy { } int r = NO; - for (int i = 0; i < subtypes.length; i++) { - String subt = subtypes[i]; + for (String subtype : subtypes) { + String subt = subtype; if (!visited.contains(subt)) { visited.add(subt); if (subt.equals(t2)) { @@ -318,8 +318,7 @@ public final class ClassHierarchy { String element = iter.next(); boolean subsumed = false; - for (Iterator iterator = t2Supers.iterator(); iterator.hasNext();) { - String element2 = iterator.next(); + for (String element2 : t2Supers) { if (element != element2 && isSubtypeOf(hierarchy, element2, element) == YES) { subsumed = true; break; diff --git a/com.ibm.wala.shrike/src/com/ibm/wala/shrikeBT/info/InstructionTypeCounter.java b/com.ibm.wala.shrike/src/com/ibm/wala/shrikeBT/info/InstructionTypeCounter.java index 842457ced..4e5c41bdb 100644 --- a/com.ibm.wala.shrike/src/com/ibm/wala/shrikeBT/info/InstructionTypeCounter.java +++ b/com.ibm.wala.shrike/src/com/ibm/wala/shrikeBT/info/InstructionTypeCounter.java @@ -265,8 +265,8 @@ public class InstructionTypeCounter implements MethodData.Results { } }; - for (int i = 0; i < instructions.length; i++) { - instructions[i].visit(visitor); + for (IInstruction instruction : instructions) { + instruction.visit(visitor); } } diff --git a/com.ibm.wala.shrike/src/com/ibm/wala/shrikeBT/info/LocalAllocator.java b/com.ibm.wala.shrike/src/com/ibm/wala/shrikeBT/info/LocalAllocator.java index 4cbf87ee3..c0222779e 100644 --- a/com.ibm.wala.shrike/src/com/ibm/wala/shrikeBT/info/LocalAllocator.java +++ b/com.ibm.wala.shrike/src/com/ibm/wala/shrikeBT/info/LocalAllocator.java @@ -52,8 +52,8 @@ public class LocalAllocator implements MethodData.Results { } }; - for (int i = 0; i < instructions.length; i++) { - instructions[i].visit(visitor); + for (IInstruction instruction : instructions) { + instruction.visit(visitor); } nextLocal = max[0]; diff --git a/com.ibm.wala.shrike/src/com/ibm/wala/shrikeBT/info/ThisAssignmentChecker.java b/com.ibm.wala.shrike/src/com/ibm/wala/shrikeBT/info/ThisAssignmentChecker.java index bf5eedfe4..ca582bfae 100644 --- a/com.ibm.wala.shrike/src/com/ibm/wala/shrikeBT/info/ThisAssignmentChecker.java +++ b/com.ibm.wala.shrike/src/com/ibm/wala/shrikeBT/info/ThisAssignmentChecker.java @@ -33,8 +33,7 @@ public class ThisAssignmentChecker implements MethodData.Results { if (!info.getIsStatic()) { IInstruction[] instructions = info.getInstructions(); - for (int i = 0; i < instructions.length; i++) { - IInstruction instr = instructions[i]; + for (IInstruction instr : instructions) { if (instr instanceof StoreInstruction) { StoreInstruction st = (StoreInstruction) instr; if (st.getVarIndex() == 0) { diff --git a/com.ibm.wala.shrike/src/com/ibm/wala/shrikeBT/shrikeCT/ClassInstrumenter.java b/com.ibm.wala.shrike/src/com/ibm/wala/shrikeBT/shrikeCT/ClassInstrumenter.java index 4bc65b906..98d7fcf7b 100644 --- a/com.ibm.wala.shrike/src/com/ibm/wala/shrikeBT/shrikeCT/ClassInstrumenter.java +++ b/com.ibm.wala.shrike/src/com/ibm/wala/shrikeBT/shrikeCT/ClassInstrumenter.java @@ -315,8 +315,7 @@ final public class ClassInstrumenter { w.addMethod(flags, cr.getMethodNameIndex(i), cr.getMethodTypeIndex(i), makeMethodAttributes(i, w, oc, comp.getOutput(), md)); Compiler.Output[] aux = comp.getAuxiliaryMethods(); if (aux != null) { - for (int j = 0; j < aux.length; j++) { - Compiler.Output a = aux[j]; + for (Compiler.Output a : aux) { w.addMethod(a.getAccessFlags(), a.getMethodName(), a.getMethodSignature(), makeMethodAttributes(i, w, oc, a, md)); } } diff --git a/com.ibm.wala.shrike/src/com/ibm/wala/shrikeBT/shrikeCT/tools/AddSerialVersion.java b/com.ibm.wala.shrike/src/com/ibm/wala/shrikeBT/shrikeCT/tools/AddSerialVersion.java index c775355ed..3f0c00034 100644 --- a/com.ibm.wala.shrike/src/com/ibm/wala/shrikeBT/shrikeCT/tools/AddSerialVersion.java +++ b/com.ibm.wala.shrike/src/com/ibm/wala/shrikeBT/shrikeCT/tools/AddSerialVersion.java @@ -103,8 +103,8 @@ public class AddSerialVersion { // step 3 String[] interfaces = r.getInterfaceNames(); Arrays.sort(interfaces); - for (int i = 0; i < interfaces.length; i++) { - out.writeUTF(interfaces[i]); + for (String interface1 : interfaces) { + out.writeUTF(interface1); } // step 4 diff --git a/com.ibm.wala.shrike/src/com/ibm/wala/shrikeBT/shrikeCT/tools/BatchVerifier.java b/com.ibm.wala.shrike/src/com/ibm/wala/shrikeBT/shrikeCT/tools/BatchVerifier.java index e8e0ad42a..0ef267d1c 100644 --- a/com.ibm.wala.shrike/src/com/ibm/wala/shrikeBT/shrikeCT/tools/BatchVerifier.java +++ b/com.ibm.wala.shrike/src/com/ibm/wala/shrikeBT/shrikeCT/tools/BatchVerifier.java @@ -51,8 +51,8 @@ public class BatchVerifier { OfflineInstrumenter oi = new OfflineInstrumenter(); args = oi.parseStandardArgs(args); - for (int i = 0; i < args.length; i++) { - if (args[i].equals("-d")) { + for (String arg : args) { + if (arg.equals("-d")) { disasm = true; } } diff --git a/com.ibm.wala.shrike/src/com/ibm/wala/shrikeBT/shrikeCT/tools/ClassPrinter.java b/com.ibm.wala.shrike/src/com/ibm/wala/shrikeBT/shrikeCT/tools/ClassPrinter.java index 16b0d165b..dd897d07b 100644 --- a/com.ibm.wala.shrike/src/com/ibm/wala/shrikeBT/shrikeCT/tools/ClassPrinter.java +++ b/com.ibm.wala.shrike/src/com/ibm/wala/shrikeBT/shrikeCT/tools/ClassPrinter.java @@ -132,12 +132,12 @@ public class ClassPrinter { StringBuffer buf = new StringBuffer(); Class c = Constants.class; Field[] fs = c.getDeclaredFields(); - for (int i = 0; i < fs.length; i++) { - String name = fs[i].getName(); + for (Field element : fs) { + String name = element.getName(); if (name.startsWith("ACC_")) { int val; try { - val = fs[i].getInt(null); + val = element.getInt(null); } catch (IllegalArgumentException e) { throw new Error(e.getMessage()); } catch (IllegalAccessException e) { diff --git a/com.ibm.wala.shrike/src/com/ibm/wala/shrikeBT/tools/MethodOptimizer.java b/com.ibm.wala.shrike/src/com/ibm/wala/shrikeBT/tools/MethodOptimizer.java index 669acdc5f..e5c5fa732 100644 --- a/com.ibm.wala.shrike/src/com/ibm/wala/shrikeBT/tools/MethodOptimizer.java +++ b/com.ibm.wala.shrike/src/com/ibm/wala/shrikeBT/tools/MethodOptimizer.java @@ -134,14 +134,14 @@ public final class MethodOptimizer { for (int i = 0; i < instructions.length; i++) { int[] targets = instructions[i].getBranchTargets(); - for (int j = 0; j < targets.length; j++) { - int target = targets[j]; + for (int target2 : targets) { + int target = target2; backEdges[target][backEdgeCount[target]] = i; backEdgeCount[target]++; } ExceptionHandler[] hs = handlers[i]; - for (int j = 0; j < hs.length; j++) { - int target = hs[j].getHandler(); + for (ExceptionHandler element : hs) { + int target = element.getHandler(); backEdges[target][backEdgeCount[target]] = i; backEdgeCount[target]++; } @@ -155,8 +155,8 @@ public final class MethodOptimizer { checkStackSizesAt(0, 0); int result = 0; - for (int i = 0; i < stackSizes.length; i++) { - result = Math.max(result, stackSizes[i]); + for (int stackSize : stackSizes) { + result = Math.max(result, stackSize); } return result; } @@ -189,13 +189,13 @@ public final class MethodOptimizer { } int[] targets = instr.getBranchTargets(); - for (int i = 0; i < targets.length; i++) { - checkStackSizesAt(targets[i], stackSize); + for (int target : targets) { + checkStackSizesAt(target, stackSize); } ExceptionHandler[] hs = handlers[instruction]; - for (int i = 0; i < hs.length; i++) { - checkStackSizesAt(hs[i].getHandler(), 1); + for (ExceptionHandler element : hs) { + checkStackSizesAt(element.getHandler(), 1); } if (!instr.isFallThrough()) { @@ -384,13 +384,13 @@ public final class MethodOptimizer { } int[] targets = instructions[instruction].getBranchTargets(); - for (int i = 0; i < targets.length; i++) { - followStackDef(abstractDefStacks, def, targets[i], stackPointer); + for (int target : targets) { + followStackDef(abstractDefStacks, def, target, stackPointer); } ExceptionHandler[] hs = handlers[instruction]; - for (int i = 0; i < hs.length; i++) { - followStackDef(abstractDefStacks, -1, hs[i].getHandler(), 0); + for (ExceptionHandler element : hs) { + followStackDef(abstractDefStacks, -1, element.getHandler(), 0); } if (!instructions[instruction].isFallThrough()) { @@ -418,8 +418,8 @@ public final class MethodOptimizer { } int[] back = backEdges[instruction]; - for (int i = 0; i < back.length; i++) { - followStackUse(abstractUseStacks, use, back[i], stackPointer); + for (int element : back) { + followStackUse(abstractUseStacks, use, element, stackPointer); } if (instruction == 0 || !instructions[instruction - 1].isFallThrough()) { @@ -447,8 +447,8 @@ public final class MethodOptimizer { bits.set(from); int[] targets = instructions[from].getBranchTargets(); - for (int i = 0; i < targets.length; i++) { - getReachableInstructions(bits, targets[i], to); + for (int target : targets) { + getReachableInstructions(bits, target, to); } if (!instructions[from].isFallThrough()) { @@ -467,8 +467,8 @@ public final class MethodOptimizer { bits.set(to); int[] targets = backEdges[to]; - for (int i = 0; i < targets.length; i++) { - getReachingInstructions(bits, from, targets[i]); + for (int target : targets) { + getReachingInstructions(bits, from, target); } if (to == 0 || !instructions[to - 1].isFallThrough()) { diff --git a/com.ibm.wala.shrike/src/com/ibm/wala/shrikeBT/tools/OfflineInstrumenterBase.java b/com.ibm.wala.shrike/src/com/ibm/wala/shrikeBT/tools/OfflineInstrumenterBase.java index 5c94bad8b..f8635432d 100644 --- a/com.ibm.wala.shrike/src/com/ibm/wala/shrikeBT/tools/OfflineInstrumenterBase.java +++ b/com.ibm.wala.shrike/src/com/ibm/wala/shrikeBT/tools/OfflineInstrumenterBase.java @@ -272,8 +272,7 @@ public abstract class OfflineInstrumenterBase { if (fs == null) { throw new IllegalArgumentException("bad directory " + d.getAbsolutePath()); } - for (int i = 0; i < fs.length; i++) { - File f = fs[i]; + for (File f : fs) { if (f.isDirectory()) { addInputDirectory(baseDirectory, f); } else { diff --git a/com.ibm.wala.shrike/src/com/ibm/wala/shrikeCT/ClassWriter.java b/com.ibm.wala.shrike/src/com/ibm/wala/shrikeCT/ClassWriter.java index fb797a9fb..58d8d785b 100644 --- a/com.ibm.wala.shrike/src/com/ibm/wala/shrikeCT/ClassWriter.java +++ b/com.ibm.wala.shrike/src/com/ibm/wala/shrikeCT/ClassWriter.java @@ -471,8 +471,7 @@ public class ClassWriter implements ClassConstants { if (ifaces.length > 0xFFFF) { throw new IllegalArgumentException("Too many interfaces implemented: " + ifaces.length); } - for (int i = 0; i < ifaces.length; i++) { - int c = ifaces[i]; + for (int c : ifaces) { if (c < 1 || c > 0xFFFF) { throw new IllegalArgumentException("Interface name index out of range: " + c); } @@ -637,8 +636,8 @@ public class ClassWriter implements ClassConstants { public int getSize() { int size = 8; if (attributes != null) { - for (int i = 0; i < attributes.length; i++) { - size += attributes[i].getSize(); + for (Element attribute : attributes) { + size += attribute.getSize(); } } return size; @@ -652,8 +651,8 @@ public class ClassWriter implements ClassConstants { if (attributes != null) { setUShort(buf, offset + 6, attributes.length); offset += 8; - for (int i = 0; i < attributes.length; i++) { - offset = attributes[i].copyInto(buf, offset); + for (Element attribute : attributes) { + offset = attribute.copyInto(buf, offset); } } else { setUShort(buf, offset + 6, 0); diff --git a/com.ibm.wala.shrike/src/com/ibm/wala/shrikeCT/CodeWriter.java b/com.ibm.wala.shrike/src/com/ibm/wala/shrikeCT/CodeWriter.java index eacedf337..211036962 100644 --- a/com.ibm.wala.shrike/src/com/ibm/wala/shrikeCT/CodeWriter.java +++ b/com.ibm.wala.shrike/src/com/ibm/wala/shrikeCT/CodeWriter.java @@ -65,8 +65,8 @@ public final class CodeWriter extends ClassWriter.Element { int size = 14 + code.length + 2 + (exnHandlers == null ? 0 : exnHandlers.length) * 2 + 2; if (attributes != null) { - for (int i = 0; i < attributes.length; i++) { - size += attributes[i].getSize(); + for (ClassWriter.Element attribute : attributes) { + size += attribute.getSize(); } } return size; @@ -87,8 +87,8 @@ public final class CodeWriter extends ClassWriter.Element { ClassWriter.setUShort(buf, offset, (exnHandlers == null ? 0 : exnHandlers.length) / 4); offset += 2; if (exnHandlers != null) { - for (int i = 0; i < exnHandlers.length; i++) { - ClassWriter.setUShort(buf, offset, exnHandlers[i]); + for (int exnHandler : exnHandlers) { + ClassWriter.setUShort(buf, offset, exnHandler); offset += 2; } } @@ -96,8 +96,8 @@ public final class CodeWriter extends ClassWriter.Element { ClassWriter.setUShort(buf, offset, (attributes == null ? 0 : attributes.length)); offset += 2; if (attributes != null) { - for (int i = 0; i < attributes.length; i++) { - offset = attributes[i].copyInto(buf, offset); + for (ClassWriter.Element attribute : attributes) { + offset = attribute.copyInto(buf, offset); } } ClassWriter.setInt(buf, start + 2, offset - start - 6); diff --git a/com.ibm.wala.shrike/src/com/ibm/wala/shrikeCT/ExceptionsWriter.java b/com.ibm.wala.shrike/src/com/ibm/wala/shrikeCT/ExceptionsWriter.java index 001c83bc4..595000182 100644 --- a/com.ibm.wala.shrike/src/com/ibm/wala/shrikeCT/ExceptionsWriter.java +++ b/com.ibm.wala.shrike/src/com/ibm/wala/shrikeCT/ExceptionsWriter.java @@ -42,8 +42,8 @@ public final class ExceptionsWriter extends ClassWriter.Element { ClassWriter.setUShort(buf, offset + 6, table == null ? 0 : table.length); offset += 8; if (table != null) { - for (int i = 0; i < table.length; i++) { - ClassWriter.setUShort(buf, offset, table[i]); + for (int element : table) { + ClassWriter.setUShort(buf, offset, element); offset += 2; } } @@ -60,9 +60,9 @@ public final class ExceptionsWriter extends ClassWriter.Element { if (exceptions == null) { throw new IllegalArgumentException("exceptions is null"); } - for (int i = 0; i < exceptions.length; i++) { - if (exceptions[i] < 1 || exceptions[i] > 0xFFFF) { - throw new IllegalArgumentException("Invalid CP index: " + exceptions[i]); + for (int exception : exceptions) { + if (exception < 1 || exception > 0xFFFF) { + throw new IllegalArgumentException("Invalid CP index: " + exception); } } diff --git a/com.ibm.wala.shrike/src/com/ibm/wala/shrikeCT/InnerClassesWriter.java b/com.ibm.wala.shrike/src/com/ibm/wala/shrikeCT/InnerClassesWriter.java index 474625009..f10801859 100644 --- a/com.ibm.wala.shrike/src/com/ibm/wala/shrikeCT/InnerClassesWriter.java +++ b/com.ibm.wala.shrike/src/com/ibm/wala/shrikeCT/InnerClassesWriter.java @@ -47,8 +47,8 @@ public final class InnerClassesWriter extends ClassWriter.Element { ClassWriter.setUShort(buf, offset + 6, table == null ? 0 : table.length); offset += 8; if (table != null) { - for (int i = 0; i < table.length; i++) { - ClassWriter.setUShort(buf, offset, table[i]); + for (int element : table) { + ClassWriter.setUShort(buf, offset, element); offset += 2; } } diff --git a/com.ibm.wala.shrike/src/com/ibm/wala/shrikeCT/LineNumberTableWriter.java b/com.ibm.wala.shrike/src/com/ibm/wala/shrikeCT/LineNumberTableWriter.java index fa1b31422..ec6bbd60e 100644 --- a/com.ibm.wala.shrike/src/com/ibm/wala/shrikeCT/LineNumberTableWriter.java +++ b/com.ibm.wala.shrike/src/com/ibm/wala/shrikeCT/LineNumberTableWriter.java @@ -69,8 +69,8 @@ public final class LineNumberTableWriter extends ClassWriter.Element { ClassWriter.setInt(buf, offset + 2, 2 + rawTable.length * 2); ClassWriter.setUShort(buf, offset + 6, rawTable.length / 2); offset += 8; - for (int i = 0; i < rawTable.length; i++) { - ClassWriter.setUShort(buf, offset, rawTable[i]); + for (int element : rawTable) { + ClassWriter.setUShort(buf, offset, element); offset += 2; } @@ -89,8 +89,7 @@ public final class LineNumberTableWriter extends ClassWriter.Element { } int rawCount = 0; int last = -1; - for (int i = 0; i < newLineMap.length; i++) { - int next = newLineMap[i]; + for (int next : newLineMap) { if (next != last) { rawCount++; } diff --git a/com.ibm.wala.shrike/src/com/ibm/wala/shrikeCT/LocalVariableTableWriter.java b/com.ibm.wala.shrike/src/com/ibm/wala/shrikeCT/LocalVariableTableWriter.java index ee83b4e79..fb7eb5f9c 100644 --- a/com.ibm.wala.shrike/src/com/ibm/wala/shrikeCT/LocalVariableTableWriter.java +++ b/com.ibm.wala.shrike/src/com/ibm/wala/shrikeCT/LocalVariableTableWriter.java @@ -73,8 +73,8 @@ public final class LocalVariableTableWriter extends ClassWriter.Element { ClassWriter.setInt(buf, offset + 2, 2 + rawTable.length * 2); ClassWriter.setUShort(buf, offset + 6, rawTable.length / 5); offset += 8; - for (int i = 0; i < rawTable.length; i++) { - ClassWriter.setUShort(buf, offset, rawTable[i]); + for (int element : rawTable) { + ClassWriter.setUShort(buf, offset, element); offset += 2; } @@ -95,9 +95,9 @@ public final class LocalVariableTableWriter extends ClassWriter.Element { } try { int varCount = 0; - for (int i = 0; i < varMap.length; i++) { - if (varMap[i] != null) { - varCount = Math.max(varCount, varMap[i].length); + for (int[] element : varMap) { + if (element != null) { + varCount = Math.max(varCount, element.length); } } varCount /= 2; diff --git a/com.ibm.wala.shrike/src/com/ibm/wala/shrikeCT/SourceDebugExtensionWriter.java b/com.ibm.wala.shrike/src/com/ibm/wala/shrikeCT/SourceDebugExtensionWriter.java index be58b0a9b..1d4bb24bf 100644 --- a/com.ibm.wala.shrike/src/com/ibm/wala/shrikeCT/SourceDebugExtensionWriter.java +++ b/com.ibm.wala.shrike/src/com/ibm/wala/shrikeCT/SourceDebugExtensionWriter.java @@ -35,8 +35,8 @@ public class SourceDebugExtensionWriter extends ClassWriter.Element { ClassWriter.setInt(buf, offset + 2, getSize() - 6); offset += 6; if (table != null) { - for (int i = 0; i < table.length; i++) { - ClassWriter.setUByte(buf, offset, table[i]); + for (byte element : table) { + ClassWriter.setUByte(buf, offset, element); offset++; } } @@ -47,9 +47,9 @@ public class SourceDebugExtensionWriter extends ClassWriter.Element { if (sourceDebug == null) { throw new IllegalArgumentException("sourceDebug is null"); } - for (int i = 0; i < sourceDebug.length; i++) { - if (sourceDebug[i] < 1) { - throw new IllegalArgumentException("Invalid CP index: " + sourceDebug[i]); + for (byte element : sourceDebug) { + if (element < 1) { + throw new IllegalArgumentException("Invalid CP index: " + element); } } this.table = sourceDebug; diff --git a/com.ibm.wala.shrike/src/com/ibm/wala/shrikeCT/StackMapConstants.java b/com.ibm.wala.shrike/src/com/ibm/wala/shrikeCT/StackMapConstants.java index 9972a59ed..e3e948938 100644 --- a/com.ibm.wala.shrike/src/com/ibm/wala/shrikeCT/StackMapConstants.java +++ b/com.ibm.wala.shrike/src/com/ibm/wala/shrikeCT/StackMapConstants.java @@ -195,13 +195,13 @@ public class StackMapConstants { sb.append(" offset: ").append(offset).append("\n"); sb.append(" locals\n"); - for(int i = 0; i < localTypes.length; i++) { - sb.append(" ").append(localTypes[i]).append("\n"); + for (StackMapType localType : localTypes) { + sb.append(" ").append(localType).append("\n"); } sb.append(" stack\n"); - for(int i = 0; i < stackTypes.length; i++) { - sb.append(" ").append(stackTypes[i]).append("\n"); + for (StackMapType stackType : stackTypes) { + sb.append(" ").append(stackType).append("\n"); } return sb.toString(); diff --git a/com.ibm.wala.shrike/src/com/ibm/wala/shrikeCT/TypeAnnotationsReader.java b/com.ibm.wala.shrike/src/com/ibm/wala/shrikeCT/TypeAnnotationsReader.java index 8cd4f3d7c..a580caa03 100644 --- a/com.ibm.wala.shrike/src/com/ibm/wala/shrikeCT/TypeAnnotationsReader.java +++ b/com.ibm.wala.shrike/src/com/ibm/wala/shrikeCT/TypeAnnotationsReader.java @@ -363,8 +363,8 @@ public class TypeAnnotationsReader extends AnnotationsReader { static { final TargetType[] targetTypes = TargetType.values(); fromValue = HashMapFactory.make(targetTypes.length); - for (int i = 0; i < targetTypes.length; i++) { - fromValue.put(targetTypes[i].target_type, targetTypes[i]); + for (TargetType targetType : targetTypes) { + fromValue.put(targetType.target_type, targetType); } } @@ -710,8 +710,8 @@ public class TypeAnnotationsReader extends AnnotationsReader { static { final TypePathKind[] typePathKinds = TypePathKind.values(); fromValue = HashMapFactory.make(typePathKinds.length); - for (int i = 0; i < typePathKinds.length; i++) { - fromValue.put(typePathKinds[i].type_path_kind, typePathKinds[i]); + for (TypePathKind typePathKind : typePathKinds) { + fromValue.put(typePathKind.type_path_kind, typePathKind); } } diff --git a/com.ibm.wala.util/src/com/ibm/wala/dataflow/graph/BitVectorUnion.java b/com.ibm.wala.util/src/com/ibm/wala/dataflow/graph/BitVectorUnion.java index cf891e02f..73b4dde87 100644 --- a/com.ibm.wala.util/src/com/ibm/wala/dataflow/graph/BitVectorUnion.java +++ b/com.ibm.wala.util/src/com/ibm/wala/dataflow/graph/BitVectorUnion.java @@ -57,8 +57,7 @@ public class BitVectorUnion extends AbstractMeetOperator { } BitVectorVariable U = new BitVectorVariable(); U.copyState(lhs); - for (int i = 0; i < rhs.length; i++) { - BitVectorVariable R = rhs[i]; + for (BitVectorVariable R : rhs) { U.addAll(R); } if (!lhs.sameValue(U)) { diff --git a/com.ibm.wala.util/src/com/ibm/wala/dataflow/graph/BooleanUnion.java b/com.ibm.wala.util/src/com/ibm/wala/dataflow/graph/BooleanUnion.java index 4a593375a..a6bd5369a 100644 --- a/com.ibm.wala.util/src/com/ibm/wala/dataflow/graph/BooleanUnion.java +++ b/com.ibm.wala.util/src/com/ibm/wala/dataflow/graph/BooleanUnion.java @@ -51,8 +51,7 @@ public class BooleanUnion extends AbstractMeetOperator { } BooleanVariable U = new BooleanVariable(); U.copyState(lhs); - for (int i = 0; i < rhs.length; i++) { - BooleanVariable R = rhs[i]; + for (BooleanVariable R : rhs) { if (R != null) { U.or(R); } diff --git a/com.ibm.wala.util/src/com/ibm/wala/dataflow/graph/DataflowSolver.java b/com.ibm.wala.util/src/com/ibm/wala/dataflow/graph/DataflowSolver.java index 3e1aa389b..1314359ba 100644 --- a/com.ibm.wala.util/src/com/ibm/wala/dataflow/graph/DataflowSolver.java +++ b/com.ibm.wala.util/src/com/ibm/wala/dataflow/graph/DataflowSolver.java @@ -69,8 +69,7 @@ public abstract class DataflowSolver> extends DefaultF Graph G = problem.getFlowGraph(); ITransferFunctionProvider functions = problem.getTransferFunctionProvider(); // create a variable for each node. - for (Iterator it = G.iterator(); it.hasNext();) { - T N = it.next(); + for (T N : G) { assert N != null; V v = makeNodeVariable(N, true); node2In.put(N, v); @@ -128,8 +127,7 @@ public abstract class DataflowSolver> extends DefaultF final private Object[] allKeys; private int mapIt(int i, Object[] allVars, Map varMap) { - for (Iterator it = varMap.keySet().iterator(); it.hasNext();) { - Object key = it.next(); + for (Object key : varMap.keySet()) { allKeys[i] = key; allVars[i++] = varMap.get(key); } @@ -195,8 +193,7 @@ public abstract class DataflowSolver> extends DefaultF // add meet operations int meetThreshold = (meet.isUnaryNoOp() ? 2 : 1); - for (Iterator it = G.iterator(); it.hasNext();) { - T node = it.next(); + for (T node : G) { int nPred = G.getPredNodeCount(node); if (nPred >= meetThreshold) { // todo: optimize further using unary operators when possible? @@ -211,8 +208,7 @@ public abstract class DataflowSolver> extends DefaultF // add node transfer operations, if requested if (functions.hasNodeTransferFunctions()) { - for (Iterator it = G.iterator(); it.hasNext();) { - T node = it.next(); + for (T node : G) { UnaryOperator f = functions.getNodeTransferFunction(node); if (!f.isIdentity()) { newStatement(getOut(node), f, getIn(node), toWorkList, eager); @@ -222,8 +218,7 @@ public abstract class DataflowSolver> extends DefaultF // add edge transfer operations, if requested if (functions.hasEdgeTransferFunctions()) { - for (Iterator it = G.iterator(); it.hasNext();) { - T node = it.next(); + for (T node : G) { for (Iterator it2 = G.getSuccNodes(node); it2.hasNext();) { T succ = it2.next(); UnaryOperator f = functions.getEdgeTransferFunction(node, succ); @@ -241,8 +236,7 @@ public abstract class DataflowSolver> extends DefaultF */ private void shortCircuitIdentities(Graph G, ITransferFunctionProvider functions, UnionFind uf) { if (functions.hasNodeTransferFunctions()) { - for (Iterator it = G.iterator(); it.hasNext();) { - T node = it.next(); + for (T node : G) { UnaryOperator f = functions.getNodeTransferFunction(node); if (f.isIdentity()) { uf.union(getIn(node), getOut(node)); @@ -251,8 +245,7 @@ public abstract class DataflowSolver> extends DefaultF } if (functions.hasEdgeTransferFunctions()) { - for (Iterator it = G.iterator(); it.hasNext();) { - T node = it.next(); + for (T node : G) { for (Iterator it2 = G.getSuccNodes(node); it2.hasNext();) { T succ = it2.next(); UnaryOperator f = functions.getEdgeTransferFunction(node, succ); @@ -305,8 +298,7 @@ public abstract class DataflowSolver> extends DefaultF } private void shortCircuitUnaryMeets(Graph G, ITransferFunctionProvider functions, UnionFind uf) { - for (Iterator it = G.iterator(); it.hasNext();) { - T node = it.next(); + for (T node : G) { assert node != null; int nPred = G.getPredNodeCount(node); if (nPred == 1) { diff --git a/com.ibm.wala.util/src/com/ibm/wala/fixedpoint/impl/AbstractFixedPointSolver.java b/com.ibm.wala.util/src/com/ibm/wala/fixedpoint/impl/AbstractFixedPointSolver.java index 6f32915a9..099424661 100644 --- a/com.ibm.wala.util/src/com/ibm/wala/fixedpoint/impl/AbstractFixedPointSolver.java +++ b/com.ibm.wala.util/src/com/ibm/wala/fixedpoint/impl/AbstractFixedPointSolver.java @@ -517,8 +517,7 @@ public abstract class AbstractFixedPointSolver> implement getFixedPointSystem().reorder(); // re-populate worklist - for (Iterator it = temp.iterator(); it.hasNext();) { - AbstractStatement s = it.next(); + for (AbstractStatement s : temp) { workList.insertStatement(s); } } diff --git a/com.ibm.wala.util/src/com/ibm/wala/fixedpoint/impl/DefaultFixedPointSystem.java b/com.ibm.wala.util/src/com/ibm/wala/fixedpoint/impl/DefaultFixedPointSystem.java index d141dc577..350139774 100644 --- a/com.ibm.wala.util/src/com/ibm/wala/fixedpoint/impl/DefaultFixedPointSystem.java +++ b/com.ibm.wala.util/src/com/ibm/wala/fixedpoint/impl/DefaultFixedPointSystem.java @@ -133,8 +133,7 @@ public class DefaultFixedPointSystem> implements IFixedPo graph.addNode(lhs); graph.addEdge(s, lhs); } - for (int i = 0; i < rhs.length; i++) { - IVariable v = rhs[i]; + for (IVariable v : rhs) { IVariable variable = v; if (variable != null) { variables.add(variable); diff --git a/com.ibm.wala.util/src/com/ibm/wala/fixedpoint/impl/GeneralStatement.java b/com.ibm.wala.util/src/com/ibm/wala/fixedpoint/impl/GeneralStatement.java index eeab4e023..8b33ad99b 100644 --- a/com.ibm.wala.util/src/com/ibm/wala/fixedpoint/impl/GeneralStatement.java +++ b/com.ibm.wala.util/src/com/ibm/wala/fixedpoint/impl/GeneralStatement.java @@ -61,8 +61,8 @@ public abstract class GeneralStatement> extends AbstractS if (lhs == cell) { return true; } - for (int i = 0; i < rhs.length; i++) { - if (rhs[i] == cell) + for (T rh : rhs) { + if (rh == cell) return true; } return false; diff --git a/com.ibm.wala.util/src/com/ibm/wala/util/collections/BimodalMap.java b/com.ibm.wala.util/src/com/ibm/wala/util/collections/BimodalMap.java index 7d1d58fef..d99b8fdc9 100644 --- a/com.ibm.wala.util/src/com/ibm/wala/util/collections/BimodalMap.java +++ b/com.ibm.wala.util/src/com/ibm/wala/util/collections/BimodalMap.java @@ -12,7 +12,6 @@ package com.ibm.wala.util.collections; import java.util.Collection; import java.util.Collections; -import java.util.Iterator; import java.util.Map; import java.util.Set; @@ -110,8 +109,7 @@ public class BimodalMap implements Map { assert backingStore instanceof SmallMap; SmallMap S = (SmallMap) backingStore; backingStore = HashMapFactory.make(2 * S.size()); - for (Iterator it = S.keySet().iterator(); it.hasNext();) { - K key = it.next(); + for (K key : S.keySet()) { V value = S.get(key); backingStore.put(key, value); } diff --git a/com.ibm.wala.util/src/com/ibm/wala/util/collections/ImmutableStack.java b/com.ibm.wala.util/src/com/ibm/wala/util/collections/ImmutableStack.java index 2ca114688..5254a144b 100644 --- a/com.ibm.wala.util/src/com/ibm/wala/util/collections/ImmutableStack.java +++ b/com.ibm.wala.util/src/com/ibm/wala/util/collections/ImmutableStack.java @@ -176,8 +176,8 @@ public class ImmutableStack implements Iterable { if (entry == null) { return false; } - for (int i = 0; i < entries.length; i++) { - if (entries[i] != null && entries[i].equals(entry)) + for (T entrie : entries) { + if (entrie != null && entrie.equals(entry)) return true; } return false; diff --git a/com.ibm.wala.util/src/com/ibm/wala/util/collections/MapUtil.java b/com.ibm.wala.util/src/com/ibm/wala/util/collections/MapUtil.java index 539dfec14..6ead5402b 100644 --- a/com.ibm.wala.util/src/com/ibm/wala/util/collections/MapUtil.java +++ b/com.ibm.wala.util/src/com/ibm/wala/util/collections/MapUtil.java @@ -12,7 +12,6 @@ package com.ibm.wala.util.collections; import java.util.ArrayList; import java.util.Collection; -import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Set; @@ -162,12 +161,10 @@ public class MapUtil { throw new IllegalArgumentException("m is null"); } Map> result = HashMapFactory.make(m.size()); - for (Iterator>> it = m.entrySet().iterator(); it.hasNext();) { - Map.Entry> E = it.next(); + for (Map.Entry> E : m.entrySet()) { K key = E.getKey(); Set values = E.getValue(); - for (Iterator it2 = values.iterator(); it2.hasNext();) { - V v = it2.next(); + for (V v : values) { Set s = findOrCreateSet(result, v); s.add(key); } @@ -203,14 +200,12 @@ public class MapUtil { } Map, V> result = HashMapFactory.make(); Map> valueToKeys = HashMapFactory.make(); - for (Iterator> it = m.entrySet().iterator(); it.hasNext();) { - Map.Entry E = it.next(); + for (Map.Entry E : m.entrySet()) { K key = E.getKey(); V value = E.getValue(); findOrCreateSet(valueToKeys, value).add(key); } - for (Iterator>> it = valueToKeys.entrySet().iterator(); it.hasNext();) { - Map.Entry> E = it.next(); + for (Map.Entry> E : valueToKeys.entrySet()) { V value = E.getKey(); Set keys = E.getValue(); result.put(keys, value); diff --git a/com.ibm.wala.util/src/com/ibm/wala/util/collections/ParanoidHashSet.java b/com.ibm.wala.util/src/com/ibm/wala/util/collections/ParanoidHashSet.java index f05361ae1..91b42bb70 100644 --- a/com.ibm.wala.util/src/com/ibm/wala/util/collections/ParanoidHashSet.java +++ b/com.ibm.wala.util/src/com/ibm/wala/util/collections/ParanoidHashSet.java @@ -12,7 +12,6 @@ package com.ibm.wala.util.collections; import java.util.Collection; import java.util.HashSet; -import java.util.Iterator; import java.util.LinkedHashSet; import java.util.Map; import java.util.Set; @@ -45,8 +44,8 @@ public class ParanoidHashSet extends LinkedHashSet { public ParanoidHashSet(Collection s) throws NullPointerException { super(s.size()); hcFreq = HashMapFactory.make(s.size()); - for (Iterator it = s.iterator(); it.hasNext();) { - add(it.next()); + for (T t : s) { + add(t); } } @@ -85,8 +84,8 @@ public class ParanoidHashSet extends LinkedHashSet { hcFreq.put(hc, h); } else { if (s.size() == BAD_HC) { - for (Iterator it = s.iterator(); it.hasNext();) { - Object o = it.next(); + for (T t : s) { + Object o = t; System.err.println(o + " " + o.hashCode()); } assert false : "bad hc " + arg0.getClass() + " " + arg0; diff --git a/com.ibm.wala.util/src/com/ibm/wala/util/collections/SimpleVector.java b/com.ibm.wala.util/src/com/ibm/wala/util/collections/SimpleVector.java index a6f36fede..a3f781b0a 100644 --- a/com.ibm.wala.util/src/com/ibm/wala/util/collections/SimpleVector.java +++ b/com.ibm.wala.util/src/com/ibm/wala/util/collections/SimpleVector.java @@ -94,8 +94,8 @@ public class SimpleVector implements IVector { */ private double computeOccupancy() { int count = 0; - for (int i = 0; i < store.length; i++) { - if (store[i] != null) { + for (Object element : store) { + if (element != null) { count++; } } diff --git a/com.ibm.wala.util/src/com/ibm/wala/util/collections/Util.java b/com.ibm.wala.util/src/com/ibm/wala/util/collections/Util.java index fcbc4d3e3..d55e4c527 100644 --- a/com.ibm.wala.util/src/com/ibm/wala/util/collections/Util.java +++ b/com.ibm.wala.util/src/com/ibm/wala/util/collections/Util.java @@ -48,7 +48,6 @@ import java.util.ArrayList; import java.util.BitSet; import java.util.Collection; import java.util.HashSet; -import java.util.Iterator; import java.util.List; import java.util.Set; import java.util.function.Function; @@ -118,8 +117,7 @@ public class Util { if (c == null) { throw new IllegalArgumentException("c == null"); } - for (Iterator iter = c.iterator(); iter.hasNext();) { - T obj = iter.next(); + for (T obj : c) { if (p.test(obj)) return obj; } @@ -151,8 +149,8 @@ public class Util { if (c == null) { throw new IllegalArgumentException("c == null"); } - for (Iterator iter = c.iterator(); iter.hasNext();) - v.visit(iter.next()); + for (T t : c) + v.visit(t); } /** @@ -167,8 +165,8 @@ public class Util { throw new IllegalArgumentException("srcList == null"); } ArrayList result = new ArrayList<>(); - for (Iterator srcIter = srcList.iterator(); srcIter.hasNext();) { - result.add(f.apply(srcIter.next())); + for (T t : srcList) { + result.add(f.apply(t)); } return result; } @@ -185,8 +183,8 @@ public class Util { throw new IllegalArgumentException("srcSet == null"); } HashSet result = HashSetFactory.make(); - for (Iterator srcIter = srcSet.iterator(); srcIter.hasNext();) { - result.add(f.apply(srcIter.next())); + for (T t : srcSet) { + result.add(f.apply(t)); } return result; } diff --git a/com.ibm.wala.util/src/com/ibm/wala/util/graph/AbstractGraph.java b/com.ibm.wala.util/src/com/ibm/wala/util/graph/AbstractGraph.java index c12504e22..663705da1 100644 --- a/com.ibm.wala.util/src/com/ibm/wala/util/graph/AbstractGraph.java +++ b/com.ibm.wala.util/src/com/ibm/wala/util/graph/AbstractGraph.java @@ -189,8 +189,7 @@ public abstract class AbstractGraph implements Graph { @Override public String toString() { StringBuffer sb = new StringBuffer(); - for (Iterator ns = iterator(); ns.hasNext();) { - T n = ns.next(); + for (T n : this) { sb.append(n.toString()).append("\n"); for (Iterator ss = getSuccNodes(n); ss.hasNext();) { T s = ss.next(); diff --git a/com.ibm.wala.util/src/com/ibm/wala/util/graph/GraphIntegrity.java b/com.ibm.wala.util/src/com/ibm/wala/util/graph/GraphIntegrity.java index 1eb315036..a5e8c4f9f 100644 --- a/com.ibm.wala.util/src/com/ibm/wala/util/graph/GraphIntegrity.java +++ b/com.ibm.wala.util/src/com/ibm/wala/util/graph/GraphIntegrity.java @@ -43,8 +43,7 @@ public class GraphIntegrity { } private static void checkEdgeCounts(Graph G) throws UnsoundGraphException { - for (Iterator it = G.iterator(); it.hasNext();) { - T N = it.next(); + for (T N : G) { int count1 = G.getSuccNodeCount(N); int count2 = 0; for (Iterator it2 = G.getSuccNodes(N); it2.hasNext();) { @@ -68,8 +67,7 @@ public class GraphIntegrity { } private static void checkEdges(Graph G) throws UnsoundGraphException { - for (Iterator it = G.iterator(); it.hasNext();) { - T N = it.next(); + for (T N : G) { if (!G.containsNode(N)) { throw new UnsoundGraphException(N + " is not contained in the the graph " + G.containsNode(N)); } @@ -117,8 +115,8 @@ public class GraphIntegrity { try { n1 = G.getNumberOfNodes(); n2 = 0; - for (Iterator it = G.iterator(); it.hasNext();) { - Object n = it.next(); + for (T t : G) { + Object n = t; if (DEBUG_LEVEL > 1) { System.err.println(("n2 loop: " + n)); } @@ -224,8 +222,8 @@ public class GraphIntegrity { if (c.isEmpty()) { System.err.println("none\n"); } else { - for (Iterator it = c.iterator(); it.hasNext();) { - System.err.println(it.next().toString()); + for (Object name : c) { + System.err.println(name.toString()); } System.err.println("\n"); } diff --git a/com.ibm.wala.util/src/com/ibm/wala/util/graph/GraphPrint.java b/com.ibm.wala.util/src/com/ibm/wala/util/graph/GraphPrint.java index e5ea8e915..ff72c1db0 100644 --- a/com.ibm.wala.util/src/com/ibm/wala/util/graph/GraphPrint.java +++ b/com.ibm.wala.util/src/com/ibm/wala/util/graph/GraphPrint.java @@ -24,11 +24,10 @@ public class GraphPrint { throw new IllegalArgumentException("G is null"); } SlowSparseNumberedGraph sg = SlowSparseNumberedGraph.make(); - for (Iterator it = G.iterator(); it.hasNext(); ) { - sg.addNode(it.next()); + for (T name : G) { + sg.addNode(name); } - for (Iterator it = G.iterator(); it.hasNext(); ) { - T n = it.next(); + for (T n : G) { for (Iterator it2 = G.getSuccNodes(n); it2.hasNext(); ) { T d = it2.next(); sg.addEdge(n,d); diff --git a/com.ibm.wala.util/src/com/ibm/wala/util/graph/GraphSlicer.java b/com.ibm.wala.util/src/com/ibm/wala/util/graph/GraphSlicer.java index 6be8d49f1..755aa0588 100644 --- a/com.ibm.wala.util/src/com/ibm/wala/util/graph/GraphSlicer.java +++ b/com.ibm.wala.util/src/com/ibm/wala/util/graph/GraphSlicer.java @@ -46,8 +46,7 @@ public class GraphSlicer { throw new IllegalArgumentException("g is null"); } HashSet roots = HashSetFactory.make(); - for (Iterator it = g.iterator(); it.hasNext();) { - T o = it.next(); + for (T o : g) { if (p.test(o)) { roots.add(o); } diff --git a/com.ibm.wala.util/src/com/ibm/wala/util/graph/InferGraphRoots.java b/com.ibm.wala.util/src/com/ibm/wala/util/graph/InferGraphRoots.java index be664a011..b30cc9ee9 100644 --- a/com.ibm.wala.util/src/com/ibm/wala/util/graph/InferGraphRoots.java +++ b/com.ibm.wala.util/src/com/ibm/wala/util/graph/InferGraphRoots.java @@ -12,7 +12,6 @@ package com.ibm.wala.util.graph; import java.util.Collection; import java.util.HashSet; -import java.util.Iterator; import com.ibm.wala.util.collections.HashSetFactory; @@ -26,8 +25,7 @@ public class InferGraphRoots { throw new IllegalArgumentException("g is null"); } HashSet s = HashSetFactory.make(); - for (Iterator it = g.iterator(); it.hasNext();) { - T node = it.next(); + for (T node : g) { if (g.getPredNodeCount(node) == 0) { s.add(node); } diff --git a/com.ibm.wala.util/src/com/ibm/wala/util/graph/dominators/Dominators.java b/com.ibm.wala.util/src/com/ibm/wala/util/graph/dominators/Dominators.java index 95a3c9f06..7d0c30587 100644 --- a/com.ibm.wala.util/src/com/ibm/wala/util/graph/dominators/Dominators.java +++ b/com.ibm.wala.util/src/com/ibm/wala/util/graph/dominators/Dominators.java @@ -156,8 +156,7 @@ public abstract class Dominators { private final Map> nextMap = HashMapFactory.make(); { - for (Iterator ns = G.iterator(); ns.hasNext();) { - T n = ns.next(); + for (T n : G) { if (n != root) { T prev = getIdom(n); Set next = nextMap.get(prev); @@ -585,8 +584,7 @@ public abstract class Dominators { @Override public String toString() { StringBuffer sb = new StringBuffer(); - for (Iterator i = G.iterator(); i.hasNext();) { - T node = i.next(); + for (T node : G) { sb.append("Dominators of " + node + ":\n"); for (Iterator j = dominators(node); j.hasNext();) sb.append(" " + j.next() + "\n"); diff --git a/com.ibm.wala.util/src/com/ibm/wala/util/graph/impl/SlowSparseNumberedGraph.java b/com.ibm.wala.util/src/com/ibm/wala/util/graph/impl/SlowSparseNumberedGraph.java index cdb7fe9c4..2b3ef6e03 100644 --- a/com.ibm.wala.util/src/com/ibm/wala/util/graph/impl/SlowSparseNumberedGraph.java +++ b/com.ibm.wala.util/src/com/ibm/wala/util/graph/impl/SlowSparseNumberedGraph.java @@ -73,11 +73,10 @@ public class SlowSparseNumberedGraph extends AbstractNumberedGraph impleme if (g == null) { throw new IllegalArgumentException("g is null"); } - for (Iterator it = g.iterator(); it.hasNext();) { - into.addNode(it.next()); + for (T name : g) { + into.addNode(name); } - for (Iterator it = g.iterator(); it.hasNext();) { - T n = it.next(); + for (T n : g) { for (Iterator it2 = g.getSuccNodes(n); it2.hasNext();) { into.addEdge(n, it2.next()); } diff --git a/com.ibm.wala.util/src/com/ibm/wala/util/graph/labeled/SlowSparseNumberedLabeledGraph.java b/com.ibm.wala.util/src/com/ibm/wala/util/graph/labeled/SlowSparseNumberedLabeledGraph.java index 204c9dea4..b39b01b47 100644 --- a/com.ibm.wala.util/src/com/ibm/wala/util/graph/labeled/SlowSparseNumberedLabeledGraph.java +++ b/com.ibm.wala.util/src/com/ibm/wala/util/graph/labeled/SlowSparseNumberedLabeledGraph.java @@ -71,11 +71,10 @@ public class SlowSparseNumberedLabeledGraph extends AbstractNumberedLabele if (g == null) { throw new IllegalArgumentException("g is null"); } - for (Iterator it = g.iterator(); it.hasNext();) { - into.addNode(it.next()); + for (T name : g) { + into.addNode(name); } - for (Iterator it = g.iterator(); it.hasNext();) { - T n = it.next(); + for (T n : g) { for (Iterator it2 = g.getSuccNodes(n); it2.hasNext();) { T s = it2.next(); for(U l : g.getEdgeLabels(n, s)) { diff --git a/com.ibm.wala.util/src/com/ibm/wala/util/graph/labeled/SparseNumberedLabeledEdgeManager.java b/com.ibm.wala.util/src/com/ibm/wala/util/graph/labeled/SparseNumberedLabeledEdgeManager.java index f313670cc..370cd2610 100644 --- a/com.ibm.wala.util/src/com/ibm/wala/util/graph/labeled/SparseNumberedLabeledEdgeManager.java +++ b/com.ibm.wala.util/src/com/ibm/wala/util/graph/labeled/SparseNumberedLabeledEdgeManager.java @@ -178,8 +178,7 @@ public class SparseNumberedLabeledEdgeManager implements Serializable, Num */ @Override public void removeIncomingEdges(T node) throws IllegalArgumentException { - for (Iterator inLabelIter = nodeToPredLabels.get(node).iterator(); inLabelIter.hasNext();) { - U label = inLabelIter.next(); + for (U label : nodeToPredLabels.get(node)) { getManagerForLabel(label).removeIncomingEdges(node); } @@ -190,8 +189,7 @@ public class SparseNumberedLabeledEdgeManager implements Serializable, Num */ @Override public void removeOutgoingEdges(T node) throws IllegalArgumentException { - for (Iterator outLabelIter = nodeToSuccLabels.get(node).iterator(); outLabelIter.hasNext();) { - U label = outLabelIter.next(); + for (U label : nodeToSuccLabels.get(node)) { getManagerForLabel(label).removeOutgoingEdges(node); } diff --git a/com.ibm.wala.util/src/com/ibm/wala/util/graph/traverse/DFSPathFinder.java b/com.ibm.wala.util/src/com/ibm/wala/util/graph/traverse/DFSPathFinder.java index 479dc4659..9ce5baa4f 100644 --- a/com.ibm.wala.util/src/com/ibm/wala/util/graph/traverse/DFSPathFinder.java +++ b/com.ibm.wala.util/src/com/ibm/wala/util/graph/traverse/DFSPathFinder.java @@ -125,8 +125,8 @@ public class DFSPathFinder extends ArrayList { protected List currentPath() { ArrayList result = new ArrayList<>(); - for (Iterator path = iterator(); path.hasNext();) { - result.add(0, path.next()); + for (T t : this) { + result.add(0, t); } return result; } diff --git a/com.ibm.wala.util/src/com/ibm/wala/util/heapTrace/HeapTracer.java b/com.ibm.wala.util/src/com/ibm/wala/util/heapTrace/HeapTracer.java index 638d90236..f2a8bb146 100644 --- a/com.ibm.wala.util/src/com/ibm/wala/util/heapTrace/HeapTracer.java +++ b/com.ibm.wala.util/src/com/ibm/wala/util/heapTrace/HeapTracer.java @@ -157,8 +157,8 @@ public class HeapTracer { String classpath = System.getProperty("java.class.path"); Object[] binDirectories = extractBinDirectories(classpath); HashSet classFileNames = HashSetFactory.make(); - for (int i = 0; i < binDirectories.length; i++) { - String dir = (String) binDirectories[i]; + for (Object binDirectorie : binDirectories) { + String dir = (String) binDirectorie; File fdir = new File(dir); classFileNames.addAll(findClassNames(dir, fdir)); } @@ -186,8 +186,8 @@ public class HeapTracer { HashSet result = HashSetFactory.make(); if (f.isDirectory()) { File[] files = f.listFiles(); - for (int i = 0; i < files.length; i++) { - result.addAll(findClassNames(rootDir, files[i])); + for (File file : files) { + result.addAll(findClassNames(rootDir, file)); } } else { if (f.getName().indexOf(".class") > 0) { @@ -226,22 +226,20 @@ public class HeapTracer { Result result = new Result(); IdentityHashMap objectsVisited = new IdentityHashMap<>(); if (traceStatics) { - for (int i = 0; i < rootClasses.length; i++) { - Class c = Class.forName(rootClasses[i]); + for (String rootClasse : rootClasses) { + Class c = Class.forName(rootClasse); Field[] fields = c.getDeclaredFields(); - for (int j = 0; j < fields.length; j++) { - if (isStatic(fields[j])) { - traverse(fields[j], result, objectsVisited); + for (Field field : fields) { + if (isStatic(field)) { + traverse(field, result, objectsVisited); } } } } - for (Iterator it = rootInstances.iterator(); it.hasNext();) { - Object instance = it.next(); + for (Object instance : rootInstances) { Class c = instance.getClass(); Set fields = getAllInstanceFields(c); - for (Iterator it2 = fields.iterator(); it2.hasNext();) { - Field f = it2.next(); + for (Field f : fields) { traverse(f, instance, result, objectsVisited); } } @@ -264,8 +262,7 @@ public class HeapTracer { throw new Error(); } else { Collection fields = getAllInstanceFields(c); - for (Iterator it = fields.iterator(); it.hasNext();) { - Field f = it.next(); + for (Field f : fields) { result += sizeOfSlot(f.getType()); } } @@ -416,8 +413,8 @@ public class HeapTracer { System.err.println(("traverse scalar " + c)); } Field[] fields = getAllReferenceInstanceFields(c); - for (int i = 0; i < fields.length; i++) { - traverseFieldOfScalar(root, fields[i], scalar, container, + for (Field field : fields) { + traverseFieldOfScalar(root, field, scalar, container, objectsVisited, result); } } @@ -676,8 +673,7 @@ public class HeapTracer { result.append("Totals: " + totalInstances + " " + totalSize + "\n"); TreeSet sorted = new TreeSet<>(new SizeComparator()); sorted.addAll(instanceCount.keySet()); - for (Iterator it = sorted.iterator(); it.hasNext();) { - Object key = it.next(); + for (Object key : sorted) { Integer I = instanceCount.get(key); Integer bytes = sizeCount.get(key); result.append(" ").append(I).append(" ").append(bytes) @@ -757,11 +753,9 @@ public class HeapTracer { public int getTotalSize() { int totalSize = 0; - for (Iterator it = roots.values().iterator(); it - .hasNext();) { - Demographics d = it.next(); - totalSize += d.getTotalSize(); - } + for (Demographics d : roots.values()) { +totalSize += d.getTotalSize(); + } return totalSize; } @@ -772,19 +766,17 @@ public class HeapTracer { + " header bytes per object\n"); int totalInstances = 0; int totalSize = 0; - for (Iterator it = roots.values().iterator(); it - .hasNext();) { - Demographics d = it.next(); - totalInstances += d.getTotalInstances(); - totalSize += d.getTotalSize(); - } + for (Demographics d : roots.values()) { +totalInstances += d.getTotalInstances(); +totalSize += d.getTotalSize(); + } result.append("Total instances: " + totalInstances + "\n"); result.append("Total size(bytes): " + totalSize + "\n"); TreeSet sortedDemo = new TreeSet<>(new SizeComparator()); sortedDemo.addAll(roots.keySet()); - for (Iterator it = sortedDemo.iterator(); it.hasNext();) { - Object root = it.next(); + for (Field field : sortedDemo) { + Object root = field; Demographics d = roots.get(root); if (d.getTotalSize() > 10000) { result.append(" root: ").append(root).append("\n"); diff --git a/com.ibm.wala.util/src/com/ibm/wala/util/intset/BasicNaturalRelation.java b/com.ibm.wala.util/src/com/ibm/wala/util/intset/BasicNaturalRelation.java index e845550d9..f61ee2abe 100644 --- a/com.ibm.wala.util/src/com/ibm/wala/util/intset/BasicNaturalRelation.java +++ b/com.ibm.wala.util/src/com/ibm/wala/util/intset/BasicNaturalRelation.java @@ -155,8 +155,7 @@ public final class BasicNaturalRelation implements IBinaryNaturalRelation, Seria if (i == ssLength) { MutableIntSet s = new BimodalMutableIntSet(ssLength + 1, 1.1f); delegateStore.set(x, s); - for (int j = 0; j < smallStore.length; j++) { - IntVector vv = smallStore[j]; + for (IntVector vv : smallStore) { s.add(vv.get(x)); vv.set(x, DELEGATE_CODE); } @@ -304,11 +303,11 @@ public final class BasicNaturalRelation implements IBinaryNaturalRelation, Seria return SparseIntSet.singleton(ss0); } else { MutableSparseIntSet result = MutableSparseIntSet.createMutableSparseIntSet(ssLength); - for (int i = 0; i < smallStore.length; i++) { - if (smallStore[i].get(x) == EMPTY_CODE) { + for (IntVector element : smallStore) { + if (element.get(x) == EMPTY_CODE) { break; } - result.add(smallStore[i].get(x)); + result.add(element.get(x)); } return result; } @@ -332,8 +331,8 @@ public final class BasicNaturalRelation implements IBinaryNaturalRelation, Seria return getDelegate(x).size(); } else { int result = 0; - for (int i = 0; i < smallStore.length; i++) { - if (smallStore[i].get(x) == EMPTY_CODE) { + for (IntVector element : smallStore) { + if (element.get(x) == EMPTY_CODE) { break; } result++; @@ -357,8 +356,8 @@ public final class BasicNaturalRelation implements IBinaryNaturalRelation, Seria s.remove(y); if (s.size() == 0) { delegateStore.set(x, null); - for (int i = 0; i < smallStore.length; i++) { - smallStore[i].set(x, EMPTY_CODE); + for (IntVector element : smallStore) { + element.set(x, EMPTY_CODE); } } } else { @@ -379,8 +378,8 @@ public final class BasicNaturalRelation implements IBinaryNaturalRelation, Seria @Override public void removeAll(int x) { - for (int i = 0; i < smallStore.length; i++) { - smallStore[i].set(x, EMPTY_CODE); + for (IntVector element : smallStore) { + element.set(x, EMPTY_CODE); } delegateStore.set(x, null); } @@ -408,8 +407,7 @@ public final class BasicNaturalRelation implements IBinaryNaturalRelation, Seria */ private int countPairs() { int result = 0; - for (Iterator it = iterator(); it.hasNext();) { - it.next(); + for (@SuppressWarnings("unused") Object name : this) { result++; } return result; @@ -426,8 +424,8 @@ public final class BasicNaturalRelation implements IBinaryNaturalRelation, Seria if (usingDelegate(x)) { return getDelegate(x).contains(y); } else { - for (int i = 0; i < smallStore.length; i++) { - if (smallStore[i].get(x) == y) { + for (IntVector element : smallStore) { + if (element.get(x) == y) { return true; } } diff --git a/com.ibm.wala.util/src/com/ibm/wala/util/intset/BitVectorBase.java b/com.ibm.wala.util/src/com/ibm/wala/util/intset/BitVectorBase.java index 278596e36..20311701b 100644 --- a/com.ibm.wala.util/src/com/ibm/wala/util/intset/BitVectorBase.java +++ b/com.ibm.wala.util/src/com/ibm/wala/util/intset/BitVectorBase.java @@ -85,8 +85,8 @@ abstract public class BitVectorBase implements Cloneabl */ public final int populationCount() { int count = 0; - for (int i = 0; i < bits.length; i++) { - count += Bits.populationCount(bits[i]); + for (int bit : bits) { + count += Bits.populationCount(bit); } return count; } @@ -165,8 +165,8 @@ abstract public class BitVectorBase implements Cloneabl int top = bits[lastWord]; int j = 0; - for (int i = 0; i < masks.length; i++) { - if ((top & masks[i][j]) != 0) { + for (int[] mask2 : masks) { + if ((top & mask2[j]) != 0) { j <<= 1; } else { j <<= 1; diff --git a/com.ibm.wala.util/src/com/ibm/wala/util/intset/BitVectorIntSetFactory.java b/com.ibm.wala.util/src/com/ibm/wala/util/intset/BitVectorIntSetFactory.java index 300c77052..5809595ec 100644 --- a/com.ibm.wala.util/src/com/ibm/wala/util/intset/BitVectorIntSetFactory.java +++ b/com.ibm.wala.util/src/com/ibm/wala/util/intset/BitVectorIntSetFactory.java @@ -10,7 +10,6 @@ *******************************************************************************/ package com.ibm.wala.util.intset; -import java.util.Iterator; import java.util.TreeSet; /** @@ -31,12 +30,11 @@ public class BitVectorIntSetFactory implements MutableIntSetFactory T = new TreeSet<>(); - for (int i = 0; i < set.length; i++) { - T.add(set[i]); + for (int element : set) { + T.add(element); } BitVectorIntSet result = new BitVectorIntSet(); - for (Iterator it = T.iterator(); it.hasNext();) { - Integer I = it.next(); + for (Integer I : T) { result.add(I.intValue()); } return result; @@ -50,8 +48,8 @@ public class BitVectorIntSetFactory implements MutableIntSetFactory T = new TreeSet<>(); - for (int i = 0; i < set.length; i++) { - T.add(set[i]); + for (int element : set) { + T.add(element); } int[] copy = new int[T.size()]; int i = 0; - for (Iterator it = T.iterator(); it.hasNext();) { - Integer I = it.next(); + for (Integer I : T) { copy[i++] = I.intValue(); } MutableSparseIntSet result = new MutableSparseIntSet(copy); diff --git a/com.ibm.wala.util/src/com/ibm/wala/util/intset/MutableSparseLongSetFactory.java b/com.ibm.wala.util/src/com/ibm/wala/util/intset/MutableSparseLongSetFactory.java index 43bbc92bc..ea7f5f2ba 100644 --- a/com.ibm.wala.util/src/com/ibm/wala/util/intset/MutableSparseLongSetFactory.java +++ b/com.ibm.wala.util/src/com/ibm/wala/util/intset/MutableSparseLongSetFactory.java @@ -10,7 +10,6 @@ *******************************************************************************/ package com.ibm.wala.util.intset; -import java.util.Iterator; import java.util.TreeSet; /** @@ -32,13 +31,12 @@ public class MutableSparseLongSetFactory implements MutableLongSetFactory { } else { // XXX not very efficient. TreeSet T = new TreeSet<>(); - for (int i = 0; i < set.length; i++) { - T.add(Long.valueOf(set[i])); + for (long element : set) { + T.add(Long.valueOf(element)); } long[] copy = new long[T.size()]; int i = 0; - for (Iterator it = T.iterator(); it.hasNext();) { - Long I = it.next(); + for (Long I : T) { copy[i++] = I.longValue(); } MutableSparseLongSet result = new MutableSparseLongSet(copy); diff --git a/com.ibm.wala.util/src/com/ibm/wala/util/intset/OrdinalSet.java b/com.ibm.wala.util/src/com/ibm/wala/util/intset/OrdinalSet.java index e63ba0925..3051edbe1 100644 --- a/com.ibm.wala.util/src/com/ibm/wala/util/intset/OrdinalSet.java +++ b/com.ibm.wala.util/src/com/ibm/wala/util/intset/OrdinalSet.java @@ -203,8 +203,8 @@ public class OrdinalSet implements Iterable { throw new IllegalArgumentException("m is null"); } MutableSparseIntSet s = MutableSparseIntSet.makeEmpty(); - for (Iterator it = c.iterator(); it.hasNext();) { - int index = m.getMappedIndex(it.next()); + for (T t : c) { + int index = m.getMappedIndex(t); assert index >= 0; s.add(index); } diff --git a/com.ibm.wala.util/src/com/ibm/wala/util/intset/SemiSparseMutableIntSetFactory.java b/com.ibm.wala.util/src/com/ibm/wala/util/intset/SemiSparseMutableIntSetFactory.java index 4ada50e94..34e140a22 100644 --- a/com.ibm.wala.util/src/com/ibm/wala/util/intset/SemiSparseMutableIntSetFactory.java +++ b/com.ibm.wala.util/src/com/ibm/wala/util/intset/SemiSparseMutableIntSetFactory.java @@ -10,7 +10,6 @@ *******************************************************************************/ package com.ibm.wala.util.intset; -import java.util.Iterator; import java.util.TreeSet; /** @@ -31,12 +30,11 @@ public class SemiSparseMutableIntSetFactory implements MutableIntSetFactory T = new TreeSet<>(); - for (int i = 0; i < set.length; i++) { - T.add(Integer.valueOf(set[i])); + for (int element : set) { + T.add(Integer.valueOf(element)); } SemiSparseMutableIntSet result = new SemiSparseMutableIntSet(); - for (Iterator it = T.iterator(); it.hasNext();) { - Integer I = it.next(); + for (Integer I : T) { result.add(I.intValue()); } return result; @@ -50,8 +48,8 @@ public class SemiSparseMutableIntSetFactory implements MutableIntSetFactory it = set.iterator(); it.hasNext();) { - Integer I = it.next(); + for (Integer I : set) { result[i++] = I.intValue(); } return result; diff --git a/com.ibm.wala.util/src/com/ibm/wala/util/intset/SparseLongSet.java b/com.ibm.wala.util/src/com/ibm/wala/util/intset/SparseLongSet.java index d152ae34c..711bed820 100644 --- a/com.ibm.wala.util/src/com/ibm/wala/util/intset/SparseLongSet.java +++ b/com.ibm.wala.util/src/com/ibm/wala/util/intset/SparseLongSet.java @@ -10,7 +10,6 @@ *******************************************************************************/ package com.ibm.wala.util.intset; -import java.util.Iterator; import java.util.NoSuchElementException; import java.util.StringTokenizer; import java.util.TreeSet; @@ -323,8 +322,7 @@ public class SparseLongSet implements LongSet { } long[] result = new long[set.size()]; int i = 0; - for (Iterator it = set.iterator(); it.hasNext();) { - Long L = it.next(); + for (Long L : set) { result[i++] = L.longValue(); } return result; diff --git a/com.ibm.wala.util/src/com/ibm/wala/util/io/FileUtil.java b/com.ibm.wala.util/src/com/ibm/wala/util/io/FileUtil.java index ad4ed423d..0e3aae963 100644 --- a/com.ibm.wala.util/src/com/ibm/wala/util/io/FileUtil.java +++ b/com.ibm.wala.util/src/com/ibm/wala/util/io/FileUtil.java @@ -61,12 +61,12 @@ public class FileUtil { return Collections.emptyList(); } HashSet result = HashSetFactory.make(); - for (int i = 0; i < files.length; i++) { - if (p == null || p.matcher(files[i].getAbsolutePath()).matches()) { - result.add(files[i]); + for (File file : files) { + if (p == null || p.matcher(file.getAbsolutePath()).matches()) { + result.add(file); } - if (recurse && files[i].isDirectory()) { - result.addAll(listFiles(files[i], recurse, p)); + if (recurse && file.isDirectory()) { + result.addAll(listFiles(file, recurse, p)); } } return result; diff --git a/com.ibm.wala.util/src/com/ibm/wala/util/processes/Launcher.java b/com.ibm.wala.util/src/com/ibm/wala/util/processes/Launcher.java index 66e735f2a..89aec325a 100644 --- a/com.ibm.wala.util/src/com/ibm/wala/util/processes/Launcher.java +++ b/com.ibm.wala.util/src/com/ibm/wala/util/processes/Launcher.java @@ -17,7 +17,6 @@ import java.io.IOException; import java.io.PrintStream; import java.nio.charset.StandardCharsets; import java.util.Arrays; -import java.util.Iterator; import java.util.Map; import java.util.logging.Logger; @@ -130,8 +129,7 @@ public abstract class Launcher { private static String[] buildEnv(Map ev) { String[] result = new String[ev.size()]; int i = 0; - for (Iterator> it = ev.entrySet().iterator(); it.hasNext();) { - Map.Entry e = it.next(); + for (Map.Entry e : ev.entrySet()) { result[i++] = e.getKey() + "=" + e.getValue(); } return result; diff --git a/com.ibm.wala.util/src/com/ibm/wala/viz/DotUtil.java b/com.ibm.wala.util/src/com/ibm/wala/viz/DotUtil.java index 02dbb5c41..b97ebf08a 100644 --- a/com.ibm.wala.util/src/com/ibm/wala/viz/DotUtil.java +++ b/com.ibm.wala.util/src/com/ibm/wala/viz/DotUtil.java @@ -213,8 +213,7 @@ public class DotUtil { outputNodes(labels, result, dotNodes); - for (Iterator it = g.iterator(); it.hasNext();) { - T n = it.next(); + for (T n : g) { for (Iterator it2 = g.getSuccNodes(n); it2.hasNext();) { T s = it2.next(); result.append(" "); @@ -230,8 +229,8 @@ public class DotUtil { } private static void outputNodes(NodeDecorator labels, StringBuffer result, Collection dotNodes) throws WalaException { - for (Iterator it = dotNodes.iterator(); it.hasNext();) { - outputNode(labels, result, it.next()); + for (T t : dotNodes) { + outputNode(labels, result, t); } } From d685fbb71fc7a9f8a0dbba4d20dd1336c15ef380 Mon Sep 17 00:00:00 2001 From: Julian Dolby Date: Fri, 1 Dec 2017 13:05:25 +0800 Subject: [PATCH 24/69] Add Jeff's group's incremental pointer analysis project to trigger --- dependent-projects-trigger.sh | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/dependent-projects-trigger.sh b/dependent-projects-trigger.sh index 7d8ec03ed..96102d711 100644 --- a/dependent-projects-trigger.sh +++ b/dependent-projects-trigger.sh @@ -28,3 +28,13 @@ curl -s -X POST \ -H "Authorization: token $1" \ -d "$body" \ https://api.travis-ci.org/repo/wala%2FMemSAT/requests + +curl -s -X POST \ + -H "Content-Type: application/json" \ + -H "Accept: application/json" \ + -H "Travis-API-Version: 3" \ + -H "Authorization: token $1" \ + -d "$body" \ + https://api.travis-ci.org/repo/april1989%2FIncremental_Points_to_Analysis/requests + +csrRz28Xo1NDqBpcuY28 From 7cd2a2acf86df3acff525ff5820bd85fdf51b485 Mon Sep 17 00:00:00 2001 From: Julian Dolby Date: Fri, 1 Dec 2017 20:01:16 +0800 Subject: [PATCH 25/69] Fixes for instrumentation of invoke dynamic --- .../src/lambda/SortingExample.java | 4 +- .../tests/shrike/DynamicCallGraphTest.java | 9 +++ .../shrike/DynamicCallGraphTestBase.java | 5 +- .../shrike/cg/OfflineDynamicCallGraph.java | 11 +++- .../src/com/ibm/wala/shrikeBT/Compiler.java | 11 ++-- .../shrikeBT/InvokeDynamicInstruction.java | 2 +- .../wala/shrikeBT/shrikeCT/CTCompiler.java | 6 ++ .../wala/shrikeCT/BootstrapMethodsReader.java | 6 +- .../com/ibm/wala/shrikeCT/ClassWriter.java | 57 +++++++++++++++++++ 9 files changed, 99 insertions(+), 12 deletions(-) diff --git a/com.ibm.wala.core.testdata/src/lambda/SortingExample.java b/com.ibm.wala.core.testdata/src/lambda/SortingExample.java index 575a0d5b5..59a69777c 100644 --- a/com.ibm.wala.core.testdata/src/lambda/SortingExample.java +++ b/com.ibm.wala.core.testdata/src/lambda/SortingExample.java @@ -19,7 +19,9 @@ public class SortingExample { return strs; } - private static int id1(int x) { return x; } + private static int id0(int x) { return x; } + + private static int id1(int x) { return id0(x); } public String[] sortForward() { return sort( (String l, String r) -> id1(l.compareTo(r))); diff --git a/com.ibm.wala.core.tests/src/com/ibm/wala/core/tests/shrike/DynamicCallGraphTest.java b/com.ibm.wala.core.tests/src/com/ibm/wala/core/tests/shrike/DynamicCallGraphTest.java index cb5737c8d..33d717aa8 100644 --- a/com.ibm.wala.core.tests/src/com/ibm/wala/core/tests/shrike/DynamicCallGraphTest.java +++ b/com.ibm.wala.core.tests/src/com/ibm/wala/core/tests/shrike/DynamicCallGraphTest.java @@ -73,4 +73,13 @@ public class DynamicCallGraphTest extends DynamicCallGraphTestBase { checkEdges(staticCG); } + @Test + public void testLambdas() throws IOException, ClassNotFoundException, InvalidClassFileException, FailureException, SecurityException, IllegalArgumentException, ClassHierarchyException, CancelException, InterruptedException { + instrument(testJarLocation); + run("lambda.SortingExample", null); + CallGraph staticCG = staticCG("Llambda/SortingExample", null); + System.err.println(staticCG); + checkEdges(staticCG); + } + } diff --git a/com.ibm.wala.core.tests/src/com/ibm/wala/core/tests/shrike/DynamicCallGraphTestBase.java b/com.ibm.wala.core.tests/src/com/ibm/wala/core/tests/shrike/DynamicCallGraphTestBase.java index 1524fdb3a..f3d61d7ea 100644 --- a/com.ibm.wala.core.tests/src/com/ibm/wala/core/tests/shrike/DynamicCallGraphTestBase.java +++ b/com.ibm.wala.core.tests/src/com/ibm/wala/core/tests/shrike/DynamicCallGraphTestBase.java @@ -208,12 +208,15 @@ public abstract class DynamicCallGraphTestBase extends WalaTestCase { continue loop; } else { String callerMethod = edge.nextToken(); + if (callerMethod.startsWith("lambda$")) { + continue loop; + } MethodReference callerRef = MethodReference.findOrCreate(TypeReference.findOrCreate(ClassLoaderReference.Application, "L" + callerClass), Selector.make(callerMethod)); Set nodes = staticCG.getNodes(callerRef); if (! filter.test(callerRef)) { continue loop; } - Assert.assertEquals(1, nodes.size()); + Assert.assertEquals(callerMethod, 1, nodes.size()); caller = nodes.iterator().next(); } diff --git a/com.ibm.wala.shrike/src/com/ibm/wala/shrike/cg/OfflineDynamicCallGraph.java b/com.ibm.wala.shrike/src/com/ibm/wala/shrike/cg/OfflineDynamicCallGraph.java index c237956f3..a2e8c5eae 100644 --- a/com.ibm.wala.shrike/src/com/ibm/wala/shrike/cg/OfflineDynamicCallGraph.java +++ b/com.ibm.wala.shrike/src/com/ibm/wala/shrike/cg/OfflineDynamicCallGraph.java @@ -23,6 +23,7 @@ import com.ibm.wala.shrikeBT.Constants; import com.ibm.wala.shrikeBT.Disassembler; import com.ibm.wala.shrikeBT.IInvokeInstruction; import com.ibm.wala.shrikeBT.IInvokeInstruction.Dispatch; +import com.ibm.wala.shrikeBT.InvokeDynamicInstruction; import com.ibm.wala.shrikeBT.InvokeInstruction; import com.ibm.wala.shrikeBT.LoadInstruction; import com.ibm.wala.shrikeBT.MethodData; @@ -248,7 +249,7 @@ public class OfflineDynamicCallGraph { this.replaceWith(new MethodEditor.Patch() { @Override public void emitTo(final Output w) { - final String methodSignature = inv.getInvocationCode().hasImplicitThis()? + final String methodSignature = inv.getInvocationCode().hasImplicitThis() && !(inv instanceof InvokeDynamicInstruction)? "(" + inv.getClassType() + inv.getMethodSignature().substring(1): inv.getMethodSignature(); Pair> key = Pair.make(inv.getClassType(), Pair.make(inv.getMethodName(), methodSignature)); @@ -274,7 +275,13 @@ public class OfflineDynamicCallGraph { } } Dispatch mode = (Dispatch)inv.getInvocationCode(); - w.emit(InvokeInstruction.make(inv.getMethodSignature(), inv.getClassType(), inv.getMethodName(), mode)); + if (inv instanceof InvokeDynamicInstruction) { + InvokeDynamicInstruction inst = new InvokeDynamicInstruction(((InvokeDynamicInstruction) inv).getOpcode(), ((InvokeDynamicInstruction) inv).getBootstrap(), inv.getMethodName(), inv.getMethodSignature()); + w.emit(inst); + } else { + InvokeInstruction inst = InvokeInstruction.make(inv.getMethodSignature(), inv.getClassType(), inv.getMethodName(), mode); + w.emit(inst); + } } }); me.applyPatches(); diff --git a/com.ibm.wala.shrike/src/com/ibm/wala/shrikeBT/Compiler.java b/com.ibm.wala.shrike/src/com/ibm/wala/shrikeBT/Compiler.java index c5ef7c5f1..5409bbbca 100644 --- a/com.ibm.wala.shrike/src/com/ibm/wala/shrikeBT/Compiler.java +++ b/com.ibm.wala.shrike/src/com/ibm/wala/shrikeBT/Compiler.java @@ -19,6 +19,7 @@ import com.ibm.wala.shrikeBT.ConstantInstruction.ClassToken; import com.ibm.wala.shrikeBT.IBinaryOpInstruction.Operator; import com.ibm.wala.shrikeBT.analysis.ClassHierarchyProvider; import com.ibm.wala.shrikeBT.analysis.Verifier; +import com.ibm.wala.shrikeCT.BootstrapMethodsReader.BootstrapMethod; import com.ibm.wala.shrikeCT.ConstantPoolParser.ReferenceToken; /** @@ -172,8 +173,10 @@ public abstract class Compiler implements Constants { protected abstract int allocateConstantPoolInterfaceMethod(String c, String name, String sig); - protected abstract String createHelperMethod(boolean isStatic, String sig); + protected abstract int allocateConstantPoolInvokeDynamic(BootstrapMethod b, String name, String type); + protected abstract String createHelperMethod(boolean isStatic, String sig); + private void collectInstructionInfo() { final BitSet s = new BitSet(instructions.length); final BitSet localsUsed = new BitSet(32); @@ -955,14 +958,14 @@ public abstract class Compiler implements Constants { } case OP_invokedynamic: { InvokeDynamicInstruction inv = (InvokeDynamicInstruction) instr; - String sig = inv.getMethodSignature(); + int cpIndex; - if (presetConstants != null && presetConstants == inv.getLazyConstantPool()) { cpIndex = ((InvokeDynamicInstruction.Lazy) inv).getCPIndex(); } else { - cpIndex = allocateConstantPoolInterfaceMethod(inv.getClassType(), inv.getMethodName(), sig); + cpIndex = allocateConstantPoolInvokeDynamic(inv.getBootstrap(), inv.getMethodName(), inv.getMethodSignature()); } + writeShort(curOffset, cpIndex); code[curOffset + 2] = 0; code[curOffset + 3] = 0; diff --git a/com.ibm.wala.shrike/src/com/ibm/wala/shrikeBT/InvokeDynamicInstruction.java b/com.ibm.wala.shrike/src/com/ibm/wala/shrikeBT/InvokeDynamicInstruction.java index c5c2e03e6..ae1e1ab32 100644 --- a/com.ibm.wala.shrike/src/com/ibm/wala/shrikeBT/InvokeDynamicInstruction.java +++ b/com.ibm.wala.shrike/src/com/ibm/wala/shrikeBT/InvokeDynamicInstruction.java @@ -26,7 +26,7 @@ public class InvokeDynamicInstruction extends Instruction implements IInvokeInst protected String methodName; protected String methodType; - private InvokeDynamicInstruction(short opcode, BootstrapMethod bootstrap, String methodName, String methodType) { + public InvokeDynamicInstruction(short opcode, BootstrapMethod bootstrap, String methodName, String methodType) { super(opcode); this.bootstrap = bootstrap; this.methodName = methodName; diff --git a/com.ibm.wala.shrike/src/com/ibm/wala/shrikeBT/shrikeCT/CTCompiler.java b/com.ibm.wala.shrike/src/com/ibm/wala/shrikeBT/shrikeCT/CTCompiler.java index 4c8c26a1e..bfb1e8f32 100644 --- a/com.ibm.wala.shrike/src/com/ibm/wala/shrikeBT/shrikeCT/CTCompiler.java +++ b/com.ibm.wala.shrike/src/com/ibm/wala/shrikeBT/shrikeCT/CTCompiler.java @@ -15,6 +15,7 @@ import java.util.Random; import com.ibm.wala.shrikeBT.Compiler; import com.ibm.wala.shrikeBT.MethodData; import com.ibm.wala.shrikeCT.ClassWriter; +import com.ibm.wala.shrikeCT.BootstrapMethodsReader.BootstrapMethod; import com.ibm.wala.shrikeCT.ConstantPoolParser.ReferenceToken; /** @@ -73,6 +74,11 @@ final public class CTCompiler extends Compiler { return cw.addCPMethodHandle(c); } + @Override + protected int allocateConstantPoolInvokeDynamic(BootstrapMethod b, String name, String type) { + return cw.addCPInvokeDynamic(b, name, type); + } + /** * Convert a JVM type to the internal JVM class name (e.g., Ljava/lang/Object; to java/lang/Object) * diff --git a/com.ibm.wala.shrike/src/com/ibm/wala/shrikeCT/BootstrapMethodsReader.java b/com.ibm.wala.shrike/src/com/ibm/wala/shrikeCT/BootstrapMethodsReader.java index d22f0755e..26279e969 100644 --- a/com.ibm.wala.shrike/src/com/ibm/wala/shrikeCT/BootstrapMethodsReader.java +++ b/com.ibm.wala.shrike/src/com/ibm/wala/shrikeCT/BootstrapMethodsReader.java @@ -21,7 +21,7 @@ import com.ibm.wala.shrikeCT.ClassReader.AttrIterator; public class BootstrapMethodsReader extends AttributeReader { public interface BootstrapMethod { - int invokeType(); + byte invokeType(); String methodClass(); String methodName(); String methodType(); @@ -52,7 +52,7 @@ public class BootstrapMethodsReader extends AttributeReader { final int argumentCount = cr.getUShort(attr + base + 2); entries[i] = new BootstrapMethod() { - private final int invokeType = cp.getCPHandleKind(methodHandleOffset); + private final byte invokeType = cp.getCPHandleKind(methodHandleOffset); private final String methodClass = cp.getCPHandleClass(methodHandleOffset); private final String methodName = cp.getCPHandleName(methodHandleOffset); private final String methodType = cp.getCPHandleType(methodHandleOffset); @@ -63,7 +63,7 @@ public class BootstrapMethodsReader extends AttributeReader { } @Override - public int invokeType() { + public byte invokeType() { return invokeType; } diff --git a/com.ibm.wala.shrike/src/com/ibm/wala/shrikeCT/ClassWriter.java b/com.ibm.wala.shrike/src/com/ibm/wala/shrikeCT/ClassWriter.java index fb797a9fb..a50b855d3 100644 --- a/com.ibm.wala.shrike/src/com/ibm/wala/shrikeCT/ClassWriter.java +++ b/com.ibm.wala.shrike/src/com/ibm/wala/shrikeCT/ClassWriter.java @@ -13,6 +13,7 @@ package com.ibm.wala.shrikeCT; import java.util.ArrayList; import java.util.HashMap; +import com.ibm.wala.shrikeCT.BootstrapMethodsReader.BootstrapMethod; import com.ibm.wala.shrikeCT.ConstantPoolParser.ReferenceToken; /** @@ -202,6 +203,40 @@ public class ClassWriter implements ClassConstants { } } + static class CWInvokeDynamic extends CWItem { + final private BootstrapMethod b; + + final private String n; + + final private String t; + + CWInvokeDynamic(BootstrapMethod b, String n, String t) { + this.b = b; + this.n = n; + this.t = t; + } + + @Override + public boolean equals(Object o) { + if (o instanceof CWInvokeDynamic) { + CWInvokeDynamic r = (CWInvokeDynamic) o; + return r.b.equals(b) && r.n.equals(n) && r.t.equals(t); + } else { + return false; + } + } + + @Override + public int hashCode() { + return (b.hashCode() << 10) + (n.hashCode() << 3) + t.hashCode(); + } + + @Override + byte getType() { + return CONSTANT_InvokeDynamic; + } + } + /** * Copy a constant pool from some ClassReader into this class. This must be done before any entries are allocated in this * ClassWriter's constant pool, and it can only be done once. If and only if this is done, it is safe to copy "raw" fields, @@ -247,6 +282,9 @@ public class ClassWriter implements ClassConstants { case CONSTANT_NameAndType: cachedCPEntries.put(new CWNAT(cp.getCPNATName(i), cp.getCPNATType(i)), new Integer(i)); break; + case CONSTANT_InvokeDynamic: + cachedCPEntries.put(new CWInvokeDynamic(cp.getCPDynBootstrap(i), cp.getCPDynName(i), cp.getCPDynType(i)), new Integer(i)); + break; case CONSTANT_Integer: cachedCPEntries.put(new Integer(cp.getCPInt(i)), new Integer(i)); break; @@ -433,6 +471,18 @@ public class ClassWriter implements ClassConstants { return addCPEntry(new CWNAT(n, t), 1); } + /** + * Add an InvokeDynamic to the constant pool if necessary. + * + * @param n the name + * @param t the type, in JVM format + * @return the index of a constant pool item with the right value + */ + public int addCPInvokeDynamic(BootstrapMethod b, String n, String t) { + return addCPEntry(new CWInvokeDynamic(b, n, t), 1); + } + + /** * Set the access flags for the class. */ @@ -762,6 +812,13 @@ public class ClassWriter implements ClassConstants { setUShort(buf, offset + 3, addCPUtf8(nat.t)); break; } + case CONSTANT_InvokeDynamic: { + offset = reserveBuf(5); + CWInvokeDynamic inv = (CWInvokeDynamic) item; + setUShort(buf, offset+1, inv.b.getIndexInClassFile()); + setUShort(buf, offset+3, addCPNAT(inv.n, inv.t)); + break; + } case CONSTANT_MethodHandle: { offset = reserveBuf(4); CWHandle handle = (CWHandle) item; From 4a53da36eaf99c3f4886ec2748062e6b71c983a3 Mon Sep 17 00:00:00 2001 From: Julian Dolby Date: Fri, 1 Dec 2017 20:22:37 +0800 Subject: [PATCH 26/69] fix type-o --- dependent-projects-trigger.sh | 1 - 1 file changed, 1 deletion(-) diff --git a/dependent-projects-trigger.sh b/dependent-projects-trigger.sh index 96102d711..b15919993 100644 --- a/dependent-projects-trigger.sh +++ b/dependent-projects-trigger.sh @@ -37,4 +37,3 @@ curl -s -X POST \ -d "$body" \ https://api.travis-ci.org/repo/april1989%2FIncremental_Points_to_Analysis/requests -csrRz28Xo1NDqBpcuY28 From 0ea98643f3ed23a618718b3af0fe87d489051454 Mon Sep 17 00:00:00 2001 From: Julian Dolby Date: Sun, 3 Dec 2017 11:31:29 +0800 Subject: [PATCH 27/69] revert lambdas thait cause trouble with WALA Mobile. It may be that the issue is Swing, since I think that is not on Android. --- .../src/com/ibm/wala/viz/viewer/CgPanel.java | 9 +++++++-- .../src/com/ibm/wala/viz/viewer/ChaPanel.java | 10 +++++++--- .../src/com/ibm/wala/viz/viewer/IrViewer.java | 9 +++++++-- .../src/com/ibm/wala/viz/viewer/PaPanel.java | 10 +++++++--- 4 files changed, 28 insertions(+), 10 deletions(-) diff --git a/com.ibm.wala.core/src/com/ibm/wala/viz/viewer/CgPanel.java b/com.ibm.wala.core/src/com/ibm/wala/viz/viewer/CgPanel.java index 9fd37c275..51a1b8eaa 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/viz/viewer/CgPanel.java +++ b/com.ibm.wala.core/src/com/ibm/wala/viz/viewer/CgPanel.java @@ -20,6 +20,8 @@ import javax.swing.JSplitPane; import javax.swing.JTree; import javax.swing.event.TreeExpansionEvent; import javax.swing.event.TreeExpansionListener; +import javax.swing.event.TreeSelectionEvent; +import javax.swing.event.TreeSelectionListener; import javax.swing.tree.DefaultMutableTreeNode; import javax.swing.tree.TreePath; @@ -43,7 +45,10 @@ public class CgPanel extends JSplitPane{ final IrAndSourceViewer irViewer = new IrAndSourceViewer(); this.setRightComponent(irViewer.getComponent()); - tree.addTreeSelectionListener(e -> { + tree.addTreeSelectionListener(new TreeSelectionListener() { + + @Override + public void valueChanged(TreeSelectionEvent e) { TreePath newLeadSelectionPath = e.getNewLeadSelectionPath(); if (null == newLeadSelectionPath){ return; @@ -59,8 +64,8 @@ public class CgPanel extends JSplitPane{ IR ir2 = parentNode.getIR(); irViewer.setIRAndPc(ir2, ((CallSiteReference) userObject).getProgramCounter()); } + } }); - } private JTree buildTree() { 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 1579b310a..e3cf2a96e 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 @@ -19,6 +19,8 @@ import javax.swing.JSplitPane; import javax.swing.JTree; import javax.swing.event.TreeExpansionEvent; import javax.swing.event.TreeExpansionListener; +import javax.swing.event.TreeSelectionEvent; +import javax.swing.event.TreeSelectionListener; import javax.swing.tree.DefaultMutableTreeNode; import javax.swing.tree.TreePath; @@ -42,7 +44,9 @@ public class ChaPanel extends JSplitPane { JList methodList = new JList(methodListModel); this.setRightComponent(methodList); - tree.addTreeSelectionListener(e -> { + tree.addTreeSelectionListener(new TreeSelectionListener() { + @Override + public void valueChanged(TreeSelectionEvent e) { TreePath newLeadSelectionPath = e.getNewLeadSelectionPath(); if (null == newLeadSelectionPath){ return; @@ -53,8 +57,8 @@ public class ChaPanel extends JSplitPane { for (IMethod m : klass.getDeclaredMethods()){ methodListModel.addElement(m.toString()); } - }); - + } + }); } private JTree buildTree() { 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 efc6d591f..ff0496fe3 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 @@ -24,6 +24,8 @@ import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JTextField; import javax.swing.ScrollPaneConstants; +import javax.swing.event.ListSelectionEvent; +import javax.swing.event.ListSelectionListener; import com.ibm.wala.classLoader.IMethod; import com.ibm.wala.ssa.IR; @@ -56,7 +58,10 @@ public class IrViewer extends JPanel{ ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED), BorderLayout.CENTER); - irLines.addListSelectionListener(e -> { + irLines.addListSelectionListener(new ListSelectionListener() { + + @Override + public void valueChanged(ListSelectionEvent e) { int index = irLines.getSelectedIndex(); Integer pc = lineToPc.get(index); if (pc == null) { @@ -65,7 +70,7 @@ public class IrViewer extends JPanel{ for (SelectedPcListner selectedPcListner : selectedPcListners) { selectedPcListner.valueChanged(pc); } - }); + }}); } public void setIR(IR ir) { 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 1c6114191..31c327125 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 @@ -22,6 +22,8 @@ import javax.swing.JTextField; import javax.swing.JTree; import javax.swing.event.TreeExpansionEvent; import javax.swing.event.TreeExpansionListener; +import javax.swing.event.TreeSelectionEvent; +import javax.swing.event.TreeSelectionListener; import javax.swing.tree.DefaultMutableTreeNode; import javax.swing.tree.TreeNode; import javax.swing.tree.TreePath; @@ -116,7 +118,10 @@ public class PaPanel extends JSplitPane { } }); - heapTree.addTreeSelectionListener(e -> { + heapTree.addTreeSelectionListener(new TreeSelectionListener() { + + @Override + public void valueChanged(TreeSelectionEvent e) { TreePath newLeadSelectionPath = e.getNewLeadSelectionPath(); if (null == newLeadSelectionPath){ return; @@ -157,8 +162,7 @@ public class PaPanel extends JSplitPane { } - }); - + }}); } private void initDataStructures(PointerAnalysis pa) { From da4247f92316581a14198f2d9ef8ae93878220de Mon Sep 17 00:00:00 2001 From: Julian Dolby Date: Mon, 4 Dec 2017 17:15:34 +0800 Subject: [PATCH 28/69] add HybriDroid to testing --- dependent-projects-trigger.sh | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/dependent-projects-trigger.sh b/dependent-projects-trigger.sh index b15919993..7d0d7a0c6 100644 --- a/dependent-projects-trigger.sh +++ b/dependent-projects-trigger.sh @@ -37,3 +37,11 @@ curl -s -X POST \ -d "$body" \ https://api.travis-ci.org/repo/april1989%2FIncremental_Points_to_Analysis/requests +curl -s -X POST \ + -H "Content-Type: application/json" \ + -H "Accept: application/json" \ + -H "Travis-API-Version: 3" \ + -H "Authorization: token $1" \ + -d "$body" \ + https://api.travis-ci.org/repo/SunghoLee%2FHybriDroid/requests + From b25e461bfec5d0a6d76d062d5dfac1d39531d27e Mon Sep 17 00:00:00 2001 From: Ben Liblit Date: Sun, 3 Dec 2017 16:18:23 -0600 Subject: [PATCH 29/69] Convert a few more loops into modern for-each loops --- .../java/com/ibm/wala/cast/ir/translator/AstTranslator.java | 6 +++--- .../src/com/ibm/wala/classLoader/ShrikeBTMethod.java | 4 ++-- .../src/com/ibm/wala/shrike/bench/AddBytecodeDebug.java | 4 ++-- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ir/translator/AstTranslator.java b/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ir/translator/AstTranslator.java index 0d7735393..bb14c93a3 100644 --- a/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ir/translator/AstTranslator.java +++ b/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ir/translator/AstTranslator.java @@ -2918,9 +2918,9 @@ public abstract class AstTranslator extends CAstVisitor 0) { - allExposedUses.add(instructionLexicalUse[j]); + for (int element : instructionLexicalUse) { + if (element > 0) { + allExposedUses.add(element); } } } diff --git a/com.ibm.wala.core/src/com/ibm/wala/classLoader/ShrikeBTMethod.java b/com.ibm.wala.core/src/com/ibm/wala/classLoader/ShrikeBTMethod.java index 3d91ca36a..19f8a5407 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/classLoader/ShrikeBTMethod.java +++ b/com.ibm.wala.core/src/com/ibm/wala/classLoader/ShrikeBTMethod.java @@ -843,8 +843,8 @@ public abstract class ShrikeBTMethod implements IMethod, BytecodeConstants { HashSet result = HashSetFactory.make(10); ClassLoaderReference loader = getReference().getDeclaringClass().getClassLoader(); for (ExceptionHandler[] handler : handlers) { - for (int j = 0; j < handler.length; j++) { - TypeReference t = ShrikeUtil.makeTypeReference(loader, handler[j].getCatchClass()); + for (ExceptionHandler element : handler) { + TypeReference t = ShrikeUtil.makeTypeReference(loader, element.getCatchClass()); if (t == null) { t = TypeReference.JavaLangThrowable; } diff --git a/com.ibm.wala.shrike/src/com/ibm/wala/shrike/bench/AddBytecodeDebug.java b/com.ibm.wala.shrike/src/com/ibm/wala/shrike/bench/AddBytecodeDebug.java index fe43e785a..8142db93c 100644 --- a/com.ibm.wala.shrike/src/com/ibm/wala/shrike/bench/AddBytecodeDebug.java +++ b/com.ibm.wala.shrike/src/com/ibm/wala/shrike/bench/AddBytecodeDebug.java @@ -74,8 +74,8 @@ public class AddBytecodeDebug { ExceptionHandler[][] handlers = me.getHandlers(); boolean[] putDumperAt = new boolean[handlers.length]; for (ExceptionHandler[] handler : handlers) { - for (int j = 0; j < handler.length; j++) { - int offset = handler[j].getHandler(); + for (ExceptionHandler element : handler) { + int offset = element.getHandler(); if (!putDumperAt[offset]) { putDumperAt[offset] = true; me.insertBefore(offset, new MethodEditor.Patch() { From 544a71ae72751be7ecc6415cf98343ba09c2b108 Mon Sep 17 00:00:00 2001 From: Ben Liblit Date: Mon, 4 Dec 2017 01:37:15 -0600 Subject: [PATCH 30/69] Remove type arguments that Java 1.7+ can infer for us --- .../.settings/org.eclipse.jdt.core.prefs | 2 +- .../src/javaonepointfive/BasicsGenerics.java | 2 +- .../CustomGenericsAndFields.java | 6 +-- .../src/javaonepointfive/GenericArrays.java | 2 +- .../GenericMemberClasses.java | 2 +- .../javaonepointfive/GenericSuperSink.java | 4 +- .../src/javaonepointfive/MethodGenerics.java | 2 +- .../src/javaonepointfive/Wildcards.java | 4 +- .../.settings/org.eclipse.jdt.core.prefs | 2 +- .../arraybounds/ArrayBoundsGraph.java | 8 +-- .../arraybounds/ArrayBoundsGraphBuilder.java | 8 +-- .../hypergraph/DirectedHyperEdge.java | 4 +- .../arraybounds/hypergraph/HyperNode.java | 2 +- .../Exception2BitvectorTransformer.java | 2 +- .../exceptionanalysis/ExceptionAnalysis.java | 2 +- .../IntraproceduralExceptionAnalysis.java | 2 +- .../IntraproceduralNullPointerAnalysis.java | 4 +- .../analysis/pointers/BasicHeapGraph.java | 10 ++-- .../wala/analysis/pointers/HeapGraphImpl.java | 2 +- .../AbstractReflectionInterpreter.java | 6 +-- .../ClassFactoryContextInterpreter.java | 4 +- .../ClassNewInstanceContextInterpreter.java | 2 +- .../analysis/reflection/CloneInterpreter.java | 6 +-- .../reflection/FactoryBypassInterpreter.java | 2 +- .../reflection/GetClassContextInterpeter.java | 2 +- .../GetMethodContextInterpreter.java | 4 +- .../reflection/GetMethodContextSelector.java | 2 +- .../JavaLangClassContextInterpreter.java | 6 +-- .../reflection/java7/MethodHandles.java | 6 +-- .../stackMachine/AbstractIntStackMachine.java | 2 +- .../src/com/ibm/wala/cfg/AbstractCFG.java | 22 ++++---- .../src/com/ibm/wala/cfg/InducedCFG.java | 6 +-- .../src/com/ibm/wala/cfg/ShrikeCFG.java | 4 +- .../wala/cfg/cdg/ControlDependenceGraph.java | 2 +- .../ibm/wala/cfg/exc/inter/AnalysisUtil.java | 2 +- .../inter/InterprocNullPointerAnalysis.java | 14 ++--- .../cfg/exc/inter/IntraprocAnalysisState.java | 6 +-- .../intra/ExplodedCFGNullPointerAnalysis.java | 2 +- .../intra/IntraprocNullPointerAnalysis.java | 16 +++--- .../ibm/wala/cfg/exc/intra/MutableCFG.java | 10 ++-- .../cfg/exc/intra/NullPointerFrameWork.java | 2 +- .../wala/cfg/exc/intra/ParameterState.java | 2 +- .../exc/intra/SSACFGNullPointerAnalysis.java | 2 +- .../wala/classLoader/AbstractURLModule.java | 2 +- .../ibm/wala/classLoader/BytecodeClass.java | 20 +++---- .../com/ibm/wala/classLoader/CodeScanner.java | 16 +++--- .../ibm/wala/classLoader/CompoundModule.java | 4 +- .../com/ibm/wala/classLoader/FileModule.java | 2 +- .../ibm/wala/classLoader/JavaLanguage.java | 2 +- .../ibm/wala/classLoader/ShrikeBTMethod.java | 2 +- .../com/ibm/wala/classLoader/ShrikeClass.java | 4 +- .../wala/client/AbstractAnalysisEngine.java | 2 +- .../dataflow/IFDS/BackwardsSupergraph.java | 6 +-- .../IFDS/BoundedPartiallyBalancedSolver.java | 2 +- .../IFDS/BoundedTabulationSolver.java | 2 +- .../ibm/wala/dataflow/IFDS/CallFlowEdges.java | 4 +- .../wala/dataflow/IFDS/ICFGSupergraph.java | 4 +- .../wala/dataflow/IFDS/LocalPathEdges.java | 8 +-- .../wala/dataflow/IFDS/LocalSummaryEdges.java | 2 +- .../PartiallyBalancedTabulationSolver.java | 2 +- .../com/ibm/wala/dataflow/IFDS/PathEdge.java | 2 +- .../wala/dataflow/IFDS/TabulationSolver.java | 6 +-- .../alg/DemandRefinementPointsTo.java | 12 ++--- .../demandpa/alg/SimpleDemandPointsTo.java | 2 +- .../alg/statemachine/DummyStateMachine.java | 2 +- .../flowgraph/AbstractDemandFlowGraph.java | 8 +-- .../demandpa/flowgraph/AbstractFlowGraph.java | 8 +-- .../demandpa/util/PABasedMemoryAccessMap.java | 14 ++--- .../demandpa/util/SimpleMemoryAccessMap.java | 2 +- .../ibm/wala/ipa/callgraph/AnalysisScope.java | 10 ++-- .../callgraph/CallGraphTransitiveClosure.java | 6 +-- .../ibm/wala/ipa/callgraph/ContextItem.java | 2 +- .../wala/ipa/callgraph/cha/CHACallGraph.java | 10 ++-- .../callgraph/impl/AbstractRootMethod.java | 6 +-- .../ipa/callgraph/impl/BasicCallGraph.java | 4 +- .../ipa/callgraph/impl/ExplicitCallGraph.java | 16 +++--- .../ipa/callgraph/impl/PartialCallGraph.java | 2 +- .../propagation/AbstractPointerAnalysis.java | 2 +- .../callgraph/propagation/AllocationSite.java | 4 +- .../propagation/AllocationSiteInNode.java | 2 +- .../AllocationSiteInNodeFactory.java | 2 +- .../propagation/ClassBasedInstanceKeys.java | 8 +-- .../propagation/ConcreteTypeKey.java | 4 +- .../propagation/PointerAnalysisImpl.java | 18 +++---- .../callgraph/propagation/PointsToMap.java | 4 +- .../propagation/PropagationGraph.java | 18 +++---- .../propagation/PropagationSystem.java | 2 +- .../SSAPropagationCallGraphBuilder.java | 4 +- .../SmushedAllocationSiteInNode.java | 4 +- .../SmushedAllocationSiteInstanceKeys.java | 2 +- .../propagation/cfa/ZeroXInstanceKeys.java | 2 +- .../rta/TypeBasedPointerAnalysis.java | 2 +- .../callgraph/pruned/CallGraphPruning.java | 10 ++-- .../ipa/callgraph/pruned/PrunedCallGraph.java | 14 ++--- .../ipa/cfg/AbstractInterproceduralCFG.java | 54 +++++++++---------- .../ibm/wala/ipa/cfg/ExceptionPrunedCFG.java | 2 +- .../src/com/ibm/wala/ipa/cfg/PrunedCFG.java | 24 ++++----- .../filter/ArrayOutOfBoundFilter.java | 2 +- .../filter/NullPointerExceptionFilter.java | 2 +- ...ombinedInterproceduralExceptionFilter.java | 2 +- .../com/ibm/wala/ipa/cha/ClassHierarchy.java | 4 +- .../src/com/ibm/wala/ipa/modref/GenReach.java | 2 +- .../src/com/ibm/wala/ipa/modref/ModRef.java | 2 +- .../wala/ipa/modref/ModRefFieldAccess.java | 14 ++--- .../ibm/wala/ipa/slicer/HeapReachingDefs.java | 20 +++---- .../src/com/ibm/wala/ipa/slicer/PDG.java | 18 +++---- .../ipa/slicer/ReachabilityFunctions.java | 2 +- .../src/com/ibm/wala/ipa/slicer/SDG.java | 4 +- .../ibm/wala/ipa/slicer/SDGSupergraph.java | 2 +- .../src/com/ibm/wala/ipa/slicer/Slicer.java | 6 +-- .../summaries/LambdaMethodTargetSelector.java | 2 +- .../ipa/summaries/LambdaSummaryClass.java | 2 +- .../ibm/wala/ipa/summaries/MethodSummary.java | 2 +- .../ipa/summaries/VolatileMethodSummary.java | 4 +- .../src/com/ibm/wala/ssa/DefUse.java | 2 +- .../src/com/ibm/wala/ssa/IR.java | 4 +- .../src/com/ibm/wala/ssa/SSACFG.java | 20 +++---- .../ibm/wala/ssa/ShrikeIndirectionData.java | 6 +-- .../analysis/ExplodedControlFlowGraph.java | 14 ++--- .../wala/types/annotations/Annotation.java | 2 +- .../wala/types/generics/ClassSignature.java | 2 +- .../types/generics/FormalTypeParameter.java | 4 +- .../ibm/wala/types/generics/TypeArgument.java | 2 +- .../wala/types/generics/TypeSignature.java | 2 +- .../ibm/wala/util/PrimitiveAssignability.java | 6 +-- .../com/ibm/wala/util/ref/CacheReference.java | 4 +- .../ibm/wala/util/ref/ReferenceCleanser.java | 4 +- .../wala/util/ssa/InstructionByIIndexMap.java | 12 ++--- .../ibm/wala/util/ssa/ParameterAccessor.java | 10 ++-- .../ibm/wala/util/ssa/SSAValueManager.java | 14 ++--- .../ibm/wala/util/strings/StringStuff.java | 2 +- .../com/ibm/wala/util/warnings/Warnings.java | 2 +- .../src/com/ibm/wala/viz/PDFViewUtil.java | 2 +- .../src/com/ibm/wala/viz/viewer/CgPanel.java | 2 +- .../src/com/ibm/wala/viz/viewer/ChaPanel.java | 2 +- .../src/com/ibm/wala/viz/viewer/IrViewer.java | 4 +- .../src/com/ibm/wala/viz/viewer/PaPanel.java | 6 +-- .../com/ibm/wala/viz/viewer/SourceViewer.java | 2 +- .../.settings/org.eclipse.jdt.core.prefs | 2 +- .../callGraph/DalvikCallGraphTestBase.java | 5 +- .../.settings/org.eclipse.jdt.core.prefs | 2 +- .../org/scandroid/flow/OutflowAnalysis.java | 12 ++--- .../.settings/org.eclipse.jdt.core.prefs | 2 +- .../ibm/wala/util/graph/GraphIntegrity.java | 4 +- 144 files changed, 413 insertions(+), 414 deletions(-) diff --git a/com.ibm.wala.cast.java.test.data/.settings/org.eclipse.jdt.core.prefs b/com.ibm.wala.cast.java.test.data/.settings/org.eclipse.jdt.core.prefs index 1e05aeb71..af9c1751e 100644 --- a/com.ibm.wala.cast.java.test.data/.settings/org.eclipse.jdt.core.prefs +++ b/com.ibm.wala.cast.java.test.data/.settings/org.eclipse.jdt.core.prefs @@ -80,7 +80,7 @@ org.eclipse.jdt.core.compiler.problem.potentiallyUnclosedCloseable=error org.eclipse.jdt.core.compiler.problem.rawTypeReference=ignore org.eclipse.jdt.core.compiler.problem.redundantNullAnnotation=warning org.eclipse.jdt.core.compiler.problem.redundantNullCheck=ignore -org.eclipse.jdt.core.compiler.problem.redundantSpecificationOfTypeArguments=ignore +org.eclipse.jdt.core.compiler.problem.redundantSpecificationOfTypeArguments=error org.eclipse.jdt.core.compiler.problem.redundantSuperinterface=error org.eclipse.jdt.core.compiler.problem.reportMethodCanBePotentiallyStatic=ignore org.eclipse.jdt.core.compiler.problem.reportMethodCanBeStatic=ignore 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 8a1f1ce21..252ff67ad 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 @@ -42,7 +42,7 @@ import java.util.Iterator; public class BasicsGenerics { - static ArrayList strs = new ArrayList(); + static ArrayList strs = new ArrayList<>(); static ArrayList ints = new ArrayList<>(); public BasicsGenerics() { diff --git a/com.ibm.wala.cast.java.test.data/src/javaonepointfive/CustomGenericsAndFields.java b/com.ibm.wala.cast.java.test.data/src/javaonepointfive/CustomGenericsAndFields.java index 41d953815..f81222fab 100644 --- a/com.ibm.wala.cast.java.test.data/src/javaonepointfive/CustomGenericsAndFields.java +++ b/com.ibm.wala.cast.java.test.data/src/javaonepointfive/CustomGenericsAndFields.java @@ -95,7 +95,7 @@ class MyGeneric> { } public class CustomGenericsAndFields { - static ConcreteGeneric2 cg2 = new ConcreteGeneric2(); + static ConcreteGeneric2 cg2 = new ConcreteGeneric2<>(); static public ConcreteGeneric2 cg2WithSideEffects() { System.out.println("look at me! I'm a side effect!"); @@ -109,7 +109,7 @@ public class CustomGenericsAndFields { private void doit() { // Simple: concrete generic - ConcreteGeneric absinthe = new ConcreteGeneric(); + ConcreteGeneric absinthe = new ConcreteGeneric<>(); IGeneric rye = absinthe; String foo = rye.bar("hello", "world"); System.out.println(absinthe.foo() + foo); @@ -118,7 +118,7 @@ public class CustomGenericsAndFields { String thrownaway = cg2.bar("a","b"); cg2.setFoo("real one"); - MyGeneric> mygeneric = new MyGeneric>("useless",cg2); + MyGeneric> mygeneric = new MyGeneric<>("useless",cg2); String x = mygeneric.doFoo(); System.out.println(x); String y = cg2.x; diff --git a/com.ibm.wala.cast.java.test.data/src/javaonepointfive/GenericArrays.java b/com.ibm.wala.cast.java.test.data/src/javaonepointfive/GenericArrays.java index fb22c9c5d..02abb9175 100644 --- a/com.ibm.wala.cast.java.test.data/src/javaonepointfive/GenericArrays.java +++ b/com.ibm.wala.cast.java.test.data/src/javaonepointfive/GenericArrays.java @@ -49,7 +49,7 @@ public class GenericArrays { List[] lsa = new List[10]; // ok, array of unbounded wildcard type Object o = lsa; Object[] oa = (Object[]) o; - List li = new ArrayList(); + List li = new ArrayList<>(); li.add(new Integer(3)); oa[1] = li; // correct String s = (String) lsa[1].get(0); // run time error, but cast is explicit diff --git a/com.ibm.wala.cast.java.test.data/src/javaonepointfive/GenericMemberClasses.java b/com.ibm.wala.cast.java.test.data/src/javaonepointfive/GenericMemberClasses.java index 2bfedf8d7..79e3d8710 100644 --- a/com.ibm.wala.cast.java.test.data/src/javaonepointfive/GenericMemberClasses.java +++ b/com.ibm.wala.cast.java.test.data/src/javaonepointfive/GenericMemberClasses.java @@ -64,7 +64,7 @@ public class GenericMemberClasses } } public static void main(String args[]) { - (new GenericMemberClasses()).doit(); + (new GenericMemberClasses<>()).doit(); } private void doit() { diff --git a/com.ibm.wala.cast.java.test.data/src/javaonepointfive/GenericSuperSink.java b/com.ibm.wala.cast.java.test.data/src/javaonepointfive/GenericSuperSink.java index e1f03d1d9..39a88cfb3 100644 --- a/com.ibm.wala.cast.java.test.data/src/javaonepointfive/GenericSuperSink.java +++ b/com.ibm.wala.cast.java.test.data/src/javaonepointfive/GenericSuperSink.java @@ -47,14 +47,14 @@ public class GenericSuperSink { private void doit() { Collection sink; - Collection cs = new ArrayList(); + Collection cs = new ArrayList<>(); cs.add("hello"); sink = new ArrayList(); sink.add(cs.iterator().next()); System.out.println(sink); - sink = new ArrayList(); + sink = new ArrayList<>(); sink.add(cs.iterator().next()); System.out.println(sink); } diff --git a/com.ibm.wala.cast.java.test.data/src/javaonepointfive/MethodGenerics.java b/com.ibm.wala.cast.java.test.data/src/javaonepointfive/MethodGenerics.java index 27e4d4132..49230add5 100644 --- a/com.ibm.wala.cast.java.test.data/src/javaonepointfive/MethodGenerics.java +++ b/com.ibm.wala.cast.java.test.data/src/javaonepointfive/MethodGenerics.java @@ -55,7 +55,7 @@ public class MethodGenerics { } private void doit() { - ArrayList list = new ArrayList(); + ArrayList list = new ArrayList<>(); String array[] = new String[] { "coucou monde", "ciao mondo", "guten tag welt", "hola mundo", "shalom olam" }; fromArrayToCollection(array, list); System.out.println(list); diff --git a/com.ibm.wala.cast.java.test.data/src/javaonepointfive/Wildcards.java b/com.ibm.wala.cast.java.test.data/src/javaonepointfive/Wildcards.java index 639feecea..285485966 100644 --- a/com.ibm.wala.cast.java.test.data/src/javaonepointfive/Wildcards.java +++ b/com.ibm.wala.cast.java.test.data/src/javaonepointfive/Wildcards.java @@ -64,14 +64,14 @@ public class Wildcards { } private void doit() { - ArrayList e = new ArrayList(); + ArrayList e = new ArrayList<>(); e.add("hello"); e.add("goodbye"); printCollection(e); printCollection1(e); printCollection2(e); - ArrayList e3 = new ArrayList(); + ArrayList e3 = new ArrayList<>(); e3.add(new Integer(123)); e3.add(new Integer(42)); printCollection(e3); diff --git a/com.ibm.wala.core/.settings/org.eclipse.jdt.core.prefs b/com.ibm.wala.core/.settings/org.eclipse.jdt.core.prefs index 5c09b1310..7b096f35e 100644 --- a/com.ibm.wala.core/.settings/org.eclipse.jdt.core.prefs +++ b/com.ibm.wala.core/.settings/org.eclipse.jdt.core.prefs @@ -91,7 +91,7 @@ org.eclipse.jdt.core.compiler.problem.potentiallyUnclosedCloseable=warning org.eclipse.jdt.core.compiler.problem.rawTypeReference=ignore org.eclipse.jdt.core.compiler.problem.redundantNullAnnotation=error org.eclipse.jdt.core.compiler.problem.redundantNullCheck=error -org.eclipse.jdt.core.compiler.problem.redundantSpecificationOfTypeArguments=ignore +org.eclipse.jdt.core.compiler.problem.redundantSpecificationOfTypeArguments=error org.eclipse.jdt.core.compiler.problem.redundantSuperinterface=ignore org.eclipse.jdt.core.compiler.problem.reportMethodCanBePotentiallyStatic=ignore org.eclipse.jdt.core.compiler.problem.reportMethodCanBeStatic=error diff --git a/com.ibm.wala.core/src/com/ibm/wala/analysis/arraybounds/ArrayBoundsGraph.java b/com.ibm.wala.core/src/com/ibm/wala/analysis/arraybounds/ArrayBoundsGraph.java index f74267ba3..18305a197 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/analysis/arraybounds/ArrayBoundsGraph.java +++ b/com.ibm.wala.core/src/com/ibm/wala/analysis/arraybounds/ArrayBoundsGraph.java @@ -141,7 +141,7 @@ public class ArrayBoundsGraph extends DirectedHyperGraph { final EdgeWeight edgeWeight = new AdditiveEdgeWeight(weight); - final DirectedHyperEdge edge = new DirectedHyperEdge(); + final DirectedHyperEdge edge = new DirectedHyperEdge<>(); edge.getDestination().add(dstNode); edge.getSource().add(srcNode); edge.setWeight(edgeWeight); @@ -193,7 +193,7 @@ public class ArrayBoundsGraph extends DirectedHyperGraph { public HyperNode addNode(Integer value) { HyperNode result; if (!this.getNodes().keySet().contains(value)) { - result = new HyperNode(value); + result = new HyperNode<>(value); this.getNodes().put(value, result); } else { result = this.getNodes().get(value); @@ -227,7 +227,7 @@ public class ArrayBoundsGraph extends DirectedHyperGraph { throw new AssertionError("Source variables should only be created once."); } - SoftFinalHyperNode node = new SoftFinalHyperNode(var); + SoftFinalHyperNode node = new SoftFinalHyperNode<>(var); this.getNodes().put(var, node); // final HyperNode varNode = this.getNodes().get(var); @@ -276,7 +276,7 @@ public class ArrayBoundsGraph extends DirectedHyperGraph { public void markAsArrayAccess(Integer array, Integer index) { Set indices; if (!this.arrayAccess.containsKey(array)) { - indices = new HashSet(); + indices = new HashSet<>(); this.arrayAccess.put(array, indices); } else { indices = this.arrayAccess.get(array); diff --git a/com.ibm.wala.core/src/com/ibm/wala/analysis/arraybounds/ArrayBoundsGraphBuilder.java b/com.ibm.wala.core/src/com/ibm/wala/analysis/arraybounds/ArrayBoundsGraphBuilder.java index 42ccea37e..02467097e 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/analysis/arraybounds/ArrayBoundsGraphBuilder.java +++ b/com.ibm.wala.core/src/com/ibm/wala/analysis/arraybounds/ArrayBoundsGraphBuilder.java @@ -46,7 +46,7 @@ public class ArrayBoundsGraphBuilder { public ArrayBoundsGraphBuilder(IR ir) { this.ir = ir; - this.foundVariables = new HashSet(); + this.foundVariables = new HashSet<>(); this.defUse = new DefUse(ir); this.arrayReferenceInstructions = new HashSet<>(); @@ -210,7 +210,7 @@ public class ArrayBoundsGraphBuilder { * @param graph */ private static void collapseNonPhiEdges(ArrayBoundsGraph graph) { - final Map, DirectedHyperEdge> inEdges = new HashMap, DirectedHyperEdge>(); + final Map, DirectedHyperEdge> inEdges = new HashMap<>(); final Set> edges = new HashSet<>(); edges.addAll(graph.getEdges()); for (final DirectedHyperEdge edge : edges) { @@ -323,7 +323,7 @@ public class ArrayBoundsGraphBuilder { } private void exploreIr() { - final Set variablesUsedAsIndex = new HashSet(); + final Set variablesUsedAsIndex = new HashSet<>(); for (final Set variables : this.lowerBoundGraph .getArrayAccess().values()) { variablesUsedAsIndex.addAll(variables); @@ -386,7 +386,7 @@ public class ArrayBoundsGraphBuilder { * the given variable. */ private void startDFS(int index) { - final Stack todo = new Stack(); + final Stack todo = new Stack<>(); todo.push(index); while (!todo.isEmpty()) { diff --git a/com.ibm.wala.core/src/com/ibm/wala/analysis/arraybounds/hypergraph/DirectedHyperEdge.java b/com.ibm.wala.core/src/com/ibm/wala/analysis/arraybounds/hypergraph/DirectedHyperEdge.java index ce7fc1bf1..a0dd4aaac 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/analysis/arraybounds/hypergraph/DirectedHyperEdge.java +++ b/com.ibm.wala.core/src/com/ibm/wala/analysis/arraybounds/hypergraph/DirectedHyperEdge.java @@ -21,8 +21,8 @@ public class DirectedHyperEdge { private EdgeWeight weight; public DirectedHyperEdge() { - this.tail = new HashSet>(); - this.head = new HashSet>(); + this.tail = new HashSet<>(); + this.head = new HashSet<>(); } public Set> getDestination() { diff --git a/com.ibm.wala.core/src/com/ibm/wala/analysis/arraybounds/hypergraph/HyperNode.java b/com.ibm.wala.core/src/com/ibm/wala/analysis/arraybounds/hypergraph/HyperNode.java index 758da2695..879bbae28 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/analysis/arraybounds/hypergraph/HyperNode.java +++ b/com.ibm.wala.core/src/com/ibm/wala/analysis/arraybounds/hypergraph/HyperNode.java @@ -31,7 +31,7 @@ public class HyperNode { public HyperNode(T value) { this.value = value; - this.outEdges = new HashSet>(); + this.outEdges = new HashSet<>(); this.weight = Weight.NOT_SET; this.newWeight = Weight.NOT_SET; } diff --git a/com.ibm.wala.core/src/com/ibm/wala/analysis/exceptionanalysis/Exception2BitvectorTransformer.java b/com.ibm.wala.core/src/com/ibm/wala/analysis/exceptionanalysis/Exception2BitvectorTransformer.java index 66ce741e6..de9e8aeb3 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/analysis/exceptionanalysis/Exception2BitvectorTransformer.java +++ b/com.ibm.wala.core/src/com/ibm/wala/analysis/exceptionanalysis/Exception2BitvectorTransformer.java @@ -37,7 +37,7 @@ public class Exception2BitvectorTransformer { private void createValues(Set exceptions) { TypeReference[] exceptionsArray = new TypeReference[exceptions.size()]; exceptions.toArray(exceptionsArray); - values = new ObjectArrayMapping(exceptionsArray); + values = new ObjectArrayMapping<>(exceptionsArray); } public BitVector computeBitVector(Set exceptions) { diff --git a/com.ibm.wala.core/src/com/ibm/wala/analysis/exceptionanalysis/ExceptionAnalysis.java b/com.ibm.wala.core/src/com/ibm/wala/analysis/exceptionanalysis/ExceptionAnalysis.java index e7fa58180..af1933ef5 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/analysis/exceptionanalysis/ExceptionAnalysis.java +++ b/com.ibm.wala.core/src/com/ibm/wala/analysis/exceptionanalysis/ExceptionAnalysis.java @@ -93,7 +93,7 @@ public class ExceptionAnalysis { ExceptionTransferFunctionProvider transferFunctionProvider = new ExceptionTransferFunctionProvider(intraResult, callgraph, transformer); - Graph graph = new InvertedGraph(callgraph); + Graph graph = new InvertedGraph<>(callgraph); BitVectorFramework problem = new BitVectorFramework<>(graph, transferFunctionProvider, transformer.getValues()); diff --git a/com.ibm.wala.core/src/com/ibm/wala/analysis/exceptionanalysis/IntraproceduralExceptionAnalysis.java b/com.ibm.wala.core/src/com/ibm/wala/analysis/exceptionanalysis/IntraproceduralExceptionAnalysis.java index 3258ad3df..02286ff3e 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/analysis/exceptionanalysis/IntraproceduralExceptionAnalysis.java +++ b/com.ibm.wala.core/src/com/ibm/wala/analysis/exceptionanalysis/IntraproceduralExceptionAnalysis.java @@ -263,7 +263,7 @@ public class IntraproceduralExceptionAnalysis { * given block. */ private Set collectCaughtExceptions(ISSABasicBlock block) { - LinkedHashSet result = new LinkedHashSet(); + LinkedHashSet result = new LinkedHashSet<>(); List exceptionalSuccessors = ir.getControlFlowGraph().getExceptionalSuccessors(block); for (ISSABasicBlock succ : exceptionalSuccessors) { if (succ.isCatchBlock()) { diff --git a/com.ibm.wala.core/src/com/ibm/wala/analysis/nullpointer/IntraproceduralNullPointerAnalysis.java b/com.ibm.wala.core/src/com/ibm/wala/analysis/nullpointer/IntraproceduralNullPointerAnalysis.java index df28a67d5..b4811d419 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/analysis/nullpointer/IntraproceduralNullPointerAnalysis.java +++ b/com.ibm.wala.core/src/com/ibm/wala/analysis/nullpointer/IntraproceduralNullPointerAnalysis.java @@ -36,9 +36,9 @@ public class IntraproceduralNullPointerAnalysis { final int maxVarNum = ir.getSymbolTable().getMaxValueNumber(); SSACFG cfg = ir.getControlFlowGraph(); - final NullPointerFrameWork problem = new NullPointerFrameWork( + final NullPointerFrameWork problem = new NullPointerFrameWork<>( cfg, ir); - this.solver = new NullPointerSolver(problem, maxVarNum, + this.solver = new NullPointerSolver<>(problem, maxVarNum, ir, cfg.entry()); try { this.solver.solve(NO_PROGRESS_MONITOR); 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 1d18ec758..b0ac41d0c 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 @@ -78,7 +78,7 @@ public class BasicHeapGraph extends HeapGraphImpl { final NumberedNodeManager nodeMgr = new NumberedNodeManager() { @Override public Iterator iterator() { - return new CompoundIterator(pointerKeys.iterator(), P.getInstanceKeyMapping().iterator()); + return new CompoundIterator<>(pointerKeys.iterator(), P.getInstanceKeyMapping().iterator()); } @Override @@ -130,7 +130,7 @@ public class BasicHeapGraph extends HeapGraphImpl { @Override public Iterator iterateNodes(IntSet s) { - return new NumberedNodeIterator(s, this); + return new NumberedNodeIterator<>(s, this); } }; @@ -146,7 +146,7 @@ public class BasicHeapGraph extends HeapGraphImpl { if (p == null) { return EmptyIterator.instance(); } else { - return new IntMapIterator(p.intIterator(), toNode); + return new IntMapIterator<>(p.intIterator(), toNode); } } @@ -174,7 +174,7 @@ public class BasicHeapGraph extends HeapGraphImpl { return EmptyIterator.instance(); } SparseIntSet s = factory.make(succ); - return new IntMapIterator(s.intIterator(), toNode); + return new IntMapIterator<>(s.intIterator(), toNode); } @Override @@ -332,7 +332,7 @@ public class BasicHeapGraph extends HeapGraphImpl { */ private void computePredecessorsForLocals(NumberedNodeManager nodeManager, BasicNaturalRelation R) { - ArrayList list = new ArrayList(); + ArrayList list = new ArrayList<>(); for (Object n : nodeManager) { if (n instanceof LocalPointerKey) { list.add((LocalPointerKey) n); diff --git a/com.ibm.wala.core/src/com/ibm/wala/analysis/pointers/HeapGraphImpl.java b/com.ibm.wala.core/src/com/ibm/wala/analysis/pointers/HeapGraphImpl.java index f7ad0ceac..a587944b1 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/analysis/pointers/HeapGraphImpl.java +++ b/com.ibm.wala.core/src/com/ibm/wala/analysis/pointers/HeapGraphImpl.java @@ -46,7 +46,7 @@ public abstract class HeapGraphImpl implements HeapGraph< @Override public Iterator iterateNodes(IntSet s) { - return new NumberedNodeIterator(s, this); + return new NumberedNodeIterator<>(s, this); } @Override diff --git a/com.ibm.wala.core/src/com/ibm/wala/analysis/reflection/AbstractReflectionInterpreter.java b/com.ibm.wala.core/src/com/ibm/wala/analysis/reflection/AbstractReflectionInterpreter.java index d2b18469f..50359a84c 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/analysis/reflection/AbstractReflectionInterpreter.java +++ b/com.ibm.wala.core/src/com/ibm/wala/analysis/reflection/AbstractReflectionInterpreter.java @@ -176,17 +176,17 @@ public abstract class AbstractReflectionInterpreter implements SSAContextInterpr /** * List of synthetic allocation statements we model for this specialized instance */ - final protected ArrayList allocations = new ArrayList(); + final protected ArrayList allocations = new ArrayList<>(); /** * List of synthetic invoke instructions we model for this specialized instance. */ - final protected ArrayList calls = new ArrayList(); + final protected ArrayList calls = new ArrayList<>(); /** * List of all instructions */ - protected final ArrayList allInstructions = new ArrayList(); + protected final ArrayList allInstructions = new ArrayList<>(); private final SSAInstructionFactory insts = declaringClass.getClassLoader().getInstructionFactory(); diff --git a/com.ibm.wala.core/src/com/ibm/wala/analysis/reflection/ClassFactoryContextInterpreter.java b/com.ibm.wala.core/src/com/ibm/wala/analysis/reflection/ClassFactoryContextInterpreter.java index 1d11b9c73..9e64176c6 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/analysis/reflection/ClassFactoryContextInterpreter.java +++ b/com.ibm.wala.core/src/com/ibm/wala/analysis/reflection/ClassFactoryContextInterpreter.java @@ -115,7 +115,7 @@ public class ClassFactoryContextInterpreter implements SSAContextInterpreter { JavaTypeContext context = (JavaTypeContext) node.getContext(); TypeReference tr = context.getType().getTypeReference(); if (tr != null) { - return new NonNullSingletonIterator(NewSiteReference.make(0, tr)); + return new NonNullSingletonIterator<>(NewSiteReference.make(0, tr)); } return EmptyIterator.instance(); } @@ -131,7 +131,7 @@ public class ClassFactoryContextInterpreter implements SSAContextInterpreter { private static SSAInstruction[] makeStatements(JavaTypeContext context) { SSAInstructionFactory insts = context.getType().getType().getClassLoader().getInstructionFactory(); - ArrayList statements = new ArrayList(); + ArrayList statements = new ArrayList<>(); // vn1 is the string parameter int retValue = 2; TypeReference tr = context.getType().getTypeReference(); diff --git a/com.ibm.wala.core/src/com/ibm/wala/analysis/reflection/ClassNewInstanceContextInterpreter.java b/com.ibm.wala.core/src/com/ibm/wala/analysis/reflection/ClassNewInstanceContextInterpreter.java index fc33657f1..c42f31fc5 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/analysis/reflection/ClassNewInstanceContextInterpreter.java +++ b/com.ibm.wala.core/src/com/ibm/wala/analysis/reflection/ClassNewInstanceContextInterpreter.java @@ -127,7 +127,7 @@ public class ClassNewInstanceContextInterpreter extends AbstractReflectionInterp JavaTypeContext context = (JavaTypeContext) node.getContext(); TypeReference tr = context.getType().getTypeReference(); if (tr != null) { - return new NonNullSingletonIterator(NewSiteReference.make(0, tr)); + return new NonNullSingletonIterator<>(NewSiteReference.make(0, tr)); } return EmptyIterator.instance(); } diff --git a/com.ibm.wala.core/src/com/ibm/wala/analysis/reflection/CloneInterpreter.java b/com.ibm.wala.core/src/com/ibm/wala/analysis/reflection/CloneInterpreter.java index 01224d1fc..d92bb0228 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/analysis/reflection/CloneInterpreter.java +++ b/com.ibm.wala.core/src/com/ibm/wala/analysis/reflection/CloneInterpreter.java @@ -141,13 +141,13 @@ public class CloneInterpreter implements SSAContextInterpreter { } assert understands(node); IClass cls = ContextUtil.getConcreteClassFromContext(node.getContext()); - return new NonNullSingletonIterator(NewSiteReference.make(NEW_PC, cls.getReference())); + return new NonNullSingletonIterator<>(NewSiteReference.make(NEW_PC, cls.getReference())); } @Override public Iterator iterateCallSites(CGNode node) { assert understands(node); - return new NonNullSingletonIterator(ARRAYCOPY_SITE); + return new NonNullSingletonIterator<>(ARRAYCOPY_SITE); } /** @@ -156,7 +156,7 @@ public class CloneInterpreter implements SSAContextInterpreter { private SSAInstruction[] makeStatements(IClass klass) { assert klass != null; - ArrayList statements = new ArrayList(); + ArrayList statements = new ArrayList<>(); // value number 1 is "this". int nextLocal = 2; diff --git a/com.ibm.wala.core/src/com/ibm/wala/analysis/reflection/FactoryBypassInterpreter.java b/com.ibm.wala.core/src/com/ibm/wala/analysis/reflection/FactoryBypassInterpreter.java index 0ba17f0af..bb864070e 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/analysis/reflection/FactoryBypassInterpreter.java +++ b/com.ibm.wala.core/src/com/ibm/wala/analysis/reflection/FactoryBypassInterpreter.java @@ -348,7 +348,7 @@ public class FactoryBypassInterpreter extends AbstractReflectionInterpreter { /** * List of synthetic invoke instructions we model for this specialized instance. */ - final private ArrayList calls = new ArrayList(); + final private ArrayList calls = new ArrayList<>(); /** * The method being modelled diff --git a/com.ibm.wala.core/src/com/ibm/wala/analysis/reflection/GetClassContextInterpeter.java b/com.ibm.wala.core/src/com/ibm/wala/analysis/reflection/GetClassContextInterpeter.java index 01e685368..3759f56a8 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/analysis/reflection/GetClassContextInterpeter.java +++ b/com.ibm.wala.core/src/com/ibm/wala/analysis/reflection/GetClassContextInterpeter.java @@ -107,7 +107,7 @@ public class GetClassContextInterpeter implements SSAContextInterpreter { } private static SSAInstruction[] makeStatements(JavaTypeContext context) { - ArrayList statements = new ArrayList(); + ArrayList statements = new ArrayList<>(); int nextLocal = 2; int retValue = nextLocal++; TypeReference tr = context.getType().getTypeReference(); diff --git a/com.ibm.wala.core/src/com/ibm/wala/analysis/reflection/GetMethodContextInterpreter.java b/com.ibm.wala.core/src/com/ibm/wala/analysis/reflection/GetMethodContextInterpreter.java index f7dc4f0b4..d0a484335 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/analysis/reflection/GetMethodContextInterpreter.java +++ b/com.ibm.wala.core/src/com/ibm/wala/analysis/reflection/GetMethodContextInterpreter.java @@ -133,7 +133,7 @@ public class GetMethodContextInterpreter implements SSAContextInterpreter { GetMethodContext context = (GetMethodContext) node.getContext(); TypeReference tr = context.getType().getTypeReference(); if (tr != null) { - return new NonNullSingletonIterator(NewSiteReference.make(0, tr)); + return new NonNullSingletonIterator<>(NewSiteReference.make(0, tr)); } return EmptyIterator.instance(); } @@ -193,7 +193,7 @@ public class GetMethodContextInterpreter implements SSAContextInterpreter { GetMethodContext context, Map constants ) { - ArrayList statements = new ArrayList(); + ArrayList statements = new ArrayList<>(); int nextLocal = ref.getNumberOfParameters() + 2; IClass cls = context.getType().getType(); SSAInstructionFactory insts = context.getType().getType().getClassLoader().getInstructionFactory(); diff --git a/com.ibm.wala.core/src/com/ibm/wala/analysis/reflection/GetMethodContextSelector.java b/com.ibm.wala.core/src/com/ibm/wala/analysis/reflection/GetMethodContextSelector.java index 82e413154..1c9172da6 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/analysis/reflection/GetMethodContextSelector.java +++ b/com.ibm.wala.core/src/com/ibm/wala/analysis/reflection/GetMethodContextSelector.java @@ -132,7 +132,7 @@ public class GetMethodContextSelector implements ContextSelector { */ protected static ConstantKey makeConstantKey(IClassHierarchy cha,String str) { IClass cls = cha.lookupClass(TypeReference.JavaLangString); - ConstantKey ck = new ConstantKey(str,cls); + ConstantKey ck = new ConstantKey<>(str,cls); return ck; } diff --git a/com.ibm.wala.core/src/com/ibm/wala/analysis/reflection/JavaLangClassContextInterpreter.java b/com.ibm.wala.core/src/com/ibm/wala/analysis/reflection/JavaLangClassContextInterpreter.java index c2fce942f..a5aed8289 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/analysis/reflection/JavaLangClassContextInterpreter.java +++ b/com.ibm.wala.core/src/com/ibm/wala/analysis/reflection/JavaLangClassContextInterpreter.java @@ -210,7 +210,7 @@ public class JavaLangClassContextInterpreter implements SSAContextInterpreter { JavaTypeContext context = (JavaTypeContext) node.getContext(); TypeReference tr = context.getType().getTypeReference(); if (tr != null) { - return new NonNullSingletonIterator(NewSiteReference.make(0, tr)); + return new NonNullSingletonIterator<>(NewSiteReference.make(0, tr)); } return EmptyIterator.instance(); } @@ -282,7 +282,7 @@ public class JavaLangClassContextInterpreter implements SSAContextInterpreter { */ private static SSAInstruction[] getMethodArrayStatements(MethodReference ref, Collection returnValues, JavaTypeContext context, Map constants) { - ArrayList statements = new ArrayList(); + ArrayList statements = new ArrayList<>(); int nextLocal = ref.getNumberOfParameters() + 2; int retValue = nextLocal++; IClass cls = context.getType().getType(); @@ -329,7 +329,7 @@ public class JavaLangClassContextInterpreter implements SSAContextInterpreter { */ private static SSAInstruction[] getParticularMethodStatements(MethodReference ref, Collection returnValues, JavaTypeContext context, Map constants) { - ArrayList statements = new ArrayList(); + ArrayList statements = new ArrayList<>(); int nextLocal = ref.getNumberOfParameters() + 2; IClass cls = context.getType().getType(); SSAInstructionFactory insts = context.getType().getType().getClassLoader().getInstructionFactory(); diff --git a/com.ibm.wala.core/src/com/ibm/wala/analysis/reflection/java7/MethodHandles.java b/com.ibm.wala.core/src/com/ibm/wala/analysis/reflection/java7/MethodHandles.java index 7b3d7c560..fb8544a0a 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/analysis/reflection/java7/MethodHandles.java +++ b/com.ibm.wala.core/src/com/ibm/wala/analysis/reflection/java7/MethodHandles.java @@ -209,8 +209,8 @@ public class MethodHandles { public Iterator iterateFields(CGNode node, Predicate filter) { return - new MapIterator( - new FilterIterator(getIR(node).iterateNormalInstructions(), filter), + new MapIterator<>( + new FilterIterator<>(getIR(node).iterateNormalInstructions(), filter), object -> ((SSAFieldAccessInstruction)object).getDeclaredField()); } @@ -269,7 +269,7 @@ public class MethodHandles { code.addStatement(insts.LoadMetadataInstruction(code.getNextProgramCounter(), 2, TypeReference.JavaLangInvokeMethodType, ref.getDescriptor())); code.addStatement(insts.ReturnInstruction(code.getNextProgramCounter(), 2, false)); } - irs.put(node, new SoftReference(m.makeIR(node.getContext(), SSAOptions.defaultOptions()))); + irs.put(node, new SoftReference<>(m.makeIR(node.getContext(), SSAOptions.defaultOptions()))); } return irs.get(node).get(); diff --git a/com.ibm.wala.core/src/com/ibm/wala/analysis/stackMachine/AbstractIntStackMachine.java b/com.ibm.wala.core/src/com/ibm/wala/analysis/stackMachine/AbstractIntStackMachine.java index d49aa9ce0..2033c8ca4 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/analysis/stackMachine/AbstractIntStackMachine.java +++ b/com.ibm.wala.core/src/com/ibm/wala/analysis/stackMachine/AbstractIntStackMachine.java @@ -187,7 +187,7 @@ public abstract class AbstractIntStackMachine implements FixedPointConstants { } }; - IKilldallFramework problem = new BasicFramework(cfg, xferFunctions); + IKilldallFramework problem = new BasicFramework<>(cfg, xferFunctions); solver = new DataflowSolver(problem) { private MachineState entry; diff --git a/com.ibm.wala.core/src/com/ibm/wala/cfg/AbstractCFG.java b/com.ibm.wala.core/src/com/ibm/wala/cfg/AbstractCFG.java index 33c474ce3..f7b4e7449 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/cfg/AbstractCFG.java +++ b/com.ibm.wala.core/src/com/ibm/wala/cfg/AbstractCFG.java @@ -52,25 +52,25 @@ public abstract class AbstractCFG> implements Contro /** * An object to track nodes in this cfg */ - final private DelegatingNumberedNodeManager nodeManager = new DelegatingNumberedNodeManager(); + final private DelegatingNumberedNodeManager nodeManager = new DelegatingNumberedNodeManager<>(); /** * An object to track most normal edges in this cfg */ - final private SparseNumberedEdgeManager normalEdgeManager = new SparseNumberedEdgeManager(nodeManager, 2, + final private SparseNumberedEdgeManager normalEdgeManager = new SparseNumberedEdgeManager<>(nodeManager, 2, BasicNaturalRelation.SIMPLE); /** * An object to track not-to-exit exceptional edges in this cfg */ - final private SparseNumberedEdgeManager exceptionalEdgeManager = new SparseNumberedEdgeManager(nodeManager, 0, + final private SparseNumberedEdgeManager exceptionalEdgeManager = new SparseNumberedEdgeManager<>(nodeManager, 0, BasicNaturalRelation.SIMPLE); /** * An object to track not-to-exit exceptional edges in this cfg, indexed by block number. exceptionalEdges[i] is a list of block * numbers that are non-exit exceptional successors of block i, in order of increasing "catch scope". */ - final private SimpleVector exceptionalSuccessors = new SimpleVector(); + final private SimpleVector exceptionalSuccessors = new SimpleVector<>(); /** * Which basic blocks have a normal edge to exit()? @@ -305,9 +305,9 @@ public abstract class AbstractCFG> implements Contro public Iterator getSuccNodes(T N) { int number = getNumber(N); if (normalToExit.get(number) && exceptionalToExit.get(number)) { - return new CompoundIterator(iterateNormalSuccessorsWithoutExit(number), iterateExceptionalSuccessors(number)); + return new CompoundIterator<>(iterateNormalSuccessorsWithoutExit(number), iterateExceptionalSuccessors(number)); } else { - return new CompoundIterator(iterateNormalSuccessors(number), iterateExceptionalSuccessors(number)); + return new CompoundIterator<>(iterateNormalSuccessors(number), iterateExceptionalSuccessors(number)); } } @@ -317,7 +317,7 @@ public abstract class AbstractCFG> implements Contro */ private Iterator iterateExceptionalSuccessors(int number) { if (exceptionalEdgeManager.hasAnySuccessor(number)) { - List result = new ArrayList(); + List result = new ArrayList<>(); SimpleIntVector v = exceptionalSuccessors.get(number); for (int i = 0; i <= v.getMaxIndex(); i++) { result.add(getNode(v.get(i))); @@ -328,7 +328,7 @@ public abstract class AbstractCFG> implements Contro return result.iterator(); } else { if (exceptionalToExit.get(number)) { - return new NonNullSingletonIterator(exit()); + return new NonNullSingletonIterator<>(exit()); } else { return EmptyIterator.instance(); } @@ -365,7 +365,7 @@ public abstract class AbstractCFG> implements Contro private Iterator iterateNormalSuccessors(int number) { if (fallThru.get(number)) { if (normalToExit.get(number)) { - return new IteratorPlusTwo(normalEdgeManager.getSuccNodes(number), getNode(number + 1), exit()); + return new IteratorPlusTwo<>(normalEdgeManager.getSuccNodes(number), getNode(number + 1), exit()); } else { return IteratorPlusOne.make(normalEdgeManager.getSuccNodes(number), getNode(number + 1)); } @@ -591,7 +591,7 @@ public abstract class AbstractCFG> implements Contro if (b == null) { throw new IllegalArgumentException("b is null"); } - List result = new ArrayList(); + List result = new ArrayList<>(); for (Iterator it = iterateExceptionalSuccessors(b.getNumber()); it.hasNext();) { result.add(it.next()); } @@ -614,7 +614,7 @@ public abstract class AbstractCFG> implements Contro */ @Override public Iterator iterateNodes(IntSet s) { - return new NumberedNodeIterator(s, this); + return new NumberedNodeIterator<>(s, this); } @Override diff --git a/com.ibm.wala.core/src/com/ibm/wala/cfg/InducedCFG.java b/com.ibm.wala.core/src/com/ibm/wala/cfg/InducedCFG.java index db5054f6c..d725b7fa0 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/cfg/InducedCFG.java +++ b/com.ibm.wala.core/src/com/ibm/wala/cfg/InducedCFG.java @@ -393,7 +393,7 @@ public class InducedCFG extends AbstractCFG(1); + phis = new ArrayList<>(1); } phis.add(phiInstruction); } @@ -406,7 +406,7 @@ public class InducedCFG extends AbstractCFG(1); + pis = new ArrayList<>(1); } pis.add(piInstruction); } @@ -614,7 +614,7 @@ public class InducedCFG extends AbstractCFG iterator() { - return new ArrayIterator(getInstructions(), getFirstInstructionIndex(), getLastInstructionIndex()); + return new ArrayIterator<>(getInstructions(), getFirstInstructionIndex(), getLastInstructionIndex()); } } diff --git a/com.ibm.wala.core/src/com/ibm/wala/cfg/ShrikeCFG.java b/com.ibm.wala.core/src/com/ibm/wala/cfg/ShrikeCFG.java index 9479902db..7ac141fcf 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/cfg/ShrikeCFG.java +++ b/com.ibm.wala.core/src/com/ibm/wala/cfg/ShrikeCFG.java @@ -360,7 +360,7 @@ public class ShrikeCFG extends AbstractCFG i IClass caughtClass = cha.lookupClass(caughtException); // the set "caught" should be the set of exceptions that MUST // have been caught by the handlers in scope - ArrayList caught = new ArrayList(exceptionTypes.size()); + ArrayList caught = new ArrayList<>(exceptionTypes.size()); // check if we should add an edge to the catch block. for (TypeReference t : exceptionTypes) { if (t != null) { @@ -493,7 +493,7 @@ public class ShrikeCFG extends AbstractCFG i @Override public Iterator iterator() { - return new ArrayIterator(getInstructions(), getFirstInstructionIndex(), getLastInstructionIndex()); + return new ArrayIterator<>(getInstructions(), getFirstInstructionIndex(), getLastInstructionIndex()); } } diff --git a/com.ibm.wala.core/src/com/ibm/wala/cfg/cdg/ControlDependenceGraph.java b/com.ibm.wala.core/src/com/ibm/wala/cfg/cdg/ControlDependenceGraph.java index 393824fb8..b0e849941 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/cfg/cdg/ControlDependenceGraph.java +++ b/com.ibm.wala.core/src/com/ibm/wala/cfg/cdg/ControlDependenceGraph.java @@ -60,7 +60,7 @@ public class ControlDependenceGraph extends AbstractNumberedGraph { private Map> buildControlDependence(boolean wantEdgeLabels) { Map> controlDependence = HashMapFactory.make(cfg.getNumberOfNodes()); - DominanceFrontiers RDF = new DominanceFrontiers(GraphInverter.invert(cfg), cfg.exit()); + DominanceFrontiers RDF = new DominanceFrontiers<>(GraphInverter.invert(cfg), cfg.exit()); if (wantEdgeLabels) { edgeLabels = HashMapFactory.make(); diff --git a/com.ibm.wala.core/src/com/ibm/wala/cfg/exc/inter/AnalysisUtil.java b/com.ibm.wala.core/src/com/ibm/wala/cfg/exc/inter/AnalysisUtil.java index 0c6d45cc5..407ed654d 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/cfg/exc/inter/AnalysisUtil.java +++ b/com.ibm.wala.core/src/com/ibm/wala/cfg/exc/inter/AnalysisUtil.java @@ -76,7 +76,7 @@ public final class AnalysisUtil { * @return a Set of all blocks that contain an invoke */ public static Set extractInvokeBlocks(final ControlFlowGraph cfg) { - final HashSet invokeBlocks = new HashSet(); + final HashSet invokeBlocks = new HashSet<>(); for (final IExplodedBasicBlock block : cfg) { if (block.getInstruction() instanceof SSAAbstractInvokeInstruction) { diff --git a/com.ibm.wala.core/src/com/ibm/wala/cfg/exc/inter/InterprocNullPointerAnalysis.java b/com.ibm.wala.core/src/com/ibm/wala/cfg/exc/inter/InterprocNullPointerAnalysis.java index 489e795f5..1cc89d0df 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/cfg/exc/inter/InterprocNullPointerAnalysis.java +++ b/com.ibm.wala.core/src/com/ibm/wala/cfg/exc/inter/InterprocNullPointerAnalysis.java @@ -78,7 +78,7 @@ public final class InterprocNullPointerAnalysis { private InterprocNullPointerAnalysis(final TypeReference[] ignoredExceptions, final MethodState defaultMethodState, boolean optHasExceptions) { this.ignoredExceptions = ignoredExceptions; this.defaultMethodState = defaultMethodState; - this.states = new HashMap(); + this.states = new HashMap<>(); this.optHasExceptions = optHasExceptions; } @@ -163,7 +163,7 @@ public final class InterprocNullPointerAnalysis { private Map> analysisFirstPass(final CGNode startNode, final ParameterState paramState, final IProgressMonitor progress) throws UnsoundGraphException, CancelException { final Map> result = - new HashMap>(); + new HashMap<>(); final IR ir = startNode.getIR(); if (!startNode.getMethod().isStatic()) { @@ -195,7 +195,7 @@ public final class InterprocNullPointerAnalysis { final Set targets = cgFiltered.getPossibleTargets(startNode, invokeInstruction.getCallSite()); for (final CGNode target : targets) { - final HashMap stateMap = new HashMap(); + final HashMap stateMap = new HashMap<>(); stateMap.put(invokeInstruction, paramStateOfInvokeBlock); result.put(target, stateMap); } @@ -218,7 +218,7 @@ public final class InterprocNullPointerAnalysis { * Reduces the Callgraph to only the nodes that we need */ private static CallGraph computeFilteredCallgraph(final CallGraph cg) { - final HashSet filterSet = new HashSet(); + final HashSet filterSet = new HashSet<>(); final Atom worldClinit = Atom.findOrCreateAsciiAtom("fakeWorldClinit"); filterSet.add(worldClinit); filterSet.add(MethodReference.initAtom); @@ -254,14 +254,14 @@ public final class InterprocNullPointerAnalysis { * @return the filtered CallGraph */ private CallGraph filter(final CallGraph fullCG) { - final HashSet nodes = new HashSet(); + final HashSet nodes = new HashSet<>(); // fill all nodes into a set for (final CGNode n : fullCG) { nodes.add(n); } - final HashSet nodesToRemove = new HashSet(); + final HashSet nodesToRemove = new HashSet<>(); // collect all nodes that we do not need for (final CGNode node : nodes) { for (final Atom method : filter) { @@ -272,7 +272,7 @@ public final class InterprocNullPointerAnalysis { } nodes.removeAll(nodesToRemove); - final HashSet partialRoots = new HashSet(); + final HashSet partialRoots = new HashSet<>(); partialRoots.add(fullCG.getFakeRootNode()); // delete the nodes diff --git a/com.ibm.wala.core/src/com/ibm/wala/cfg/exc/inter/IntraprocAnalysisState.java b/com.ibm.wala.core/src/com/ibm/wala/cfg/exc/inter/IntraprocAnalysisState.java index 837d99590..4dfb90a7b 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/cfg/exc/inter/IntraprocAnalysisState.java +++ b/com.ibm.wala.core/src/com/ibm/wala/cfg/exc/inter/IntraprocAnalysisState.java @@ -39,10 +39,10 @@ final class IntraprocAnalysisState implements ExceptionPruningAnalysis cfg; private final HashMap statesOfSsaVars = - new HashMap(); - private final HashMap valuesOfSsaVars = new HashMap(); + new HashMap<>(); + private final HashMap valuesOfSsaVars = new HashMap<>(); private final HashMap numbersOfSsaVarsThatAreParemerters = - new HashMap(); + new HashMap<>(); private final boolean noAnalysisPossible; private final int deletedEdges; private boolean throwsException = true; diff --git a/com.ibm.wala.core/src/com/ibm/wala/cfg/exc/intra/ExplodedCFGNullPointerAnalysis.java b/com.ibm.wala.core/src/com/ibm/wala/cfg/exc/intra/ExplodedCFGNullPointerAnalysis.java index 963c20695..8e6e1eccb 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/cfg/exc/intra/ExplodedCFGNullPointerAnalysis.java +++ b/com.ibm.wala.core/src/com/ibm/wala/cfg/exc/intra/ExplodedCFGNullPointerAnalysis.java @@ -54,7 +54,7 @@ public class ExplodedCFGNullPointerAnalysis implements ExceptionPruningAnalysis< public int compute(IProgressMonitor progress) throws UnsoundGraphException, CancelException { ControlFlowGraph orig = ExplodedControlFlowGraph.make(ir); - intra = new IntraprocNullPointerAnalysis(ir, orig, ignoredExceptions, initialState, mState); + intra = new IntraprocNullPointerAnalysis<>(ir, orig, ignoredExceptions, initialState, mState); intra.run(progress); return intra.getNumberOfDeletedEdges(); diff --git a/com.ibm.wala.core/src/com/ibm/wala/cfg/exc/intra/IntraprocNullPointerAnalysis.java b/com.ibm.wala.core/src/com/ibm/wala/cfg/exc/intra/IntraprocNullPointerAnalysis.java index 32e2b710b..a316828b2 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/cfg/exc/intra/IntraprocNullPointerAnalysis.java +++ b/com.ibm.wala.core/src/com/ibm/wala/cfg/exc/intra/IntraprocNullPointerAnalysis.java @@ -84,7 +84,7 @@ public class IntraprocNullPointerAnalysis { maxVarNum = ir.getSymbolTable().getMaxValueNumber(); } - this.ignoreExceptions = new HashSet(); + this.ignoreExceptions = new HashSet<>(); if (ignoreExceptions != null) { for (TypeReference tRef : ignoreExceptions) { @@ -98,7 +98,7 @@ public class IntraprocNullPointerAnalysis { private static List searchNodesWithPathToCatchAll(ControlFlowGraph cfg) { - final List nodes = new LinkedList(); + final List nodes = new LinkedList<>(); for (final T exp : cfg) { final List excSucc = cfg.getExceptionalSuccessors(exp); @@ -134,9 +134,9 @@ public class IntraprocNullPointerAnalysis { pruned = cfg; } else { final List catched = searchNodesWithPathToCatchAll(cfg); - final NullPointerFrameWork problem = new NullPointerFrameWork(cfg, ir); + final NullPointerFrameWork problem = new NullPointerFrameWork<>(cfg, ir); - solver = new NullPointerSolver(problem, maxVarNum, cfg.entry(), ir, initialState); + solver = new NullPointerSolver<>(problem, maxVarNum, cfg.entry(), ir, initialState); solver.solve(progress); @@ -151,7 +151,7 @@ public class IntraprocNullPointerAnalysis { for (T node : deleted) { deletedEdges += deleted.getSuccNodeCount(node); } - final NegativeGraphFilter filter = new NegativeGraphFilter(deleted); + final NegativeGraphFilter filter = new NegativeGraphFilter<>(deleted); final PrunedCFG newCfg = PrunedCFG.make(cfg, filter); @@ -201,7 +201,7 @@ public class IntraprocNullPointerAnalysis { private final Graph deleted; private NegativeCFGBuilderVisitor() { - this.deleted = new SparseNumberedGraph(2); + this.deleted = new SparseNumberedGraph<>(2); for (T bb : cfg) { deleted.addNode(bb); } @@ -244,7 +244,7 @@ public class IntraprocNullPointerAnalysis { return mState != null && !mState.throwsException((SSAAbstractInvokeInstruction) instr); } else { Collection exc = instr.getExceptionTypes(); - Set myExcs = new HashSet(exc); + Set myExcs = new HashSet<>(exc); myExcs.removeAll(ignoreExceptions); return myExcs.size() == 1 && myExcs.contains(TypeReference.JavaLangNullPointerException); @@ -259,7 +259,7 @@ public class IntraprocNullPointerAnalysis { return mState != null && !mState.throwsException((SSAAbstractInvokeInstruction) instr); } else { Collection exc = instr.getExceptionTypes(); - Set myExcs = new HashSet(exc); + Set myExcs = new HashSet<>(exc); myExcs.removeAll(ignoreExceptions); return myExcs.isEmpty(); diff --git a/com.ibm.wala.core/src/com/ibm/wala/cfg/exc/intra/MutableCFG.java b/com.ibm.wala.core/src/com/ibm/wala/cfg/exc/intra/MutableCFG.java index e4a171595..cf4132e01 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/cfg/exc/intra/MutableCFG.java +++ b/com.ibm.wala.core/src/com/ibm/wala/cfg/exc/intra/MutableCFG.java @@ -38,7 +38,7 @@ public class MutableCFG> extends SparseNumberedGraph } public static > MutableCFG copyFrom(ControlFlowGraph cfg) { - MutableCFG mutable = new MutableCFG(cfg); + MutableCFG mutable = new MutableCFG<>(cfg); for (T node : cfg) { mutable.addNode(node); @@ -108,7 +108,7 @@ public class MutableCFG> extends SparseNumberedGraph public List getExceptionalSuccessors(T b) { final List origSucc = orig.getExceptionalSuccessors(b); final IntSet allSuccs = this.getSuccNodeNumbers(b); - final List thisSuccs = new LinkedList(); + final List thisSuccs = new LinkedList<>(); for (final T block : origSucc) { if (allSuccs.contains(block.getNumber())) { @@ -122,7 +122,7 @@ public class MutableCFG> extends SparseNumberedGraph @Override public Collection getNormalSuccessors(T b) { final List excSuccs = getExceptionalSuccessors(b); - final List thisSuccs = new LinkedList(); + final List thisSuccs = new LinkedList<>(); final Iterator succs = getSuccNodes(b); while (succs.hasNext()) { @@ -139,7 +139,7 @@ public class MutableCFG> extends SparseNumberedGraph public Collection getExceptionalPredecessors(T b) { final Collection origPreds = orig.getExceptionalPredecessors(b); final IntSet allPreds = this.getPredNodeNumbers(b); - final List thisPreds = new LinkedList(); + final List thisPreds = new LinkedList<>(); for (final T block : origPreds) { if (allPreds.contains(block.getNumber())) { @@ -153,7 +153,7 @@ public class MutableCFG> extends SparseNumberedGraph @Override public Collection getNormalPredecessors(T b) { final Collection excPreds = getExceptionalPredecessors(b); - final List thisPreds = new LinkedList(); + final List thisPreds = new LinkedList<>(); final Iterator preds = getPredNodes(b); while (preds.hasNext()) { diff --git a/com.ibm.wala.core/src/com/ibm/wala/cfg/exc/intra/NullPointerFrameWork.java b/com.ibm.wala.core/src/com/ibm/wala/cfg/exc/intra/NullPointerFrameWork.java index b38054c21..2eccb72b9 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/cfg/exc/intra/NullPointerFrameWork.java +++ b/com.ibm.wala.core/src/com/ibm/wala/cfg/exc/intra/NullPointerFrameWork.java @@ -52,7 +52,7 @@ public class NullPointerFrameWork implements IKilldall this.flow = cfg; } - this.transferFunct = new NullPointerTransferFunctionProvider(cfg, ir); + this.transferFunct = new NullPointerTransferFunctionProvider<>(cfg, ir); } /* (non-Javadoc) diff --git a/com.ibm.wala.core/src/com/ibm/wala/cfg/exc/intra/ParameterState.java b/com.ibm.wala.core/src/com/ibm/wala/cfg/exc/intra/ParameterState.java index e98163818..0f214a824 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/cfg/exc/intra/ParameterState.java +++ b/com.ibm.wala.core/src/com/ibm/wala/cfg/exc/intra/ParameterState.java @@ -36,7 +36,7 @@ public class ParameterState extends AbstractVariable { public static final int NO_THIS_PTR = -1; // maps the parmeter's varNum --> State - private final HashMap params = new HashMap(); + private final HashMap params = new HashMap<>(); public static ParameterState createDefault(IMethod m) { ParameterState p = new ParameterState(); diff --git a/com.ibm.wala.core/src/com/ibm/wala/cfg/exc/intra/SSACFGNullPointerAnalysis.java b/com.ibm.wala.core/src/com/ibm/wala/cfg/exc/intra/SSACFGNullPointerAnalysis.java index 639ca4209..0e2dba953 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/cfg/exc/intra/SSACFGNullPointerAnalysis.java +++ b/com.ibm.wala.core/src/com/ibm/wala/cfg/exc/intra/SSACFGNullPointerAnalysis.java @@ -45,7 +45,7 @@ public class SSACFGNullPointerAnalysis implements ExceptionPruningAnalysis orig = ir.getControlFlowGraph(); - intra = new IntraprocNullPointerAnalysis(ir, orig, ignoredExceptions, initialState, mState); + intra = new IntraprocNullPointerAnalysis<>(ir, orig, ignoredExceptions, initialState, mState); intra.run(progress); return intra.getNumberOfDeletedEdges(); diff --git a/com.ibm.wala.core/src/com/ibm/wala/classLoader/AbstractURLModule.java b/com.ibm.wala.core/src/com/ibm/wala/classLoader/AbstractURLModule.java index 631fe32e6..b61da5292 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/classLoader/AbstractURLModule.java +++ b/com.ibm.wala.core/src/com/ibm/wala/classLoader/AbstractURLModule.java @@ -77,7 +77,7 @@ public abstract class AbstractURLModule implements Module, ModuleEntry { @Override public Iterator getEntries() { - return new NonNullSingletonIterator(this); + return new NonNullSingletonIterator<>(this); } @Override diff --git a/com.ibm.wala.core/src/com/ibm/wala/classLoader/BytecodeClass.java b/com.ibm.wala.core/src/com/ibm/wala/classLoader/BytecodeClass.java index 2696a498e..c111d1a67 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/classLoader/BytecodeClass.java +++ b/com.ibm.wala.core/src/com/ibm/wala/classLoader/BytecodeClass.java @@ -306,7 +306,7 @@ public abstract class BytecodeClass implements IClass { */ @Override public Collection getAllFields() { - Collection result = new LinkedList(); + Collection result = new LinkedList<>(); result.addAll(getAllInstanceFields()); result.addAll(getAllStaticFields()); return result; @@ -359,7 +359,7 @@ public abstract class BytecodeClass implements IClass { */ @Override public Collection getAllInstanceFields() { - Collection result = new LinkedList(getDeclaredInstanceFields()); + Collection result = new LinkedList<>(getDeclaredInstanceFields()); IClass s = getSuperclass(); while (s != null) { result.addAll(s.getDeclaredInstanceFields()); @@ -373,7 +373,7 @@ public abstract class BytecodeClass implements IClass { */ @Override public Collection getAllStaticFields() { - Collection result = new LinkedList(getDeclaredStaticFields()); + Collection result = new LinkedList<>(getDeclaredStaticFields()); IClass s = getSuperclass(); while (s != null) { result.addAll(s.getDeclaredStaticFields()); @@ -387,7 +387,7 @@ public abstract class BytecodeClass implements IClass { */ @Override public Collection getAllMethods() { - Collection result = new LinkedList(); + Collection result = new LinkedList<>(); Iterator declaredMethods = getDeclaredMethods().iterator(); while (declaredMethods.hasNext()) { result.add(declaredMethods.next()); @@ -459,7 +459,7 @@ public abstract class BytecodeClass implements IClass { IMethod inherit = superclass.getMethod(selector); if (inherit != null) { if (inheritCache == null) { - inheritCache = new BimodalMap(5); + inheritCache = new BimodalMap<>(5); } inheritCache.put(selector, inherit); return inherit; @@ -473,7 +473,7 @@ public abstract class BytecodeClass implements IClass { for(IMethod m : iface.getDeclaredMethods()) { if (!m.isAbstract() && m.getSelector().equals(selector)) { if (inheritCache == null) { - inheritCache = new BimodalMap(5); + inheritCache = new BimodalMap<>(5); } inheritCache.put(selector, m); @@ -484,7 +484,7 @@ public abstract class BytecodeClass implements IClass { // no method found if (inheritCache == null) { - inheritCache = new BimodalMap(5); + inheritCache = new BimodalMap<>(5); } inheritCache.put(selector, null); return null; @@ -536,7 +536,7 @@ public abstract class BytecodeClass implements IClass { * classes can not be loaded */ private Collection array2IClassSet(ImmutableByteArray[] interfaces) { - ArrayList result = new ArrayList(interfaces.length); + ArrayList result = new ArrayList<>(interfaces.length); for (ImmutableByteArray name : interfaces) { IClass klass = null; klass = loader.lookupClass(TypeName.findOrCreate(name)); @@ -551,7 +551,7 @@ public abstract class BytecodeClass implements IClass { protected List findDeclaredField(Atom name) { - List result = new ArrayList(1); + List result = new ArrayList<>(1); if (instanceFields != null) { for (IField instanceField : instanceFields) { @@ -599,7 +599,7 @@ public abstract class BytecodeClass implements IClass { if (methods.length > 5) { tmpMethodMap = HashMapFactory.make(methods.length); } else { - tmpMethodMap= new SmallMap(); + tmpMethodMap= new SmallMap<>(); } for (IMethod m : methods) { tmpMethodMap.put(m.getReference().getSelector(), m); diff --git a/com.ibm.wala.core/src/com/ibm/wala/classLoader/CodeScanner.java b/com.ibm.wala.core/src/com/ibm/wala/classLoader/CodeScanner.java index b9a166b8a..24192cb0e 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/classLoader/CodeScanner.java +++ b/com.ibm.wala.core/src/com/ibm/wala/classLoader/CodeScanner.java @@ -206,7 +206,7 @@ public class CodeScanner { private static List getFieldsReadFromShrikeBT(ShrikeCTMethod M) throws InvalidClassFileException { // TODO move the logic here from ShrikeCTMethodWrapper - LinkedList result = new LinkedList(); + LinkedList result = new LinkedList<>(); for (Iterator it = M.getFieldsRead(); it.hasNext();) { result.add(it.next()); } @@ -215,7 +215,7 @@ public class CodeScanner { private static List getFieldsWrittenFromShrikeBT(ShrikeCTMethod M) throws InvalidClassFileException { // TODO move the logic here from ShrikeCTMethodWrapper - LinkedList result = new LinkedList(); + LinkedList result = new LinkedList<>(); for (Iterator it = M.getFieldsWritten(); it.hasNext();) { result.add(it.next()); } @@ -224,7 +224,7 @@ public class CodeScanner { private static List getArraysWrittenFromShrikeBT(ShrikeCTMethod M) throws InvalidClassFileException { // TODO move the logic here from ShrikeCTMethodWrapper - List result = new LinkedList(); + List result = new LinkedList<>(); for (Iterator it = M.getArraysWritten(); it.hasNext();) { result.add(it.next()); } @@ -291,7 +291,7 @@ public class CodeScanner { * @return List of InvokeInstruction */ private static List getCallSites(SSAInstruction[] statements) { - final List result = new LinkedList(); + final List result = new LinkedList<>(); Visitor v = new Visitor() { @Override public void visitInvoke(SSAInvokeInstruction instruction) { @@ -311,7 +311,7 @@ public class CodeScanner { * @return List of InvokeInstruction */ private static List getNewSites(SSAInstruction[] statements) { - final List result = new LinkedList(); + final List result = new LinkedList<>(); Visitor v = new Visitor() { @Override public void visitNew(SSANewInstruction instruction) { @@ -335,7 +335,7 @@ public class CodeScanner { if (statements == null) { throw new IllegalArgumentException("statements == null"); } - final List result = new LinkedList(); + final List result = new LinkedList<>(); Visitor v = new Visitor() { @Override public void visitGet(SSAGetInstruction instruction) { @@ -359,7 +359,7 @@ public class CodeScanner { if (statements == null) { throw new IllegalArgumentException("statements == null"); } - final List result = new LinkedList(); + final List result = new LinkedList<>(); Visitor v = new Visitor() { @Override public void visitPut(SSAPutInstruction instruction) { @@ -383,7 +383,7 @@ public class CodeScanner { if (statements == null) { throw new IllegalArgumentException("statements == null"); } - final List result = new LinkedList(); + final List result = new LinkedList<>(); Visitor v = new Visitor() { @Override diff --git a/com.ibm.wala.core/src/com/ibm/wala/classLoader/CompoundModule.java b/com.ibm.wala.core/src/com/ibm/wala/classLoader/CompoundModule.java index f24fa1d92..9d747bea2 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/classLoader/CompoundModule.java +++ b/com.ibm.wala.core/src/com/ibm/wala/classLoader/CompoundModule.java @@ -39,7 +39,7 @@ public class CompoundModule implements ModuleEntry, Module, SourceModule { @Override public Iterator getEntries() { - return new NonNullSingletonIterator(this); + return new NonNullSingletonIterator<>(this); } @Override @@ -103,7 +103,7 @@ public class CompoundModule implements ModuleEntry, Module, SourceModule { } public class Reader extends java.io.Reader { - private final List> locations = new ArrayList>(); + private final List> locations = new ArrayList<>(); private int line = 0; private int index = 0; private LineNumberReader currentReader; diff --git a/com.ibm.wala.core/src/com/ibm/wala/classLoader/FileModule.java b/com.ibm.wala.core/src/com/ibm/wala/classLoader/FileModule.java index 0e601a099..6b47837c2 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/classLoader/FileModule.java +++ b/com.ibm.wala.core/src/com/ibm/wala/classLoader/FileModule.java @@ -49,7 +49,7 @@ public abstract class FileModule implements Module, ModuleEntry { */ @Override public Iterator getEntries() { - return new NonNullSingletonIterator(this); + return new NonNullSingletonIterator<>(this); } @Override diff --git a/com.ibm.wala.core/src/com/ibm/wala/classLoader/JavaLanguage.java b/com.ibm.wala.core/src/com/ibm/wala/classLoader/JavaLanguage.java index 183855c1d..3148cc964 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/classLoader/JavaLanguage.java +++ b/com.ibm.wala.core/src/com/ibm/wala/classLoader/JavaLanguage.java @@ -561,7 +561,7 @@ public class JavaLanguage extends LanguageImpl implements BytecodeLanguage, Cons if (target == null) { throw new IllegalArgumentException("target is null"); } - ArrayList set = new ArrayList(cha.getJavaLangRuntimeExceptionTypes()); + ArrayList set = new ArrayList<>(cha.getJavaLangRuntimeExceptionTypes()); set.addAll(cha.getJavaLangErrorTypes()); IClass klass = cha.lookupClass(target.getDeclaringClass()); diff --git a/com.ibm.wala.core/src/com/ibm/wala/classLoader/ShrikeBTMethod.java b/com.ibm.wala.core/src/com/ibm/wala/classLoader/ShrikeBTMethod.java index 19f8a5407..ff22baf3f 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/classLoader/ShrikeBTMethod.java +++ b/com.ibm.wala.core/src/com/ibm/wala/classLoader/ShrikeBTMethod.java @@ -145,7 +145,7 @@ public abstract class ShrikeBTMethod implements IMethod, BytecodeConstants { } if (result == null) { result = computeBCInfo(); - bcInfo = new SoftReference(result); + bcInfo = new SoftReference<>(result); } return result; } diff --git a/com.ibm.wala.core/src/com/ibm/wala/classLoader/ShrikeClass.java b/com.ibm.wala.core/src/com/ibm/wala/classLoader/ShrikeClass.java index 36ffaf2a2..a4a1487cd 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/classLoader/ShrikeClass.java +++ b/com.ibm.wala.core/src/com/ibm/wala/classLoader/ShrikeClass.java @@ -80,8 +80,8 @@ public final class ShrikeClass extends JVMClass { private void computeFields() throws InvalidClassFileException { ClassReader cr = reader.get(); int fieldCount = cr.getFieldCount(); - List instanceList = new ArrayList(fieldCount); - List staticList = new ArrayList(fieldCount); + List instanceList = new ArrayList<>(fieldCount); + List staticList = new ArrayList<>(fieldCount); try { for (int i = 0; i < fieldCount; i++) { int accessFlags = cr.getFieldAccessFlags(i); 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 645bb4566..7747f589d 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 @@ -265,7 +265,7 @@ public abstract class AbstractAnalysisEngine implements A } public SDG getSDG(DataDependenceOptions data, ControlDependenceOptions ctrl) { - return new SDG(getCallGraph(), getPointerAnalysis(), data, ctrl); + return new SDG<>(getCallGraph(), getPointerAnalysis(), data, ctrl); } public String getExclusionsFile() { diff --git a/com.ibm.wala.core/src/com/ibm/wala/dataflow/IFDS/BackwardsSupergraph.java b/com.ibm.wala.core/src/com/ibm/wala/dataflow/IFDS/BackwardsSupergraph.java index aae7f97f0..7faf3e26b 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/dataflow/IFDS/BackwardsSupergraph.java +++ b/com.ibm.wala.core/src/com/ibm/wala/dataflow/IFDS/BackwardsSupergraph.java @@ -52,7 +52,7 @@ public class BackwardsSupergraph implements ISupergraph { } public static BackwardsSupergraph make(ISupergraph forwardGraph) { - return new BackwardsSupergraph(forwardGraph); + return new BackwardsSupergraph<>(forwardGraph); } /** @@ -99,7 +99,7 @@ public class BackwardsSupergraph implements ISupergraph { System.err.println("called nodes: " + Iterator2Collection.toSet(new FilterIterator<>(getSuccNodes(ret), exitFilter))); } - return new FilterIterator(getSuccNodes(ret), exitFilter); + return new FilterIterator<>(getSuccNodes(ret), exitFilter); } /** @@ -113,7 +113,7 @@ public class BackwardsSupergraph implements ISupergraph { Predicate sameProc = o -> getProcOf(ret).equals(getProcOf(o)) && !delegate.isExit(o); Iterator sameProcPreds = new FilterIterator<>(allPreds, sameProc); Predicate notCall = o -> !delegate.isCall(o); - return new FilterIterator(sameProcPreds, notCall); + return new FilterIterator<>(sameProcPreds, notCall); } /* diff --git a/com.ibm.wala.core/src/com/ibm/wala/dataflow/IFDS/BoundedPartiallyBalancedSolver.java b/com.ibm.wala.core/src/com/ibm/wala/dataflow/IFDS/BoundedPartiallyBalancedSolver.java index e82ed2ca5..1cc70cc58 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/dataflow/IFDS/BoundedPartiallyBalancedSolver.java +++ b/com.ibm.wala.core/src/com/ibm/wala/dataflow/IFDS/BoundedPartiallyBalancedSolver.java @@ -28,7 +28,7 @@ public class BoundedPartiallyBalancedSolver extends PartiallyBalancedTa public static BoundedPartiallyBalancedSolver createdBoundedPartiallyBalancedSolver(PartiallyBalancedTabulationProblem p, int bound, IProgressMonitor monitor) { - return new BoundedPartiallyBalancedSolver(p, bound, monitor); + return new BoundedPartiallyBalancedSolver<>(p, bound, monitor); } private final int bound; diff --git a/com.ibm.wala.core/src/com/ibm/wala/dataflow/IFDS/BoundedTabulationSolver.java b/com.ibm.wala.core/src/com/ibm/wala/dataflow/IFDS/BoundedTabulationSolver.java index 3a7216b5a..b411edf4c 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/dataflow/IFDS/BoundedTabulationSolver.java +++ b/com.ibm.wala.core/src/com/ibm/wala/dataflow/IFDS/BoundedTabulationSolver.java @@ -26,7 +26,7 @@ public class BoundedTabulationSolver extends TabulationSolver public static BoundedTabulationSolver createBoundedTabulationSolver(TabulationProblem p, int bound, IProgressMonitor monitor) { - return new BoundedTabulationSolver(p, bound, monitor); + return new BoundedTabulationSolver<>(p, bound, monitor); } private final int bound; diff --git a/com.ibm.wala.core/src/com/ibm/wala/dataflow/IFDS/CallFlowEdges.java b/com.ibm.wala.core/src/com/ibm/wala/dataflow/IFDS/CallFlowEdges.java index c74f0de53..ed8d009da 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/dataflow/IFDS/CallFlowEdges.java +++ b/com.ibm.wala.core/src/com/ibm/wala/dataflow/IFDS/CallFlowEdges.java @@ -34,14 +34,14 @@ public class CallFlowEdges { * TODO: more representation optimization. A special representation for triples? sparse representations for CFG? exploit shorts * for ints? */ - private final SparseVector edges = new SparseVector(1, 1.1f); + private final SparseVector edges = new SparseVector<>(1, 1.1f); /** * a map from integer d1 -> int set. * * for fact d1, identityPaths[d1] gives the set of block numbers C s.t. for c \in C, -> is an edge. */ - private final SparseVector identityEdges = new SparseVector(1, 1.1f); + private final SparseVector identityEdges = new SparseVector<>(1, 1.1f); public CallFlowEdges() { } diff --git a/com.ibm.wala.core/src/com/ibm/wala/dataflow/IFDS/ICFGSupergraph.java b/com.ibm.wala.core/src/com/ibm/wala/dataflow/IFDS/ICFGSupergraph.java index 89999c84d..76c4d13c9 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/dataflow/IFDS/ICFGSupergraph.java +++ b/com.ibm.wala.core/src/com/ibm/wala/dataflow/IFDS/ICFGSupergraph.java @@ -96,7 +96,7 @@ public class ICFGSupergraph implements ISupergraph> getCalledNodes(BasicBlockInContext call) { final Predicate> isEntryFilter = BasicBlockInContext::isEntryBlock; - return new FilterIterator>(getSuccNodes(call), isEntryFilter); + return new FilterIterator<>(getSuccNodes(call), isEntryFilter); } @Override @@ -114,7 +114,7 @@ public class ICFGSupergraph implements ISupergraph getLocalBlock(CGNode procedure, int i) { IExplodedBasicBlock b = icfg.getCFG(procedure).getNode(i); - return new BasicBlockInContext(procedure, b); + return new BasicBlockInContext<>(procedure, b); } @Override diff --git a/com.ibm.wala.core/src/com/ibm/wala/dataflow/IFDS/LocalPathEdges.java b/com.ibm.wala.core/src/com/ibm/wala/dataflow/IFDS/LocalPathEdges.java index 60b88ecb2..b6701113a 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/dataflow/IFDS/LocalPathEdges.java +++ b/com.ibm.wala.core/src/com/ibm/wala/dataflow/IFDS/LocalPathEdges.java @@ -50,7 +50,7 @@ public class LocalPathEdges { * TODO: more representation optimization. A special representation for triples? sparse representations for CFG? exploit shorts * for ints? */ - private final SparseVector paths = new SparseVector(1, 1.1f); + private final SparseVector paths = new SparseVector<>(1, 1.1f); /** * If this is non-null, it holds a redundant representation of the paths information, designed to make getReachable(II) faster. @@ -75,20 +75,20 @@ public class LocalPathEdges { * * for fact d1, identityPaths[d1] gives the set of block numbers N s.t. for n \in N, -> is a path edge. */ - private final SparseVector identityPaths = new SparseVector(1, 1.1f); + private final SparseVector identityPaths = new SparseVector<>(1, 1.1f); /** * a map from integer d2 -> int set * * for fact d2, zeroPaths[d2] gives the set of block numbers N s.t. for n \in N, -> is a path edge. */ - private final SparseVector zeroPaths = new SparseVector(1, 1.1f); + private final SparseVector zeroPaths = new SparseVector<>(1, 1.1f); /** * @param fastMerge if true, the representation uses extra space in order to support faster merge operations */ public LocalPathEdges(boolean fastMerge) { - altPaths = fastMerge ? new SparseVector(1, 1.1f) : null; + altPaths = fastMerge ? new SparseVector<>(1, 1.1f) : null; } /** diff --git a/com.ibm.wala.core/src/com/ibm/wala/dataflow/IFDS/LocalSummaryEdges.java b/com.ibm.wala.core/src/com/ibm/wala/dataflow/IFDS/LocalSummaryEdges.java index d3f04b6ce..123f04210 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/dataflow/IFDS/LocalSummaryEdges.java +++ b/com.ibm.wala.core/src/com/ibm/wala/dataflow/IFDS/LocalSummaryEdges.java @@ -39,7 +39,7 @@ public class LocalSummaryEdges { * * TODO: more representation optimization. */ - private final SparseVector summaries = new SparseVector(1, 1.1f); + private final SparseVector summaries = new SparseVector<>(1, 1.1f); /** * Let (s_p,x) be an entry-exit pair, and let l := the long whose high word is s_p and low word is x. diff --git a/com.ibm.wala.core/src/com/ibm/wala/dataflow/IFDS/PartiallyBalancedTabulationSolver.java b/com.ibm.wala.core/src/com/ibm/wala/dataflow/IFDS/PartiallyBalancedTabulationSolver.java index d40884fa3..edb01c8f9 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/dataflow/IFDS/PartiallyBalancedTabulationSolver.java +++ b/com.ibm.wala.core/src/com/ibm/wala/dataflow/IFDS/PartiallyBalancedTabulationSolver.java @@ -31,7 +31,7 @@ public class PartiallyBalancedTabulationSolver extends TabulationSolver public static PartiallyBalancedTabulationSolver createPartiallyBalancedTabulationSolver( PartiallyBalancedTabulationProblem p, IProgressMonitor monitor) { - return new PartiallyBalancedTabulationSolver(p, monitor); + return new PartiallyBalancedTabulationSolver<>(p, monitor); } private final Collection> unbalancedSeeds = HashSetFactory.make(); diff --git a/com.ibm.wala.core/src/com/ibm/wala/dataflow/IFDS/PathEdge.java b/com.ibm.wala.core/src/com/ibm/wala/dataflow/IFDS/PathEdge.java index fb568ccf5..199fe81bf 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/dataflow/IFDS/PathEdge.java +++ b/com.ibm.wala.core/src/com/ibm/wala/dataflow/IFDS/PathEdge.java @@ -30,7 +30,7 @@ public final class PathEdge { if (n == null) { throw new IllegalArgumentException("null n"); } - return new PathEdge(s_p, d1, n, d2); + return new PathEdge<>(s_p, d1, n, d2); } private PathEdge(T s_p, int d1, T n, int d2) { diff --git a/com.ibm.wala.core/src/com/ibm/wala/dataflow/IFDS/TabulationSolver.java b/com.ibm.wala.core/src/com/ibm/wala/dataflow/IFDS/TabulationSolver.java index 25a6a44b3..6bc46c45b 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/dataflow/IFDS/TabulationSolver.java +++ b/com.ibm.wala.core/src/com/ibm/wala/dataflow/IFDS/TabulationSolver.java @@ -191,7 +191,7 @@ public class TabulationSolver { * @throws IllegalArgumentException if p is null */ public static TabulationSolver make(TabulationProblem p) { - return new TabulationSolver(p, null); + return new TabulationSolver<>(p, null); } /** @@ -911,7 +911,7 @@ public class TabulationSolver { public String toString() { StringBuffer result = new StringBuffer(); - TreeMap> map = new TreeMap>(ToStringComparator.instance()); + TreeMap> map = new TreeMap<>(ToStringComparator.instance()); Comparator c = (o1, o2) -> { if (!(o1 instanceof IBasicBlock)) { @@ -925,7 +925,7 @@ public class TabulationSolver { P proc = supergraph.getProcOf(n); TreeSet s = map.get(proc); if (s == null) { - s = new TreeSet(c); + s = new TreeSet<>(c); map.put(proc, s); } s.add(n); diff --git a/com.ibm.wala.core/src/com/ibm/wala/demandpa/alg/DemandRefinementPointsTo.java b/com.ibm.wala.core/src/com/ibm/wala/demandpa/alg/DemandRefinementPointsTo.java index ffd0012e6..ec77c8839 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/demandpa/alg/DemandRefinementPointsTo.java +++ b/com.ibm.wala.core/src/com/ibm/wala/demandpa/alg/DemandRefinementPointsTo.java @@ -768,17 +768,17 @@ public class DemandRefinementPointsTo extends AbstractDemandPointsTo { /** * forward worklist: for initially processing points-to queries */ - private final Collection initWorklist = new LinkedHashSet(); + private final Collection initWorklist = new LinkedHashSet<>(); /** * worklist for variables whose points-to set has been updated */ - private final Collection pointsToWorklist = new LinkedHashSet(); + private final Collection pointsToWorklist = new LinkedHashSet<>(); /** * worklist for variables whose tracked points-to set has been updated */ - private final Collection trackedPointsToWorklist = new LinkedHashSet(); + private final Collection trackedPointsToWorklist = new LinkedHashSet<>(); /** * maps a pointer key to those on-the-fly virtual calls for which it is the receiver @@ -843,7 +843,7 @@ public class DemandRefinementPointsTo extends AbstractDemandPointsTo { private OrdinalSet makeOrdinalSet(IntSet intSet) { // make a copy here, to avoid comodification during iteration // TODO remove the copying, do it only at necessary call sites - return new OrdinalSet(intSetFactory.makeCopy(intSet), ikAndStates); + return new OrdinalSet<>(intSetFactory.makeCopy(intSet), ikAndStates); } /** @@ -1974,7 +1974,7 @@ public class DemandRefinementPointsTo extends AbstractDemandPointsTo { private boolean doTopLevelTraversal(PointerKey pk, final Predicate pred, final PointsToComputer ptoComputer, PointerAnalysis pa) { final Set visited = HashSetFactory.make(); - final LinkedList worklist = new LinkedList(); + final LinkedList worklist = new LinkedList<>(); class Helper { @@ -2385,7 +2385,7 @@ public class DemandRefinementPointsTo extends AbstractDemandPointsTo { // here we compute the number of unique *method* targets, as opposed to call graph nodes. // if we have a context-sensitive call graph, with many targets representing clones of // the same method, we don't want to count the clones twice - Set methodTargets = new HashSet(); + Set methodTargets = new HashSet<>(); for (CGNode node : possibleTargets) { methodTargets.add(node.getMethod()); } diff --git a/com.ibm.wala.core/src/com/ibm/wala/demandpa/alg/SimpleDemandPointsTo.java b/com.ibm.wala.core/src/com/ibm/wala/demandpa/alg/SimpleDemandPointsTo.java index 1013b4877..b953a2d58 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/demandpa/alg/SimpleDemandPointsTo.java +++ b/com.ibm.wala.core/src/com/ibm/wala/demandpa/alg/SimpleDemandPointsTo.java @@ -92,7 +92,7 @@ public class SimpleDemandPointsTo extends AbstractDemandPointsTo { System.err.println(g.toString()); } - SlowDFSDiscoverTimeIterator dfs = new SlowDFSDiscoverTimeIterator(g, pk); + SlowDFSDiscoverTimeIterator dfs = new SlowDFSDiscoverTimeIterator<>(g, pk); Collection keys = HashSetFactory.make(); while (dfs.hasNext()) { Object o = dfs.next(); diff --git a/com.ibm.wala.core/src/com/ibm/wala/demandpa/alg/statemachine/DummyStateMachine.java b/com.ibm.wala.core/src/com/ibm/wala/demandpa/alg/statemachine/DummyStateMachine.java index f268bfc7e..1d40bb0ed 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/demandpa/alg/statemachine/DummyStateMachine.java +++ b/com.ibm.wala.core/src/com/ibm/wala/demandpa/alg/statemachine/DummyStateMachine.java @@ -50,7 +50,7 @@ public class DummyStateMachine implements StateMachine { @Override public StateMachine make() { - return new DummyStateMachine(); + return new DummyStateMachine<>(); } } diff --git a/com.ibm.wala.core/src/com/ibm/wala/demandpa/flowgraph/AbstractDemandFlowGraph.java b/com.ibm.wala.core/src/com/ibm/wala/demandpa/flowgraph/AbstractDemandFlowGraph.java index 5983f831f..a1a546740 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/demandpa/flowgraph/AbstractDemandFlowGraph.java +++ b/com.ibm.wala.core/src/com/ibm/wala/demandpa/flowgraph/AbstractDemandFlowGraph.java @@ -123,7 +123,7 @@ public abstract class AbstractDemandFlowGraph extends AbstractFlowGraph { return EmptyIterator.instance(); } int paramPos = pk.getValueNumber() - 1; - ArrayList paramSuccs = new ArrayList(); + ArrayList paramSuccs = new ArrayList<>(); // iterate over callers for (CGNode caller : cg) { // TODO optimization: we don't need to add the graph if null is passed @@ -155,7 +155,7 @@ public abstract class AbstractDemandFlowGraph extends AbstractFlowGraph { if (instrs == null) { return EmptyIterator.instance(); } - ArrayList paramPreds = new ArrayList(); + ArrayList paramPreds = new ArrayList<>(); for (SSAAbstractInvokeInstruction callInstr : instrs) { for (int i = 0; i < callInstr.getNumberOfUses(); i++) { if (pk.getValueNumber() != callInstr.getUse(i)) @@ -185,7 +185,7 @@ public abstract class AbstractDemandFlowGraph extends AbstractFlowGraph { SSAAbstractInvokeInstruction callInstr = callDefs.get(pk); if (callInstr == null) return EmptyIterator.instance(); - ArrayList returnSuccs = new ArrayList(); + ArrayList returnSuccs = new ArrayList<>(); boolean isExceptional = pk.getValueNumber() == callInstr.getException(); CallSiteReference callSiteRef = callInstr.getCallSite(); @@ -212,7 +212,7 @@ public abstract class AbstractDemandFlowGraph extends AbstractFlowGraph { return EmptyIterator.instance(); } boolean isExceptional = pk == heapModel.getPointerKeyForExceptionalReturnValue(cgNode); - ArrayList returnPreds = new ArrayList(); + ArrayList returnPreds = new ArrayList<>(); // iterate over callers for (CGNode caller : cg) { // TODO we don't need to add the graph if null is passed diff --git a/com.ibm.wala.core/src/com/ibm/wala/demandpa/flowgraph/AbstractFlowGraph.java b/com.ibm.wala.core/src/com/ibm/wala/demandpa/flowgraph/AbstractFlowGraph.java index 667491597..bac514a4d 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/demandpa/flowgraph/AbstractFlowGraph.java +++ b/com.ibm.wala.core/src/com/ibm/wala/demandpa/flowgraph/AbstractFlowGraph.java @@ -271,7 +271,7 @@ public abstract class AbstractFlowGraph extends SlowSparseNumberedLabeledGraph written = new ArrayList(); + ArrayList written = new ArrayList<>(); for (MemoryAccess a : writes) { IR ir = a.getNode().getIR(); SSAPutInstruction s = (SSAPutInstruction) ir.getInstructions()[a.getInstructionIndex()]; @@ -332,7 +332,7 @@ public abstract class AbstractFlowGraph extends SlowSparseNumberedLabeledGraph readInto = new ArrayList(); + ArrayList readInto = new ArrayList<>(); for (MemoryAccess a : reads) { IR ir = a.getNode().getIR(); SSAGetInstruction s = (SSAGetInstruction) ir.getInstructions()[a.getInstructionIndex()]; @@ -355,7 +355,7 @@ public abstract class AbstractFlowGraph extends SlowSparseNumberedLabeledGraph written = new ArrayList(); + ArrayList written = new ArrayList<>(); for (MemoryAccess a : arrayWrites) { final CGNode node = a.getNode(); IR ir = node.getIR(); @@ -388,7 +388,7 @@ public abstract class AbstractFlowGraph extends SlowSparseNumberedLabeledGraph read = new ArrayList(); + ArrayList read = new ArrayList<>(); for (MemoryAccess a : arrayReads) { IR ir = a.getNode().getIR(); SSAArrayLoadInstruction s = (SSAArrayLoadInstruction) ir.getInstructions()[a.getInstructionIndex()]; 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 148d19a05..13858531f 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,7 +52,7 @@ public class PABasedMemoryAccessMap implements MemoryAccessMap { private final Map> invRef; public PABasedMemoryAccessMap(CallGraph cg, PointerAnalysis pa) { - this(pa, new SDG(cg, pa, DataDependenceOptions.NO_BASE_NO_HEAP_NO_EXCEPTIONS, ControlDependenceOptions.NONE)); + this(pa, new SDG<>(cg, pa, DataDependenceOptions.NO_BASE_NO_HEAP_NO_EXCEPTIONS, ControlDependenceOptions.NONE)); } public PABasedMemoryAccessMap(PointerAnalysis pa, SDG sdg) { @@ -71,7 +71,7 @@ public class PABasedMemoryAccessMap implements MemoryAccessMap { @Override public Collection getArrayReads(PointerKey arrayRef) { - Collection memAccesses = new ArrayList(); + Collection memAccesses = new ArrayList<>(); if (DEBUG) { System.err.println(("looking at reads of array ref " + arrayRef)); } @@ -84,7 +84,7 @@ public class PABasedMemoryAccessMap implements MemoryAccessMap { @Override public Collection getArrayWrites(PointerKey arrayRef) { - Collection memAccesses = new ArrayList(); + Collection memAccesses = new ArrayList<>(); if (DEBUG) { System.err.println(("looking at writes to array ref " + arrayRef)); } @@ -100,7 +100,7 @@ public class PABasedMemoryAccessMap implements MemoryAccessMap { @Override public Collection getFieldReads(PointerKey baseRef, IField field) { - Collection memAccesses = new ArrayList(); + Collection memAccesses = new ArrayList<>(); for (InstanceKey ik : pa.getPointsToSet(baseRef)) { PointerKey ifk = heapModel.getPointerKeyForInstanceField(ik, field); convertStmtsToMemoryAccess(invRef.get(ifk), memAccesses); @@ -110,7 +110,7 @@ public class PABasedMemoryAccessMap implements MemoryAccessMap { @Override public Collection getFieldWrites(PointerKey baseRef, IField field) { - Collection memAccesses = new ArrayList(); + Collection memAccesses = new ArrayList<>(); for (InstanceKey ik : pa.getPointsToSet(baseRef)) { PointerKey ifk = heapModel.getPointerKeyForInstanceField(ik, field); convertStmtsToMemoryAccess(invMod.get(ifk), memAccesses); @@ -120,14 +120,14 @@ public class PABasedMemoryAccessMap implements MemoryAccessMap { @Override public Collection getStaticFieldReads(IField field) { - Collection result = new ArrayList(); + Collection result = new ArrayList<>(); convertStmtsToMemoryAccess(invRef.get(heapModel.getPointerKeyForStaticField(field)), result); return result; } @Override public Collection getStaticFieldWrites(IField field) { - Collection result = new ArrayList(); + Collection result = new ArrayList<>(); convertStmtsToMemoryAccess(invMod.get(heapModel.getPointerKeyForStaticField(field)), result); return result; } diff --git a/com.ibm.wala.core/src/com/ibm/wala/demandpa/util/SimpleMemoryAccessMap.java b/com.ibm.wala.core/src/com/ibm/wala/demandpa/util/SimpleMemoryAccessMap.java index 63d9dd9e9..36b570f71 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/demandpa/util/SimpleMemoryAccessMap.java +++ b/com.ibm.wala.core/src/com/ibm/wala/demandpa/util/SimpleMemoryAccessMap.java @@ -437,7 +437,7 @@ public class SimpleMemoryAccessMap implements MemoryAccessMap { } public void repOk() { - for (MemoryAccess m : Iterator2Iterable.make(new CompoundIterator(arrayReads.iterator(), arrayWrites.iterator()))) { + for (MemoryAccess m : Iterator2Iterable.make(new CompoundIterator<>(arrayReads.iterator(), arrayWrites.iterator()))) { CGNode node = m.getNode(); IR ir = node.getIR(); assert ir != null : "null IR for " + node + " but we have a memory access"; diff --git a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/AnalysisScope.java b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/AnalysisScope.java index ab17fb164..20ea62235 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/AnalysisScope.java +++ b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/AnalysisScope.java @@ -118,7 +118,7 @@ public class AnalysisScope { */ private SetOfClasses exclusions; - final protected LinkedHashMap loadersByName = new LinkedHashMap(); + final protected LinkedHashMap loadersByName = new LinkedHashMap<>(); /** * Special class loader for array instances @@ -131,7 +131,7 @@ public class AnalysisScope { protected AnalysisScope(Collection languages) { super(); - this.languages = new HashMap(); + this.languages = new HashMap<>(); for (Language l : languages) { this.languages.put(l.getName(), l); } @@ -377,7 +377,7 @@ public class AnalysisScope { private JarFile getRtJar() { return RtJar.getRtJar( new MapIterator( - new FilterIterator(getModules(getPrimordialLoader()).iterator(), JarFileModule.class::isInstance), M -> ((JarFileModule) M).getJarFile())); + new FilterIterator<>(getModules(getPrimordialLoader()).iterator(), JarFileModule.class::isInstance), M -> ((JarFileModule) M).getJarFile())); } public String getJavaLibraryVersion() throws IllegalStateException { @@ -434,7 +434,7 @@ public class AnalysisScope { // Note: 'arrayClassLoader' object will be built from scratch in remote process // represent modules map as a set of strings (corresponding to analysis scope file lines. - List moduleLines = new ArrayList(); + List moduleLines = new ArrayList<>(); for (Map.Entry> e : moduleMap.entrySet()) { ClassLoaderReference lrReference = e.getKey(); String moduleLdr = lrReference.getName().toString(); @@ -467,7 +467,7 @@ public class AnalysisScope { } // represent loaderImplByRef map as set of strings - List ldrImplLines = new ArrayList(); + List ldrImplLines = new ArrayList<>(); for (Map.Entry e : loaderImplByRef.entrySet()) { ClassLoaderReference lrReference = e.getKey(); String ldrName = lrReference.getName().toString(); diff --git a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/CallGraphTransitiveClosure.java b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/CallGraphTransitiveClosure.java index 79b9fee90..e688b0556 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/CallGraphTransitiveClosure.java +++ b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/CallGraphTransitiveClosure.java @@ -41,13 +41,13 @@ public class CallGraphTransitiveClosure { public static Map> transitiveClosure(CallGraph cg, Map> nodeResults) { try { // invert the call graph, to compute the bottom-up result - GenReach gr = new GenReach(GraphInverter.invert(cg), nodeResults); - BitVectorSolver solver = new BitVectorSolver(gr); + GenReach gr = new GenReach<>(GraphInverter.invert(cg), nodeResults); + BitVectorSolver solver = new BitVectorSolver<>(gr); solver.solve(null); Map> result = HashMapFactory.make(); for (CGNode n : cg) { BitVectorVariable bv = solver.getOut(n); - result.put(n, new OrdinalSet(bv.getValue(), gr.getLatticeValues())); + result.put(n, new OrdinalSet<>(bv.getValue(), gr.getLatticeValues())); } return result; } catch (CancelException e) { diff --git a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/ContextItem.java b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/ContextItem.java index 8398d49aa..752c11bc7 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/ContextItem.java +++ b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/ContextItem.java @@ -28,7 +28,7 @@ public interface ContextItem { } public static Value make(T v) { - return new Value(v); + return new Value<>(v); } @Override diff --git a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/cha/CHACallGraph.java b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/cha/CHACallGraph.java index 3844c2696..6f88682df 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/cha/CHACallGraph.java +++ b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/cha/CHACallGraph.java @@ -160,7 +160,7 @@ public class CHACallGraph extends BasicCallGraph { public Set getPossibleTargets(CGNode node, CallSiteReference site) { return Iterator2Collection.toSet( new MapIterator( - new FilterIterator( + new FilterIterator<>( getPossibleTargets(site), this::isRelevantMethod ), @@ -182,7 +182,7 @@ public class CHACallGraph extends BasicCallGraph { @Override public Iterator getPossibleSites(final CGNode src, final CGNode target) { return - new FilterIterator(getInterpreter(src).iterateCallSites(src), + new FilterIterator<>(getInterpreter(src).iterateCallSites(src), o -> getPossibleTargets(src, o).contains(target)); } @@ -237,7 +237,7 @@ public class CHACallGraph extends BasicCallGraph { return n; } - private Stack newNodes = new Stack(); + private Stack newNodes = new Stack<>(); private void closure() throws CancelException { while (! newNodes.isEmpty()) { @@ -290,7 +290,7 @@ public class CHACallGraph extends BasicCallGraph { preds.add(node); } } - predecessors.put(n, new SoftReference>(preds)); + predecessors.put(n, new SoftReference<>(preds)); return preds; } } @@ -307,7 +307,7 @@ public class CHACallGraph extends BasicCallGraph { @Override public Iterator getSuccNodes(final CGNode n) { - return new FilterIterator(new ComposedIterator(n.iterateCallSites()) { + return new FilterIterator<>(new ComposedIterator(n.iterateCallSites()) { @Override public Iterator makeInner(CallSiteReference outer) { return getPossibleTargets(n, outer).iterator(); diff --git a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/impl/AbstractRootMethod.java b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/impl/AbstractRootMethod.java index c857370e4..08a367e17 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/impl/AbstractRootMethod.java +++ b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/impl/AbstractRootMethod.java @@ -54,7 +54,7 @@ import com.ibm.wala.util.warnings.Warnings; */ public abstract class AbstractRootMethod extends SyntheticMethod { - final protected ArrayList statements = new ArrayList(); + final protected ArrayList statements = new ArrayList<>(); private Map constant2ValueNumber = HashMapFactory.make(); @@ -361,7 +361,7 @@ public abstract class AbstractRootMethod extends SyntheticMethod { @Override public Iterator iterateNewSites(CGNode node) { - ArrayList result = new ArrayList(); + ArrayList result = new ArrayList<>(); SSAInstruction[] statements = getStatements(options.getSSAOptions()); for (SSAInstruction statement : statements) { if (statement instanceof SSANewInstruction) { @@ -373,7 +373,7 @@ public abstract class AbstractRootMethod extends SyntheticMethod { } public Iterator getInvokeStatements() { - ArrayList result = new ArrayList(); + ArrayList result = new ArrayList<>(); SSAInstruction[] statements = getStatements(options.getSSAOptions()); for (SSAInstruction statement : statements) { if (statement instanceof SSAInvokeInstruction) { 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 beb0c46ca..121508448 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 @@ -45,7 +45,7 @@ public abstract class BasicCallGraph extends AbstractNumberedGraph im private static final boolean DEBUG = false; - private final DelegatingNumberedNodeManager nodeManager = new DelegatingNumberedNodeManager(); + private final DelegatingNumberedNodeManager nodeManager = new DelegatingNumberedNodeManager<>(); /** * A fake root node for the graph @@ -231,7 +231,7 @@ public abstract class BasicCallGraph extends AbstractNumberedGraph im @Override public String toString() { StringBuffer result = new StringBuffer(""); - for (Iterator i = DFS.iterateDiscoverTime(this, new NonNullSingletonIterator(getFakeRootNode())); i.hasNext();) { + for (Iterator i = DFS.iterateDiscoverTime(this, new NonNullSingletonIterator<>(getFakeRootNode())); i.hasNext();) { CGNode n = i.next(); result.append(nodeToString(this, n) + "\n"); } 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 c972a6353..f4d6a5f84 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 @@ -137,12 +137,12 @@ public class ExplicitCallGraph extends BasicCallGraph imp * A Mapping from call site program counter (int) -> Object, where Object is a CGNode if we've discovered exactly one target for * the site, or an IntSet of node numbers if we've discovered more than one target for the site. */ - protected final SparseVector targets = new SparseVector(); + protected final SparseVector targets = new SparseVector<>(); private final MutableSharedBitVectorIntSet allTargets = new MutableSharedBitVectorIntSet(); - private WeakReference ir = new WeakReference(null); - private WeakReference du = new WeakReference(null); + private WeakReference ir = new WeakReference<>(null); + private WeakReference du = new WeakReference<>(null); /** * @param method @@ -186,7 +186,7 @@ public class ExplicitCallGraph extends BasicCallGraph imp */ protected Iterator getPossibleSites(final CGNode to) { final int n = getCallGraph().getNumber(to); - return new FilterIterator(iterateCallSites(), o -> { + return new FilterIterator<>(iterateCallSites(), o -> { IntSet s = getPossibleTargetNumbers(o); return s == null ? false : s.contains(n); }); @@ -304,7 +304,7 @@ public class ExplicitCallGraph extends BasicCallGraph imp IR ir = this.ir.get(); if (ir == null) { ir = getCallGraph().getInterpreter(this).getIR(this); - this.ir = new WeakReference(ir); + this.ir = new WeakReference<>(ir); } return ir; } @@ -319,7 +319,7 @@ public class ExplicitCallGraph extends BasicCallGraph imp DefUse du = this.du.get(); if (du == null) { du = getCallGraph().getInterpreter(this).getDU(this); - this.du = new WeakReference(du); + this.du = new WeakReference<>(du); } return du; } @@ -386,7 +386,7 @@ public class ExplicitCallGraph extends BasicCallGraph imp if (s == null) { return EmptyIterator.instance(); } else { - return new IntMapIterator(s.intIterator(), toNode); + return new IntMapIterator<>(s.intIterator(), toNode); } } @@ -400,7 +400,7 @@ public class ExplicitCallGraph extends BasicCallGraph imp @Override public Iterator getSuccNodes(CGNode N) { ExplicitNode n = (ExplicitNode) N; - return new IntMapIterator(n.getAllTargetNumbers().intIterator(), toNode); + return new IntMapIterator<>(n.getAllTargetNumbers().intIterator(), toNode); } @Override diff --git a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/impl/PartialCallGraph.java b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/impl/PartialCallGraph.java index ea18eb079..599aab9aa 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/impl/PartialCallGraph.java +++ b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/impl/PartialCallGraph.java @@ -112,7 +112,7 @@ public class PartialCallGraph extends DelegatingGraph implements CallGra @Override public Iterator iterateNodes(IntSet nodes) { - return new FilterIterator(cg.iterateNodes(nodes), this::containsNode); + return new FilterIterator<>(cg.iterateNodes(nodes), this::containsNode); } @Override 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 fc18f5380..e309b5f19 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 @@ -46,7 +46,7 @@ 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/AllocationSite.java b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/AllocationSite.java index bb22964d9..24bd82646 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/AllocationSite.java +++ b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/AllocationSite.java @@ -91,8 +91,8 @@ public class AllocationSite implements InstanceKey { @Override public Iterator> getCreationSites(CallGraph CG) { - return new MapIterator>( - new FilterIterator( + return new MapIterator<>( + new FilterIterator<>( CG.getNodes(method.getReference()).iterator(), o -> o.getMethod().equals(method) ), diff --git a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/AllocationSiteInNode.java b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/AllocationSiteInNode.java index 093904782..6dccd36c0 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/AllocationSiteInNode.java +++ b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/AllocationSiteInNode.java @@ -50,7 +50,7 @@ public abstract class AllocationSiteInNode extends AbstractTypeInNode { @Override public Iterator> getCreationSites(CallGraph CG) { - return new NonNullSingletonIterator>(Pair.make(getNode(), getSite())); + return new NonNullSingletonIterator<>(Pair.make(getNode(), getSite())); } } diff --git a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/AllocationSiteInNodeFactory.java b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/AllocationSiteInNodeFactory.java index 93caa43c3..6e3192a2d 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/AllocationSiteInNodeFactory.java +++ b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/AllocationSiteInNodeFactory.java @@ -119,7 +119,7 @@ public class AllocationSiteInNodeFactory implements InstanceKeyFactory { @Override public InstanceKey getInstanceKeyForConstant(TypeReference type, T S) { if (options.getUseConstantSpecificKeys()) { - return new ConstantKey(S, cha.lookupClass(type)); + return new ConstantKey<>(S, cha.lookupClass(type)); } else { return new ConcreteTypeKey(cha.lookupClass(type)); } diff --git a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/ClassBasedInstanceKeys.java b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/ClassBasedInstanceKeys.java index a3228e412..cad5a75f5 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/ClassBasedInstanceKeys.java +++ b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/ClassBasedInstanceKeys.java @@ -107,7 +107,7 @@ public class ClassBasedInstanceKeys implements InstanceKeyFactory { return null; } else { if (options.getUseConstantSpecificKeys()) { - return new ConstantKey(S, cha.lookupClass(type)); + return new ConstantKey<>(S, cha.lookupClass(type)); } else { return new ConcreteTypeKey(cha.lookupClass(type)); } @@ -136,17 +136,17 @@ public class ClassBasedInstanceKeys implements InstanceKeyFactory { return new ConcreteTypeKey(cls); } else { // return the IClass itself, wrapped as a constant! - return new ConstantKey(klass, cls); + return new ConstantKey<>(klass, cls); } } else if (obj instanceof MethodReference) { IMethod m = cha.resolveMethod((MethodReference)obj); if (m == null) { return new ConcreteTypeKey(cls); } else { - return new ConstantKey(m, cls); + return new ConstantKey<>(m, cls); } } else if (obj instanceof Descriptor) { - return new ConstantKey((Descriptor)obj, cls); + return new ConstantKey<>((Descriptor)obj, cls); } else { // other cases throw new Error(); diff --git a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/ConcreteTypeKey.java b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/ConcreteTypeKey.java index d22c66b8d..620b8e2ea 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/ConcreteTypeKey.java +++ b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/ConcreteTypeKey.java @@ -104,8 +104,8 @@ public final class ConcreteTypeKey implements InstanceKey { return new ComposedIterator>(CG.iterator()) { @Override public Iterator> makeInner(final CGNode outer) { - return new MapIterator>( - new FilterIterator( + return new MapIterator<>( + new FilterIterator<>( outer.iterateNewSites(), o -> o.getDeclaredType().equals(type.getReference()) ), diff --git a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/PointerAnalysisImpl.java b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/PointerAnalysisImpl.java index d74b60ddd..f4331207b 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/PointerAnalysisImpl.java +++ b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/PointerAnalysisImpl.java @@ -135,7 +135,7 @@ public class PointerAnalysisImpl extends AbstractPointerAnalysis { return OrdinalSet.empty(); } else { IntSet S = v.getValue(); - return new OrdinalSet(S, instanceKeys); + return new OrdinalSet<>(S, instanceKeys); } } @@ -261,7 +261,7 @@ public class PointerAnalysisImpl extends AbstractPointerAnalysis { } } } - return new OrdinalSet(S, instanceKeys); + return new OrdinalSet<>(S, instanceKeys); } private OrdinalSet computeImplicitPointsToSetAtPhi(CGNode node, SSAPhiInstruction instruction) { @@ -277,7 +277,7 @@ public class PointerAnalysisImpl extends AbstractPointerAnalysis { } } } - return new OrdinalSet(S, instanceKeys); + return new OrdinalSet<>(S, instanceKeys); } private OrdinalSet computeImplicitPointsToSetAtALoad(CGNode node, SSAArrayLoadInstruction instruction) { @@ -292,7 +292,7 @@ public class PointerAnalysisImpl extends AbstractPointerAnalysis { S.addAll(set); } } - return new OrdinalSet(S, instanceKeys); + return new OrdinalSet<>(S, instanceKeys); } private OrdinalSet computeImplicitPointsToSetAtGet(CGNode node, SSAGetInstruction instruction) { @@ -321,7 +321,7 @@ public class PointerAnalysisImpl extends AbstractPointerAnalysis { } } } - return new OrdinalSet(S, instanceKeys); + return new OrdinalSet<>(S, instanceKeys); } } @@ -369,7 +369,7 @@ public class PointerAnalysisImpl extends AbstractPointerAnalysis { } } } - return new OrdinalSet(S, instanceKeys); + return new OrdinalSet<>(S, instanceKeys); } private OrdinalSet computeImplicitPointsToSetAtCheckCast(CGNode node, SSACheckCastInstruction instruction) { @@ -397,7 +397,7 @@ public class PointerAnalysisImpl extends AbstractPointerAnalysis { } } } - return new OrdinalSet(S, instanceKeys); + return new OrdinalSet<>(S, instanceKeys); } private OrdinalSet computeImplicitPointsToSetAtCall(LocalPointerKey lpk, CGNode node, SSAInvokeInstruction call) { @@ -420,7 +420,7 @@ public class PointerAnalysisImpl extends AbstractPointerAnalysis { assert index != -1 : "instance " + element + " not mapped!"; } } - return new OrdinalSet(s, instanceKeys); + return new OrdinalSet<>(s, instanceKeys); } /** @@ -435,7 +435,7 @@ public class PointerAnalysisImpl extends AbstractPointerAnalysis { S.addAll(set); } } - return new OrdinalSet(S, instanceKeys); + return new OrdinalSet<>(S, instanceKeys); } /* diff --git a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/PointsToMap.java b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/PointsToMap.java index 4469fb4dc..7a9034b2e 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/PointsToMap.java +++ b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/PointsToMap.java @@ -41,7 +41,7 @@ public class PointsToMap { *
  • UNIFIED * */ - private final IVector pointsToSets = new SimpleVector(); + private final IVector pointsToSets = new SimpleVector<>(); private final IntegerUnionFind uf = new IntegerUnionFind(); @@ -200,7 +200,7 @@ public class PointsToMap { * @return {@link Iterator}<{@link PointerKey}> */ public Iterator getTransitiveRoots() { - return new FilterIterator(iterateKeys(), this::isTransitiveRoot); + return new FilterIterator<>(iterateKeys(), this::isTransitiveRoot); } /** diff --git a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/PropagationGraph.java b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/PropagationGraph.java index 453f003bb..218266c3a 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/PropagationGraph.java +++ b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/PropagationGraph.java @@ -56,12 +56,12 @@ public class PropagationGraph implements IFixedPointSystem /** * Track nodes (PointsToSet Variables and AbstractEquations) */ - private final NumberedNodeManager nodeManager = new DelegatingNumberedNodeManager(); + private final NumberedNodeManager nodeManager = new DelegatingNumberedNodeManager<>(); /** * Track edges (equations) that are not represented implicitly */ - private final NumberedEdgeManager edgeManager = new SparseNumberedEdgeManager(nodeManager, 2, + private final NumberedEdgeManager edgeManager = new SparseNumberedEdgeManager<>(nodeManager, 2, BasicNaturalRelation.SIMPLE); private final DelegateGraph delegateGraph = new DelegateGraph(); @@ -75,14 +75,14 @@ public class PropagationGraph implements IFixedPointSystem * for UnaryOperator op, let R be implicitMap.get(op) then (i,j) \in R implies i op j is an equation in the graph * */ - private final SmallMap, IBinaryNaturalRelation> implicitUnaryMap = new SmallMap, IBinaryNaturalRelation>(); + private final SmallMap, IBinaryNaturalRelation> implicitUnaryMap = new SmallMap<>(); /** * The inverse of relations in the implicit map * * for UnaryOperator op, let R be invImplicitMap.get(op) then (i,j) \in R implies j op i is an equation in the graph */ - private final SmallMap, IBinaryNaturalRelation> invImplicitUnaryMap = new SmallMap, IBinaryNaturalRelation>(); + private final SmallMap, IBinaryNaturalRelation> invImplicitUnaryMap = new SmallMap<>(); /** * Number of implicit unary equations registered @@ -271,7 +271,7 @@ public class PropagationGraph implements IFixedPointSystem @Override public Iterator getStatements() { Iterator it = IteratorUtil.filter(delegateGraph.iterator(), AbstractStatement.class); - return new CompoundIterator(it, new GlobalImplicitIterator()); + return new CompoundIterator<>(it, new GlobalImplicitIterator()); } /** @@ -668,10 +668,10 @@ public class PropagationGraph implements IFixedPointSystem IBinaryNaturalRelation R = (IBinaryNaturalRelation) invImplicitUnaryMap.getValue(i); IntSet s = R.getRelated(number); if (s != null) { - result = new CompoundIterator(new ImplicitUseIterator(op, v, s), result); + result = new CompoundIterator<>(new ImplicitUseIterator(op, v, s), result); } } - List list = new ArrayList(); + List list = new ArrayList<>(); while (result.hasNext()) { list.add((AbstractStatement) result.next()); } @@ -694,11 +694,11 @@ public class PropagationGraph implements IFixedPointSystem IBinaryNaturalRelation R = (IBinaryNaturalRelation) implicitUnaryMap.getValue(i); IntSet s = R.getRelated(number); if (s != null) { - result = new CompoundIterator(new ImplicitDefIterator(op, s, v), result); + result = new CompoundIterator<>(new ImplicitDefIterator(op, s, v), result); } } - List list = new ArrayList(); + List list = new ArrayList<>(); while (result.hasNext()) { list.add((AbstractStatement) result.next()); } diff --git a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/PropagationSystem.java b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/PropagationSystem.java index fc56ea7e8..41f683ea4 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/PropagationSystem.java +++ b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/PropagationSystem.java @@ -212,7 +212,7 @@ public class PropagationSystem extends DefaultFixedPointSolver getInstances(IntSet set) { - LinkedList result = new LinkedList(); + LinkedList result = new LinkedList<>(); for (IntIterator it = set.intIterator(); it.hasNext();) { int j = it.next(); result.add(getInstanceKey(j)); diff --git a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/SSAPropagationCallGraphBuilder.java b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/SSAPropagationCallGraphBuilder.java index 6c291bf58..2a6a3d771 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/SSAPropagationCallGraphBuilder.java +++ b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/SSAPropagationCallGraphBuilder.java @@ -483,7 +483,7 @@ public abstract class SSAPropagationCallGraphBuilder extends PropagationCallGrap System.err.println("getIncomingPEIs " + bb); } ControlFlowGraph g = ir.getControlFlowGraph(); - List result = new ArrayList(g.getPredNodeCount(bb)); + List result = new ArrayList<>(g.getPredNodeCount(bb)); for (Iterator it = g.getPredNodes(bb); it.hasNext();) { BasicBlock pred = (BasicBlock) it.next(); if (DEBUG) { @@ -1167,7 +1167,7 @@ public abstract class SSAPropagationCallGraphBuilder extends PropagationCallGrap System.err.println("Add side effect, dispatch to " + instruction + " for " + params); } - final List pks = new ArrayList(params.size()); + final List pks = new ArrayList<>(params.size()); params.foreach(x -> { if (!contentsAreInvariant(symbolTable, du, instruction.getUse(x))) { pks.add(getBuilder().getPointerKeyForLocal(node, instruction.getUse(x))); diff --git a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/SmushedAllocationSiteInNode.java b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/SmushedAllocationSiteInNode.java index 0a0c59cb3..40feb5be2 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/SmushedAllocationSiteInNode.java +++ b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/SmushedAllocationSiteInNode.java @@ -54,8 +54,8 @@ public class SmushedAllocationSiteInNode extends AbstractTypeInNode { @Override public Iterator> getCreationSites(CallGraph CG) { - return new MapIterator>( - new FilterIterator( + return new MapIterator<>( + new FilterIterator<>( getNode().iterateNewSites(), o -> o.getDeclaredType().equals(getConcreteType().getReference())), object -> Pair.make(getNode(), object)); diff --git a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/SmushedAllocationSiteInstanceKeys.java b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/SmushedAllocationSiteInstanceKeys.java index e33cbd49c..559469780 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/SmushedAllocationSiteInstanceKeys.java +++ b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/SmushedAllocationSiteInstanceKeys.java @@ -83,7 +83,7 @@ public class SmushedAllocationSiteInstanceKeys implements InstanceKeyFactory { @Override public InstanceKey getInstanceKeyForConstant(TypeReference type, T S) { if (options.getUseConstantSpecificKeys()) - return new ConstantKey(S, cha.lookupClass(type)); + return new ConstantKey<>(S, cha.lookupClass(type)); else return new ConcreteTypeKey(cha.lookupClass(type)); } diff --git a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/cfa/ZeroXInstanceKeys.java b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/cfa/ZeroXInstanceKeys.java index a41cef186..9ddaa8b64 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/cfa/ZeroXInstanceKeys.java +++ b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/cfa/ZeroXInstanceKeys.java @@ -261,7 +261,7 @@ public class ZeroXInstanceKeys implements InstanceKeyFactory { throw new IllegalArgumentException("null type"); } if (disambiguateConstants() || isReflectiveType(type)) { - return new ConstantKey(S, getClassHierarchy().lookupClass(type)); + return new ConstantKey<>(S, getClassHierarchy().lookupClass(type)); } else { return classBased.getInstanceKeyForConstant(type, S); } diff --git a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/rta/TypeBasedPointerAnalysis.java b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/rta/TypeBasedPointerAnalysis.java index 3480cdb28..c43836c1b 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/rta/TypeBasedPointerAnalysis.java +++ b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/rta/TypeBasedPointerAnalysis.java @@ -143,7 +143,7 @@ public class TypeBasedPointerAnalysis extends AbstractPointerAnalysis { int index = getInstanceKeyMapping().add(new ConcreteTypeKey(klass)); s.add(index); } - return new OrdinalSet(s, getInstanceKeyMapping()); + return new OrdinalSet<>(s, getInstanceKeyMapping()); } private IClass inferType(PointerKey key) { diff --git a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/pruned/CallGraphPruning.java b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/pruned/CallGraphPruning.java index 8b651f153..e2700648f 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/pruned/CallGraphPruning.java +++ b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/pruned/CallGraphPruning.java @@ -70,9 +70,9 @@ public final class CallGraphPruning { System.out.println("Running optimization with depth: " + depth); } - this.marked = new LinkedList(); - this.keep = new HashSet(); - this.visited = new LinkedList(); + this.marked = new LinkedList<>(); + this.keep = new HashSet<>(); + this.visited = new LinkedList<>(); this.depth = depth; this.pruningPolicy = policy; @@ -107,8 +107,8 @@ public final class CallGraphPruning { private void addDepth(CGNode node) { - LinkedList A = new LinkedList(); - LinkedList B = new LinkedList(); + LinkedList A = new LinkedList<>(); + LinkedList B = new LinkedList<>(); int i = depth; A.add(node); while (i > 0) { diff --git a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/pruned/PrunedCallGraph.java b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/pruned/PrunedCallGraph.java index e4cedb132..d27898587 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/pruned/PrunedCallGraph.java +++ b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/pruned/PrunedCallGraph.java @@ -55,7 +55,7 @@ public class PrunedCallGraph implements CallGraph { @Override public Iterator iterator() { Iterator tmp = cg.iterator(); - Collection col = new LinkedList(); + Collection col = new LinkedList<>(); while (tmp.hasNext()) { CGNode n = tmp.next(); if (keep.contains(n)) { @@ -96,7 +96,7 @@ public class PrunedCallGraph implements CallGraph { @Override public Iterator getPredNodes(CGNode n) { Iterator tmp = cg.getPredNodes(n); - Collection col = new LinkedList(); + Collection col = new LinkedList<>(); while (tmp.hasNext()) { CGNode no = tmp.next(); if (keep.contains(no) && !removedEdge(no, n)) { @@ -124,7 +124,7 @@ public class PrunedCallGraph implements CallGraph { @Override public Iterator getSuccNodes(CGNode n) { Iterator tmp = cg.getSuccNodes(n); - Collection col = new LinkedList(); + Collection col = new LinkedList<>(); while (tmp.hasNext()) { CGNode no = tmp.next(); if (keep.contains(no) && !removedEdge(n, no)) { @@ -218,7 +218,7 @@ public class PrunedCallGraph implements CallGraph { @Override public Iterator iterateNodes(IntSet s) { Iterator tmp = cg.iterateNodes(s); - Collection col = new LinkedList(); + Collection col = new LinkedList<>(); while (tmp.hasNext()) { CGNode n = tmp.next(); if (keep.contains(n)) { @@ -287,7 +287,7 @@ public class PrunedCallGraph implements CallGraph { @Override public Collection getEntrypointNodes() { Collection tmp = cg.getEntrypointNodes(); - Set ret = new HashSet(); + Set ret = new HashSet<>(); for (CGNode n : tmp) { if (keep.contains(n)) { ret.add(n); @@ -310,7 +310,7 @@ public class PrunedCallGraph implements CallGraph { @Override public Set getNodes(MethodReference m) { Set tmp = cg.getNodes(m); - Set ret = new HashSet(); + Set ret = new HashSet<>(); for (CGNode n : tmp) { if (keep.contains(n)) { ret.add(n); @@ -332,7 +332,7 @@ public class PrunedCallGraph implements CallGraph { return null; } Set tmp = cg.getPossibleTargets(node, site); - Set ret = new HashSet(); + Set ret = new HashSet<>(); for (CGNode n : tmp) { if (keep.contains(n) && !removedEdge(node, n)) { ret.add(n); diff --git a/com.ibm.wala.core/src/com/ibm/wala/ipa/cfg/AbstractInterproceduralCFG.java b/com.ibm.wala.core/src/com/ibm/wala/ipa/cfg/AbstractInterproceduralCFG.java index 27606d83e..371e0eb9d 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/ipa/cfg/AbstractInterproceduralCFG.java +++ b/com.ibm.wala.core/src/com/ibm/wala/ipa/cfg/AbstractInterproceduralCFG.java @@ -55,7 +55,7 @@ public abstract class AbstractInterproceduralCFG imple /** * Graph implementation we delegate to. */ - final private NumberedGraph> g = new SlowSparseNumberedGraph>(2); + final private NumberedGraph> g = new SlowSparseNumberedGraph<>(2); /** * Governing call graph @@ -190,8 +190,8 @@ public abstract class AbstractInterproceduralCFG imple if (pb.equals(cfg.entry())) { // entry block has no instructions - BasicBlockInContext p = new BasicBlockInContext(n, pb); - BasicBlockInContext b = new BasicBlockInContext(n, bb); + BasicBlockInContext p = new BasicBlockInContext<>(n, pb); + BasicBlockInContext b = new BasicBlockInContext<>(n, bb); g.addEdge(p, b); continue; } @@ -204,14 +204,14 @@ public abstract class AbstractInterproceduralCFG imple if (inst instanceof SSAAbstractInvokeInstruction) { if (CALL_TO_RETURN_EDGES) { // Add a "normal" edge from the predecessor block to this block. - BasicBlockInContext p = new BasicBlockInContext(n, pb); - BasicBlockInContext b = new BasicBlockInContext(n, bb); + BasicBlockInContext p = new BasicBlockInContext<>(n, pb); + BasicBlockInContext b = new BasicBlockInContext<>(n, bb); g.addEdge(p, b); } } else { // previous instruction is not a call instruction. - BasicBlockInContext p = new BasicBlockInContext(n, pb); - BasicBlockInContext b = new BasicBlockInContext(n, bb); + BasicBlockInContext p = new BasicBlockInContext<>(n, pb); + BasicBlockInContext b = new BasicBlockInContext<>(n, bb); if (!g.containsNode(p) || !g.containsNode(b)) { assert g.containsNode(p) : "IPCFG does not contain " + p; assert g.containsNode(b) : "IPCFG does not contain " + b; @@ -238,9 +238,9 @@ public abstract class AbstractInterproceduralCFG imple private void addEdgesFromExitToReturn(CGNode caller, T returnBlock, CGNode target, ControlFlowGraph targetCFG) { T texit = targetCFG.exit(); - BasicBlockInContext exit = new BasicBlockInContext(target, texit); + BasicBlockInContext exit = new BasicBlockInContext<>(target, texit); addNodeForBasicBlockIfNeeded(exit); - BasicBlockInContext ret = new BasicBlockInContext(caller, returnBlock); + BasicBlockInContext ret = new BasicBlockInContext<>(caller, returnBlock); if (!g.containsNode(exit) || !g.containsNode(ret)) { assert g.containsNode(exit) : "IPCFG does not contain " + exit; assert g.containsNode(ret) : "IPCFG does not contain " + ret; @@ -261,9 +261,9 @@ public abstract class AbstractInterproceduralCFG imple private void addEdgesFromCallToEntry(CGNode caller, T callBlock, CGNode target, ControlFlowGraph targetCFG) { T tentry = targetCFG.entry(); - BasicBlockInContext entry = new BasicBlockInContext(target, tentry); + BasicBlockInContext entry = new BasicBlockInContext<>(target, tentry); addNodeForBasicBlockIfNeeded(entry); - BasicBlockInContext call = new BasicBlockInContext(caller, callBlock); + BasicBlockInContext call = new BasicBlockInContext<>(caller, callBlock); if (!g.containsNode(entry) || !g.containsNode(call)) { assert g.containsNode(entry) : "IPCFG does not contain " + entry; assert g.containsNode(call) : "IPCFG does not contain " + call; @@ -325,16 +325,16 @@ public abstract class AbstractInterproceduralCFG imple System.err.println("Adding edge " + ccfg.getBlockForInstruction(i) + " to " + entryBlock); } T callerBB = ccfg.getBlockForInstruction(i); - BasicBlockInContext b1 = new BasicBlockInContext(caller, callerBB); + BasicBlockInContext b1 = new BasicBlockInContext<>(caller, callerBB); // need to add a node for caller basic block, in case we haven't processed caller yet addNodeForBasicBlockIfNeeded(b1); - BasicBlockInContext b2 = new BasicBlockInContext(n, entryBlock); + BasicBlockInContext b2 = new BasicBlockInContext<>(n, entryBlock); g.addEdge(b1, b2); // also add edges from exit node to all return nodes (successor of call bb) for (Iterator succIter = ccfg.getSuccNodes(callerBB); succIter.hasNext();) { T returnBB = succIter.next(); - BasicBlockInContext b3 = new BasicBlockInContext(n, exitBlock); - BasicBlockInContext b4 = new BasicBlockInContext(caller, returnBB); + BasicBlockInContext b3 = new BasicBlockInContext<>(n, exitBlock); + BasicBlockInContext b4 = new BasicBlockInContext<>(caller, returnBB); addNodeForBasicBlockIfNeeded(b4); g.addEdge(b3, b4); } @@ -355,7 +355,7 @@ public abstract class AbstractInterproceduralCFG imple if (DEBUG_LEVEL > 1) { System.err.println("IPCFG Add basic block " + bb); } - BasicBlockInContext b = new BasicBlockInContext(N, bb); + BasicBlockInContext b = new BasicBlockInContext<>(N, bb); addNodeForBasicBlockIfNeeded(b); } } @@ -455,7 +455,7 @@ public abstract class AbstractInterproceduralCFG imple ControlFlowGraph cfg = getCFG(n); if (cfg != null) { for (T bb : cfg) { - BasicBlockInContext block = new BasicBlockInContext(n, bb); + BasicBlockInContext block = new BasicBlockInContext<>(n, bb); if (hasCall(block)) { addCalleeEdgesForCall(n, block); } @@ -474,7 +474,7 @@ public abstract class AbstractInterproceduralCFG imple ControlFlowGraph cfg = getCFG(returnBlock); for (Iterator it = cfg.getPredNodes(returnBlock.getDelegate()); it.hasNext();) { T b = it.next(); - final BasicBlockInContext block = new BasicBlockInContext(node, b); + final BasicBlockInContext block = new BasicBlockInContext<>(node, b); if (hasCall(block)) { addCalleeEdgesForCall(node, block); } @@ -519,7 +519,7 @@ public abstract class AbstractInterproceduralCFG imple addEdgesFromExitToReturn(n, retBlock, tn, tcfg); if (irrelevantTargets) { // Add a "normal" edge from the call block to the return block. - g.addEdge(callBlock, new BasicBlockInContext(n, retBlock)); + g.addEdge(callBlock, new BasicBlockInContext<>(n, retBlock)); } } } @@ -813,7 +813,7 @@ public abstract class AbstractInterproceduralCFG imple ControlFlowGraph cfg = getCFG(n); if (cfg != null) { T entry = cfg.entry(); - return new BasicBlockInContext(n, entry); + return new BasicBlockInContext<>(n, entry); } else { return null; } @@ -822,7 +822,7 @@ public abstract class AbstractInterproceduralCFG imple public BasicBlockInContext getExit(CGNode n) { ControlFlowGraph cfg = getCFG(n); T entry = cfg.exit(); - return new BasicBlockInContext(n, entry); + return new BasicBlockInContext<>(n, entry); } /** @@ -839,7 +839,7 @@ public abstract class AbstractInterproceduralCFG imple // a successor node is a return site if it is in the same // procedure, and is not the entry() node. Predicate isReturn = other -> !other.isEntryBlock() && node.equals(other.getNode()); - return new FilterIterator>(getSuccNodes(callBlock), isReturn); + return new FilterIterator<>(getSuccNodes(callBlock), isReturn); } /** @@ -855,7 +855,7 @@ public abstract class AbstractInterproceduralCFG imple final CGNode node = returnBlock.getNode(); Predicate dispatchFilter = callBlock -> { - BasicBlockInContext bb = new BasicBlockInContext(node, callBlock); + BasicBlockInContext bb = new BasicBlockInContext<>(node, callBlock); if (!hasCall(bb, cfg)) { return false; } @@ -869,10 +869,10 @@ public abstract class AbstractInterproceduralCFG imple Function> toContext = object -> { T b = object; - return new BasicBlockInContext(node, b); + return new BasicBlockInContext<>(node, b); }; - MapIterator> m = new MapIterator>(it, toContext); - return new FilterIterator>(m, isCall); + MapIterator> m = new MapIterator<>(it, toContext); + return new FilterIterator<>(m, isCall); } private final Predicate> isCall = this::hasCall; @@ -884,7 +884,7 @@ public abstract class AbstractInterproceduralCFG imple ControlFlowGraph cfg = getCFG(bb); for (Iterator it = cfg.getPredNodes(bb.getDelegate()); it.hasNext();) { T b = it.next(); - if (hasCall(new BasicBlockInContext(bb.getNode(), b))) { + if (hasCall(new BasicBlockInContext<>(bb.getNode(), b))) { return true; } } diff --git a/com.ibm.wala.core/src/com/ibm/wala/ipa/cfg/ExceptionPrunedCFG.java b/com.ibm.wala.core/src/com/ibm/wala/ipa/cfg/ExceptionPrunedCFG.java index 75505c011..225d856cb 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/ipa/cfg/ExceptionPrunedCFG.java +++ b/com.ibm.wala.core/src/com/ibm/wala/ipa/cfg/ExceptionPrunedCFG.java @@ -37,7 +37,7 @@ public class ExceptionPrunedCFG { } public static > PrunedCFG make(ControlFlowGraph cfg) { - return PrunedCFG.make(cfg, new ExceptionEdgePruner(cfg)); + return PrunedCFG.make(cfg, new ExceptionEdgePruner<>(cfg)); } } diff --git a/com.ibm.wala.core/src/com/ibm/wala/ipa/cfg/PrunedCFG.java b/com.ibm.wala.core/src/com/ibm/wala/ipa/cfg/PrunedCFG.java index 3e6ef1297..3195f34c0 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/ipa/cfg/PrunedCFG.java +++ b/com.ibm.wala.core/src/com/ibm/wala/ipa/cfg/PrunedCFG.java @@ -51,7 +51,7 @@ public class PrunedCFG> extends AbstractNumberedGrap if (cfg == null) { throw new IllegalArgumentException("cfg is null"); } - return new PrunedCFG(cfg, filter); + return new PrunedCFG<>(cfg, filter); } private static class FilteredCFGEdges> implements NumberedEdgeManager { @@ -68,24 +68,24 @@ public class PrunedCFG> extends AbstractNumberedGrap } public Iterator getExceptionalSuccessors(final T N) { - return new FilterIterator(cfg.getExceptionalSuccessors(N).iterator(), o -> currentCFGNodes.containsNode(o) && filter.hasExceptionalEdge(N, o)); + return new FilterIterator<>(cfg.getExceptionalSuccessors(N).iterator(), o -> currentCFGNodes.containsNode(o) && filter.hasExceptionalEdge(N, o)); } public Iterator getNormalSuccessors(final T N) { - return new FilterIterator(cfg.getNormalSuccessors(N).iterator(), o -> currentCFGNodes.containsNode(o) && filter.hasNormalEdge(N, o)); + return new FilterIterator<>(cfg.getNormalSuccessors(N).iterator(), o -> currentCFGNodes.containsNode(o) && filter.hasNormalEdge(N, o)); } public Iterator getExceptionalPredecessors(final T N) { - return new FilterIterator(cfg.getExceptionalPredecessors(N).iterator(), o -> currentCFGNodes.containsNode(o) && filter.hasExceptionalEdge(o, N)); + return new FilterIterator<>(cfg.getExceptionalPredecessors(N).iterator(), o -> currentCFGNodes.containsNode(o) && filter.hasExceptionalEdge(o, N)); } public Iterator getNormalPredecessors(final T N) { - return new FilterIterator(cfg.getNormalPredecessors(N).iterator(), o -> currentCFGNodes.containsNode(o) && filter.hasNormalEdge(o, N)); + return new FilterIterator<>(cfg.getNormalPredecessors(N).iterator(), o -> currentCFGNodes.containsNode(o) && filter.hasNormalEdge(o, N)); } @Override public Iterator getSuccNodes(final T N) { - return new FilterIterator(cfg.getSuccNodes(N), o -> currentCFGNodes.containsNode(o) && (filter.hasNormalEdge(N, o) || filter.hasExceptionalEdge(N, o))); + return new FilterIterator<>(cfg.getSuccNodes(N), o -> currentCFGNodes.containsNode(o) && (filter.hasNormalEdge(N, o) || filter.hasExceptionalEdge(N, o))); } @Override @@ -105,7 +105,7 @@ public class PrunedCFG> extends AbstractNumberedGrap @Override public Iterator getPredNodes(final T N) { - return new FilterIterator(cfg.getPredNodes(N), o -> currentCFGNodes.containsNode(o) && (filter.hasNormalEdge(o, N) || filter.hasExceptionalEdge(o, N))); + return new FilterIterator<>(cfg.getPredNodes(N), o -> currentCFGNodes.containsNode(o) && (filter.hasNormalEdge(o, N) || filter.hasExceptionalEdge(o, N))); } @Override @@ -200,7 +200,7 @@ public class PrunedCFG> extends AbstractNumberedGrap } private Iterator filterNodes(Iterator nodeIterator) { - return new FilterIterator(nodeIterator, subset::contains); + return new FilterIterator<>(nodeIterator, subset::contains); } @Override @@ -243,7 +243,7 @@ public class PrunedCFG> extends AbstractNumberedGrap private PrunedCFG(final ControlFlowGraph cfg, final EdgeFilter filter) { this.cfg = cfg; Graph temp = new AbstractNumberedGraph() { - private final NumberedEdgeManager edges = new FilteredCFGEdges(cfg, cfg, filter); + private final NumberedEdgeManager edges = new FilteredCFGEdges<>(cfg, cfg, filter); @Override protected NumberedNodeManager getNodeManager() { @@ -262,8 +262,8 @@ public class PrunedCFG> extends AbstractNumberedGrap reachable.add(cfg.entry()); reachable.add(cfg.exit()); - this.nodes = new FilteredNodes(cfg, reachable); - this.edges = new FilteredCFGEdges(cfg, nodes, filter); + this.nodes = new FilteredNodes<>(cfg, reachable); + this.edges = new FilteredCFGEdges<>(cfg, nodes, filter); } @Override @@ -278,7 +278,7 @@ public class PrunedCFG> extends AbstractNumberedGrap @Override public List getExceptionalSuccessors(final T N) { - ArrayList result = new ArrayList(); + ArrayList result = new ArrayList<>(); for (Iterator it = edges.getExceptionalSuccessors(N); it.hasNext();) { result.add(it.next()); } diff --git a/com.ibm.wala.core/src/com/ibm/wala/ipa/cfg/exceptionpruning/filter/ArrayOutOfBoundFilter.java b/com.ibm.wala.core/src/com/ibm/wala/ipa/cfg/exceptionpruning/filter/ArrayOutOfBoundFilter.java index 806fe63bc..b30c0f35c 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/ipa/cfg/exceptionpruning/filter/ArrayOutOfBoundFilter.java +++ b/com.ibm.wala.core/src/com/ibm/wala/ipa/cfg/exceptionpruning/filter/ArrayOutOfBoundFilter.java @@ -37,7 +37,7 @@ public class ArrayOutOfBoundFilter implements ExceptionFilter { .getBoundsCheckNecessary().get(instruction); if (unnecessary == UnnecessaryCheck.BOTH) { - final LinkedList result = new LinkedList(); + final LinkedList result = new LinkedList<>(); result.add(new FilteredException( TypeReference.JavaLangArrayIndexOutOfBoundsException)); diff --git a/com.ibm.wala.core/src/com/ibm/wala/ipa/cfg/exceptionpruning/filter/NullPointerExceptionFilter.java b/com.ibm.wala.core/src/com/ibm/wala/ipa/cfg/exceptionpruning/filter/NullPointerExceptionFilter.java index 7a254b55a..4b05a3cbf 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/ipa/cfg/exceptionpruning/filter/NullPointerExceptionFilter.java +++ b/com.ibm.wala.core/src/com/ibm/wala/ipa/cfg/exceptionpruning/filter/NullPointerExceptionFilter.java @@ -35,7 +35,7 @@ ExceptionFilter { public Collection filteredExceptions( SSAInstruction instruction) { if (this.analysis.nullPointerExceptionThrowState(instruction) == State.NOT_NULL) { - final LinkedList result = new LinkedList(); + final LinkedList result = new LinkedList<>(); result.add(new FilteredException( TypeReference.JavaLangNullPointerException)); return result; diff --git a/com.ibm.wala.core/src/com/ibm/wala/ipa/cfg/exceptionpruning/interprocedural/CombinedInterproceduralExceptionFilter.java b/com.ibm.wala.core/src/com/ibm/wala/ipa/cfg/exceptionpruning/interprocedural/CombinedInterproceduralExceptionFilter.java index 827d6c6ba..67cc70bbe 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/ipa/cfg/exceptionpruning/interprocedural/CombinedInterproceduralExceptionFilter.java +++ b/com.ibm.wala.core/src/com/ibm/wala/ipa/cfg/exceptionpruning/interprocedural/CombinedInterproceduralExceptionFilter.java @@ -40,7 +40,7 @@ public class CombinedInterproceduralExceptionFilter implements Inte @Override public ExceptionFilter getFilter(CGNode node) { - CombinedExceptionFilter result = new CombinedExceptionFilter(); + CombinedExceptionFilter result = new CombinedExceptionFilter<>(); for (InterproceduralExceptionFilter exceptionFilter:filter) { result.add(exceptionFilter.getFilter(node)); } diff --git a/com.ibm.wala.core/src/com/ibm/wala/ipa/cha/ClassHierarchy.java b/com.ibm.wala.core/src/com/ibm/wala/ipa/cha/ClassHierarchy.java index 31dc221db..63a170bd3 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/ipa/cha/ClassHierarchy.java +++ b/com.ibm.wala.core/src/com/ibm/wala/ipa/cha/ClassHierarchy.java @@ -1081,7 +1081,7 @@ public class ClassHierarchy implements IClassHierarchy { @Override public Iterator iterator() { Function toClass = n -> n.klass; - return new MapIterator(map.values().iterator(), toClass); + return new MapIterator<>(map.values().iterator(), toClass); } /** @@ -1138,7 +1138,7 @@ public class ClassHierarchy implements IClassHierarchy { return getImmediateArraySubclasses((ArrayClass)klass); } Function node2Class = n -> n.klass; - return Iterator2Collection.toSet(new MapIterator(findNode(klass).children.iterator(), node2Class)); + return Iterator2Collection.toSet(new MapIterator<>(findNode(klass).children.iterator(), node2Class)); } private Collection getImmediateArraySubclasses(ArrayClass klass) { diff --git a/com.ibm.wala.core/src/com/ibm/wala/ipa/modref/GenReach.java b/com.ibm.wala.core/src/com/ibm/wala/ipa/modref/GenReach.java index e7d2ab038..e75ee6d05 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/ipa/modref/GenReach.java +++ b/com.ibm.wala.core/src/com/ibm/wala/ipa/modref/GenReach.java @@ -33,7 +33,7 @@ public class GenReach extends BitVectorFramework { @SuppressWarnings("unchecked") public GenReach(Graph flowGraph, Map> gen) { - super(flowGraph, new GenFunctions(gen), makeDomain(gen)); + super(flowGraph, new GenFunctions<>(gen), makeDomain(gen)); // ugly but necessary, in order to avoid computing the domain twice. GenReach.GenFunctions g = (GenReach.GenFunctions) getTransferFunctionProvider(); g.domain = getLatticeValues(); 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 fd251e90e..3c97f2732 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,7 +44,7 @@ import com.ibm.wala.util.intset.OrdinalSet; public class ModRef { public static ModRef make() { - return new ModRef(); + return new ModRef<>(); } public ModRef() { diff --git a/com.ibm.wala.core/src/com/ibm/wala/ipa/modref/ModRefFieldAccess.java b/com.ibm.wala.core/src/com/ibm/wala/ipa/modref/ModRefFieldAccess.java index 610336ba1..dab8be675 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/ipa/modref/ModRefFieldAccess.java +++ b/com.ibm.wala.core/src/com/ibm/wala/ipa/modref/ModRefFieldAccess.java @@ -46,10 +46,10 @@ public final class ModRefFieldAccess { this.mods = mods; this.refs = refs; if (mods == null) { - this.mods = new HashMap>(); + this.mods = new HashMap<>(); } if (refs == null) { - this.refs = new HashMap>(); + this.refs = new HashMap<>(); } } @@ -73,11 +73,11 @@ public final class ModRefFieldAccess { private ModRefFieldAccess(CallGraph cg) { this.cg = cg; - this.refs = new HashMap>>(); - this.mods = new HashMap>>(); - this.trefs = new HashMap>>(); - this.tmods = new HashMap>>(); - this.done = new LinkedList(); + this.refs = new HashMap<>(); + this.mods = new HashMap<>(); + this.trefs = new HashMap<>(); + this.tmods = new HashMap<>(); + this.done = new LinkedList<>(); } public static ModRefFieldAccess compute(CallGraph cg) { 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 10618a85b..e67c3459c 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 @@ -124,12 +124,12 @@ public class HeapReachingDefs { Map ssaInstructionIndex2Statement = mapInstructionsToStatements(domain); // solve reaching definitions as a dataflow problem - BitVectorFramework rd = new BitVectorFramework(cfg, new RD(node, + BitVectorFramework rd = new BitVectorFramework<>(cfg, new RD(node, cfg, pa, domain, ssaInstructionIndex2Statement, exclusions), domain); if (VERBOSE) { System.err.println("Solve "); } - BitVectorSolver solver = new BitVectorSolver(rd); + BitVectorSolver solver = new BitVectorSolver<>(rd); try { solver.solve(null); } catch (CancelException e) { @@ -322,7 +322,7 @@ public class HeapReachingDefs { } } } - return new OrdinalSet(defs, domain); + return new OrdinalSet<>(defs, domain); } else { return OrdinalSet.empty(); } @@ -336,7 +336,7 @@ public class HeapReachingDefs { if (pointerKeyMod.get(p) == null) { return OrdinalSet.empty(); } - return new OrdinalSet(pointerKeyMod.get(p).intersection(v.getValue()), domain); + return new OrdinalSet<>(pointerKeyMod.get(p).intersection(v.getValue()), domain); } case HEAP_RET_CALLER: { HeapStatement.HeapReturnCaller r = (HeapStatement.HeapReturnCaller) s; @@ -348,7 +348,7 @@ public class HeapReachingDefs { } else { // the defs that flow to the call may flow to this return, since // the callees may have no relevant effect. - return new OrdinalSet(pointerKeyMod.get(r.getLocation()).intersection(v.getValue()), domain); + return new OrdinalSet<>(pointerKeyMod.get(r.getLocation()).intersection(v.getValue()), domain); } } case HEAP_PARAM_CALLER: { @@ -359,14 +359,14 @@ public class HeapReachingDefs { int x = domain.getMappedIndex(new HeapStatement.HeapParamCallee(node, r.getLocation())); assert x >= 0; IntSet xset = SparseIntSet.singleton(x); - return new OrdinalSet(xset, domain); + return new OrdinalSet<>(xset, domain); } BitVectorVariable v = solver.getIn(callBlock); if (pointerKeyMod.get(r.getLocation()) == null || v.getValue() == null) { // do nothing ... force flow into and out of the callees return OrdinalSet.empty(); } else { - return new OrdinalSet(pointerKeyMod.get(r.getLocation()).intersection(v.getValue()), domain); + return new OrdinalSet<>(pointerKeyMod.get(r.getLocation()).intersection(v.getValue()), domain); } } case NORMAL_RET_CALLEE: @@ -465,7 +465,7 @@ public class HeapReachingDefs { private static OrdinalSetMapping createStatementDomain(Collection statements) { Statement[] arr = new Statement[statements.size()]; - OrdinalSetMapping domain = new ObjectArrayMapping(statements.toArray(arr)); + OrdinalSetMapping domain = new ObjectArrayMapping<>(statements.toArray(arr)); return domain; } @@ -646,7 +646,7 @@ public class HeapReachingDefs { // only static fields are actually killed Predicate staticFilter = StaticFieldKey.class::isInstance; final Collection kill = Iterator2Collection - .toSet(new FilterIterator(mod.iterator(), staticFilter)); + .toSet(new FilterIterator<>(mod.iterator(), staticFilter)); if (kill.isEmpty()) { return null; } else { @@ -660,7 +660,7 @@ public class HeapReachingDefs { return false; }; BitVector result = new BitVector(); - for (Statement k : Iterator2Iterable.make(new FilterIterator(domain.iterator(), f))) { + for (Statement k : Iterator2Iterable.make(new FilterIterator<>(domain.iterator(), f))) { result.set(domain.getMappedIndex(k)); } return result; 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 bd69a4d30..2f65c74e7 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 @@ -75,7 +75,7 @@ public class PDG implements NumberedGraph { public enum Dependency {CONTROL_DEP, DATA_AND_CONTROL_DEP} private final SlowSparseNumberedLabeledGraph delegate = - new SlowSparseNumberedLabeledGraph(Dependency.DATA_AND_CONTROL_DEP); + new SlowSparseNumberedLabeledGraph<>(Dependency.DATA_AND_CONTROL_DEP); /** END Custom change: control deps */ private final static boolean VERBOSE = false; @@ -245,7 +245,7 @@ public class PDG implements NumberedGraph { Assertions.productionAssertion(cOptions.equals(ControlDependenceOptions.FULL)); } - ControlDependenceGraph cdg = new ControlDependenceGraph( + ControlDependenceGraph cdg = new ControlDependenceGraph<>( controlFlowGraph); for (ISSABasicBlock bb : cdg) { if (bb.isExitBlock()) { @@ -680,9 +680,9 @@ public class PDG implements NumberedGraph { return true; } }; - Collection relevantStatements = Iterator2Collection.toSet(new FilterIterator(iterator(), f)); + Collection relevantStatements = Iterator2Collection.toSet(new FilterIterator<>(iterator(), f)); - Map> heapReachingDefs = new HeapReachingDefs(modRef, heapModel).computeReachingDefs(node, ir, pa, mod, + Map> heapReachingDefs = new HeapReachingDefs<>(modRef, heapModel).computeReachingDefs(node, ir, pa, mod, relevantStatements, new HeapExclusions(SetComplement.complement(new SingletonSet(t))), cg); for (Statement st : heapReachingDefs.keySet()) { @@ -772,8 +772,8 @@ public class PDG implements NumberedGraph { } }; return Iterator2Collection.toSet( - new MapIterator( - new FilterIterator(iterator(), filter), + new MapIterator<>( + new FilterIterator<>(iterator(), filter), NormalStatement.class::cast)); } @@ -894,7 +894,7 @@ public class PDG implements NumberedGraph { * @param dOptions */ private void createReturnStatements() { - ArrayList list = new ArrayList(); + ArrayList list = new ArrayList<>(); if (!node.getMethod().getReturnType().equals(TypeReference.Void)) { NormalReturnCallee n = new NormalReturnCallee(node); delegate.addNode(n); @@ -923,7 +923,7 @@ public class PDG implements NumberedGraph { */ private void createCalleeParams() { if (paramCalleeStatements == null) { - ArrayList list = new ArrayList(); + ArrayList list = new ArrayList<>(); int paramCount = node.getMethod().getNumberOfParameters(); for (int i = 1; i <= paramCount; i++) { @@ -1038,7 +1038,7 @@ public class PDG implements NumberedGraph { for (CGNode t : cg.getPossibleTargets(n, call.getCallSite())) { bv.addAll(loc.get(t).getBackingSet()); } - return new OrdinalSet(bv, loc.get(n).getMapping()); + return new OrdinalSet<>(bv, loc.get(n).getMapping()); } @Override diff --git a/com.ibm.wala.core/src/com/ibm/wala/ipa/slicer/ReachabilityFunctions.java b/com.ibm.wala.core/src/com/ibm/wala/ipa/slicer/ReachabilityFunctions.java index 0d70f1e41..c0e1c0373 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/ipa/slicer/ReachabilityFunctions.java +++ b/com.ibm.wala.core/src/com/ibm/wala/ipa/slicer/ReachabilityFunctions.java @@ -38,7 +38,7 @@ public class ReachabilityFunctions implements IFlowFunctionMap { }; public static ReachabilityFunctions createReachabilityFunctions() { - return new ReachabilityFunctions(); + return new ReachabilityFunctions<>(); } private ReachabilityFunctions() { 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 f318fd617..a62dcdaa5 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 @@ -474,7 +474,7 @@ public class SDG extends AbstractNumberedGraph addNode(s); result.add(s); } - return new CompoundIterator(result.iterator(), getPDG(N.getNode()).getSuccNodes(N)); + return new CompoundIterator<>(result.iterator(), getPDG(N.getNode()).getSuccNodes(N)); } else { return getPDG(N.getNode()).getSuccNodes(N); } @@ -799,7 +799,7 @@ public class SDG extends AbstractNumberedGraph public PDG getPDG(CGNode node) { PDG result = pdgMap.get(node); if (result == null) { - result = new PDG(node, pa, mod, ref, dOptions, cOptions, heapExclude, cg, modRef); + result = new PDG<>(node, pa, mod, ref, dOptions, cOptions, heapExclude, cg, modRef); pdgMap.put(node, result); // Let's not eagerly add nodes, shall we? // for (Iterator it = result.iterator(); it.hasNext();) { 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 092ab2193..f8c39c9a9 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 @@ -96,7 +96,7 @@ class SDGSupergraph implements ISupergraph public Iterator getCalledNodes(Statement call) { switch (call.getKind()) { case NORMAL: - return new FilterIterator(getSuccNodes(call), this::isEntry); + return new FilterIterator<>(getSuccNodes(call), this::isEntry); case PARAM_CALLER: case HEAP_PARAM_CALLER: return getSuccNodes(call); 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 426ca3cf6..3c8901561 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 @@ -179,7 +179,7 @@ public class Slicer { */ 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); + return computeSlice(new SDG<>(cg, pa, ModRef.make(), dOptions, cOptions), Collections.singleton(s), true); } /** @@ -190,7 +190,7 @@ public class Slicer { public static Collection computeForwardSlice(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), false); + return computeSlice(new SDG<>(cg, pa, ModRef.make(), dOptions, cOptions), Collections.singleton(s), false); } /** @@ -322,7 +322,7 @@ public class Slicer { @Override public TabulationDomain getDomain() { // a dummy - return new UnorderedDomain(); + return new UnorderedDomain<>(); } /* diff --git a/com.ibm.wala.core/src/com/ibm/wala/ipa/summaries/LambdaMethodTargetSelector.java b/com.ibm.wala.core/src/com/ibm/wala/ipa/summaries/LambdaMethodTargetSelector.java index 52414a7a9..3829857fd 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/ipa/summaries/LambdaMethodTargetSelector.java +++ b/com.ibm.wala.core/src/com/ibm/wala/ipa/summaries/LambdaMethodTargetSelector.java @@ -28,7 +28,7 @@ import com.ibm.wala.util.strings.Atom; public class LambdaMethodTargetSelector implements MethodTargetSelector { - private final WeakHashMap summaries = new WeakHashMap(); + private final WeakHashMap summaries = new WeakHashMap<>(); private final MethodTargetSelector base; diff --git a/com.ibm.wala.core/src/com/ibm/wala/ipa/summaries/LambdaSummaryClass.java b/com.ibm.wala.core/src/com/ibm/wala/ipa/summaries/LambdaSummaryClass.java index 3eb6a681e..10f7af87a 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/ipa/summaries/LambdaSummaryClass.java +++ b/com.ibm.wala.core/src/com/ibm/wala/ipa/summaries/LambdaSummaryClass.java @@ -43,7 +43,7 @@ import com.ibm.wala.util.strings.Atom; public class LambdaSummaryClass extends SyntheticClass { - private static WeakHashMap summaries = new WeakHashMap(); + private static WeakHashMap summaries = new WeakHashMap<>(); public static LambdaSummaryClass findOrCreate(CGNode caller, SSAInvokeDynamicInstruction inst) { if (! summaries.containsKey(inst.getBootstrap())) { diff --git a/com.ibm.wala.core/src/com/ibm/wala/ipa/summaries/MethodSummary.java b/com.ibm.wala.core/src/com/ibm/wala/ipa/summaries/MethodSummary.java index 6191eebb6..97ed3cf36 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/ipa/summaries/MethodSummary.java +++ b/com.ibm.wala.core/src/com/ibm/wala/ipa/summaries/MethodSummary.java @@ -82,7 +82,7 @@ public class MethodSummary { public void addStatement(SSAInstruction statement) { if (statements == null) { - statements = new ArrayList(); + statements = new ArrayList<>(); } statements.add(statement); } diff --git a/com.ibm.wala.core/src/com/ibm/wala/ipa/summaries/VolatileMethodSummary.java b/com.ibm.wala.core/src/com/ibm/wala/ipa/summaries/VolatileMethodSummary.java index fd7183082..35bd36d1a 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/ipa/summaries/VolatileMethodSummary.java +++ b/com.ibm.wala.core/src/com/ibm/wala/ipa/summaries/VolatileMethodSummary.java @@ -88,8 +88,8 @@ public class VolatileMethodSummary { private static final boolean DEBUG = false; private boolean allowReservedPC = false; private MethodSummary summary; - private List instructions = new ArrayList(); - private Map localNames = new HashMap(); + private List instructions = new ArrayList<>(); + private Map localNames = new HashMap<>(); private int currentProgramCounter = 0; private boolean locked = false; diff --git a/com.ibm.wala.core/src/com/ibm/wala/ssa/DefUse.java b/com.ibm.wala.core/src/com/ibm/wala/ssa/DefUse.java index 660f5d7dc..959e4f8c3 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/ssa/DefUse.java +++ b/com.ibm.wala.core/src/com/ibm/wala/ssa/DefUse.java @@ -39,7 +39,7 @@ public class DefUse { /** * A Mapping from integer -> Instruction */ - final protected ArrayList allInstructions = new ArrayList(); + final protected ArrayList allInstructions = new ArrayList<>(); /** * prevent the IR from being collected while this is live. diff --git a/com.ibm.wala.core/src/com/ibm/wala/ssa/IR.java b/com.ibm.wala.core/src/com/ibm/wala/ssa/IR.java index a27a3c99d..9434faa49 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/ssa/IR.java +++ b/com.ibm.wala.core/src/com/ibm/wala/ssa/IR.java @@ -526,8 +526,8 @@ public abstract class IR implements IRView { * @return an {@link Iterator} of all instructions (Normal, Phi, and Catch) */ public Iterator iterateAllInstructions() { - return new CompoundIterator(iterateNormalInstructions(), new CompoundIterator( - iterateCatchInstructions(), new CompoundIterator(iteratePhis(), iteratePis()))); + return new CompoundIterator<>(iterateNormalInstructions(), new CompoundIterator<>( + iterateCatchInstructions(), new CompoundIterator<>(iteratePhis(), iteratePis()))); } /** diff --git a/com.ibm.wala.core/src/com/ibm/wala/ssa/SSACFG.java b/com.ibm.wala.core/src/com/ibm/wala/ssa/SSACFG.java index 4052a7499..783402420 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/ssa/SSACFG.java +++ b/com.ibm.wala.core/src/com/ibm/wala/ssa/SSACFG.java @@ -310,7 +310,7 @@ public class SSACFG implements ControlFlowGraph, if (localPhis == null) { return EmptyIterator.instance(); } else { - LinkedList result = new LinkedList(); + LinkedList result = new LinkedList<>(); for (SSAPhiInstruction phi : localPhis) { if (phi != null) { result.add(phi); @@ -320,7 +320,7 @@ public class SSACFG implements ControlFlowGraph, } } else { // stackSlotPhis != null - LinkedList result = new LinkedList(); + LinkedList result = new LinkedList<>(); for (SSAPhiInstruction phi : stackSlotPhis) { if (phi != null) { result.add(phi); @@ -451,7 +451,7 @@ public class SSACFG implements ControlFlowGraph, return piInstructions.get(new RefPathKey(n, this, path)); } - private final LinkedList blockPiInstructions = new LinkedList(); + private final LinkedList blockPiInstructions = new LinkedList<>(); /** * @@ -508,7 +508,7 @@ public class SSACFG implements ControlFlowGraph, public List getAllInstructions() { compressPhis(); - ArrayList result = new ArrayList(); + ArrayList result = new ArrayList<>(); for (Iterator it = iteratePhis(); it.hasNext();) { result.add(it.next()); } @@ -834,7 +834,7 @@ public class SSACFG implements ControlFlowGraph, */ @Override public Iterator iterator() { - ArrayList list = new ArrayList(); + ArrayList list = new ArrayList<>(); for (BasicBlock b : basicBlocks) { list.add(b); } @@ -1014,7 +1014,7 @@ public class SSACFG implements ControlFlowGraph, } final IBasicBlock n = delegate.getNode(b.getNumber()); final Iterator> i = delegate.getExceptionalSuccessors(n).iterator(); - final List c = new ArrayList(getSuccNodeCount(b)); + final List c = new ArrayList<>(getSuccNodeCount(b)); for (; i.hasNext();) { final IBasicBlock s = i.next(); c.add(basicBlocks[delegate.getNumber(s)]); @@ -1032,7 +1032,7 @@ public class SSACFG implements ControlFlowGraph, } IBasicBlock n = delegate.getNode(b.getNumber()); Function, ISSABasicBlock> f = object -> basicBlocks[delegate.getNumber(object)]; - return Iterator2Collection.toSet(new MapIterator, ISSABasicBlock>(delegate + return Iterator2Collection.toSet(new MapIterator<>(delegate .getExceptionalPredecessors(n).iterator(), f)); } @@ -1082,7 +1082,7 @@ public class SSACFG implements ControlFlowGraph, } IBasicBlock n = delegate.getNode(b.getNumber()); final Iterator> i = delegate.getNormalSuccessors(n).iterator(); - Collection c = new ArrayList(getSuccNodeCount(b)); + Collection c = new ArrayList<>(getSuccNodeCount(b)); for (; i.hasNext();) { IBasicBlock s = i.next(); c.add(basicBlocks[delegate.getNumber(s)]); @@ -1100,7 +1100,7 @@ public class SSACFG implements ControlFlowGraph, } IBasicBlock n = delegate.getNode(b.getNumber()); final Iterator> i = delegate.getNormalPredecessors(n).iterator(); - Collection c = new ArrayList(getPredNodeCount(b)); + Collection c = new ArrayList<>(getPredNodeCount(b)); for (; i.hasNext();) { IBasicBlock s = i.next(); c.add(basicBlocks[delegate.getNumber(s)]); @@ -1113,7 +1113,7 @@ public class SSACFG implements ControlFlowGraph, */ @Override public Iterator iterateNodes(IntSet s) { - return new NumberedNodeIterator(s, this); + return new NumberedNodeIterator<>(s, this); } @Override diff --git a/com.ibm.wala.core/src/com/ibm/wala/ssa/ShrikeIndirectionData.java b/com.ibm.wala.core/src/com/ibm/wala/ssa/ShrikeIndirectionData.java index f28435d20..e99df4852 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/ssa/ShrikeIndirectionData.java +++ b/com.ibm.wala.core/src/com/ibm/wala/ssa/ShrikeIndirectionData.java @@ -89,7 +89,7 @@ public class ShrikeIndirectionData implements SSAIndirectionData(2); + defs[instructionIndex] = new HashMap<>(2); } defs[instructionIndex].put(name, newDef); @@ -98,7 +98,7 @@ public class ShrikeIndirectionData implements SSAIndirectionData(2); + uses[instructionIndex] = new HashMap<>(2); } uses[instructionIndex].put(name, newUse); @@ -106,7 +106,7 @@ public class ShrikeIndirectionData implements SSAIndirectionData getNames() { - HashSet result = new HashSet(); + HashSet result = new HashSet<>(); for (int i = 0; i < uses.length; i++) { if (uses[i] != null) { result.addAll(uses[i].keySet()); diff --git a/com.ibm.wala.core/src/com/ibm/wala/ssa/analysis/ExplodedControlFlowGraph.java b/com.ibm.wala.core/src/com/ibm/wala/ssa/analysis/ExplodedControlFlowGraph.java index 16b9dc27f..a4a1bc699 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/ssa/analysis/ExplodedControlFlowGraph.java +++ b/com.ibm.wala.core/src/com/ibm/wala/ssa/analysis/ExplodedControlFlowGraph.java @@ -54,7 +54,7 @@ public class ExplodedControlFlowGraph implements ControlFlowGraph normalNodes = new SimpleVector(); + private final SimpleVector normalNodes = new SimpleVector<>(); private final Collection allNodes = HashSetFactory.make(); @@ -127,7 +127,7 @@ public class ExplodedControlFlowGraph implements ControlFlowGraph result = new ArrayList(); + List result = new ArrayList<>(); for (ISSABasicBlock s : ir.getControlFlowGraph().getExceptionalPredecessors(eb.original)) { assert normalNodes.get(s.getLastInstructionIndex()) != null; result.add(normalNodes.get(s.getLastInstructionIndex())); @@ -146,7 +146,7 @@ public class ExplodedControlFlowGraph implements ControlFlowGraph result = new ArrayList(); + List result = new ArrayList<>(); ISSABasicBlock orig = eb.original; if (eb.isEntryBlock() && orig == null) { orig = ir.getControlFlowGraph().entry(); @@ -184,7 +184,7 @@ public class ExplodedControlFlowGraph implements ControlFlowGraph result = new ArrayList(); + List result = new ArrayList<>(); for (ISSABasicBlock s : ir.getControlFlowGraph().getNormalPredecessors(eb.original)) { if (s.equals(ir.getControlFlowGraph().entry())) { if (s.getLastInstructionIndex() >= 0) { @@ -216,7 +216,7 @@ public class ExplodedControlFlowGraph implements ControlFlowGraph result = new ArrayList(); + List result = new ArrayList<>(); for (ISSABasicBlock s : ir.getControlFlowGraph().getNormalSuccessors(eb.original)) { if (s.equals(ir.getControlFlowGraph().exit())) { result.add(exit()); @@ -309,7 +309,7 @@ public class ExplodedControlFlowGraph implements ControlFlowGraph result = new ArrayList(); + List result = new ArrayList<>(); if (eb.original != null && eb.original.isEntryBlock()) { result.add(entry); } @@ -355,7 +355,7 @@ public class ExplodedControlFlowGraph implements ControlFlowGraph instance() : NonNullSingletonIterator.make(z); } if (eb.instructionIndex == eb.original.getLastInstructionIndex()) { - List result = new ArrayList(); + List result = new ArrayList<>(); for (Iterator it = ir.getControlFlowGraph().getSuccNodes(eb.original); it.hasNext();) { ISSABasicBlock s = it.next(); if (s.equals(ir.getControlFlowGraph().exit())) { diff --git a/com.ibm.wala.core/src/com/ibm/wala/types/annotations/Annotation.java b/com.ibm.wala.core/src/com/ibm/wala/types/annotations/Annotation.java index 9a85b56cf..b8389b51a 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/types/annotations/Annotation.java +++ b/com.ibm.wala.core/src/com/ibm/wala/types/annotations/Annotation.java @@ -122,7 +122,7 @@ public class Annotation { sb.append(" ]"); } if (!namedArguments.isEmpty()) { - sb.append(" " + new TreeMap(namedArguments)); + sb.append(" " + new TreeMap<>(namedArguments)); } return sb.toString(); } diff --git a/com.ibm.wala.core/src/com/ibm/wala/types/generics/ClassSignature.java b/com.ibm.wala.core/src/com/ibm/wala/types/generics/ClassSignature.java index f7ba7db8a..13ed39234 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/types/generics/ClassSignature.java +++ b/com.ibm.wala.core/src/com/ibm/wala/types/generics/ClassSignature.java @@ -86,7 +86,7 @@ public class ClassSignature extends Signature { public ClassTypeSignature[] getSuperinterfaceSignatures() throws IllegalArgumentException { int start = endOfClassTypeSig(endOfFormalTypeParameters()); - ArrayList result = new ArrayList(); + ArrayList result = new ArrayList<>(); while (start < rawString().length() - 1) { int end = endOfClassTypeSig(start); result.add(ClassTypeSignature.makeClassTypeSig(rawString().substring(start,end))); diff --git a/com.ibm.wala.core/src/com/ibm/wala/types/generics/FormalTypeParameter.java b/com.ibm.wala.core/src/com/ibm/wala/types/generics/FormalTypeParameter.java index 19cc38040..7923639f1 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/types/generics/FormalTypeParameter.java +++ b/com.ibm.wala.core/src/com/ibm/wala/types/generics/FormalTypeParameter.java @@ -65,7 +65,7 @@ public class FormalTypeParameter extends Signature { } private static TypeSignature[] parseForInterfaceBounds(String s) { - List list = new LinkedList(); + List list = new LinkedList<>(); int start = s.indexOf(':'); if (start == s.length() - 1) { @@ -143,7 +143,7 @@ public class FormalTypeParameter extends Signature { } static String[] parseForFormalTypeParameters(String s) { - ArrayList sigs = new ArrayList(10); + ArrayList sigs = new ArrayList<>(10); int beginToken = 1; while (s.charAt(beginToken) != '>') { diff --git a/com.ibm.wala.core/src/com/ibm/wala/types/generics/TypeArgument.java b/com.ibm.wala.core/src/com/ibm/wala/types/generics/TypeArgument.java index e8ba37914..7496aec32 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/types/generics/TypeArgument.java +++ b/com.ibm.wala.core/src/com/ibm/wala/types/generics/TypeArgument.java @@ -107,7 +107,7 @@ public class TypeArgument extends Signature { * @return tokenize it */ static String[] parseForTypeArguments(String typeArgs) { - ArrayList args = new ArrayList(10); + ArrayList args = new ArrayList<>(10); int i = 1; while (true) { diff --git a/com.ibm.wala.core/src/com/ibm/wala/types/generics/TypeSignature.java b/com.ibm.wala.core/src/com/ibm/wala/types/generics/TypeSignature.java index 157c5acbc..572950755 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/types/generics/TypeSignature.java +++ b/com.ibm.wala.core/src/com/ibm/wala/types/generics/TypeSignature.java @@ -88,7 +88,7 @@ public abstract class TypeSignature extends Signature { * @return tokenize it */ static String[] parseForTypeSignatures(String typeSigs) throws IllegalArgumentException { - ArrayList sigs = new ArrayList(10); + ArrayList sigs = new ArrayList<>(10); if (typeSigs.length() < 2) { // TODO: check this? throw new IllegalArgumentException("illegal string of TypeSignature " + typeSigs); diff --git a/com.ibm.wala.core/src/com/ibm/wala/util/PrimitiveAssignability.java b/com.ibm.wala.core/src/com/ibm/wala/util/PrimitiveAssignability.java index 5c476b274..ca78be48d 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/util/PrimitiveAssignability.java +++ b/com.ibm.wala.core/src/com/ibm/wala/util/PrimitiveAssignability.java @@ -78,13 +78,13 @@ public class PrimitiveAssignability { } private static final Map> assignability = - new EnumMap>(Primitive.class); + new EnumMap<>(Primitive.class); static { // fill assignability for (final Primitive t : Primitive.values()) { - final Map addendum = new EnumMap(Primitive.class); + final Map addendum = new EnumMap<>(Primitive.class); addendum.put(t, AssignabilityKind.IDENTITY); assignability.put(t, addendum); } @@ -145,7 +145,7 @@ public class PrimitiveAssignability { assignability.get(from).put(to, AssignabilityKind.WIDENING); } - private static final Map namePrimitiveMap = new HashMap(); + private static final Map namePrimitiveMap = new HashMap<>(); static { // fill namePrimitiveMap diff --git a/com.ibm.wala.core/src/com/ibm/wala/util/ref/CacheReference.java b/com.ibm.wala.core/src/com/ibm/wala/util/ref/CacheReference.java index 2be2445f4..baffb841c 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/util/ref/CacheReference.java +++ b/com.ibm.wala.core/src/com/ibm/wala/util/ref/CacheReference.java @@ -33,9 +33,9 @@ public final class CacheReference { switch (choice) { case SOFT: - return new SoftReference(referent); + return new SoftReference<>(referent); case WEAK: - return new WeakReference(referent); + return new WeakReference<>(referent); case HARD: return referent; default: diff --git a/com.ibm.wala.core/src/com/ibm/wala/util/ref/ReferenceCleanser.java b/com.ibm.wala.core/src/com/ibm/wala/util/ref/ReferenceCleanser.java index 0fd17c9be..cfaca6617 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/util/ref/ReferenceCleanser.java +++ b/com.ibm.wala.core/src/com/ibm/wala/util/ref/ReferenceCleanser.java @@ -35,7 +35,7 @@ public class ReferenceCleanser { private static WeakReference cache; public static void registerClassHierarchy(IClassHierarchy cha) { - ReferenceCleanser.cha = new WeakReference(cha); + ReferenceCleanser.cha = new WeakReference<>(cha); } private static IClassHierarchy getClassHierarchy() { @@ -48,7 +48,7 @@ public class ReferenceCleanser { public static void registerCache(IAnalysisCacheView cache) { if (cache instanceof AnalysisCacheImpl) { - ReferenceCleanser.cache = new WeakReference((AnalysisCacheImpl) cache); + ReferenceCleanser.cache = new WeakReference<>((AnalysisCacheImpl) cache); } } diff --git a/com.ibm.wala.core/src/com/ibm/wala/util/ssa/InstructionByIIndexMap.java b/com.ibm.wala.core/src/com/ibm/wala/util/ssa/InstructionByIIndexMap.java index e8c406cf4..c5896544b 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/util/ssa/InstructionByIIndexMap.java +++ b/com.ibm.wala.core/src/com/ibm/wala/util/ssa/InstructionByIIndexMap.java @@ -27,7 +27,7 @@ public class InstructionByIIndexMap imple } public InstructionByIIndexMap() { - this.map = new LinkedHashMap, T>(); + this.map = new LinkedHashMap<>(); } @Override @@ -45,7 +45,7 @@ public class InstructionByIIndexMap imple if (key instanceof SSAInstruction) { SSAInstruction instruction = (SSAInstruction) key; if (instruction.iindex >= 0) { - return map.containsKey(new InstructionByIIndexWrapper(instruction)); + return map.containsKey(new InstructionByIIndexWrapper<>(instruction)); } } return false; @@ -61,7 +61,7 @@ public class InstructionByIIndexMap imple if (key instanceof SSAInstruction) { SSAInstruction instruction = (SSAInstruction) key; if (instruction.iindex >= 0) { - return map.get(new InstructionByIIndexWrapper(instruction)); + return map.get(new InstructionByIIndexWrapper<>(instruction)); } } return null; @@ -69,7 +69,7 @@ public class InstructionByIIndexMap imple @Override public T put(Instruction key, T value) { - return map.put(new InstructionByIIndexWrapper(key), value); + return map.put(new InstructionByIIndexWrapper<>(key), value); } @Override @@ -77,7 +77,7 @@ public class InstructionByIIndexMap imple if (key instanceof SSAInstruction) { SSAInstruction instruction = (SSAInstruction) key; if (instruction.iindex >= 0) { - return map.remove(new InstructionByIIndexWrapper(instruction)); + return map.remove(new InstructionByIIndexWrapper<>(instruction)); } } return null; @@ -114,7 +114,7 @@ public class InstructionByIIndexMap imple public Set> entrySet() { Set> result = new LinkedHashSet<>(); for (java.util.Map.Entry, T> entry:map.entrySet()) { - result.add(new AbstractMap.SimpleImmutableEntry(entry.getKey().getInstruction(), entry.getValue())); + result.add(new AbstractMap.SimpleImmutableEntry<>(entry.getKey().getInstruction(), entry.getValue())); } return result; 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 9bc950ee2..0b903178c 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 @@ -310,10 +310,10 @@ public class ParameterAccessor { if (targets.size() < 1) { warn("Unable to look up the method {} starting extensive search...", mRef); - targets = new HashSet(); + targets = new HashSet<>(); final TypeReference mClass = mRef.getDeclaringClass(); final Selector mSel = mRef.getSelector(); - final Set testClasses = new HashSet(); + final Set testClasses = new HashSet<>(); // Look up all classes matching exactly for (IClassLoader loader : cha.getLoaders()) { @@ -531,7 +531,7 @@ public class ParameterAccessor { */ public List all() { // TODO: Cache! - List all = new ArrayList(this.getNumberOfParameters()); + List all = new ArrayList<>(this.getNumberOfParameters()); if (this.getNumberOfParameters() == 0) { return all; @@ -1278,10 +1278,10 @@ public class ParameterAccessor { defaults = Collections.EMPTY_SET; } if (callee.getNumberOfParameters() == 0) { - return new ArrayList(0); + return new ArrayList<>(0); } - final List assigned = new ArrayList(); // TODO: Set initial size + final List assigned = new ArrayList<>(); // TODO: Set initial size final List calleeParams = callee.all(); final List thisParams = all(); 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 6b47384c3..41d4a42cb 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 @@ -109,7 +109,7 @@ public class SSAValueManager { /** The main data-structure of the management */ private Map>> seenTypes = HashMapFactory.make(); - private List unmanaged = new ArrayList(); + private List unmanaged = new ArrayList<>(); public SSAValueManager(ParameterAccessor acc) { this.nextLocal = acc.getFirstAfter(); @@ -181,7 +181,7 @@ public class SSAValueManager { param.setInScope = currentScope; param.setBy = setBy; - final List> aParam = new ArrayList>(); + final List> aParam = new ArrayList<>(); aParam.add(param); seenTypes.put(value.key, aParam); @@ -283,7 +283,7 @@ public class SSAValueManager { if (seenTypes.containsKey(key)) { seenTypes.get(key).add(param); } else { - List> aParam = new ArrayList>(); + List> aParam = new ArrayList<>(); aParam.add(param); seenTypes.put(key, aParam); @@ -328,7 +328,7 @@ public class SSAValueManager { if (seenTypes.containsKey(key)) { seenTypes.get(key).add(param); } else { - List> aParam = new ArrayList>(); + List> aParam = new ArrayList<>(); aParam.add(param); seenTypes.put(key, aParam); @@ -436,7 +436,7 @@ public class SSAValueManager { throw new IllegalArgumentException("The argument key may not be null"); } - List ret = new ArrayList(); + List ret = new ArrayList<>(); if (seenTypes.containsKey(key)) { for (Managed param : seenTypes.get(key)) { @@ -659,8 +659,8 @@ public class SSAValueManager { * Collect the variable-names of all known variables. */ public Map makeLocalNames() { - final Map names = new HashMap(); - final Map suffix = new HashMap(); + final Map names = new HashMap<>(); + final Map suffix = new HashMap<>(); int currentSuffix = 0; for (final List> manageds : seenTypes.values()) { diff --git a/com.ibm.wala.core/src/com/ibm/wala/util/strings/StringStuff.java b/com.ibm.wala.core/src/com/ibm/wala/util/strings/StringStuff.java index 3830660c6..64c7945b8 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/util/strings/StringStuff.java +++ b/com.ibm.wala.core/src/com/ibm/wala/util/strings/StringStuff.java @@ -223,7 +223,7 @@ public class StringStuff { throw new IllegalArgumentException("invalid descriptor: " + b); } - ArrayList sigs = new ArrayList(10); + ArrayList sigs = new ArrayList<>(10); int i = 1; while (true) { diff --git a/com.ibm.wala.core/src/com/ibm/wala/util/warnings/Warnings.java b/com.ibm.wala.core/src/com/ibm/wala/util/warnings/Warnings.java index b9430d1f0..806d5cfc2 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/util/warnings/Warnings.java +++ b/com.ibm.wala.core/src/com/ibm/wala/util/warnings/Warnings.java @@ -32,7 +32,7 @@ public class Warnings { } public static synchronized String asString() { - TreeSet T = new TreeSet(); + TreeSet T = new TreeSet<>(); T.addAll(warnings); Iterator it = T.iterator(); StringBuffer result = new StringBuffer(); diff --git a/com.ibm.wala.core/src/com/ibm/wala/viz/PDFViewUtil.java b/com.ibm.wala.core/src/com/ibm/wala/viz/PDFViewUtil.java index 405e47c64..7463080e1 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/viz/PDFViewUtil.java +++ b/com.ibm.wala.core/src/com/ibm/wala/viz/PDFViewUtil.java @@ -60,7 +60,7 @@ public class PDFViewUtil { NodeDecorator labels = makeIRDecorator(ir); if (annotations != null) { - labels = new ConcatenatingNodeDecorator(annotations, labels); + labels = new ConcatenatingNodeDecorator<>(annotations, labels); } g = CFGSanitizer.sanitize(ir, cha); diff --git a/com.ibm.wala.core/src/com/ibm/wala/viz/viewer/CgPanel.java b/com.ibm.wala.core/src/com/ibm/wala/viz/viewer/CgPanel.java index 51a1b8eaa..6c845c27b 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/viz/viewer/CgPanel.java +++ b/com.ibm.wala.core/src/com/ibm/wala/viz/viewer/CgPanel.java @@ -107,7 +107,7 @@ public class CgPanel extends JSplitPane{ } if (treeNode.getChildCount() == 0) { - List newChilds = new ArrayList(); + List newChilds = new ArrayList<>(); Object userObject = treeNode.getUserObject(); if (userObject instanceof CGNode) { CGNode cgNode = (CGNode) userObject; 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 e3cf2a96e..de5fce340 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 @@ -41,7 +41,7 @@ public class ChaPanel extends JSplitPane { this.setLeftComponent(new JScrollPane(tree)); final DefaultListModel methodListModel = new DefaultListModel<>(); - JList methodList = new JList(methodListModel); + 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 ff0496fe3..03b25b576 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 @@ -47,11 +47,11 @@ public class IrViewer extends JPanel{ public interface SelectedPcListner{ void valueChanged(int pc); } - Set selectedPcListners = new HashSet(); + Set selectedPcListners = new HashSet<>(); 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 31c327125..3cb103a92 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 @@ -197,7 +197,7 @@ public class PaPanel extends JSplitPane { * @return */ protected List getRootNodes(){ - List ret = new ArrayList(); + List ret = new ArrayList<>(); for (CGNode n : cg){ ret.add(n); } @@ -233,7 +233,7 @@ public class PaPanel extends JSplitPane { * @return */ protected List getChildrenFor(Object node) { - List ret = new ArrayList(); + List ret = new ArrayList<>(); if (node instanceof InstanceKey){ ret.addAll(getPointerKeysUnderInstanceKey((InstanceKey) node)); } else if (node instanceof PointerKey){ @@ -284,7 +284,7 @@ public class PaPanel extends JSplitPane { set = null; } if (null == set){ - set = new ArrayList(); + set = new ArrayList<>(); map.put(index, set); } set.add(o); 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 893d3d406..3025596b3 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 @@ -32,7 +32,7 @@ public class SourceViewer extends JPanel{ 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/.settings/org.eclipse.jdt.core.prefs b/com.ibm.wala.dalvik.test/.settings/org.eclipse.jdt.core.prefs index 14aa67552..d74d22c9c 100644 --- a/com.ibm.wala.dalvik.test/.settings/org.eclipse.jdt.core.prefs +++ b/com.ibm.wala.dalvik.test/.settings/org.eclipse.jdt.core.prefs @@ -72,7 +72,7 @@ org.eclipse.jdt.core.compiler.problem.potentiallyUnclosedCloseable=warning org.eclipse.jdt.core.compiler.problem.rawTypeReference=error org.eclipse.jdt.core.compiler.problem.redundantNullAnnotation=error org.eclipse.jdt.core.compiler.problem.redundantNullCheck=error -org.eclipse.jdt.core.compiler.problem.redundantSpecificationOfTypeArguments=warning +org.eclipse.jdt.core.compiler.problem.redundantSpecificationOfTypeArguments=error org.eclipse.jdt.core.compiler.problem.redundantSuperinterface=error org.eclipse.jdt.core.compiler.problem.reportMethodCanBePotentiallyStatic=ignore org.eclipse.jdt.core.compiler.problem.reportMethodCanBeStatic=error diff --git a/com.ibm.wala.dalvik.test/source/com/ibm/wala/dalvik/test/callGraph/DalvikCallGraphTestBase.java b/com.ibm.wala.dalvik.test/source/com/ibm/wala/dalvik/test/callGraph/DalvikCallGraphTestBase.java index de0dc53ce..9c8a7047c 100644 --- a/com.ibm.wala.dalvik.test/source/com/ibm/wala/dalvik/test/callGraph/DalvikCallGraphTestBase.java +++ b/com.ibm.wala.dalvik.test/source/com/ibm/wala/dalvik/test/callGraph/DalvikCallGraphTestBase.java @@ -48,7 +48,6 @@ import com.ibm.wala.ipa.cha.ClassHierarchyFactory; import com.ibm.wala.ipa.cha.IClassHierarchy; import com.ibm.wala.shrikeBT.analysis.Analyzer.FailureException; import com.ibm.wala.shrikeCT.InvalidClassFileException; -import com.ibm.wala.ssa.SSAInstruction; import com.ibm.wala.ssa.SSANewInstruction; import com.ibm.wala.types.ClassLoaderReference; import com.ibm.wala.types.MethodReference; @@ -97,8 +96,8 @@ public class DalvikCallGraphTestBase extends DynamicCallGraphTestBase { @Override public Iterator iterateNewSites(CGNode node) { return - new MapIterator( - new FilterIterator( + new MapIterator<>( + new FilterIterator<>( node.getIR().iterateAllInstructions(), SSANewInstruction.class::isInstance), object -> ((SSANewInstruction)object).getNewSite() diff --git a/com.ibm.wala.scandroid/.settings/org.eclipse.jdt.core.prefs b/com.ibm.wala.scandroid/.settings/org.eclipse.jdt.core.prefs index 83c5116b1..10cf5621c 100644 --- a/com.ibm.wala.scandroid/.settings/org.eclipse.jdt.core.prefs +++ b/com.ibm.wala.scandroid/.settings/org.eclipse.jdt.core.prefs @@ -66,7 +66,7 @@ org.eclipse.jdt.core.compiler.problem.potentiallyUnclosedCloseable=error org.eclipse.jdt.core.compiler.problem.rawTypeReference=error org.eclipse.jdt.core.compiler.problem.redundantNullAnnotation=error org.eclipse.jdt.core.compiler.problem.redundantNullCheck=error -org.eclipse.jdt.core.compiler.problem.redundantSpecificationOfTypeArguments=warning +org.eclipse.jdt.core.compiler.problem.redundantSpecificationOfTypeArguments=error org.eclipse.jdt.core.compiler.problem.redundantSuperinterface=error org.eclipse.jdt.core.compiler.problem.reportMethodCanBePotentiallyStatic=ignore org.eclipse.jdt.core.compiler.problem.reportMethodCanBeStatic=error diff --git a/com.ibm.wala.scandroid/source/org/scandroid/flow/OutflowAnalysis.java b/com.ibm.wala.scandroid/source/org/scandroid/flow/OutflowAnalysis.java index 58ff832d7..5faac7267 100644 --- a/com.ibm.wala.scandroid/source/org/scandroid/flow/OutflowAnalysis.java +++ b/com.ibm.wala.scandroid/source/org/scandroid/flow/OutflowAnalysis.java @@ -140,7 +140,7 @@ public class OutflowAnalysis { IFDSTaintDomain domain, Map, Set>> flowGraph, List sinkSpecs) { - List> targetList = new ArrayList>(); + List> targetList = new ArrayList<>(); for (int i = 0; i < sinkSpecs.size(); i++) { Collection tempList = sinkSpecs.get(i).getNamePattern() @@ -288,7 +288,7 @@ public class OutflowAnalysis { int mappedIndex = domain.getMappedIndex(de); if (flowResult.getResult(block).contains(mappedIndex)) { addEdge(flowGraph, de.taintSource, - new ParameterFlow( + new ParameterFlow<>( entryBlock, newArgNum, false)); } } @@ -296,7 +296,7 @@ public class OutflowAnalysis { int mappedIndex = domain.getMappedIndex(de); if (flowResult.getResult(entryBlock).contains(mappedIndex)) { addEdge(flowGraph, de.taintSource, - new ParameterFlow( + new ParameterFlow<>( entryBlock, newArgNum, false)); } @@ -309,7 +309,7 @@ public class OutflowAnalysis { domain.getMappedIndex(de))) { addEdge(flowGraph, de.taintSource, - new ParameterFlow( + new ParameterFlow<>( entryBlock, newArgNum, false)); } } @@ -351,7 +351,7 @@ public class OutflowAnalysis { domain.getMappedIndex(de))) { addEdge(flowGraph, de.taintSource, - new ReturnFlow(block, + new ReturnFlow<>(block, false)); } // Iterator> it = @@ -394,7 +394,7 @@ public class OutflowAnalysis { domain.getMappedIndex(ikElement))) { addEdge(flowGraph, ikElement.taintSource, - new ReturnFlow( + new ReturnFlow<>( realBlock, false)); } } diff --git a/com.ibm.wala.util/.settings/org.eclipse.jdt.core.prefs b/com.ibm.wala.util/.settings/org.eclipse.jdt.core.prefs index da125699c..198f44739 100644 --- a/com.ibm.wala.util/.settings/org.eclipse.jdt.core.prefs +++ b/com.ibm.wala.util/.settings/org.eclipse.jdt.core.prefs @@ -80,7 +80,7 @@ org.eclipse.jdt.core.compiler.problem.potentiallyUnclosedCloseable=error org.eclipse.jdt.core.compiler.problem.rawTypeReference=error org.eclipse.jdt.core.compiler.problem.redundantNullAnnotation=error org.eclipse.jdt.core.compiler.problem.redundantNullCheck=error -org.eclipse.jdt.core.compiler.problem.redundantSpecificationOfTypeArguments=warning +org.eclipse.jdt.core.compiler.problem.redundantSpecificationOfTypeArguments=error org.eclipse.jdt.core.compiler.problem.redundantSuperinterface=error org.eclipse.jdt.core.compiler.problem.reportMethodCanBePotentiallyStatic=ignore org.eclipse.jdt.core.compiler.problem.reportMethodCanBeStatic=error diff --git a/com.ibm.wala.util/src/com/ibm/wala/util/graph/GraphIntegrity.java b/com.ibm.wala.util/src/com/ibm/wala/util/graph/GraphIntegrity.java index a5e8c4f9f..7cb89a8c5 100644 --- a/com.ibm.wala.util/src/com/ibm/wala/util/graph/GraphIntegrity.java +++ b/com.ibm.wala.util/src/com/ibm/wala/util/graph/GraphIntegrity.java @@ -123,7 +123,7 @@ public class GraphIntegrity { n2++; } n3 = 0; - for (Iterator it = new BFSIterator(G); it.hasNext();) { + for (Iterator it = new BFSIterator<>(G); it.hasNext();) { it.next(); n3++; } @@ -145,7 +145,7 @@ public class GraphIntegrity { throw new UnsoundGraphException("n1: " + n1 + " n2: " + n2); } if (n1 != n3) { - throw setDiffException("n1: " + n1 + " n3: " + n3, G.iterator(), new BFSIterator(G)); + throw setDiffException("n1: " + n1 + " n3: " + n3, G.iterator(), new BFSIterator<>(G)); } if (n1 != n4) { throw new UnsoundGraphException("n1: " + n1 + " n4: " + n3); From 66e2e76205bdc8bd3f1b94232afd826ad19e078c Mon Sep 17 00:00:00 2001 From: Ben Liblit Date: Sun, 3 Dec 2017 19:24:21 -0600 Subject: [PATCH 31/69] Prefer to cast Iterables instead of the things they can iterate over --- .../jdt/JDTJava2CAstTranslator.java | 48 ++++++++----------- 1 file changed, 21 insertions(+), 27 deletions(-) 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 f9042eba8..6ef2ad161 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 @@ -253,8 +253,7 @@ public abstract class JDTJava2CAstTranslator { List declEntities = new ArrayList<>(); - for (Iterator iter = cu.types().iterator(); iter.hasNext();) { - AbstractTypeDeclaration decl = (AbstractTypeDeclaration) iter.next(); + for (AbstractTypeDeclaration decl : (Iterable) cu.types()) { // can be of type AnnotationTypeDeclaration, EnumDeclaration, TypeDeclaration declEntities.add(visit(decl, new RootContext())); } @@ -440,8 +439,7 @@ public abstract class JDTJava2CAstTranslator { } else if (decl instanceof FieldDeclaration) { FieldDeclaration fd = (FieldDeclaration) decl; - for (Object f : fd.fragments()) { - VariableDeclarationFragment frag = (VariableDeclarationFragment) f; + for (VariableDeclarationFragment frag : (Iterable) fd.fragments()) { if (frag.getInitializer() != null) { boolean isStatic = ((fd.getModifiers() & Modifier.STATIC) != 0); (isStatic ? staticInits : inits).add(frag); @@ -462,8 +460,7 @@ public abstract class JDTJava2CAstTranslator { if (decl instanceof FieldDeclaration) { FieldDeclaration fieldDecl = (FieldDeclaration) decl; Collection quals = JDT2CAstUtils.mapModifiersToQualifiers(fieldDecl.getModifiers(), false, false); - for (Object f : fieldDecl.fragments()) { - VariableDeclarationFragment fieldFrag = (VariableDeclarationFragment) f; + for (VariableDeclarationFragment fieldFrag : (Iterable) fieldDecl.fragments()) { IVariableBinding fieldBinding = fieldFrag.resolveBinding(); memberEntities.add(new FieldEntity(fieldFrag.getName().getIdentifier(), fieldBinding.getType(), quals, makePosition(fieldFrag.getStartPosition(), fieldFrag.getStartPosition() + fieldFrag.getLength()), @@ -750,8 +747,7 @@ public abstract class JDTJava2CAstTranslator { ArrayList arguments = new ArrayList<>(); int i = 0; - for (Object o : overriding.parameters()) { - SingleVariableDeclaration svd = (SingleVariableDeclaration) o; + for (SingleVariableDeclaration svd : (Iterable) overriding.parameters()) { CAstNode varNode = makeNode(context, fFactory, null, CAstNode.VAR, fFactory.makeConstant(svd.getName().getIdentifier())); ITypeBinding fromType = JDT2CAstUtils.getErasedType(paramTypes[i], ast); ITypeBinding toType = JDT2CAstUtils.getErasedType(overridingBinding.getParameterTypes()[i], ast); @@ -940,16 +936,16 @@ public abstract class JDTJava2CAstTranslator { if (parameterTypes == null) { fParameterTypes = new ArrayList<>(fDecl.parameters().size()); - for (Object p : fDecl.parameters()) { - fParameterNames[i++] = ((SingleVariableDeclaration) p).getName().getIdentifier(); - fParameterTypes.add(fTypeDict.getCAstTypeFor(((SingleVariableDeclaration) p).resolveBinding().getType())); + for (SingleVariableDeclaration p : (Iterable) fDecl.parameters()) { + fParameterNames[i++] = p.getName().getIdentifier(); + fParameterTypes.add(fTypeDict.getCAstTypeFor(p.resolveBinding().getType())); } } else { // currently this is only used in making a default constructor with arguments (anonymous classes). // this is because we cannot synthesize bindings. fParameterTypes = parameterTypes; - for (Object p : fDecl.parameters()) { - fParameterNames[i++] = ((SingleVariableDeclaration) p).getName().getIdentifier(); + for (SingleVariableDeclaration p : (Iterable) fDecl.parameters()) { + fParameterNames[i++] = p.getName().getIdentifier(); } } } else { @@ -1086,9 +1082,9 @@ public abstract class JDTJava2CAstTranslator { if (fExceptionTypes == null) { fExceptionTypes = new LinkedHashSet<>(); if (fDecl != null) - for (Object exception : fDecl.thrownExceptionTypes()) + for (SimpleType exception : (Iterable) fDecl.thrownExceptionTypes()) - fExceptionTypes.add(fTypeDict.getCAstTypeFor(((SimpleType) exception).resolveBinding())); + fExceptionTypes.add(fTypeDict.getCAstTypeFor(exception.resolveBinding())); } return fExceptionTypes; } @@ -1262,8 +1258,8 @@ public abstract class JDTJava2CAstTranslator { */ private ArrayList createBlock(Block n, WalkContext context) { ArrayList stmtNodes = new ArrayList<>(); - for (Object s : n.statements()) - visitNodeOrNodes((ASTNode) s, context, stmtNodes); + for (ASTNode s : (Iterable) n.statements()) + visitNodeOrNodes(s, context, stmtNodes); return stmtNodes; } @@ -1309,8 +1305,8 @@ public abstract class JDTJava2CAstTranslator { private ArrayList visit(VariableDeclarationStatement n, WalkContext context) { ArrayList result = new ArrayList<>(); - for (Object o : n.fragments()) - result.add(visit((VariableDeclarationFragment) o, context)); + for (VariableDeclarationFragment o : (Iterable) n.fragments()) + result.add(visit(o, context)); return result; } @@ -1323,11 +1319,11 @@ 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++) { - Expression element = (Expression) iter.next(); + for (Expression element : (Iterable) n.expressions()) { eltNodes[idx] = visitNode(element, context); if (eltNodes[idx] == null) assert eltNodes[idx] != null : element.toString(); + ++idx; } return makeNode(context, fFactory, n, CAstNode.ARRAY_LITERAL, eltNodes); @@ -2019,8 +2015,7 @@ public abstract class JDTJava2CAstTranslator { // keep on adding operands on the right side leftLength = n.getRightOperand().getStartPosition() + n.getRightOperand().getLength() - leftStartPosition; - for (Object o : n.extendedOperands()) { - Expression operand = (Expression) o; + for (Expression operand : (Iterable) n.extendedOperands()) { result = createInfixExpression(n.getOperator(), leftType, leftStartPosition, leftLength, result, operand, context); if (leftType.isPrimitive() && operand.resolveTypeBinding().isPrimitive()) @@ -2634,8 +2629,8 @@ public abstract class JDTJava2CAstTranslator { for (int i = 0; i < n.initializers().size(); i++) { ASTNode init = (ASTNode) n.initializers().get(i); if (init instanceof VariableDeclarationExpression) { - for (Object o : ((VariableDeclarationExpression) init).fragments()) - inits.add(visitNode((ASTNode) o, context)); + for (ASTNode o : (Iterable) ((VariableDeclarationExpression) init).fragments()) + inits.add(visitNode(o, context)); } else inits.add(visitNode(init, context)); } @@ -3125,8 +3120,7 @@ public abstract class JDTJava2CAstTranslator { TryCatchContext(WalkContext parent, TryStatement tryNode) { super(parent); - for (Iterator catchIter = tryNode.catchClauses().iterator(); catchIter.hasNext();) { - CatchClause c = catchIter.next(); + for (CatchClause c : (Iterable) tryNode.catchClauses()) { Pair p = Pair.make(c.getException().resolveBinding().getType(), (Object) c); fCatchNodes.add(p); From bf6698edf5a908999311a8df9970238c44c84323 Mon Sep 17 00:00:00 2001 From: Ben Liblit Date: Sun, 3 Dec 2017 19:25:58 -0600 Subject: [PATCH 32/69] Use more specific type than "Object" to avoid casting --- .../translator/jdt/JDTJava2CAstTranslator.java | 15 ++++++--------- 1 file changed, 6 insertions(+), 9 deletions(-) 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 6ef2ad161..98436b27f 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 @@ -431,7 +431,7 @@ public abstract class JDTJava2CAstTranslator { } } - for (Object decl : bodyDecls) { + for (BodyDeclaration decl : bodyDecls) { if (decl instanceof Initializer) { Initializer initializer = (Initializer) decl; boolean isStatic = ((initializer.getModifiers() & Modifier.STATIC) != 0); @@ -450,13 +450,12 @@ public abstract class JDTJava2CAstTranslator { // process entities. initializers will be folded in here. if (enumConstants != null) { - for (Object decl : enumConstants) { - memberEntities.add(visit((EnumConstantDeclaration) decl, context)); + for (EnumConstantDeclaration decl : enumConstants) { + memberEntities.add(visit(decl, context)); } } - for (Object d : bodyDecls) { - BodyDeclaration decl = (BodyDeclaration) d; + for (BodyDeclaration decl : bodyDecls) { if (decl instanceof FieldDeclaration) { FieldDeclaration fieldDecl = (FieldDeclaration) decl; Collection quals = JDT2CAstUtils.mapModifiersToQualifiers(fieldDecl.getModifiers(), false, false); @@ -496,8 +495,7 @@ public abstract class JDTJava2CAstTranslator { // add default constructor(s) if necessary // most default constructors have no parameters; however, those created by anonymous classes will have parameters // (they just call super with those parameters) - for (Object m : typeBinding.getDeclaredMethods()) { - IMethodBinding met = (IMethodBinding) m; + for (IMethodBinding met : typeBinding.getDeclaredMethods()) { if (met.isDefaultConstructor()) { if (typeBinding.isEnum()) memberEntities.add(createEnumConstructorWithParameters(met, n, context, inits, null)); @@ -2382,8 +2380,7 @@ public abstract class JDTJava2CAstTranslator { ArrayList currentBlock = new ArrayList<>(); // Now produce the CAst representation for each case - for (Object o : cases) { - Statement s = (Statement) o; + for (Statement s : cases) { if (s instanceof SwitchCase) { if (!currentBlock.isEmpty()) { // bundle up statements before this case From 0286c2b0487735176fb98c526a2eddc442c324f1 Mon Sep 17 00:00:00 2001 From: Ben Liblit Date: Sun, 3 Dec 2017 22:39:28 -0600 Subject: [PATCH 33/69] Use Iterator2Iterable helper to convert more loops to for-each --- .../jdt/JDTJava2CAstTranslator.java | 6 +-- .../com/ibm/wala/cast/java/test/IRTests.java | 8 ++-- .../ibm/wala/cast/java/test/JavaIRTests.java | 4 +- .../js/translator/RhinoToAstTranslator.java | 16 +++---- .../cast/js/test/TestJavaScriptSlicer.java | 10 ++--- .../cast/js/test/TestPointerAnalyses.java | 15 ++++--- .../PessimisticCallGraphBuilder.java | 6 +-- .../fieldbased/flowgraph/FlowGraph.java | 16 +++---- .../flowgraph/FlowGraphBuilder.java | 11 +++-- .../extraction/ExtractedFunction.java | 4 +- .../cast/js/ipa/modref/JavaScriptModRef.java | 9 ++-- .../ibm/wala/cast/js/util/CallGraph2JSON.java | 5 +-- .../com/ibm/wala/cast/js/util/Util.java | 6 +-- .../wala/cast/test/TestCallGraphShape.java | 8 ++-- .../wala/cast/ipa/callgraph/AstCallGraph.java | 10 ++--- .../AstSSAPropagationCallGraphBuilder.java | 29 ++++++------ .../cast/ipa/callgraph/CAstCallGraphUtil.java | 7 ++- .../java/com/ibm/wala/cast/ir/cfg/Util.java | 9 ++-- .../cast/ir/ssa/AbstractSSAConversion.java | 9 ++-- .../ibm/wala/cast/ir/ssa/SSAConversion.java | 7 +-- .../cast/ir/ssa/analysis/LiveAnalysis.java | 14 +++--- .../cast/ir/translator/AstTranslator.java | 15 +++---- .../cast/loader/CAstAbstractModuleLoader.java | 6 +-- .../tree/impl/CAstSourcePositionRecorder.java | 4 +- .../wala/core/tests/basic/PrimitivesTest.java | 9 ++-- .../core/tests/basic/WelshPowellTest.java | 8 ++-- .../core/tests/callGraph/CallGraphTest.java | 23 ++++------ .../wala/core/tests/callGraph/CloneTest.java | 5 +-- .../wala/core/tests/callGraph/LambdaTest.java | 6 +-- .../tests/callGraph/PiNodeCallGraphTest.java | 5 +-- .../core/tests/callGraph/ReflectionTest.java | 4 +- .../intra/NullPointerExceptionIntraTest.java | 6 +-- .../core/tests/demandpa/AbstractPtrTest.java | 8 +--- .../wala/core/tests/slicer/SlicerTest.java | 9 ++-- .../analysis/pointers/BasicHeapGraph.java | 4 +- .../reflection/FactoryBypassInterpreter.java | 4 +- .../stackMachine/AbstractIntStackMachine.java | 8 ++-- .../analysis/typeInference/TypeInference.java | 4 +- .../src/com/ibm/wala/cfg/AbstractCFG.java | 5 ++- .../src/com/ibm/wala/cfg/CFGSanitizer.java | 14 +++--- .../src/com/ibm/wala/cfg/Util.java | 10 ++--- .../wala/cfg/cdg/ControlDependenceGraph.java | 14 +++--- .../NullPointerTransferFunctionProvider.java | 6 +-- .../ibm/wala/classLoader/ClassLoaderImpl.java | 9 ++-- .../com/ibm/wala/classLoader/CodeScanner.java | 21 +++++---- .../PartiallyBalancedTabulationSolver.java | 6 +-- .../wala/dataflow/IFDS/TabulationSolver.java | 18 +++----- .../ibm/wala/dataflow/ssa/SSAInference.java | 12 ++--- .../alg/DemandRefinementPointsTo.java | 32 +++++--------- .../flowgraph/AbstractDemandFlowGraph.java | 25 +++++------ .../demandpa/flowgraph/AbstractFlowGraph.java | 18 ++++---- .../flowgraph/DemandPointerFlowGraph.java | 5 +-- .../SimpleDemandPointerFlowGraph.java | 15 +++---- .../ibm/wala/escape/FILiveObjectAnalysis.java | 11 ++--- .../ibm/wala/escape/TrivialMethodEscape.java | 9 ++-- .../wala/ipa/callgraph/cha/CHACallGraph.java | 13 +++--- .../ipa/callgraph/impl/BasicCallGraph.java | 10 ++--- .../ipa/callgraph/impl/PartialCallGraph.java | 7 ++- .../propagation/PointerAnalysisImpl.java | 3 +- .../callgraph/propagation/PointsToMap.java | 4 +- .../propagation/PropagationGraph.java | 19 +++----- .../SSAPropagationCallGraphBuilder.java | 29 ++++++------ .../propagation/cfa/ZeroXInstanceKeys.java | 5 +-- .../propagation/rta/AbstractRTABuilder.java | 14 +++--- .../ipa/cfg/AbstractInterproceduralCFG.java | 13 +++--- .../src/com/ibm/wala/ipa/cfg/PrunedCFG.java | 22 +++++----- .../com/ibm/wala/ipa/cha/ClassHierarchy.java | 14 +++--- .../src/com/ibm/wala/ipa/modref/ModRef.java | 9 ++-- .../wala/ipa/modref/ModRefFieldAccess.java | 11 ++--- .../src/com/ibm/wala/ipa/slicer/PDG.java | 21 +++------ .../src/com/ibm/wala/ipa/slicer/SDG.java | 43 +++++++----------- .../src/com/ibm/wala/ssa/DefUse.java | 5 ++- .../src/com/ibm/wala/ssa/IR.java | 15 +++---- .../src/com/ibm/wala/ssa/SSACFG.java | 24 +++++----- .../analysis/DeadAssignmentElimination.java | 16 +++---- .../analysis/ExplodedControlFlowGraph.java | 14 +++--- .../src/com/ibm/wala/viz/PDFViewUtil.java | 9 ++-- .../src/com/ibm/wala/viz/viewer/CgPanel.java | 5 +-- .../test/callGraph/DroidBenchCGTest.java | 6 +-- .../classLoader/WDexClassLoaderImpl.java | 5 +-- .../ssa/AbstractIntRegisterMachine.java | 7 ++- .../wala/ide/AbstractJavaAnalysisAction.java | 7 ++- .../com/ibm/wala/ide/util/JsdtUtil.java | 6 +-- .../com/ibm/wala/ide/ui/SWTTreeViewer.java | 6 +-- .../ibm/wala/ide/ui/ViewIFDSLocalAction.java | 5 +-- .../util/AndroidAnalysisContext.java | 3 +- .../org/scandroid/util/CGAnalysisContext.java | 12 ++--- .../source/org/scandroid/util/DexDotUtil.java | 6 +-- .../wala/dataflow/graph/DataflowSolver.java | 15 +++---- .../impl/AbstractFixedPointSolver.java | 13 +++--- .../ibm/wala/util/graph/AbstractGraph.java | 5 ++- .../src/com/ibm/wala/util/graph/Acyclic.java | 4 +- .../ibm/wala/util/graph/GraphIntegrity.java | 44 +++++-------------- .../com/ibm/wala/util/graph/GraphPrint.java | 6 +-- .../graph/dominators/DominanceFrontiers.java | 10 ++--- .../util/graph/dominators/Dominators.java | 5 ++- .../graph/impl/SlowSparseNumberedGraph.java | 7 ++- .../SlowSparseNumberedLabeledGraph.java | 6 +-- .../wala/util/graph/traverse/BFSIterator.java | 4 +- .../graph/traverse/BoundedBFSIterator.java | 4 +- .../traverse/DFSDiscoverTimeIterator.java | 4 +- .../graph/traverse/DFSFinishTimeIterator.java | 4 +- .../util/graph/traverse/DFSPathFinder.java | 4 +- .../wala/util/graph/traverse/WelshPowell.java | 8 ++-- .../ibm/wala/util/processes/JavaLauncher.java | 6 +-- .../src/com/ibm/wala/viz/DotUtil.java | 6 +-- 106 files changed, 461 insertions(+), 649 deletions(-) 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 98436b27f..9f3fbb79d 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 @@ -425,10 +425,8 @@ public abstract class JDTJava2CAstTranslator { ArrayList staticInits = new ArrayList<>(); if (enumConstants != null) { - for (Object decl : enumConstants) { - EnumConstantDeclaration ecd = (EnumConstantDeclaration) decl; - staticInits.add(ecd); // always (implicitly) static,final (actually, no modifiers allowed) - } + // always (implicitly) static,final (actually, no modifiers allowed) + staticInits.addAll(enumConstants); } for (BodyDeclaration decl : bodyDecls) { 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 7eb3d147e..8d4c12923 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 @@ -53,6 +53,7 @@ import com.ibm.wala.types.TypeReference; import com.ibm.wala.types.annotations.Annotation; import com.ibm.wala.util.CancelException; import com.ibm.wala.util.collections.HashSetFactory; +import com.ibm.wala.util.collections.Iterator2Iterable; import com.ibm.wala.util.collections.Pair; import com.ibm.wala.util.debug.Assertions; import com.ibm.wala.util.strings.Atom; @@ -190,9 +191,7 @@ public abstract class IRTests { CGNode tgtNode = tgtNodes.iterator().next(); boolean found = false; - for (Iterator succIter = callGraph.getSuccNodes(srcNode); succIter.hasNext();) { - CGNode succ = succIter.next(); - + for (CGNode succ : Iterator2Iterable.make(callGraph.getSuccNodes(srcNode))) { if (tgtNode == succ) { found = true; break; @@ -378,8 +377,7 @@ public abstract class IRTests { Set unreachable = HashSetFactory.make(); IClassHierarchy cha = cg.getClassHierarchy(); IClassLoader sourceLoader = cha.getLoader(JavaSourceAnalysisScope.SOURCE); - for (Iterator iter = sourceLoader.iterateAllClasses(); iter.hasNext();) { - IClass clazz = iter.next(); + for (IClass clazz : Iterator2Iterable.make(sourceLoader.iterateAllClasses())) { System.err.println(clazz); if (clazz.isInterface()) 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 06b84e5b3..4b3681583 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 @@ -93,9 +93,7 @@ public abstract class JavaIRTests extends IRTests { /* Assert.assertEquals("Expected two classes.", iClass.getClassLoader().getNumberOfClasses(), 2); - for (Iterator it = iClass.getClassLoader().iterateAllClasses(); it.hasNext();) { - IClass cls = it.next(); - + for (IClass cls : Iterator2Iterable.make(iClass.getClassLoader().iterateAllClasses())) { Assert.assertTrue("Expected class to be either " + typeStr + " or " + "Bar", cls.getName().getClassName().toString() .equals(typeStr) || cls.getName().getClassName().toString().equals("Bar")); diff --git a/com.ibm.wala.cast.js.rhino/source/com/ibm/wala/cast/js/translator/RhinoToAstTranslator.java b/com.ibm.wala.cast.js.rhino/source/com/ibm/wala/cast/js/translator/RhinoToAstTranslator.java index fdb58298b..662728edd 100644 --- a/com.ibm.wala.cast.js.rhino/source/com/ibm/wala/cast/js/translator/RhinoToAstTranslator.java +++ b/com.ibm.wala.cast.js.rhino/source/com/ibm/wala/cast/js/translator/RhinoToAstTranslator.java @@ -1696,8 +1696,8 @@ public class RhinoToAstTranslator implements TranslatorToCAst { if (finallyNode != null) { int i = 0; CAstNode[] finallyAsts = new CAstNode[finallyList.size()]; - for (Iterator fns = finallyList.iterator(); fns.hasNext();) { - finallyAsts[i++] = walkNodes(fns.next(), context); + for (Node fn : finallyList) { + finallyAsts[i++] = walkNodes(fn, context); } finallyBlock = Ast.makeNode(CAstNode.BLOCK_STMT, finallyAsts); } @@ -1707,8 +1707,8 @@ public class RhinoToAstTranslator implements TranslatorToCAst { int i = 0; WalkContext catchChild = new CatchBlockContext(context); CAstNode[] catchAsts = new CAstNode[catchList.size()]; - for (Iterator cns = catchList.iterator(); cns.hasNext();) { - catchAsts[i++] = walkNodes(cns.next(), catchChild); + for (Node cn : catchList.iterator()) { + catchAsts[i++] = walkNodes(cn, catchChild); } CAstNode catchBlock = Ast.makeNode(CAstNode.CATCH, Ast.makeConstant(catchChild.getCatchVar()), Ast.makeNode(CAstNode.BLOCK_STMT, catchAsts)); @@ -1717,8 +1717,8 @@ public class RhinoToAstTranslator implements TranslatorToCAst { i = 0; WalkContext tryChild = new TryBlockContext(context, catchBlock); CAstNode[] tryAsts = new CAstNode[tryList.size()]; - for (Iterator tns = tryList.iterator(); tns.hasNext();) { - tryAsts[i++] = walkNodes(tns.next(), tryChild); + for (Node tn : tryList) { + tryAsts[i++] = walkNodes(tn, tryChild); } CAstNode tryBlock = Ast.makeNode(CAstNode.BLOCK_STMT, tryAsts); @@ -1732,8 +1732,8 @@ public class RhinoToAstTranslator implements TranslatorToCAst { } else { int i = 0; CAstNode[] tryAsts = new CAstNode[tryList.size()]; - for (Iterator tns = tryList.iterator(); tns.hasNext();) { - tryAsts[i++] = walkNodes(tns.next(), context); + for (Node tn : tryList) { + tryAsts[i++] = walkNodes(tn, context); } CAstNode tryBlock = Ast.makeNode(CAstNode.BLOCK_STMT, tryAsts); 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 1767eec3d..f36bbe3e0 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 @@ -12,8 +12,6 @@ package com.ibm.wala.cast.js.test; import java.io.IOException; import java.util.Collection; -import java.util.Iterator; - import org.junit.Assert; import org.junit.Test; @@ -33,6 +31,7 @@ import com.ibm.wala.ipa.slicer.Statement; import com.ibm.wala.util.CancelException; import com.ibm.wala.util.WalaException; import com.ibm.wala.util.collections.HashSetFactory; +import com.ibm.wala.util.collections.Iterator2Iterable; public abstract class TestJavaScriptSlicer extends TestJSCallGraphShape { @@ -85,10 +84,9 @@ public abstract class TestJavaScriptSlicer extends TestJSCallGraphShape { private Collection findTargetStatement(CallGraph CG) { final Collection ss = HashSetFactory.make(); for(CGNode n : getNodes(CG, "suffix:_slice_target_fn")) { - for(Iterator callers = CG.getPredNodes(n); callers.hasNext(); ) { - final CGNode caller = callers.next(); - for(Iterator sites = CG.getPossibleSites(caller, n); sites.hasNext(); ) { - caller.getIR().getCallInstructionIndices(sites.next()).foreach(x -> ss.add(new NormalStatement(caller, x))); + for(CGNode caller : Iterator2Iterable.make(CG.getPredNodes(n))) { + for(CallSiteReference site : Iterator2Iterable.make(CG.getPossibleSites(caller, n))) { + caller.getIR().getCallInstructionIndices(site).foreach(x -> ss.add(new NormalStatement(caller, x))); } } } diff --git a/com.ibm.wala.cast.js.test/harness-src/com/ibm/wala/cast/js/test/TestPointerAnalyses.java b/com.ibm.wala.cast.js.test/harness-src/com/ibm/wala/cast/js/test/TestPointerAnalyses.java index 8a4d3d31c..9af2b023c 100644 --- a/com.ibm.wala.cast.js.test/harness-src/com/ibm/wala/cast/js/test/TestPointerAnalyses.java +++ b/com.ibm.wala.cast.js.test/harness-src/com/ibm/wala/cast/js/test/TestPointerAnalyses.java @@ -57,6 +57,7 @@ import com.ibm.wala.util.NullProgressMonitor; import com.ibm.wala.util.WalaException; import com.ibm.wala.util.collections.EmptyIterator; import com.ibm.wala.util.collections.HashSetFactory; +import com.ibm.wala.util.collections.Iterator2Iterable; import com.ibm.wala.util.collections.MapIterator; import com.ibm.wala.util.collections.Pair; import com.ibm.wala.util.intset.OrdinalSet; @@ -132,8 +133,8 @@ public abstract class TestPointerAnalyses { OrdinalSet pointers = pa.getPointsToSet(l); if (pointers != null) { for(InstanceKey k : pointers) { - for(Iterator> css = k.getCreationSites(CG); css.hasNext(); ) { - result.add(css.next()); + for(Pair cs : Iterator2Iterable.make(k.getCreationSites(CG))) { + result.add(cs); } } } @@ -302,8 +303,8 @@ public abstract class TestPointerAnalyses { System.err.println("empty " + f + " for " + k + "(" + k.getConcreteType() + ")"); } if (dump) { - for(Iterator> css = k.getCreationSites(fbCG); css.hasNext(); ) { - System.err.println(css.next()); + for(Pair cs : Iterator2Iterable.make(k.getCreationSites(fbCG))) { + System.err.println(cs); } } } @@ -319,9 +320,9 @@ public abstract class TestPointerAnalyses { PointerKey fbKey = fbPA.getHeapModel().getPointerKeyForLocal(node, vn); OrdinalSet fbPointsTo = fbPA.getPointsToSet(fbKey); for(T o : fbPointsTo) { - for(Iterator ps = proto.apply(o); ps.hasNext(); ) { - for(Iterator> css = ps.next().getCreationSites(CG); css.hasNext(); ) { - fbProtos.add(css.next()); + for(T p : Iterator2Iterable.make(proto.apply(o))) { + for(Pair cs : Iterator2Iterable.make(p.getCreationSites(CG))) { + fbProtos.add(cs); } } } diff --git a/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/callgraph/fieldbased/PessimisticCallGraphBuilder.java b/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/callgraph/fieldbased/PessimisticCallGraphBuilder.java index 1e0c915a3..edc0d607f 100644 --- a/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/callgraph/fieldbased/PessimisticCallGraphBuilder.java +++ b/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/callgraph/fieldbased/PessimisticCallGraphBuilder.java @@ -10,8 +10,6 @@ *****************************************************************************/ package com.ibm.wala.cast.js.callgraph.fieldbased; -import java.util.Iterator; - import com.ibm.wala.cast.js.callgraph.fieldbased.flowgraph.FlowGraph; import com.ibm.wala.cast.js.callgraph.fieldbased.flowgraph.vertices.FuncVertex; import com.ibm.wala.cast.js.callgraph.fieldbased.flowgraph.vertices.VertexFactory; @@ -30,6 +28,7 @@ import com.ibm.wala.ssa.SSAInstruction; import com.ibm.wala.ssa.SymbolTable; import com.ibm.wala.types.TypeReference; import com.ibm.wala.util.MonitorUtil.IProgressMonitor; +import com.ibm.wala.util.collections.Iterator2Iterable; /** * Call graph builder for building pessimistic call graphs, where inter-procedural flows are not @@ -103,8 +102,7 @@ public class PessimisticCallGraphBuilder extends FieldBasedCallGraphBuilder { FuncVertex callee = factory.makeFuncVertex(fnClass); // look at all uses - for(Iterator uses = du.getUses(defn);uses.hasNext();) { - SSAInstruction use = uses.next(); + for(SSAInstruction use : Iterator2Iterable.make(du.getUses(defn))) { // check whether this is a local call if(use instanceof JavaScriptInvoke && ((JavaScriptInvoke)use).getFunction() == defn) { diff --git a/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/callgraph/fieldbased/flowgraph/FlowGraph.java b/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/callgraph/fieldbased/flowgraph/FlowGraph.java index 6e3394a9d..9820ab35d 100644 --- a/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/callgraph/fieldbased/flowgraph/FlowGraph.java +++ b/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/callgraph/fieldbased/flowgraph/FlowGraph.java @@ -60,6 +60,7 @@ import com.ibm.wala.util.MonitorUtil.IProgressMonitor; import com.ibm.wala.util.collections.CompoundIterator; import com.ibm.wala.util.collections.HashMapFactory; import com.ibm.wala.util.collections.HashSetFactory; +import com.ibm.wala.util.collections.Iterator2Iterable; import com.ibm.wala.util.collections.Pair; import com.ibm.wala.util.graph.Graph; import com.ibm.wala.util.graph.GraphReachability; @@ -194,14 +195,12 @@ public class FlowGraph implements Iterable { { PropVertex proto = factory.makePropVertex("prototype"); if (graph.containsNode(proto)) { - for(Iterator ps = graph.getPredNodes(proto); ps.hasNext(); ) { - Vertex p = ps.next(); + for(Vertex p : Iterator2Iterable.make(graph.getPredNodes(proto))) { if (p instanceof VarVertex) { int rval = ((VarVertex) p).getValueNumber(); FuncVertex func = ((VarVertex) p).getFunction(); DefUse du = cache.getDefUse(getIR(cache, func)); - for(Iterator insts = du.getUses(rval); insts.hasNext(); ) { - SSAInstruction inst = insts.next(); + for(SSAInstruction inst : Iterator2Iterable.make(du.getUses(rval))) { if (inst instanceof JavaScriptPropertyWrite) { int obj = ((JavaScriptPropertyWrite) inst).getObjectRef(); VarVertex object = factory.makeVarVertex(func, obj); @@ -452,14 +451,12 @@ public class FlowGraph implements Iterable { for(PropVertex property : factory.getPropVertices()) { // edges from objects to properties assigned to them - for(Iterator ps = dataflow.getPredNodes(property); ps.hasNext(); ) { - Vertex p = ps.next(); + for(Vertex p : Iterator2Iterable.make(dataflow.getPredNodes(property))) { if (p instanceof VarVertex) { int rval = ((VarVertex) p).getValueNumber(); FuncVertex func = ((VarVertex) p).getFunction(); DefUse du = cache.getDefUse(getIR(cache, func)); - for(Iterator insts = du.getUses(rval); insts.hasNext(); ) { - SSAInstruction inst = insts.next(); + for(SSAInstruction inst : Iterator2Iterable.make(du.getUses(rval))) { if (inst instanceof JavaScriptPropertyWrite) { int obj = ((JavaScriptPropertyWrite) inst).getObjectRef(); VarVertex object = factory.makeVarVertex(func, obj); @@ -502,8 +499,7 @@ public class FlowGraph implements Iterable { // prototype dataflow for object creations for(CreationSiteVertex cs : factory.creationSites()) { if (cg.getNode(cs.getMethod(), Everywhere.EVERYWHERE) != null) { - for(Iterator> sites = cs.getCreationSites(cg); sites.hasNext(); ) { - Pair site = sites.next(); + for(Pair site : Iterator2Iterable.make(cs.getCreationSites(cg))) { IR ir = site.fst.getIR(); SSAInstruction creation = ir.getInstructions()[ site.snd.getProgramCounter() ]; if (creation instanceof JavaScriptInvoke) { diff --git a/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/callgraph/fieldbased/flowgraph/FlowGraphBuilder.java b/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/callgraph/fieldbased/flowgraph/FlowGraphBuilder.java index 798c7d35f..93b8d8b56 100644 --- a/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/callgraph/fieldbased/flowgraph/FlowGraphBuilder.java +++ b/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/callgraph/fieldbased/flowgraph/FlowGraphBuilder.java @@ -10,8 +10,6 @@ *****************************************************************************/ package com.ibm.wala.cast.js.callgraph.fieldbased.flowgraph; -import java.util.Iterator; - import com.ibm.wala.cast.ir.ssa.AstGlobalRead; import com.ibm.wala.cast.ir.ssa.AstGlobalWrite; import com.ibm.wala.cast.ir.ssa.AstLexicalAccess.Access; @@ -50,6 +48,7 @@ import com.ibm.wala.ssa.SSAPutInstruction; import com.ibm.wala.ssa.SSAReturnInstruction; import com.ibm.wala.ssa.SSAThrowInstruction; import com.ibm.wala.types.TypeReference; +import com.ibm.wala.util.collections.Iterator2Iterable; import com.ibm.wala.util.intset.EmptyIntSet; import com.ibm.wala.util.intset.IntSet; @@ -117,11 +116,11 @@ public class FlowGraphBuilder { // now visit phis and catches visitor.instructionIndex = -1; - for(Iterator iter=ir.iteratePhis();iter.hasNext();) - iter.next().visit(visitor); + for(SSAInstruction inst : Iterator2Iterable.make(ir.iteratePhis())) + inst.visit(visitor); - for(Iterator iter=ir.iterateCatchInstructions();iter.hasNext();) - iter.next().visit(visitor); + for(SSAInstruction inst : Iterator2Iterable.make(ir.iterateCatchInstructions())) + inst.visit(visitor); } } diff --git a/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/ipa/callgraph/correlations/extraction/ExtractedFunction.java b/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/ipa/callgraph/correlations/extraction/ExtractedFunction.java index 4e2df50d7..7a061765e 100644 --- a/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/ipa/callgraph/correlations/extraction/ExtractedFunction.java +++ b/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/ipa/callgraph/correlations/extraction/ExtractedFunction.java @@ -30,6 +30,7 @@ import com.ibm.wala.cast.tree.rewrite.CAstRewriter.Rewrite; import com.ibm.wala.util.collections.EmptyIterator; import com.ibm.wala.util.collections.HashMapFactory; import com.ibm.wala.util.collections.HashSetFactory; +import com.ibm.wala.util.collections.Iterator2Iterable; /** * A simple implementation of {@link CAstEntity} used by the {@link ClosureExtractor}. @@ -120,8 +121,7 @@ class ExtractedFunction implements CAstEntity { } } // now, add all new entities which arise from extracted nested for-in loops - for(Iterator iter=pos.getNestedLoops(); iter.hasNext();) { - ExtractionPos nested_loop = iter.next(); + for(ExtractionPos nested_loop : Iterator2Iterable.make(pos.getNestedLoops())) { CAstNode callsite = nested_loop.getCallSite(); CAstEntity scoped_entity = nested_loop.getExtractedEntity(); Collection c = scopedEntities.get(callsite); 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 357a5106f..74019b089 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 @@ -12,8 +12,6 @@ package com.ibm.wala.cast.js.ipa.modref; import java.util.Collection; -import java.util.Iterator; - import com.ibm.wala.cast.ipa.callgraph.AstHeapModel; import com.ibm.wala.cast.ipa.modref.AstModRef; import com.ibm.wala.cast.js.ssa.JSInstructionVisitor; @@ -31,6 +29,7 @@ import com.ibm.wala.ipa.callgraph.propagation.InstanceKey; import com.ibm.wala.ipa.callgraph.propagation.PointerAnalysis; import com.ibm.wala.ipa.callgraph.propagation.PointerKey; import com.ibm.wala.ipa.modref.ExtendedHeapModel; +import com.ibm.wala.util.collections.Iterator2Iterable; public class JavaScriptModRef extends AstModRef { @@ -56,8 +55,7 @@ public class JavaScriptModRef extends AstModRef { PointerKey prop = h.getPointerKeyForLocal(n, instruction.getMemberRef()); for(InstanceKey o : pa.getPointsToSet(obj)) { for(InstanceKey p : pa.getPointsToSet(prop)) { - for(Iterator keys = h.getPointerKeysForReflectedFieldRead(o, p); keys.hasNext(); ) { - PointerKey x = keys.next(); + for(PointerKey x : Iterator2Iterable.make(h.getPointerKeysForReflectedFieldRead(o, p))) { assert x != null : instruction; result.add(x); } @@ -130,8 +128,7 @@ public class JavaScriptModRef extends AstModRef { PointerKey prop = h.getPointerKeyForLocal(n, instruction.getMemberRef()); for(T o : pa.getPointsToSet(obj)) { for(T p : pa.getPointsToSet(prop)) { - for(Iterator keys = h.getPointerKeysForReflectedFieldWrite(o, p); keys.hasNext(); ) { - PointerKey x = keys.next(); + for(PointerKey x : Iterator2Iterable.make(h.getPointerKeysForReflectedFieldWrite(o, p))) { assert x != null : instruction; result.add(x); } diff --git a/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/util/CallGraph2JSON.java b/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/util/CallGraph2JSON.java index 83c779f13..bced4c1c3 100644 --- a/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/util/CallGraph2JSON.java +++ b/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/util/CallGraph2JSON.java @@ -10,7 +10,6 @@ *****************************************************************************/ package com.ibm.wala.cast.js.util; import java.util.ArrayList; -import java.util.Iterator; import java.util.Map; import java.util.Set; @@ -24,6 +23,7 @@ import com.ibm.wala.classLoader.IMethod; import com.ibm.wala.ipa.callgraph.CGNode; import com.ibm.wala.ipa.callgraph.CallGraph; import com.ibm.wala.util.collections.HashMapFactory; +import com.ibm.wala.util.collections.Iterator2Iterable; import com.ibm.wala.util.collections.MapUtil; import com.ibm.wala.util.collections.Util; @@ -72,8 +72,7 @@ public class CallGraph2JSON { continue; AstMethod method = (AstMethod)nd.getMethod(); - for(Iterator iter = nd.iterateCallSites(); iter.hasNext();) { - CallSiteReference callsite = iter.next(); + for(CallSiteReference callsite : Iterator2Iterable.make(nd.iterateCallSites())) { Set targets = Util.mapToSet(cg.getPossibleTargets(nd, callsite), CGNode::getMethod); serializeCallSite(method, callsite, targets, edges); } diff --git a/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/util/Util.java b/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/util/Util.java index 5190edd9b..351986205 100644 --- a/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/util/Util.java +++ b/com.ibm.wala.cast.js/source/com/ibm/wala/cast/js/util/Util.java @@ -10,13 +10,12 @@ *******************************************************************************/ package com.ibm.wala.cast.js.util; -import java.util.Iterator; - import com.ibm.wala.cast.js.ssa.PrototypeLookup; import com.ibm.wala.ssa.DefUse; import com.ibm.wala.ssa.IR; import com.ibm.wala.ssa.SSAInstruction; import com.ibm.wala.ssa.SSAPhiInstruction; +import com.ibm.wala.util.collections.Iterator2Iterable; import com.ibm.wala.util.intset.IntSet; import com.ibm.wala.util.intset.IntSetUtil; import com.ibm.wala.util.intset.MutableIntSet; @@ -35,8 +34,7 @@ public class Util { do { size = result.size(); result.foreach(vn -> { - for(Iterator insts = du.getUses(vn); insts.hasNext(); ) { - SSAInstruction inst = insts.next(); + for(SSAInstruction inst : Iterator2Iterable.make(du.getUses(vn))) { if (inst instanceof PrototypeLookup || inst instanceof SSAPhiInstruction) { result.add(inst.getDef()); } diff --git a/com.ibm.wala.cast.test/harness-src/java/com/ibm/wala/cast/test/TestCallGraphShape.java b/com.ibm.wala.cast.test/harness-src/java/com/ibm/wala/cast/test/TestCallGraphShape.java index d9895f78c..bee76ea6a 100644 --- a/com.ibm.wala.cast.test/harness-src/java/com/ibm/wala/cast/test/TestCallGraphShape.java +++ b/com.ibm.wala.cast.test/harness-src/java/com/ibm/wala/cast/test/TestCallGraphShape.java @@ -24,6 +24,7 @@ import com.ibm.wala.ipa.callgraph.CallGraph; import com.ibm.wala.ssa.IR; import com.ibm.wala.ssa.SSACFG; import com.ibm.wala.ssa.SSAInstruction; +import com.ibm.wala.util.collections.Iterator2Iterable; import com.ibm.wala.util.collections.NonNullSingletonIterator; public abstract class TestCallGraphShape extends WalaTestCase { @@ -149,8 +150,7 @@ public abstract class TestCallGraphShape extends WalaTestCase { while (srcs.hasNext()) { CGNode src = srcs.next(); - for (Iterator sites = src.iterateCallSites(); sites.hasNext();) { - CallSiteReference sr = sites.next(); + for (CallSiteReference sr : Iterator2Iterable.make(src.iterateCallSites())) { Iterator dsts = getNodes(CG, targetName).iterator(); if (! checkAbsence) { @@ -194,8 +194,8 @@ public abstract class TestCallGraphShape extends WalaTestCase { Collection dests = getNodes(CG, destDescription); for (Object source : sources) { for (Object dest : dests) { - for (Iterator i = CG.getSuccNodes((CGNode) source); i.hasNext();) { - if (i.next().equals(dest)) { + for (CGNode n : Iterator2Iterable.make(CG.getSuccNodes((CGNode) source))) { + if (n.equals(dest)) { Assert.fail("Found a link from " + source + " to " + dest); } } diff --git a/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ipa/callgraph/AstCallGraph.java b/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ipa/callgraph/AstCallGraph.java index 29e2a0697..ed71fd04b 100644 --- a/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ipa/callgraph/AstCallGraph.java +++ b/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ipa/callgraph/AstCallGraph.java @@ -11,7 +11,6 @@ package com.ibm.wala.cast.ipa.callgraph; import java.util.ConcurrentModificationException; -import java.util.Iterator; import java.util.Set; import java.util.function.Function; @@ -36,6 +35,7 @@ import com.ibm.wala.types.MethodReference; import com.ibm.wala.types.TypeReference; import com.ibm.wala.util.CancelException; import com.ibm.wala.util.collections.HashSetFactory; +import com.ibm.wala.util.collections.Iterator2Iterable; public class AstCallGraph extends ExplicitCallGraph { public AstCallGraph(IClassHierarchy cha, AnalysisOptions options, IAnalysisCacheView cache) { @@ -118,8 +118,8 @@ public class AstCallGraph extends ExplicitCallGraph { callbacks.add(callback); - for (Iterator ps = getCallGraph().getPredNodes(this); ps.hasNext();) { - ((AstCGNode) ps.next()).addCallback(callback); + for (CGNode p : Iterator2Iterable.make(getCallGraph().getPredNodes(this))) { + ((AstCGNode) p).addCallback(callback); } } } @@ -132,8 +132,8 @@ public class AstCallGraph extends ExplicitCallGraph { callbacks.addAll(callback); - for (Iterator ps = getCallGraph().getPredNodes(this); ps.hasNext();) { - ((AstCGNode) ps.next()).addAllCallbacks(callback); + for (CGNode p : Iterator2Iterable.make(getCallGraph().getPredNodes(this))) { + ((AstCGNode) p).addAllCallbacks(callback); } } } diff --git a/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ipa/callgraph/AstSSAPropagationCallGraphBuilder.java b/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ipa/callgraph/AstSSAPropagationCallGraphBuilder.java index 8d3e799e4..00b716beb 100644 --- a/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ipa/callgraph/AstSSAPropagationCallGraphBuilder.java +++ b/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ipa/callgraph/AstSSAPropagationCallGraphBuilder.java @@ -66,6 +66,7 @@ import com.ibm.wala.ssa.IRView; import com.ibm.wala.ssa.SSAPutInstruction; import com.ibm.wala.ssa.SymbolTable; import com.ibm.wala.util.collections.HashSetFactory; +import com.ibm.wala.util.collections.Iterator2Iterable; import com.ibm.wala.util.collections.Pair; import com.ibm.wala.util.debug.Assertions; import com.ibm.wala.util.intset.IntSet; @@ -960,9 +961,9 @@ public abstract class AstSSAPropagationCallGraphBuilder extends SSAPropagationCa fields.getValue().foreach(fptr -> { if (!doneField.contains(fptr) || !doneReceiver.contains(rptr)) { InstanceKey field = system.getInstanceKey(fptr); - for (Iterator keys = isLoadOperation ? getPointerKeysForReflectedFieldRead(receiver, field) - : getPointerKeysForReflectedFieldWrite(receiver, field); keys.hasNext();) { - AbstractFieldPointerKey key = (AbstractFieldPointerKey) keys.next(); + for (PointerKey pkey : Iterator2Iterable.make(isLoadOperation ? getPointerKeysForReflectedFieldRead(receiver, field) + : getPointerKeysForReflectedFieldWrite(receiver, field))) { + AbstractFieldPointerKey key = (AbstractFieldPointerKey) pkey; if (DEBUG_PROPERTIES) action.dump(key, false, false); action.action(key); @@ -1006,8 +1007,8 @@ public abstract class AstSSAPropagationCallGraphBuilder extends SSAPropagationCa PointerKey objCatalog = getPointerKeyForObjectCatalog(object); for (InstanceKey fieldsKey : fieldsKeys) { if (isLoadOperation) { - for (Iterator keys = getPointerKeysForReflectedFieldRead(object, fieldsKey); keys.hasNext();) { - AbstractFieldPointerKey key = (AbstractFieldPointerKey) keys.next(); + for (PointerKey pkey : Iterator2Iterable.make(getPointerKeysForReflectedFieldRead(object, fieldsKey))) { + AbstractFieldPointerKey key = (AbstractFieldPointerKey) pkey; if (DEBUG_PROPERTIES) action.dump(key, true, false); action.action(key); @@ -1016,8 +1017,8 @@ public abstract class AstSSAPropagationCallGraphBuilder extends SSAPropagationCa if (objCatalog != null) { system.newConstraint(objCatalog, fieldsKey); } - for (Iterator keys = getPointerKeysForReflectedFieldWrite(object, fieldsKey); keys.hasNext();) { - AbstractFieldPointerKey key = (AbstractFieldPointerKey) keys.next(); + for (PointerKey pkey : Iterator2Iterable.make(getPointerKeysForReflectedFieldWrite(object, fieldsKey))) { + AbstractFieldPointerKey key = (AbstractFieldPointerKey) pkey; if (DEBUG_PROPERTIES) action.dump(key, true, false); action.action(key); @@ -1065,9 +1066,9 @@ public abstract class AstSSAPropagationCallGraphBuilder extends SSAPropagationCa fields.getValue().foreach(fptr -> { InstanceKey field = system.getInstanceKey(fptr); for (InstanceKey objKey : objKeys) { - for (Iterator keys = isLoadOperation ? getPointerKeysForReflectedFieldRead(objKey, field) - : getPointerKeysForReflectedFieldWrite(objKey, field); keys.hasNext();) { - AbstractFieldPointerKey key = (AbstractFieldPointerKey) keys.next(); + for (PointerKey pkey : Iterator2Iterable.make(isLoadOperation ? getPointerKeysForReflectedFieldRead(objKey, field) + : getPointerKeysForReflectedFieldWrite(objKey, field))) { + AbstractFieldPointerKey key = (AbstractFieldPointerKey) pkey; if (DEBUG_PROPERTIES) action.dump(key, false, true); action.action(key); @@ -1101,8 +1102,8 @@ public abstract class AstSSAPropagationCallGraphBuilder extends SSAPropagationCa PointerKey objCatalog = getPointerKeyForObjectCatalog(objKey); for (InstanceKey fieldsKey : fieldsKeys) { if (isLoadOperation) { - for (Iterator keys = getPointerKeysForReflectedFieldRead(objKey, fieldsKey); keys.hasNext();) { - AbstractFieldPointerKey key = (AbstractFieldPointerKey) keys.next(); + for (PointerKey pkey : Iterator2Iterable.make(getPointerKeysForReflectedFieldRead(objKey, fieldsKey))) { + AbstractFieldPointerKey key = (AbstractFieldPointerKey) pkey; if (DEBUG_PROPERTIES) action.dump(key, true, true); action.action(key); @@ -1111,8 +1112,8 @@ public abstract class AstSSAPropagationCallGraphBuilder extends SSAPropagationCa if (objCatalog != null) { system.newConstraint(objCatalog, fieldsKey); } - for (Iterator keys = getPointerKeysForReflectedFieldWrite(objKey, fieldsKey); keys.hasNext();) { - AbstractFieldPointerKey key = (AbstractFieldPointerKey) keys.next(); + for (PointerKey pkey : Iterator2Iterable.make(getPointerKeysForReflectedFieldWrite(objKey, fieldsKey))) { + AbstractFieldPointerKey key = (AbstractFieldPointerKey) pkey; if (DEBUG_PROPERTIES) action.dump(key, true, true); action.action(key); diff --git a/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ipa/callgraph/CAstCallGraphUtil.java b/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ipa/callgraph/CAstCallGraphUtil.java index b80d9548a..0f07f37f0 100644 --- a/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ipa/callgraph/CAstCallGraphUtil.java +++ b/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ipa/callgraph/CAstCallGraphUtil.java @@ -16,8 +16,6 @@ import java.io.InputStream; import java.net.MalformedURLException; import java.net.URL; import java.util.Collections; -import java.util.Iterator; - import org.apache.commons.io.ByteOrderMark; import org.apache.commons.io.input.BOMInputStream; @@ -37,6 +35,7 @@ import com.ibm.wala.ipa.callgraph.propagation.PointerKey; import com.ibm.wala.ipa.callgraph.propagation.SSAContextInterpreter; import com.ibm.wala.ssa.IRFactory; import com.ibm.wala.ssa.IRView; +import com.ibm.wala.util.collections.Iterator2Iterable; import com.ibm.wala.util.debug.Assertions; public class CAstCallGraphUtil { @@ -126,12 +125,12 @@ public class CAstCallGraphUtil { for (CGNode N : CG) { System.err.print("callees of node " + getShortName(N) + " : ["); boolean fst = true; - for (Iterator ns = CG.getSuccNodes(N); ns.hasNext();) { + for (CGNode n : Iterator2Iterable.make(CG.getSuccNodes(N))) { if (fst) fst = false; else System.err.print(", "); - System.err.print(getShortName(ns.next())); + System.err.print(getShortName(n)); } System.err.println("]"); System.err.println("\nIR of node " + N.getGraphNodeId() + ", context " + N.getContext()); diff --git a/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ir/cfg/Util.java b/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ir/cfg/Util.java index c17f2de75..6d336252e 100644 --- a/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ir/cfg/Util.java +++ b/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ir/cfg/Util.java @@ -10,19 +10,20 @@ *****************************************************************************/ package com.ibm.wala.cast.ir.cfg; -import java.util.Iterator; - import com.ibm.wala.cfg.ControlFlowGraph; import com.ibm.wala.cfg.IBasicBlock; +import com.ibm.wala.util.collections.Iterator2Iterable; import com.ibm.wala.util.debug.Assertions; public class Util { public static > int whichPred(ControlFlowGraph CFG, T Y, T X) { int i = 0; - for (Iterator N = CFG.getPredNodes(Y); N.hasNext(); i++) - if (N.next() == X) + for (Object N : Iterator2Iterable.make(CFG.getPredNodes(Y))) { + if (N == X) return i; + ++i; + } Assertions.UNREACHABLE(); return -1; diff --git a/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ir/ssa/AbstractSSAConversion.java b/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ir/ssa/AbstractSSAConversion.java index 2b5074d01..313ff9c4e 100644 --- a/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ir/ssa/AbstractSSAConversion.java +++ b/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ir/ssa/AbstractSSAConversion.java @@ -26,6 +26,7 @@ import com.ibm.wala.ssa.SSAPhiInstruction; import com.ibm.wala.ssa.SymbolTable; import com.ibm.wala.util.collections.ArrayIterator; import com.ibm.wala.util.collections.IntStack; +import com.ibm.wala.util.collections.Iterator2Iterable; import com.ibm.wala.util.graph.Graph; import com.ibm.wala.util.graph.dominators.DominanceFrontiers; @@ -211,8 +212,8 @@ public abstract class AbstractSSAConversion { while (!W.isEmpty()) { SSACFG.BasicBlock X = W.iterator().next(); W.remove(X); - for (Iterator YS = DF.getDominanceFrontier(X); YS.hasNext();) { - SSACFG.BasicBlock Y = (SSACFG.BasicBlock) YS.next(); + for (ISSABasicBlock IY : Iterator2Iterable.make(DF.getDominanceFrontier(X))) { + SSACFG.BasicBlock Y = (SSACFG.BasicBlock) IY; if (getHasAlready(Y) < IterCount) { if (isLive(Y, V)) { placeNewPhiAt(V, Y); @@ -353,8 +354,8 @@ public abstract class AbstractSSAConversion { repairExit(); } - for (Iterator YS = CFG.getSuccNodes(X); YS.hasNext();) { - SSACFG.BasicBlock Y = (SSACFG.BasicBlock) YS.next(); + for (ISSABasicBlock IY : Iterator2Iterable.make(CFG.getSuccNodes(X))) { + SSACFG.BasicBlock Y = (SSACFG.BasicBlock) IY; int Y_id = Y.getGraphNodeId(); int j = com.ibm.wala.cast.ir.cfg.Util.whichPred(CFG, Y, X); for (int i = 0; i < phiCounts[Y_id]; i++) { diff --git a/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ir/ssa/SSAConversion.java b/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ir/ssa/SSAConversion.java index df01b9431..7ed877ad6 100644 --- a/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ir/ssa/SSAConversion.java +++ b/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ir/ssa/SSAConversion.java @@ -13,7 +13,6 @@ package com.ibm.wala.cast.ir.ssa; import java.util.ArrayList; import java.util.Arrays; import java.util.HashMap; -import java.util.Iterator; import java.util.Map; import java.util.Set; @@ -29,6 +28,7 @@ import com.ibm.wala.ssa.SSAPhiInstruction; import com.ibm.wala.ssa.SymbolTable; import com.ibm.wala.util.collections.HashMapFactory; import com.ibm.wala.util.collections.HashSetFactory; +import com.ibm.wala.util.collections.IteratorUtil; import com.ibm.wala.util.intset.BitVector; import com.ibm.wala.util.intset.BitVectorIntSet; import com.ibm.wala.util.intset.IntSet; @@ -532,10 +532,7 @@ public class SSAConversion extends AbstractSSAConversion { for (int i = 0; i < CFG.getNumberOfNodes(); i++) { SSACFG.BasicBlock bb = CFG.getNode(i); if (bb.hasPhi()) { - int n = 0; - for (Iterator X = bb.iteratePhis(); X.hasNext(); n++) - X.next(); - phiCounts[i] = n; + phiCounts[i] = IteratorUtil.count(bb.iteratePhis()); } } diff --git a/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ir/ssa/analysis/LiveAnalysis.java b/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ir/ssa/analysis/LiveAnalysis.java index 2aba02a0c..71a4df9b2 100644 --- a/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ir/ssa/analysis/LiveAnalysis.java +++ b/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ir/ssa/analysis/LiveAnalysis.java @@ -10,8 +10,6 @@ *****************************************************************************/ package com.ibm.wala.cast.ir.ssa.analysis; -import java.util.Iterator; - import com.ibm.wala.cfg.ControlFlowGraph; import com.ibm.wala.dataflow.graph.AbstractMeetOperator; import com.ibm.wala.dataflow.graph.BitVectorSolver; @@ -27,6 +25,7 @@ import com.ibm.wala.ssa.SSAPhiInstruction; import com.ibm.wala.ssa.SymbolTable; import com.ibm.wala.util.CancelException; import com.ibm.wala.util.CancelRuntimeException; +import com.ibm.wala.util.collections.Iterator2Iterable; import com.ibm.wala.util.debug.Assertions; import com.ibm.wala.util.graph.Graph; import com.ibm.wala.util.graph.impl.GraphInverter; @@ -173,12 +172,11 @@ public class LiveAnalysis { bits.addAll(s); } // Include all uses generated by the current basic block into the successor's Phi instructions todo: rephrase - for (Iterator succBBs = cfg.getSuccNodes(block); succBBs.hasNext();) { - ISSABasicBlock succBB = succBBs.next(); + for (ISSABasicBlock succBB : Iterator2Iterable.make(cfg.getSuccNodes(block))) { int rval = com.ibm.wala.cast.ir.cfg.Util.whichPred(cfg, succBB, block); - for (Iterator sphis = succBB.iteratePhis(); sphis.hasNext();) { - bits.add(sphis.next().getUse(rval)); + for (SSAPhiInstruction sphi : Iterator2Iterable.make(succBB.iteratePhis())) { + bits.add(sphi.getUse(rval)); } } // For all instructions, in reverse order, 'kill' variables written to and 'gen' variables read. @@ -190,8 +188,8 @@ public class LiveAnalysis { } } // 'kill' the variables defined by the Phi instructions in the current block. - for (Iterator SS = block.iteratePhis(); SS.hasNext();) { - processDefs(SS.next(), bits.getBitVector()); + for (SSAInstruction S : Iterator2Iterable.make(block.iteratePhis())) { + processDefs(S, bits.getBitVector()); } BitVectorVariable U = new BitVectorVariable(); diff --git a/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ir/translator/AstTranslator.java b/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ir/translator/AstTranslator.java index bb14c93a3..63848fb56 100644 --- a/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ir/translator/AstTranslator.java +++ b/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ir/translator/AstTranslator.java @@ -81,6 +81,7 @@ import com.ibm.wala.types.TypeName; import com.ibm.wala.types.TypeReference; import com.ibm.wala.util.collections.HashMapFactory; import com.ibm.wala.util.collections.HashSetFactory; +import com.ibm.wala.util.collections.Iterator2Iterable; import com.ibm.wala.util.collections.MapUtil; import com.ibm.wala.util.collections.Pair; import com.ibm.wala.util.debug.Assertions; @@ -922,8 +923,8 @@ public abstract class AstTranslator extends CAstVisitor ps = getPredNodes(bb); ps.hasNext();) - normalToExit.add(ps.next()); + for (PreBasicBlock p : Iterator2Iterable.make(getPredNodes(bb))) + normalToExit.add(p); // now that we have created the exit block, add the delayed edges to the // exit @@ -1143,8 +1144,7 @@ public abstract class AstTranslator extends CAstVisitor j = icfg.getSuccNodes(src); j.hasNext();) { - PreBasicBlock dst = j.next(); + for (PreBasicBlock dst : Iterator2Iterable.make(icfg.getSuccNodes(src))) { if (isCatchBlock(dst.getNumber()) || (dst.isExitBlock() && icfg.exceptionalToExit.contains(src))) { except.act(src, dst); } @@ -1352,8 +1352,8 @@ public abstract class AstTranslator extends CAstVisitor ss = getSuccNodes(bb); ss.hasNext();) - s.append(" -->" + ss.next() + "\n"); + for (PreBasicBlock pbb : Iterator2Iterable.make(getSuccNodes(bb))) + s.append(" -->" + pbb + "\n"); for (int j = bb.getFirstInstructionIndex(); j <= bb.getLastInstructionIndex(); j++) if (insts[j] != null) @@ -3102,8 +3102,7 @@ public abstract class AstTranslator extends CAstVisitor I = scope.getAllNames(); I.hasNext();) { - String nm = I.next(); + for (String nm : Iterator2Iterable.make(scope.getAllNames())) { if (ignoreName(nm)) { continue; diff --git a/com.ibm.wala.cast/source/java/com/ibm/wala/cast/loader/CAstAbstractModuleLoader.java b/com.ibm.wala.cast/source/java/com/ibm/wala/cast/loader/CAstAbstractModuleLoader.java index 21c9dd777..8d91f6bb0 100644 --- a/com.ibm.wala.cast/source/java/com/ibm/wala/cast/loader/CAstAbstractModuleLoader.java +++ b/com.ibm.wala.cast/source/java/com/ibm/wala/cast/loader/CAstAbstractModuleLoader.java @@ -15,7 +15,6 @@ import java.io.File; import java.io.IOException; import java.io.PrintStream; import java.io.PrintWriter; -import java.util.Iterator; import java.util.LinkedHashSet; import java.util.List; import java.util.Set; @@ -33,6 +32,7 @@ import com.ibm.wala.classLoader.SourceFileModule; import com.ibm.wala.classLoader.SourceModule; import com.ibm.wala.ipa.cha.IClassHierarchy; import com.ibm.wala.types.TypeName; +import com.ibm.wala.util.collections.Iterator2Iterable; import com.ibm.wala.util.collections.Pair; import com.ibm.wala.util.io.TemporaryFile; import com.ibm.wala.util.warnings.Warning; @@ -174,8 +174,8 @@ public abstract class CAstAbstractModuleLoader extends CAstAbstractLoader { * in topLevelEntities */ private void translateModuleToCAst(Module module, CAst ast, Set> topLevelEntities) { - for (Iterator mes = module.getEntries(); mes.hasNext();) { - translateModuleEntryToCAst(mes.next(), ast, topLevelEntities); + for (ModuleEntry me : Iterator2Iterable.make(module.getEntries())) { + translateModuleEntryToCAst(me, ast, topLevelEntities); } } diff --git a/com.ibm.wala.cast/source/java/com/ibm/wala/cast/tree/impl/CAstSourcePositionRecorder.java b/com.ibm.wala.cast/source/java/com/ibm/wala/cast/tree/impl/CAstSourcePositionRecorder.java index 9ec27b381..ae2e615f8 100644 --- a/com.ibm.wala.cast/source/java/com/ibm/wala/cast/tree/impl/CAstSourcePositionRecorder.java +++ b/com.ibm.wala.cast/source/java/com/ibm/wala/cast/tree/impl/CAstSourcePositionRecorder.java @@ -21,6 +21,7 @@ import java.util.Iterator; import com.ibm.wala.cast.tree.CAstNode; import com.ibm.wala.cast.tree.CAstSourcePositionMap; import com.ibm.wala.util.collections.HashMapFactory; +import com.ibm.wala.util.collections.Iterator2Iterable; public class CAstSourcePositionRecorder implements CAstSourcePositionMap { @@ -98,8 +99,7 @@ public class CAstSourcePositionRecorder implements CAstSourcePositionMap { } public void addAll(CAstSourcePositionMap other) { - for(Iterator nodes = other.getMappedNodes(); nodes.hasNext(); ) { - CAstNode node = nodes.next(); + for(CAstNode node : Iterator2Iterable.make(other.getMappedNodes())) { setPosition(node, other.getPosition(node)); } } diff --git a/com.ibm.wala.core.tests/src/com/ibm/wala/core/tests/basic/PrimitivesTest.java b/com.ibm.wala.core.tests/src/com/ibm/wala/core/tests/basic/PrimitivesTest.java index a82b3cdca..2f60b96ac 100644 --- a/com.ibm.wala.core.tests/src/com/ibm/wala/core/tests/basic/PrimitivesTest.java +++ b/com.ibm.wala.core.tests/src/com/ibm/wala/core/tests/basic/PrimitivesTest.java @@ -12,7 +12,6 @@ package com.ibm.wala.core.tests.basic; import java.util.Collection; import java.util.HashSet; -import java.util.Iterator; import java.util.List; import java.util.Map; @@ -23,6 +22,7 @@ import com.ibm.wala.core.tests.util.WalaTestCase; import com.ibm.wala.util.collections.BimodalMap; import com.ibm.wala.util.collections.HashSetFactory; import com.ibm.wala.util.collections.Iterator2Collection; +import com.ibm.wala.util.collections.Iterator2Iterable; import com.ibm.wala.util.collections.SmallMap; import com.ibm.wala.util.graph.Graph; import com.ibm.wala.util.graph.NumberedGraph; @@ -761,13 +761,12 @@ public class PrimitivesTest extends WalaTestCase { // Assert.assertions int i = 0; Object[] desired4 = new Object[] { nodes[4], nodes[7], nodes[8], nodes[5], nodes[10] }; - for (Iterator d4 = D.dominators(nodes[4]); d4.hasNext();) - Assert.assertTrue(d4.next() == desired4[i++]); + for (Object d4 : Iterator2Iterable.make(D.dominators(nodes[4]))) + Assert.assertTrue(d4 == desired4[i++]); int j = 0; Object[] desired5 = new Object[] { nodes[8] }; - for (Iterator t4 = D.dominatorTree().getSuccNodes(nodes[5]); t4.hasNext();) { - Object o4 = t4.next(); + for (Object o4 : Iterator2Iterable.make(D.dominatorTree().getSuccNodes(nodes[5]))) { Object d = desired5[j++]; boolean ok = (o4.equals(d)); if (!ok) { diff --git a/com.ibm.wala.core.tests/src/com/ibm/wala/core/tests/basic/WelshPowellTest.java b/com.ibm.wala.core.tests/src/com/ibm/wala/core/tests/basic/WelshPowellTest.java index 9cc3bf93d..e8a52de55 100644 --- a/com.ibm.wala.core.tests/src/com/ibm/wala/core/tests/basic/WelshPowellTest.java +++ b/com.ibm.wala.core.tests/src/com/ibm/wala/core/tests/basic/WelshPowellTest.java @@ -10,13 +10,13 @@ *******************************************************************************/ package com.ibm.wala.core.tests.basic; -import java.util.Iterator; import java.util.Map; import org.junit.Assert; import org.junit.Test; import com.ibm.wala.util.collections.HashMapFactory; +import com.ibm.wala.util.collections.Iterator2Iterable; import com.ibm.wala.util.graph.Graph; import com.ibm.wala.util.graph.NumberedGraph; import com.ibm.wala.util.graph.impl.DelegatingNumberedGraph; @@ -28,15 +28,13 @@ public class WelshPowellTest { public static void assertColoring(Graph G, Map colors, boolean fullColor) { for(T n : G) { - for(Iterator ss = G.getSuccNodes(n); ss.hasNext(); ) { - T succ = ss.next(); + for(T succ : Iterator2Iterable.make(G.getSuccNodes(n))) { if (!fullColor && (!colors.containsKey(n) || !colors.containsKey(succ)) ) { continue; } Assert.assertTrue(n + " and succ: " + succ + " have same color: " + colors.get(n).intValue(), colors.get(n).intValue() != colors.get(succ).intValue()); } - for(Iterator ps = G.getPredNodes(n); ps.hasNext(); ) { - T pred = ps.next(); + for(T pred : Iterator2Iterable.make(G.getPredNodes(n))) { if (!fullColor && (!colors.containsKey(n) || !colors.containsKey(pred)) ) { continue; } diff --git a/com.ibm.wala.core.tests/src/com/ibm/wala/core/tests/callGraph/CallGraphTest.java b/com.ibm.wala.core.tests/src/com/ibm/wala/core/tests/callGraph/CallGraphTest.java index 22394107a..7e7208dc5 100644 --- a/com.ibm.wala.core.tests/src/com/ibm/wala/core/tests/callGraph/CallGraphTest.java +++ b/com.ibm.wala.core.tests/src/com/ibm/wala/core/tests/callGraph/CallGraphTest.java @@ -52,6 +52,7 @@ import com.ibm.wala.types.MethodReference; import com.ibm.wala.util.CancelException; import com.ibm.wala.util.collections.HashSetFactory; import com.ibm.wala.util.collections.Iterator2Iterable; +import com.ibm.wala.util.collections.IteratorUtil; import com.ibm.wala.util.debug.Assertions; import com.ibm.wala.util.graph.Graph; import com.ibm.wala.util.graph.GraphIntegrity; @@ -503,8 +504,8 @@ public class CallGraphTest extends WalaTestCase { Set pred = HashSetFactory.make(10); MethodReference methodReference = N; for (CGNode cgNode : cg.getNodes(methodReference)) - for (Iterator ps = cg.getPredNodes(cgNode); ps.hasNext();) - pred.add(((CGNode) ps.next()).getMethod().getReference()); + for (CGNode p : Iterator2Iterable.make(cg.getPredNodes(cgNode))) + pred.add(p.getMethod().getReference()); return pred.iterator(); } @@ -514,10 +515,7 @@ public class CallGraphTest extends WalaTestCase { */ @Override public int getPredNodeCount(MethodReference N) { - int count = 0; - for (Iterator ps = getPredNodes(N); ps.hasNext(); count++, ps.next()) - ; - return count; + return IteratorUtil.count(getPredNodes(N)); } /* @@ -528,8 +526,8 @@ public class CallGraphTest extends WalaTestCase { Set succ = HashSetFactory.make(10); MethodReference methodReference = N; for (CGNode node : cg.getNodes(methodReference)) - for (Iterator ps = cg.getSuccNodes(node); ps.hasNext();) - succ.add(((CGNode) ps.next()).getMethod().getReference()); + for (CGNode p : Iterator2Iterable.make(cg.getSuccNodes(node))) + succ.add(p.getMethod().getReference()); return succ.iterator(); } @@ -539,10 +537,7 @@ public class CallGraphTest extends WalaTestCase { */ @Override public int getSuccNodeCount(MethodReference N) { - int count = 0; - for (Iterator ps = getSuccNodes(N); ps.hasNext(); count++, ps.next()) - ; - return count; + return IteratorUtil.count(getSuccNodes(N)); } /* @@ -606,8 +601,8 @@ public class CallGraphTest extends WalaTestCase { @Override public boolean hasEdge(MethodReference src, MethodReference dst) { - for (Iterator succNodes = getSuccNodes(src); succNodes.hasNext();) { - if (dst.equals(succNodes.next())) { + for (MethodReference succ : Iterator2Iterable.make(getSuccNodes(src))) { + if (dst.equals(succ)) { return true; } } diff --git a/com.ibm.wala.core.tests/src/com/ibm/wala/core/tests/callGraph/CloneTest.java b/com.ibm.wala.core.tests/src/com/ibm/wala/core/tests/callGraph/CloneTest.java index bfa3d65b9..51aef0a1b 100644 --- a/com.ibm.wala.core.tests/src/com/ibm/wala/core/tests/callGraph/CloneTest.java +++ b/com.ibm.wala.core.tests/src/com/ibm/wala/core/tests/callGraph/CloneTest.java @@ -11,7 +11,6 @@ package com.ibm.wala.core.tests.callGraph; import java.io.IOException; -import java.util.Iterator; import java.util.Set; import org.junit.Assert; @@ -34,6 +33,7 @@ import com.ibm.wala.types.ClassLoaderReference; import com.ibm.wala.types.MethodReference; import com.ibm.wala.types.TypeReference; import com.ibm.wala.util.CancelException; +import com.ibm.wala.util.collections.Iterator2Iterable; /** * Check properties of a call to clone() in RTA @@ -56,8 +56,7 @@ public class CloneTest extends WalaTestCase { // Check there's exactly one target for each super call in // MessageFormat.clone() - for (Iterator i = node.iterateCallSites(); i.hasNext();) { - CallSiteReference site = i.next(); + for (CallSiteReference site : Iterator2Iterable.make(node.iterateCallSites())) { if (site.isSpecial()) { if (site.getDeclaredTarget().getDeclaringClass().equals(TypeReference.JavaLangObject)) { Set targets = cg.getPossibleTargets(node, site); diff --git a/com.ibm.wala.core.tests/src/com/ibm/wala/core/tests/callGraph/LambdaTest.java b/com.ibm.wala.core.tests/src/com/ibm/wala/core/tests/callGraph/LambdaTest.java index baadca64b..22288d337 100644 --- a/com.ibm.wala.core.tests/src/com/ibm/wala/core/tests/callGraph/LambdaTest.java +++ b/com.ibm.wala.core.tests/src/com/ibm/wala/core/tests/callGraph/LambdaTest.java @@ -11,7 +11,6 @@ package com.ibm.wala.core.tests.callGraph; import java.io.IOException; -import java.util.Iterator; import java.util.Set; import org.junit.Assert; @@ -34,6 +33,7 @@ import com.ibm.wala.types.Descriptor; import com.ibm.wala.types.MethodReference; import com.ibm.wala.types.TypeReference; import com.ibm.wala.util.CancelException; +import com.ibm.wala.util.collections.Iterator2Iterable; import com.ibm.wala.util.strings.Atom; /** @@ -103,8 +103,8 @@ public class LambdaTest extends WalaTestCase { // caller of id1 is dynamic from sortForward, and has 1 compareTo CGNode sfnode = cg.getPredNodes(id1node).next(); int count = 0; - for(Iterator sites = sfnode.iterateCallSites(); sites.hasNext(); ) { - if (ctnodes.containsAll(cg.getPossibleTargets(sfnode, sites.next()))) { + for(CallSiteReference site : Iterator2Iterable.make(sfnode.iterateCallSites())) { + if (ctnodes.containsAll(cg.getPossibleTargets(sfnode, site))) { count++; } } diff --git a/com.ibm.wala.core.tests/src/com/ibm/wala/core/tests/callGraph/PiNodeCallGraphTest.java b/com.ibm.wala.core.tests/src/com/ibm/wala/core/tests/callGraph/PiNodeCallGraphTest.java index 38855c7ec..946edc4a0 100644 --- a/com.ibm.wala.core.tests/src/com/ibm/wala/core/tests/callGraph/PiNodeCallGraphTest.java +++ b/com.ibm.wala.core.tests/src/com/ibm/wala/core/tests/callGraph/PiNodeCallGraphTest.java @@ -11,7 +11,6 @@ package com.ibm.wala.core.tests.callGraph; import java.io.IOException; -import java.util.Iterator; import java.util.Set; import org.junit.Assert; @@ -40,6 +39,7 @@ import com.ibm.wala.types.TypeName; import com.ibm.wala.types.TypeReference; import com.ibm.wala.util.CancelException; import com.ibm.wala.util.collections.HashSetFactory; +import com.ibm.wala.util.collections.Iterator2Iterable; import com.ibm.wala.util.strings.Atom; /** @@ -95,8 +95,7 @@ public class PiNodeCallGraphTest extends WalaTestCase { assert callerNodes.size() == 2; for (CGNode n : callerNodes) { - for (Iterator sites = n.iterateCallSites(); sites.hasNext();) { - CallSiteReference csRef = sites.next(); + for (CallSiteReference csRef : Iterator2Iterable.make(n.iterateCallSites())) { if (csRef.getDeclaredTarget().equals(unary2Ref)) { numberOfCalls++; assert cg.getNumberOfTargets(n, csRef) == desiredNumberOfTargets; diff --git a/com.ibm.wala.core.tests/src/com/ibm/wala/core/tests/callGraph/ReflectionTest.java b/com.ibm.wala.core.tests/src/com/ibm/wala/core/tests/callGraph/ReflectionTest.java index af8a3f20f..e9305eae1 100644 --- a/com.ibm.wala.core.tests/src/com/ibm/wala/core/tests/callGraph/ReflectionTest.java +++ b/com.ibm.wala.core.tests/src/com/ibm/wala/core/tests/callGraph/ReflectionTest.java @@ -43,6 +43,7 @@ import com.ibm.wala.types.TypeReference; import com.ibm.wala.util.CancelException; import com.ibm.wala.util.WalaException; import com.ibm.wala.util.collections.HashSetFactory; +import com.ibm.wala.util.collections.Iterator2Iterable; import com.ibm.wala.util.warnings.Warning; import com.ibm.wala.util.warnings.Warnings; @@ -94,8 +95,7 @@ public class ReflectionTest extends WalaTestCase { Warnings.clear(); CallGraphTest.doCallGraphs(options, new AnalysisCacheImpl(), cha, scope); - for (Iterator it = Warnings.iterator(); it.hasNext();) { - Warning w = it.next(); + for (Warning w : Iterator2Iterable.make(Warnings.iterator())) { if (w.toString().indexOf("com/ibm/jvm") > 0) { continue; } diff --git a/com.ibm.wala.core.tests/src/com/ibm/wala/core/tests/cfg/exc/intra/NullPointerExceptionIntraTest.java b/com.ibm.wala.core.tests/src/com/ibm/wala/core/tests/cfg/exc/intra/NullPointerExceptionIntraTest.java index 0315e4191..e9e3d3fd4 100644 --- a/com.ibm.wala.core.tests/src/com/ibm/wala/core/tests/cfg/exc/intra/NullPointerExceptionIntraTest.java +++ b/com.ibm.wala.core.tests/src/com/ibm/wala/core/tests/cfg/exc/intra/NullPointerExceptionIntraTest.java @@ -11,8 +11,6 @@ package com.ibm.wala.core.tests.cfg.exc.intra; import java.util.Collection; -import java.util.Iterator; - import org.junit.AfterClass; import org.junit.Assert; import org.junit.BeforeClass; @@ -42,6 +40,7 @@ import com.ibm.wala.ssa.analysis.IExplodedBasicBlock; import com.ibm.wala.types.MethodReference; import com.ibm.wala.util.CancelException; import com.ibm.wala.util.NullProgressMonitor; +import com.ibm.wala.util.collections.Iterator2Iterable; import com.ibm.wala.util.config.AnalysisScopeReader; import com.ibm.wala.util.graph.GraphIntegrity.UnsoundGraphException; import com.ibm.wala.util.io.FileProvider; @@ -732,8 +731,7 @@ public class NullPointerExceptionIntraTest extends WalaTestCase { public static IExplodedBasicBlock returnNodeExploded(ISSABasicBlock returnNode, ControlFlowGraph explodedCfg) { final IExplodedBasicBlock exit = explodedCfg.exit(); - for (Iterator it = explodedCfg.getPredNodes(exit); it.hasNext();) { - IExplodedBasicBlock candidate = it.next(); + for (IExplodedBasicBlock candidate : Iterator2Iterable.make(explodedCfg.getPredNodes(exit))) { if (candidate.getInstruction() == returnNode.getLastInstruction()) { return candidate; } diff --git a/com.ibm.wala.core.tests/src/com/ibm/wala/core/tests/demandpa/AbstractPtrTest.java b/com.ibm.wala.core.tests/src/com/ibm/wala/core/tests/demandpa/AbstractPtrTest.java index 6548f789a..d41b739f6 100644 --- a/com.ibm.wala.core.tests/src/com/ibm/wala/core/tests/demandpa/AbstractPtrTest.java +++ b/com.ibm.wala.core.tests/src/com/ibm/wala/core/tests/demandpa/AbstractPtrTest.java @@ -39,8 +39,6 @@ package com.ibm.wala.core.tests.demandpa; import java.io.IOException; import java.util.Collection; -import java.util.Iterator; - import org.junit.AfterClass; import org.junit.Assert; @@ -105,8 +103,7 @@ public abstract class AbstractPtrTest { public static CGNode findMainMethod(CallGraph cg) { Descriptor d = Descriptor.findOrCreateUTF8("([Ljava/lang/String;)V"); Atom name = Atom.findOrCreateUnicodeAtom("main"); - for (Iterator it = cg.getSuccNodes(cg.getFakeRootNode()); it.hasNext();) { - CGNode n = it.next(); + for (CGNode n : Iterator2Iterable.make(cg.getSuccNodes(cg.getFakeRootNode()))) { if (n.getMethod().getName().equals(name) && n.getMethod().getDescriptor().equals(d)) { return n; } @@ -142,8 +139,7 @@ public abstract class AbstractPtrTest { public static PointerKey getParam(CGNode n, String methodName, HeapModel heapModel) { IR ir = n.getIR(); - for (Iterator it = ir.iterateAllInstructions(); it.hasNext();) { - SSAInstruction s = it.next(); + for (SSAInstruction s : Iterator2Iterable.make(ir.iterateAllInstructions())) { if (s instanceof SSAInvokeInstruction) { SSAInvokeInstruction call = (SSAInvokeInstruction) s; if (call.getCallSite().getDeclaredTarget().getName().toString().equals(methodName)) { 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 527c433d9..93f080519 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 @@ -18,8 +18,6 @@ import java.io.IOException; import java.io.PrintWriter; import java.util.Collection; import java.util.Collections; -import java.util.Iterator; - import org.junit.AfterClass; import org.junit.Assert; import org.junit.Test; @@ -68,6 +66,7 @@ import com.ibm.wala.ssa.SSAReturnInstruction; import com.ibm.wala.types.ClassLoaderReference; import com.ibm.wala.types.Descriptor; import com.ibm.wala.util.CancelException; +import com.ibm.wala.util.collections.Iterator2Iterable; import com.ibm.wala.util.config.AnalysisScopeReader; import com.ibm.wala.util.config.FileOfClasses; import com.ibm.wala.util.debug.Assertions; @@ -1072,8 +1071,7 @@ public class SlicerTest { * @return */ private static CGNode findMethod(CallGraph cg, Descriptor d, Atom name) { - for (Iterator it = cg.getSuccNodes(cg.getFakeRootNode()); it.hasNext();) { - CGNode n = it.next(); + for (CGNode n : Iterator2Iterable.make(cg.getSuccNodes(cg.getFakeRootNode()))) { if (n.getMethod().getName().equals(name) && n.getMethod().getDescriptor().equals(d)) { return n; } @@ -1102,8 +1100,7 @@ public class SlicerTest { public static Statement findCallTo(CGNode n, String methodName) { IR ir = n.getIR(); - for (Iterator it = ir.iterateAllInstructions(); it.hasNext();) { - SSAInstruction s = it.next(); + for (SSAInstruction s : Iterator2Iterable.make(ir.iterateAllInstructions())) { if (s instanceof SSAInvokeInstruction) { SSAInvokeInstruction call = (SSAInvokeInstruction) s; if (call.getCallSite().getDeclaredTarget().getName().toString().equals(methodName)) { 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 b0ac41d0c..af1cd20da 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 @@ -27,6 +27,7 @@ import com.ibm.wala.types.TypeReference; import com.ibm.wala.util.collections.CompoundIterator; import com.ibm.wala.util.collections.EmptyIterator; import com.ibm.wala.util.collections.IntMapIterator; +import com.ibm.wala.util.collections.Iterator2Iterable; import com.ibm.wala.util.debug.Assertions; import com.ibm.wala.util.debug.UnimplementedError; import com.ibm.wala.util.graph.AbstractNumberedGraph; @@ -506,8 +507,7 @@ public class BasicHeapGraph extends HeapGraphImpl { Object node = getNode(i); if (node != null) { result.append(i).append(" -> "); - for (Iterator it = getSuccNodes(node); it.hasNext();) { - Object s = it.next(); + for (Object s : Iterator2Iterable.make(getSuccNodes(node))) { result.append(getNumber(s)).append(" "); } result.append("\n"); diff --git a/com.ibm.wala.core/src/com/ibm/wala/analysis/reflection/FactoryBypassInterpreter.java b/com.ibm.wala.core/src/com/ibm/wala/analysis/reflection/FactoryBypassInterpreter.java index bb864070e..aeaca10bf 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/analysis/reflection/FactoryBypassInterpreter.java +++ b/com.ibm.wala.core/src/com/ibm/wala/analysis/reflection/FactoryBypassInterpreter.java @@ -57,6 +57,7 @@ import com.ibm.wala.types.MethodReference; import com.ibm.wala.types.TypeReference; import com.ibm.wala.util.collections.HashMapFactory; import com.ibm.wala.util.collections.HashSetFactory; +import com.ibm.wala.util.collections.Iterator2Iterable; import com.ibm.wala.util.debug.Assertions; import com.ibm.wala.util.warnings.Warnings; @@ -535,8 +536,7 @@ public class FactoryBypassInterpreter extends AbstractReflectionInterpreter { allInstructions.add(r); } - for (; it.hasNext();) { - IClass klass = it.next(); + for (IClass klass : Iterator2Iterable.make(it)) { TypeReference T = klass.getReference(); if (klass.isAbstract() || klass.isInterface() || typesAllocated.contains(T)) { continue; diff --git a/com.ibm.wala.core/src/com/ibm/wala/analysis/stackMachine/AbstractIntStackMachine.java b/com.ibm.wala.core/src/com/ibm/wala/analysis/stackMachine/AbstractIntStackMachine.java index 2033c8ca4..e43cc83b2 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/analysis/stackMachine/AbstractIntStackMachine.java +++ b/com.ibm.wala.core/src/com/ibm/wala/analysis/stackMachine/AbstractIntStackMachine.java @@ -10,8 +10,6 @@ *******************************************************************************/ package com.ibm.wala.analysis.stackMachine; -import java.util.Iterator; - import com.ibm.wala.cfg.ShrikeCFG; import com.ibm.wala.cfg.ShrikeCFG.BasicBlock; import com.ibm.wala.dataflow.graph.AbstractMeetOperator; @@ -54,6 +52,7 @@ import com.ibm.wala.types.ClassLoaderReference; import com.ibm.wala.types.TypeReference; import com.ibm.wala.util.CancelException; import com.ibm.wala.util.CancelRuntimeException; +import com.ibm.wala.util.collections.Iterator2Iterable; import com.ibm.wala.util.graph.INodeWithNumber; import com.ibm.wala.util.shrike.ShrikeUtil; @@ -216,9 +215,8 @@ public abstract class AbstractIntStackMachine implements FixedPointConstants { /* * Add only the entry variable to the work list. */ - for (Iterator it = getFixedPointSystem().getStatementsThatUse(entry); it.hasNext();) { - AbstractStatement s = (AbstractStatement) it.next(); - addToWorkList(s); + for (INodeWithNumber s : Iterator2Iterable.make(getFixedPointSystem().getStatementsThatUse(entry))) { + addToWorkList((AbstractStatement) s); } } diff --git a/com.ibm.wala.core/src/com/ibm/wala/analysis/typeInference/TypeInference.java b/com.ibm.wala.core/src/com/ibm/wala/analysis/typeInference/TypeInference.java index 75daf03e7..9658d9332 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/analysis/typeInference/TypeInference.java +++ b/com.ibm.wala.core/src/com/ibm/wala/analysis/typeInference/TypeInference.java @@ -51,6 +51,7 @@ import com.ibm.wala.types.TypeReference; import com.ibm.wala.util.CancelException; import com.ibm.wala.util.CancelRuntimeException; import com.ibm.wala.util.MonitorUtil.IProgressMonitor; +import com.ibm.wala.util.collections.Iterator2Iterable; import com.ibm.wala.util.debug.Assertions; /** @@ -178,8 +179,7 @@ public class TypeInference extends SSAInference implements FixedPo } } - for (Iterator it = ir.iterateNormalInstructions(); it.hasNext();) { - SSAInstruction s = it.next(); + for (SSAInstruction s : Iterator2Iterable.make(ir.iterateNormalInstructions())) { if (s instanceof SSAAbstractInvokeInstruction) { SSAAbstractInvokeInstruction call = (SSAAbstractInvokeInstruction) s; TypeVariable v = getVariable(call.getException()); diff --git a/com.ibm.wala.core/src/com/ibm/wala/cfg/AbstractCFG.java b/com.ibm.wala.core/src/com/ibm/wala/cfg/AbstractCFG.java index f7b4e7449..0ca012649 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/cfg/AbstractCFG.java +++ b/com.ibm.wala.core/src/com/ibm/wala/cfg/AbstractCFG.java @@ -23,6 +23,7 @@ import com.ibm.wala.util.collections.EmptyIterator; import com.ibm.wala.util.collections.FilterIterator; import com.ibm.wala.util.collections.HashSetFactory; import com.ibm.wala.util.collections.Iterator2Collection; +import com.ibm.wala.util.collections.Iterator2Iterable; import com.ibm.wala.util.collections.IteratorPlusOne; import com.ibm.wala.util.collections.IteratorPlusTwo; import com.ibm.wala.util.collections.NonNullSingletonIterator; @@ -592,8 +593,8 @@ public abstract class AbstractCFG> implements Contro throw new IllegalArgumentException("b is null"); } List result = new ArrayList<>(); - for (Iterator it = iterateExceptionalSuccessors(b.getNumber()); it.hasNext();) { - result.add(it.next()); + for (T s : Iterator2Iterable.make(iterateExceptionalSuccessors(b.getNumber()))) { + result.add(s); } return result; } diff --git a/com.ibm.wala.core/src/com/ibm/wala/cfg/CFGSanitizer.java b/com.ibm.wala.core/src/com/ibm/wala/cfg/CFGSanitizer.java index bfbc53905..174b890e6 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/cfg/CFGSanitizer.java +++ b/com.ibm.wala.core/src/com/ibm/wala/cfg/CFGSanitizer.java @@ -27,6 +27,7 @@ import com.ibm.wala.ssa.SSAReturnInstruction; import com.ibm.wala.ssa.SSAThrowInstruction; import com.ibm.wala.types.TypeReference; import com.ibm.wala.util.WalaException; +import com.ibm.wala.util.collections.Iterator2Iterable; import com.ibm.wala.util.debug.Assertions; import com.ibm.wala.util.graph.Graph; import com.ibm.wala.util.graph.impl.SlowSparseNumberedGraph; @@ -54,9 +55,7 @@ public class CFGSanitizer { // add all edges to the graph, except those that go to exit for (ISSABasicBlock b : cfg) { - for (Iterator it2 = cfg.getSuccNodes(b); it2.hasNext();) { - ISSABasicBlock b2 = it2.next(); - + for (ISSABasicBlock b2 : Iterator2Iterable.make(cfg.getSuccNodes(b))) { if (!b2.isExitBlock()) { g.addEdge(b, b2); } @@ -66,9 +65,8 @@ public class CFGSanitizer { // now add edges to exit, ignoring undeclared exceptions ISSABasicBlock exit = cfg.exit(); - for (Iterator it = cfg.getPredNodes(exit); it.hasNext();) { + for (ISSABasicBlock b : Iterator2Iterable.make(cfg.getPredNodes(exit))) { // for each predecessor of exit ... - ISSABasicBlock b = it.next(); SSAInstruction s = ir.getInstructions()[b.getLastInstructionIndex()]; if (s == null) { @@ -89,14 +87,12 @@ public class CFGSanitizer { Assertions.UNREACHABLE(); } // remove any exceptions that are caught by catch blocks - for (Iterator it2 = cfg.getSuccNodes(b); it2.hasNext();) { - IBasicBlock c = it2.next(); + for (ISSABasicBlock c : Iterator2Iterable.make(cfg.getSuccNodes(b))) { if (c.isCatchBlock()) { SSACFG.ExceptionHandlerBasicBlock cb = (ExceptionHandlerBasicBlock) c; - for (Iterator it3 = cb.getCaughtExceptionTypes(); it3.hasNext();) { - TypeReference ex = it3.next(); + for (TypeReference ex : Iterator2Iterable.make(cb.getCaughtExceptionTypes())) { IClass exClass = cha.lookupClass(ex); if (exClass == null) { throw new WalaException("failed to find " + ex); diff --git a/com.ibm.wala.core/src/com/ibm/wala/cfg/Util.java b/com.ibm.wala.core/src/com/ibm/wala/cfg/Util.java index 34d5447a6..f4f18a820 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/cfg/Util.java +++ b/com.ibm.wala.core/src/com/ibm/wala/cfg/Util.java @@ -10,13 +10,12 @@ *******************************************************************************/ package com.ibm.wala.cfg; -import java.util.Iterator; - import com.ibm.wala.shrikeBT.ConditionalBranchInstruction; import com.ibm.wala.ssa.SSAConditionalBranchInstruction; import com.ibm.wala.ssa.SSAInstruction; import com.ibm.wala.ssa.SSASwitchInstruction; import com.ibm.wala.ssa.SymbolTable; +import com.ibm.wala.util.collections.Iterator2Iterable; import com.ibm.wala.util.debug.Assertions; /** @@ -90,8 +89,7 @@ public class Util { throw new IllegalArgumentException(b.toString() + " does not end with a conditional branch"); } T fs = getNotTakenSuccessor(G, b); - for (Iterator ss = G.getSuccNodes(b); ss.hasNext();) { - T s = ss.next(); + for (T s : Iterator2Iterable.make(G.getSuccNodes(b))) { if (s != fs) return s; } @@ -214,8 +212,8 @@ public class Util { throw new IllegalArgumentException("b is null"); } int i = 0; - for (Iterator it = cfg.getPredNodes(b); it.hasNext();) { - if (it.next().equals(a)) { + for (T p : Iterator2Iterable.make(cfg.getPredNodes(b))) { + if (p.equals(a)) { return i; } i++; diff --git a/com.ibm.wala.core/src/com/ibm/wala/cfg/cdg/ControlDependenceGraph.java b/com.ibm.wala.core/src/com/ibm/wala/cfg/cdg/ControlDependenceGraph.java index b0e849941..7c5294adc 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/cfg/cdg/ControlDependenceGraph.java +++ b/com.ibm.wala.core/src/com/ibm/wala/cfg/cdg/ControlDependenceGraph.java @@ -19,6 +19,7 @@ import com.ibm.wala.cfg.MinimalCFG; import com.ibm.wala.util.collections.EmptyIterator; import com.ibm.wala.util.collections.HashMapFactory; import com.ibm.wala.util.collections.HashSetFactory; +import com.ibm.wala.util.collections.Iterator2Iterable; import com.ibm.wala.util.collections.Pair; import com.ibm.wala.util.graph.AbstractNumberedGraph; import com.ibm.wala.util.graph.NumberedEdgeManager; @@ -72,14 +73,12 @@ public class ControlDependenceGraph extends AbstractNumberedGraph { } for (T y : cfg) { - for (Iterator ns2 = RDF.getDominanceFrontier(y); ns2.hasNext();) { - T x = ns2.next(); + for (T x : Iterator2Iterable.make(RDF.getDominanceFrontier(y))) { controlDependence.get(x).add(y); if (wantEdgeLabels) { HashSet labels = HashSetFactory.make(); edgeLabels.put(Pair.make(x, y), labels); - for (Iterator ss = cfg.getSuccNodes(x); ss.hasNext();) { - T s = ss.next(); + for (T s : Iterator2Iterable.make(cfg.getSuccNodes(x))) { if (RDF.isDominatedBy(s, y)) { labels.add(makeEdgeLabel(x, y, s)); } @@ -206,8 +205,7 @@ public class ControlDependenceGraph extends AbstractNumberedGraph { StringBuffer sb = new StringBuffer(); for (T n : this) { sb.append(n.toString()).append("\n"); - for (Iterator ss = getSuccNodes(n); ss.hasNext();) { - Object s = ss.next(); + for (T s : Iterator2Iterable.make(getSuccNodes(n))) { sb.append(" --> ").append(s); if (edgeLabels != null) for (Object name : edgeLabels.get(Pair.make(n, s))) @@ -265,8 +263,8 @@ public class ControlDependenceGraph extends AbstractNumberedGraph { return false; } - for (Iterator pbs1 = getPredNodes(bb1); pbs1.hasNext();) { - if (!hasEdge(pbs1.next(), bb2)) { + for (T pb : Iterator2Iterable.make(getPredNodes(bb1))) { + if (!hasEdge(pb, bb2)) { return false; } } diff --git a/com.ibm.wala.core/src/com/ibm/wala/cfg/exc/intra/NullPointerTransferFunctionProvider.java b/com.ibm.wala.core/src/com/ibm/wala/cfg/exc/intra/NullPointerTransferFunctionProvider.java index 9681ba5f9..59284af38 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/cfg/exc/intra/NullPointerTransferFunctionProvider.java +++ b/com.ibm.wala.core/src/com/ibm/wala/cfg/exc/intra/NullPointerTransferFunctionProvider.java @@ -12,8 +12,6 @@ package com.ibm.wala.cfg.exc.intra; import java.util.ArrayList; -import java.util.Iterator; - import com.ibm.wala.cfg.ControlFlowGraph; import com.ibm.wala.cfg.Util; import com.ibm.wala.dataflow.graph.AbstractMeetOperator; @@ -50,6 +48,7 @@ import com.ibm.wala.ssa.SSAThrowInstruction; import com.ibm.wala.ssa.SSAUnaryOpInstruction; import com.ibm.wala.ssa.SymbolTable; import com.ibm.wala.ssa.analysis.IExplodedBasicBlock; +import com.ibm.wala.util.collections.Iterator2Iterable; /** * @author Juergen Graf @@ -139,8 +138,7 @@ class NullPointerTransferFunctionProvider implements I @Override public UnaryOperator getNodeTransferFunction(final T node) { final ArrayList> phiTransferFunctions = new ArrayList<>(1); - for (final Iterator phiIterator = node.iteratePhis(); phiIterator.hasNext(); ) { - final SSAPhiInstruction phi = phiIterator.next(); + for (SSAPhiInstruction phi : Iterator2Iterable.make(node.iteratePhis())) { int[] uses = new int[phi.getNumberOfUses()]; for (int i = 0; i < uses.length; i++) { uses[i] = phi.getUse(i); diff --git a/com.ibm.wala.core/src/com/ibm/wala/classLoader/ClassLoaderImpl.java b/com.ibm.wala.core/src/com/ibm/wala/classLoader/ClassLoaderImpl.java index 208fb3dd5..01a64e9e4 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/classLoader/ClassLoaderImpl.java +++ b/com.ibm.wala.core/src/com/ibm/wala/classLoader/ClassLoaderImpl.java @@ -125,8 +125,7 @@ public class ClassLoaderImpl implements IClassLoader { System.err.println("Get source files for " + M); } HashSet result = HashSetFactory.make(); - for (Iterator it = M.getEntries(); it.hasNext();) { - ModuleEntry entry = it.next(); + for (ModuleEntry entry : Iterator2Iterable.make(M.getEntries())) { if (DEBUG_LEVEL > 0) { System.err.println("consider entry for source information: " + entry); } @@ -155,8 +154,7 @@ public class ClassLoaderImpl implements IClassLoader { System.err.println("Get class files for " + M); } HashSet result = HashSetFactory.make(); - for (Iterator it = M.getEntries(); it.hasNext();) { - ModuleEntry entry = it.next(); + for (ModuleEntry entry : Iterator2Iterable.make(M.getEntries())) { if (DEBUG_LEVEL > 0) { System.err.println("ClassLoaderImpl.getClassFiles:Got entry: " + entry); } @@ -649,8 +647,7 @@ public class ClassLoaderImpl implements IClassLoader { @Override public int getNumberOfMethods() { int result = 0; - for (Iterator it = iterateAllClasses(); it.hasNext();) { - IClass klass = it.next(); + for (IClass klass : Iterator2Iterable.make(iterateAllClasses())) { result += klass.getDeclaredMethods().size(); } return result; diff --git a/com.ibm.wala.core/src/com/ibm/wala/classLoader/CodeScanner.java b/com.ibm.wala.core/src/com/ibm/wala/classLoader/CodeScanner.java index 24192cb0e..27e7c91fe 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/classLoader/CodeScanner.java +++ b/com.ibm.wala.core/src/com/ibm/wala/classLoader/CodeScanner.java @@ -31,6 +31,7 @@ import com.ibm.wala.ssa.SSAPutInstruction; import com.ibm.wala.types.FieldReference; import com.ibm.wala.types.TypeReference; import com.ibm.wala.util.collections.HashSetFactory; +import com.ibm.wala.util.collections.Iterator2Iterable; /** * Simple utilities to scan {@link IMethod}s to gather information without building an IR. @@ -182,8 +183,7 @@ public class CodeScanner { } private static boolean hasShrikeBTObjectArrayStore(ShrikeCTMethod M) throws InvalidClassFileException { - for (Iterator it = M.getArraysWritten(); it.hasNext();) { - TypeReference t = it.next(); + for (TypeReference t : Iterator2Iterable.make(M.getArraysWritten())) { if (t.isReferenceType()) { return true; } @@ -207,8 +207,8 @@ public class CodeScanner { private static List getFieldsReadFromShrikeBT(ShrikeCTMethod M) throws InvalidClassFileException { // TODO move the logic here from ShrikeCTMethodWrapper LinkedList result = new LinkedList<>(); - for (Iterator it = M.getFieldsRead(); it.hasNext();) { - result.add(it.next()); + for (FieldReference fr : Iterator2Iterable.make(M.getFieldsRead())) { + result.add(fr); } return result; } @@ -216,8 +216,8 @@ public class CodeScanner { private static List getFieldsWrittenFromShrikeBT(ShrikeCTMethod M) throws InvalidClassFileException { // TODO move the logic here from ShrikeCTMethodWrapper LinkedList result = new LinkedList<>(); - for (Iterator it = M.getFieldsWritten(); it.hasNext();) { - result.add(it.next()); + for (FieldReference fr : Iterator2Iterable.make(M.getFieldsWritten())) { + result.add(fr); } return result; } @@ -225,16 +225,15 @@ public class CodeScanner { private static List getArraysWrittenFromShrikeBT(ShrikeCTMethod M) throws InvalidClassFileException { // TODO move the logic here from ShrikeCTMethodWrapper List result = new LinkedList<>(); - for (Iterator it = M.getArraysWritten(); it.hasNext();) { - result.add(it.next()); + for (TypeReference tr : Iterator2Iterable.make(M.getArraysWritten())) { + result.add(tr); } return result; } private static boolean hasShrikeBTObjectArrayLoad(ShrikeCTMethod M) throws InvalidClassFileException { - for (Iterator it = M.getArraysRead(); it.hasNext();) { - TypeReference t = it.next(); - if (t.isReferenceType()) { + for (TypeReference tr : Iterator2Iterable.make(M.getArraysRead())) { + if (tr.isReferenceType()) { return true; } } diff --git a/com.ibm.wala.core/src/com/ibm/wala/dataflow/IFDS/PartiallyBalancedTabulationSolver.java b/com.ibm.wala.core/src/com/ibm/wala/dataflow/IFDS/PartiallyBalancedTabulationSolver.java index edb01c8f9..b24cc1642 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/dataflow/IFDS/PartiallyBalancedTabulationSolver.java +++ b/com.ibm.wala.core/src/com/ibm/wala/dataflow/IFDS/PartiallyBalancedTabulationSolver.java @@ -11,10 +11,9 @@ package com.ibm.wala.dataflow.IFDS; import java.util.Collection; -import java.util.Iterator; - import com.ibm.wala.util.MonitorUtil.IProgressMonitor; import com.ibm.wala.util.collections.HashSetFactory; +import com.ibm.wala.util.collections.Iterator2Iterable; import com.ibm.wala.util.collections.Pair; import com.ibm.wala.util.debug.Assertions; import com.ibm.wala.util.intset.IntIterator; @@ -46,8 +45,7 @@ public class PartiallyBalancedTabulationSolver extends TabulationSolver if (result && wasUsedAsUnbalancedSeed(s_p, i) && supergraph.isExit(n)) { // j was reached from an entry seed. if there are any facts which are reachable from j, even without // balanced parentheses, we can use these as new seeds. - for (Iterator it2 = supergraph.getSuccNodes(n); it2.hasNext();) { - T retSite = it2.next(); + for (T retSite : Iterator2Iterable.make(supergraph.getSuccNodes(n))) { PartiallyBalancedTabulationProblem problem = (PartiallyBalancedTabulationProblem) getProblem(); IFlowFunction f = problem.getFunctionMap().getUnbalancedReturnFlowFunction(n, retSite); // for each fact that can be reached by the return flow ... diff --git a/com.ibm.wala.core/src/com/ibm/wala/dataflow/IFDS/TabulationSolver.java b/com.ibm.wala.core/src/com/ibm/wala/dataflow/IFDS/TabulationSolver.java index 6bc46c45b..6a3dad199 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/dataflow/IFDS/TabulationSolver.java +++ b/com.ibm.wala.core/src/com/ibm/wala/dataflow/IFDS/TabulationSolver.java @@ -14,7 +14,6 @@ import java.util.Arrays; import java.util.Collection; import java.util.Collections; import java.util.Comparator; -import java.util.Iterator; import java.util.Map; import java.util.Map.Entry; import java.util.Set; @@ -30,6 +29,7 @@ import com.ibm.wala.util.collections.HashMapFactory; import com.ibm.wala.util.collections.HashSetFactory; import com.ibm.wala.util.collections.Heap; import com.ibm.wala.util.collections.Iterator2Collection; +import com.ibm.wala.util.collections.Iterator2Iterable; import com.ibm.wala.util.collections.MapUtil; import com.ibm.wala.util.collections.ToStringComparator; import com.ibm.wala.util.heapTrace.HeapTracer; @@ -332,8 +332,7 @@ public class TabulationSolver { if (DEBUG_LEVEL > 0) { System.err.println("process normal: " + edge); } - for (Iterator it = supergraph.getSuccNodes(edge.target); it.hasNext();) { - final T m = it.next(); + for (T m : Iterator2Iterable.make(supergraph.getSuccNodes(edge.target))) { if (DEBUG_LEVEL > 0) { System.err.println("normal successor: " + m); } @@ -409,8 +408,7 @@ public class TabulationSolver { // note that we might have different summary edges for each // potential return site, and different flow functions from this // exit block to each return site. - for (Iterator retSites = supergraph.getReturnSites(c, supergraph.getProcOf(edge.target)); retSites.hasNext();) { - final T retSite = retSites.next(); + for (T retSite : Iterator2Iterable.make(supergraph.getReturnSites(c, supergraph.getProcOf(edge.target)))) { if (DEBUG_LEVEL > 1) { System.err.println("candidate return site: " + retSite + " " + supergraph.getNumber(retSite)); } @@ -537,20 +535,18 @@ public class TabulationSolver { Collection allReturnSites = HashSetFactory.make(); // populate allReturnSites with return sites for missing calls. - for (Iterator it = supergraph.getReturnSites(edge.target, null); it.hasNext();) { - allReturnSites.add(it.next()); + for (T retSite : Iterator2Iterable.make(supergraph.getReturnSites(edge.target, null))) { + allReturnSites.add(retSite); } // [14 - 16] boolean hasCallee = false; - for (Iterator it = supergraph.getCalledNodes(edge.target); it.hasNext();) { + for (T callee : Iterator2Iterable.make(supergraph.getCalledNodes(edge.target))) { hasCallee = true; - final T callee = it.next(); processParticularCallee(edge, c, allReturnSites, callee); } // special logic: in backwards problems, a "call" node can have // "normal" successors as well. deal with these. - for (Iterator it = supergraph.getNormalSuccessors(edge.target); it.hasNext();) { - final T m = it.next(); + for (T m : Iterator2Iterable.make(supergraph.getNormalSuccessors(edge.target))) { if (DEBUG_LEVEL > 0) { System.err.println("normal successor: " + m); } diff --git a/com.ibm.wala.core/src/com/ibm/wala/dataflow/ssa/SSAInference.java b/com.ibm.wala.core/src/com/ibm/wala/dataflow/ssa/SSAInference.java index e2ab57f7f..06594d713 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/dataflow/ssa/SSAInference.java +++ b/com.ibm.wala.core/src/com/ibm/wala/dataflow/ssa/SSAInference.java @@ -11,8 +11,6 @@ package com.ibm.wala.dataflow.ssa; -import java.util.Iterator; - import com.ibm.wala.analysis.typeInference.TypeInference; import com.ibm.wala.fixedpoint.impl.DefaultFixedPointSolver; import com.ibm.wala.fixedpoint.impl.NullaryOperator; @@ -21,6 +19,7 @@ import com.ibm.wala.fixpoint.IVariable; import com.ibm.wala.ssa.IR; import com.ibm.wala.ssa.SSAInstruction; import com.ibm.wala.ssa.SymbolTable; +import com.ibm.wala.util.collections.Iterator2Iterable; /** * This class performs intra-procedural propagation over an SSA form. @@ -85,16 +84,13 @@ public abstract class SSAInference> extends DefaultFixedP for (SSAInstruction s : instructions) { makeEquationForInstruction(opFactory, s); } - for (Iterator it = ir.iteratePhis(); it.hasNext();) { - SSAInstruction s = it.next(); + for (SSAInstruction s : Iterator2Iterable.make(ir.iteratePhis())) { makeEquationForInstruction(opFactory, s); } - for (Iterator it = ir.iteratePis(); it.hasNext();) { - SSAInstruction s = it.next(); + for (SSAInstruction s : Iterator2Iterable.make(ir.iteratePis())) { makeEquationForInstruction(opFactory, s); } - for (Iterator it = ir.iterateCatchInstructions(); it.hasNext();) { - SSAInstruction s = it.next(); + for (SSAInstruction s : Iterator2Iterable.make(ir.iterateCatchInstructions())) { makeEquationForInstruction(opFactory, s); } } diff --git a/com.ibm.wala.core/src/com/ibm/wala/demandpa/alg/DemandRefinementPointsTo.java b/com.ibm.wala.core/src/com/ibm/wala/demandpa/alg/DemandRefinementPointsTo.java index ec77c8839..11b260a2b 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/demandpa/alg/DemandRefinementPointsTo.java +++ b/com.ibm.wala.core/src/com/ibm/wala/demandpa/alg/DemandRefinementPointsTo.java @@ -178,10 +178,8 @@ public class DemandRefinementPointsTo extends AbstractDemandPointsTo { private void sanityCheckCG() { if (PARANOID) { for (CGNode callee : cg) { - for (Iterator predNodes = cg.getPredNodes(callee); predNodes.hasNext();) { - CGNode caller = predNodes.next(); - for (Iterator iterator = cg.getPossibleSites(caller, callee); iterator.hasNext();) { - CallSiteReference site = iterator.next(); + for (CGNode caller : Iterator2Iterable.make(cg.getPredNodes(callee))) { + for (CallSiteReference site : Iterator2Iterable.make(cg.getPossibleSites(caller, callee))) { try { caller.getIR().getCalls(site); } catch (IllegalArgumentException e) { @@ -1132,8 +1130,7 @@ public class DemandRefinementPointsTo extends AbstractDemandPointsTo { repropCallArg(exc, new PointerKeyAndState(excRet, excRetState), returnLabel.bar()); return null; }); - for (Iterator iter = new PointerParamValueNumIterator(targetForCall); iter.hasNext();) { - final int formalNum = iter.next(); + for (int formalNum : Iterator2Iterable.make(new PointerParamValueNumIterator(targetForCall))) { final int actualNum = formalNum - 1; final ParamBarLabel paramBarLabel = ParamBarLabel.make(new CallerSiteContext(caller, call)); doTransition(receiverState, paramBarLabel, formalState -> { @@ -1390,8 +1387,8 @@ public class DemandRefinementPointsTo extends AbstractDemandPointsTo { } private void addPredsOfIKeyAndStateToTrackedPointsTo(InstanceKeyAndState ikAndState) throws UnimplementedError { - for (Iterator iter = g.getPredNodes(ikAndState.getInstanceKey(), NewLabel.v()); iter.hasNext();) { - PointerKey ikPred = (PointerKey) iter.next(); + for (Object o : Iterator2Iterable.make(g.getPredNodes(ikAndState.getInstanceKey(), NewLabel.v()))) { + PointerKey ikPred = (PointerKey) o; PointerKeyAndState ikPredAndState = new PointerKeyAndState(ikPred, ikAndState.getState()); int mappedIndex = ikAndStates.getMappedIndex(ikAndState); assert mappedIndex != -1; @@ -1614,8 +1611,7 @@ public class DemandRefinementPointsTo extends AbstractDemandPointsTo { LocalPointerKey localPk = (LocalPointerKey) curPk; CGNode caller = localPk.getNode(); // from actual parameter to callee - for (Iterator iter = g.getInstrsPassingParam(localPk); iter.hasNext();) { - SSAAbstractInvokeInstruction callInstr = iter.next(); + for (SSAAbstractInvokeInstruction callInstr : Iterator2Iterable.make(g.getInstrsPassingParam(localPk))) { for (int i = 0; i < callInstr.getNumberOfUses(); i++) { if (localPk.getValueNumber() != callInstr.getUse(i)) continue; @@ -1718,8 +1714,8 @@ public class DemandRefinementPointsTo extends AbstractDemandPointsTo { @Override public void visitAssignGlobal(final AssignGlobalLabel label, Object dst) { - for (Iterator readIter = g.getReadsOfStaticField((StaticFieldKey) dst); readIter.hasNext();) { - final PointerKey predPk = (PointerKey) readIter.next(); + for (Object o : Iterator2Iterable.make(g.getReadsOfStaticField((StaticFieldKey) dst))) { + final PointerKey predPk = (PointerKey) o; doTransition(curState, AssignGlobalBarLabel.v(), predPkState -> { PointerKeyAndState predPkAndState = new PointerKeyAndState(predPk, predPkState); handleTrackedPred(trackedSet, predPkAndState, AssignGlobalBarLabel.v()); @@ -1745,8 +1741,7 @@ public class DemandRefinementPointsTo extends AbstractDemandPointsTo { } } else { // send to all getfield sources - for (Iterator readIter = g.getReadsOfInstanceField(storeBase, field); readIter.hasNext();) { - final PointerKey predPk = readIter.next(); + for (final PointerKey predPk : Iterator2Iterable.make(g.getReadsOfInstanceField(storeBase, field))) { doTransition(curState, MatchBarLabel.v(), predPkState -> { PointerKeyAndState predPkAndState = new PointerKeyAndState(predPk, predPkState); handleTrackedPred(trackedSet, predPkAndState, MatchBarLabel.v()); @@ -2263,9 +2258,7 @@ public class DemandRefinementPointsTo extends AbstractDemandPointsTo { } } } else { // use match edges - for (Iterator writesToInstanceField = g.getWritesToInstanceField(loadBase, field); writesToInstanceField - .hasNext();) { - final PointerKey writtenPk = writesToInstanceField.next(); + for (final PointerKey writtenPk : Iterator2Iterable.make(g.getWritesToInstanceField(loadBase, field))) { doTransition(curState, MatchLabel.v(), nextState -> { h.propagate(new PointerKeyAndState(writtenPk, nextState)); return null; @@ -2316,9 +2309,8 @@ public class DemandRefinementPointsTo extends AbstractDemandPointsTo { @Override public void visitAssignGlobal(AssignGlobalLabel label, Object dst) { - for (Iterator writesToStaticField = g.getWritesToStaticField((StaticFieldKey) dst); writesToStaticField - .hasNext();) { - final PointerKey writtenPk = (PointerKey) writesToStaticField.next(); + for (Object writeToStaticField : Iterator2Iterable.make(g.getWritesToStaticField((StaticFieldKey) dst))) { + final PointerKey writtenPk = (PointerKey) writeToStaticField; doTransition(curState, label, nextState -> { h.propagate(new PointerKeyAndState(writtenPk, nextState)); return null; diff --git a/com.ibm.wala.core/src/com/ibm/wala/demandpa/flowgraph/AbstractDemandFlowGraph.java b/com.ibm.wala.core/src/com/ibm/wala/demandpa/flowgraph/AbstractDemandFlowGraph.java index a1a546740..995bff4a2 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/demandpa/flowgraph/AbstractDemandFlowGraph.java +++ b/com.ibm.wala.core/src/com/ibm/wala/demandpa/flowgraph/AbstractDemandFlowGraph.java @@ -64,6 +64,7 @@ import com.ibm.wala.ssa.SSAPhiInstruction; import com.ibm.wala.util.collections.EmptyIterator; import com.ibm.wala.util.collections.HashMapFactory; import com.ibm.wala.util.collections.HashSetFactory; +import com.ibm.wala.util.collections.Iterator2Iterable; import com.ibm.wala.util.intset.BitVectorIntSet; import com.ibm.wala.util.ref.ReferenceCleanser; @@ -130,8 +131,7 @@ public abstract class AbstractDemandFlowGraph extends AbstractFlowGraph { // as the argument addSubgraphForNode(caller); IR ir = caller.getIR(); - for (Iterator iterator = ir.iterateCallSites(); iterator.hasNext();) { - CallSiteReference call = iterator.next(); + for (CallSiteReference call : Iterator2Iterable.make(ir.iterateCallSites())) { if (cg.getPossibleTargets(caller, call).contains(cgNode)) { SSAAbstractInvokeInstruction[] callInstrs = ir.getCalls(call); for (SSAAbstractInvokeInstruction callInstr : callInstrs) { @@ -219,8 +219,7 @@ public abstract class AbstractDemandFlowGraph extends AbstractFlowGraph { // as the argument addSubgraphForNode(caller); IR ir = caller.getIR(); - for (Iterator iterator = ir.iterateCallSites(); iterator.hasNext();) { - CallSiteReference call = iterator.next(); + for (CallSiteReference call : Iterator2Iterable.make(ir.iterateCallSites())) { if (cg.getPossibleTargets(caller, call).contains(cgNode)) { SSAAbstractInvokeInstruction[] callInstrs = ir.getCalls(call); for (SSAAbstractInvokeInstruction callInstr : callInstrs) { @@ -294,8 +293,8 @@ public abstract class AbstractDemandFlowGraph extends AbstractFlowGraph { private void addPhiConstraints(CGNode node, ControlFlowGraph cfg, ISSABasicBlock b) { // visit each phi instruction in each successor block - for (Iterator iter = cfg.getSuccNodes(b); iter.hasNext();) { - ISSABasicBlock sb = (ISSABasicBlock) iter.next(); + for (IBasicBlock ibb : Iterator2Iterable.make(cfg.getSuccNodes(b))) { + ISSABasicBlock sb = (ISSABasicBlock) ibb; if (sb.isExitBlock()) { // an optimization based on invariant that exit blocks should // have no @@ -304,15 +303,15 @@ public abstract class AbstractDemandFlowGraph extends AbstractFlowGraph { } int n = 0; // set n to be whichPred(this, sb); - for (Iterator back = cfg.getPredNodes(sb); back.hasNext(); n++) { - if (back.next() == b) { + for (IBasicBlock back : Iterator2Iterable.make(cfg.getPredNodes(sb))) { + if (back == b) { break; } + ++n; } assert n < cfg.getPredNodeCount(sb); - for (Iterator phis = sb.iteratePhis(); phis.hasNext();) { + for (SSAPhiInstruction phi : Iterator2Iterable.make(sb.iteratePhis())) { // Assertions.UNREACHABLE(); - SSAPhiInstruction phi = phis.next(); if (phi == null) { continue; } @@ -361,10 +360,8 @@ public abstract class AbstractDemandFlowGraph extends AbstractFlowGraph { Set ret = callerCache.get(callee); if (ret == null) { ret = HashSetFactory.make(); - for (Iterator predNodes = cg.getPredNodes(callee); predNodes.hasNext();) { - CGNode caller = predNodes.next(); - for (Iterator iterator = cg.getPossibleSites(caller, callee); iterator.hasNext();) { - CallSiteReference call = iterator.next(); + for (CGNode caller : Iterator2Iterable.make(cg.getPredNodes(callee))) { + for (CallSiteReference call : Iterator2Iterable.make(cg.getPossibleSites(caller, callee))) { ret.add(new CallerSiteContext(caller, call)); } } diff --git a/com.ibm.wala.core/src/com/ibm/wala/demandpa/flowgraph/AbstractFlowGraph.java b/com.ibm.wala.core/src/com/ibm/wala/demandpa/flowgraph/AbstractFlowGraph.java index bac514a4d..5cd0e54d9 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/demandpa/flowgraph/AbstractFlowGraph.java +++ b/com.ibm.wala.core/src/com/ibm/wala/demandpa/flowgraph/AbstractFlowGraph.java @@ -82,6 +82,7 @@ import com.ibm.wala.ssa.SymbolTable; import com.ibm.wala.types.TypeReference; import com.ibm.wala.util.collections.EmptyIterator; import com.ibm.wala.util.collections.HashMapFactory; +import com.ibm.wala.util.collections.Iterator2Iterable; import com.ibm.wala.util.collections.MapUtil; import com.ibm.wala.util.collections.Pair; import com.ibm.wala.util.debug.Assertions; @@ -159,10 +160,9 @@ public abstract class AbstractFlowGraph extends SlowSparseNumberedLabeledGraph succLabelIter = getSuccLabels(node); succLabelIter.hasNext();) { - final IFlowLabel label = succLabelIter.next(); - for (Iterator succNodeIter = getSuccNodes(node, label); succNodeIter.hasNext();) { - label.visit(v, succNodeIter.next()); + for (final IFlowLabel label : Iterator2Iterable.make(getSuccLabels(node))) { + for (Object succNode : Iterator2Iterable.make(getSuccNodes(node, label))) { + label.visit(v, succNode); } } } @@ -173,10 +173,9 @@ public abstract class AbstractFlowGraph extends SlowSparseNumberedLabeledGraph predLabelIter = getPredLabels(node); predLabelIter.hasNext();) { - final IFlowLabel label = predLabelIter.next(); - for (Iterator predNodeIter = getPredNodes(node, label); predNodeIter.hasNext();) { - label.visit(v, predNodeIter.next()); + for (final IFlowLabel label : Iterator2Iterable.make(getPredLabels(node))) { + for (Object predNode : Iterator2Iterable.make(getPredNodes(node, label))) { + label.visit(v, predNode); } } } @@ -187,8 +186,7 @@ public abstract class AbstractFlowGraph extends SlowSparseNumberedLabeledGraph iter = ir.iterateCallSites(); iter.hasNext();) { - CallSiteReference site = iter.next(); + for (CallSiteReference site : Iterator2Iterable.make(ir.iterateCallSites())) { SSAAbstractInvokeInstruction[] calls = ir.getCalls(site); for (SSAAbstractInvokeInstruction invokeInstr : calls) { for (int i = 0; i < invokeInstr.getNumberOfUses(); i++) { diff --git a/com.ibm.wala.core/src/com/ibm/wala/demandpa/flowgraph/DemandPointerFlowGraph.java b/com.ibm.wala.core/src/com/ibm/wala/demandpa/flowgraph/DemandPointerFlowGraph.java index 23578c254..719c5d6e5 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/demandpa/flowgraph/DemandPointerFlowGraph.java +++ b/com.ibm.wala.core/src/com/ibm/wala/demandpa/flowgraph/DemandPointerFlowGraph.java @@ -38,7 +38,6 @@ package com.ibm.wala.demandpa.flowgraph; import java.util.Collection; -import java.util.Iterator; import java.util.List; import java.util.Set; @@ -81,6 +80,7 @@ import com.ibm.wala.ssa.SymbolTable; import com.ibm.wala.types.FieldReference; import com.ibm.wala.types.TypeReference; import com.ibm.wala.util.collections.HashSetFactory; +import com.ibm.wala.util.collections.Iterator2Iterable; import com.ibm.wala.util.collections.Pair; /** @@ -98,8 +98,7 @@ public class DemandPointerFlowGraph extends AbstractDemandFlowGraph implements I */ @Override protected void addNodesForParameters(CGNode node, IR ir) { - for (Iterator iter = new PointerParamValueNumIterator(node); iter.hasNext();) { - int parameter = iter.next(); + for (int parameter : Iterator2Iterable.make(new PointerParamValueNumIterator(node))) { PointerKey paramPk = heapModel.getPointerKeyForLocal(node, parameter); addNode(paramPk); params.put(paramPk, node); diff --git a/com.ibm.wala.core/src/com/ibm/wala/demandpa/flowgraph/SimpleDemandPointerFlowGraph.java b/com.ibm.wala.core/src/com/ibm/wala/demandpa/flowgraph/SimpleDemandPointerFlowGraph.java index 68b8f69b6..ff059b903 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/demandpa/flowgraph/SimpleDemandPointerFlowGraph.java +++ b/com.ibm.wala.core/src/com/ibm/wala/demandpa/flowgraph/SimpleDemandPointerFlowGraph.java @@ -65,6 +65,7 @@ import com.ibm.wala.types.FieldReference; import com.ibm.wala.types.TypeReference; import com.ibm.wala.util.collections.HashMapFactory; import com.ibm.wala.util.collections.HashSetFactory; +import com.ibm.wala.util.collections.Iterator2Iterable; import com.ibm.wala.util.debug.Assertions; import com.ibm.wala.util.debug.UnimplementedError; import com.ibm.wala.util.graph.impl.SlowSparseNumberedGraph; @@ -301,8 +302,7 @@ public class SimpleDemandPointerFlowGraph extends SlowSparseNumberedGraph iterator = ir.iterateCallSites(); iterator.hasNext();) { - CallSiteReference call = iterator.next(); + for (CallSiteReference call : Iterator2Iterable.make(ir.iterateCallSites())) { if (cg.getPossibleTargets(caller, call).contains(node)) { SSAAbstractInvokeInstruction[] callInstrs = ir.getCalls(call); for (SSAAbstractInvokeInstruction callInstr : callInstrs) { @@ -494,8 +494,7 @@ public class SimpleDemandPointerFlowGraph extends SlowSparseNumberedGraph cfg, ISSABasicBlock b) { // visit each phi instruction in each successor block - for (Iterator sbs = cfg.getSuccNodes(b); sbs.hasNext();) { - ISSABasicBlock sb = (ISSABasicBlock) sbs.next(); + for (ISSABasicBlock sb : Iterator2Iterable.make(cfg.getSuccNodes(b))) { if (sb.isExitBlock()) { // an optimization based on invariant that exit blocks should have no // phis. @@ -503,14 +502,14 @@ public class SimpleDemandPointerFlowGraph extends SlowSparseNumberedGraph back = cfg.getPredNodes(sb); back.hasNext(); n++) { - if (back.next() == b) { + for (IBasicBlock back : Iterator2Iterable.make(cfg.getPredNodes(sb))) { + if (back == b) { break; } + ++n; } assert n < cfg.getPredNodeCount(sb); - for (Iterator phis = sb.iteratePhis(); phis.hasNext();) { - SSAPhiInstruction phi = phis.next(); + for (SSAPhiInstruction phi : Iterator2Iterable.make(sb.iteratePhis())) { if (phi == null) { continue; } 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 c8934cbc1..04e7cf7c5 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 @@ -11,7 +11,6 @@ package com.ibm.wala.escape; import java.util.Collections; -import java.util.Iterator; import java.util.Map; import java.util.Set; @@ -29,6 +28,7 @@ import com.ibm.wala.ssa.IR; import com.ibm.wala.util.WalaException; import com.ibm.wala.util.collections.HashMapFactory; import com.ibm.wala.util.collections.HashSetFactory; +import com.ibm.wala.util.collections.Iterator2Iterable; import com.ibm.wala.util.debug.Assertions; import com.ibm.wala.util.graph.impl.GraphInverter; import com.ibm.wala.util.graph.traverse.DFS; @@ -125,8 +125,7 @@ public class FILiveObjectAnalysis implements ILiveObjectAnalysis { } private boolean mayBeLiveInSomeCaller(InstanceKey ik, CGNode m) { - for (Iterator it = callGraph.getPredNodes(m); it.hasNext();) { - CGNode n = it.next(); + for (CGNode n : Iterator2Iterable.make(callGraph.getPredNodes(m))) { if (mayBeLive(ik, n, -1)) { return true; } @@ -144,8 +143,7 @@ public class FILiveObjectAnalysis implements ILiveObjectAnalysis { IR ir = m.getIR(); DefUse du = m.getDU(); - for (Iterator it = DFS.iterateDiscoverTime(GraphInverter.invert(heapGraph), ik); it.hasNext();) { - Object p = it.next(); + for (Object p : Iterator2Iterable.make(DFS.iterateDiscoverTime(GraphInverter.invert(heapGraph), ik))) { if (p instanceof LocalPointerKey) { LocalPointerKey lpk = (LocalPointerKey) p; if (lpk.getNode().equals(m)) { @@ -164,8 +162,7 @@ public class FILiveObjectAnalysis implements ILiveObjectAnalysis { */ private Set computeLiveNodes(InstanceKey ik) { Set localRootNodes = HashSetFactory.make(); - for (Iterator it = DFS.iterateDiscoverTime(GraphInverter.invert(heapGraph), ik); it.hasNext();) { - Object node = it.next(); + for (Object node : Iterator2Iterable.make(DFS.iterateDiscoverTime(GraphInverter.invert(heapGraph), ik))) { if (node instanceof StaticFieldKey) { liveEverywhere.add(ik); return Collections.emptySet(); 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 379d841ea..89ffc0716 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 @@ -11,7 +11,6 @@ package com.ibm.wala.escape; import java.util.Collections; -import java.util.Iterator; import java.util.Set; import com.ibm.wala.analysis.pointers.HeapGraph; @@ -25,6 +24,7 @@ import com.ibm.wala.ipa.callgraph.propagation.ReturnValueKey; import com.ibm.wala.types.MethodReference; import com.ibm.wala.util.WalaException; import com.ibm.wala.util.collections.HashSetFactory; +import com.ibm.wala.util.collections.Iterator2Iterable; /** * Trivial method-level escape analysis. @@ -102,8 +102,8 @@ public class TrivialMethodEscape implements IMethodEscapeAnalysis, INodeEscapeAn } for (InstanceKey ik : instances) { - for (Iterator it2 = hg.getPredNodes(ik); it2.hasNext();) { - PointerKey p = (PointerKey) it2.next(); + for (Object o : Iterator2Iterable.make(hg.getPredNodes(ik))) { + PointerKey p = (PointerKey) o; if (!(p instanceof AbstractLocalPointerKey)) { // a pointer from the heap. give up. return true; @@ -134,8 +134,7 @@ public class TrivialMethodEscape implements IMethodEscapeAnalysis, INodeEscapeAn if (n == null) { throw new IllegalArgumentException("null n"); } - for (Iterator it = n.iterateNewSites(); it.hasNext();) { - NewSiteReference site = it.next(); + for (NewSiteReference site : Iterator2Iterable.make(n.iterateNewSites())) { if (site.getProgramCounter() == allocPC) { return site; } diff --git a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/cha/CHACallGraph.java b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/cha/CHACallGraph.java index 6f88682df..430cef2c2 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/cha/CHACallGraph.java +++ b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/cha/CHACallGraph.java @@ -41,6 +41,7 @@ import com.ibm.wala.util.collections.FilterIterator; import com.ibm.wala.util.collections.HashMapFactory; import com.ibm.wala.util.collections.HashSetFactory; import com.ibm.wala.util.collections.Iterator2Collection; +import com.ibm.wala.util.collections.Iterator2Iterable; import com.ibm.wala.util.collections.IteratorUtil; import com.ibm.wala.util.collections.MapIterator; import com.ibm.wala.util.graph.NumberedEdgeManager; @@ -242,8 +243,8 @@ public class CHACallGraph extends BasicCallGraph { private void closure() throws CancelException { while (! newNodes.isEmpty()) { CGNode n = newNodes.pop(); - for(Iterator sites = n.iterateCallSites(); sites.hasNext(); ) { - Iterator methods = getPossibleTargets(sites.next()); + for(CallSiteReference site : Iterator2Iterable.make(n.iterateCallSites())) { + Iterator methods = getPossibleTargets(site); while (methods.hasNext()) { IMethod target = methods.next(); if (isRelevantMethod(target)) { @@ -364,8 +365,8 @@ public class CHACallGraph extends BasicCallGraph { @Override public IntSet getSuccNodeNumbers(CGNode node) { MutableIntSet result = IntSetUtil.make(); - for(Iterator ss = getSuccNodes(node); ss.hasNext(); ) { - result.add(ss.next().getGraphNodeId()); + for(CGNode s : Iterator2Iterable.make(getSuccNodes(node))) { + result.add(s.getGraphNodeId()); } return result; } @@ -373,8 +374,8 @@ public class CHACallGraph extends BasicCallGraph { @Override public IntSet getPredNodeNumbers(CGNode node) { MutableIntSet result = IntSetUtil.make(); - for(Iterator ss = getPredNodes(node); ss.hasNext(); ) { - result.add(ss.next().getGraphNodeId()); + for(CGNode s : Iterator2Iterable.make(getPredNodes(node))) { + result.add(s.getGraphNodeId()); } return result; } 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 121508448..22f6e674f 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 @@ -29,6 +29,7 @@ import com.ibm.wala.types.MethodReference; import com.ibm.wala.util.CancelException; import com.ibm.wala.util.collections.HashMapFactory; import com.ibm.wala.util.collections.HashSetFactory; +import com.ibm.wala.util.collections.Iterator2Iterable; import com.ibm.wala.util.collections.NonNullSingletonIterator; import com.ibm.wala.util.debug.Assertions; import com.ibm.wala.util.debug.UnimplementedError; @@ -231,8 +232,7 @@ public abstract class BasicCallGraph extends AbstractNumberedGraph im @Override public String toString() { StringBuffer result = new StringBuffer(""); - for (Iterator i = DFS.iterateDiscoverTime(this, new NonNullSingletonIterator<>(getFakeRootNode())); i.hasNext();) { - CGNode n = i.next(); + for (CGNode n : Iterator2Iterable.make(DFS.iterateDiscoverTime(this, new NonNullSingletonIterator<>(getFakeRootNode())))) { result.append(nodeToString(this, n) + "\n"); } return result.toString(); @@ -241,14 +241,12 @@ public abstract class BasicCallGraph extends AbstractNumberedGraph im public static String nodeToString(CallGraph CG, CGNode n) { StringBuffer result = new StringBuffer(n.toString() + "\n"); if (n.getMethod() != null) { - for (Iterator sites = n.iterateCallSites(); sites.hasNext();) { - CallSiteReference site = sites.next(); + for (CallSiteReference site : Iterator2Iterable.make(n.iterateCallSites())) { Iterator targets = CG.getPossibleTargets(n, site).iterator(); if (targets.hasNext()) { result.append(" - " + site + "\n"); } - for (; targets.hasNext();) { - CGNode target = targets.next(); + for (CGNode target : Iterator2Iterable.make(targets)) { result.append(" -> " + target + "\n"); } } diff --git a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/impl/PartialCallGraph.java b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/impl/PartialCallGraph.java index 599aab9aa..001e8a4b4 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/impl/PartialCallGraph.java +++ b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/impl/PartialCallGraph.java @@ -23,6 +23,7 @@ import com.ibm.wala.ipa.cha.IClassHierarchy; import com.ibm.wala.types.MethodReference; import com.ibm.wala.util.collections.FilterIterator; import com.ibm.wala.util.collections.HashSetFactory; +import com.ibm.wala.util.collections.Iterator2Iterable; import com.ibm.wala.util.graph.Graph; import com.ibm.wala.util.graph.GraphSlicer; import com.ibm.wala.util.graph.impl.DelegatingGraph; @@ -135,8 +136,7 @@ public class PartialCallGraph extends DelegatingGraph implements CallGra public IntSet getSuccNodeNumbers(CGNode node) { assert containsNode(node); MutableIntSet x = IntSetUtil.make(); - for (Iterator ns = getSuccNodes(node); ns.hasNext();) { - CGNode succ = ns.next(); + for (CGNode succ : Iterator2Iterable.make(getSuccNodes(node))) { if (containsNode(succ)) { x.add(getNumber(succ)); } @@ -149,8 +149,7 @@ public class PartialCallGraph extends DelegatingGraph implements CallGra public IntSet getPredNodeNumbers(CGNode node) { assert containsNode(node); MutableIntSet x = IntSetUtil.make(); - for (Iterator ns = getPredNodes(node); ns.hasNext();) { - CGNode pred = ns.next(); + for (CGNode pred : Iterator2Iterable.make(getPredNodes(node))) { if (containsNode(pred)) { x.add(getNumber(pred)); } diff --git a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/PointerAnalysisImpl.java b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/PointerAnalysisImpl.java index f4331207b..c47f493fc 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/PointerAnalysisImpl.java +++ b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/PointerAnalysisImpl.java @@ -89,8 +89,7 @@ public class PointerAnalysisImpl extends AbstractPointerAnalysis { @Override public String toString() { StringBuffer result = new StringBuffer("PointerAnalysis:\n"); - for (Iterator it = pointsToMap.iterateKeys(); it.hasNext();) { - PointerKey p = it.next(); + for (PointerKey p : Iterator2Iterable.make(pointsToMap.iterateKeys())) { OrdinalSet O = getPointsToSet(p); result.append(" ").append(p).append(" ->\n"); for (InstanceKey instanceKey : O) { diff --git a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/PointsToMap.java b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/PointsToMap.java index 7a9034b2e..3e63fc85c 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/PointsToMap.java +++ b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/PointsToMap.java @@ -14,6 +14,7 @@ import java.util.Iterator; import com.ibm.wala.util.collections.FilterIterator; import com.ibm.wala.util.collections.IVector; +import com.ibm.wala.util.collections.Iterator2Iterable; import com.ibm.wala.util.collections.SimpleVector; import com.ibm.wala.util.debug.Assertions; import com.ibm.wala.util.intset.BitVector; @@ -187,8 +188,7 @@ public class PointsToMap { * Wipe out the cached transitive closure information */ public void revertToPreTransitive() { - for (Iterator it = iterateKeys(); it.hasNext();) { - PointerKey key = it.next(); + for (PointerKey key : Iterator2Iterable.make(iterateKeys())) { if (!isTransitiveRoot(key) && !isImplicit(key) && !isUnified(key)) { PointsToSetVariable v = getPointsToSet(key); v.removeAll(); diff --git a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/PropagationGraph.java b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/PropagationGraph.java index 218266c3a..dcf9ac3f6 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/PropagationGraph.java +++ b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/PropagationGraph.java @@ -547,8 +547,7 @@ public class PropagationGraph implements IFixedPointSystem public int getPredNodeCount(INodeWithNumber N) { PointsToSetVariable v = (PointsToSetVariable) N; int result = 0; - for (Iterator eqs = getStatementsThatDef(v); eqs.hasNext();) { - AbstractStatement eq = eqs.next(); + for (AbstractStatement eq : Iterator2Iterable.make(getStatementsThatDef(v))) { if (useImplicitRepresentation(eq)) { result++; } else { @@ -604,8 +603,7 @@ public class PropagationGraph implements IFixedPointSystem @Override public int getSuccNodeCount(PointsToSetVariable v) { int result = 0; - for (Iterator eqs = getStatementsThatUse(v); eqs.hasNext();) { - AbstractStatement eq = eqs.next(); + for (AbstractStatement eq : Iterator2Iterable.make(getStatementsThatUse(v))) { IVariable lhs = eq.getLHS(); if (lhs != null) { result++; @@ -978,8 +976,7 @@ public class PropagationGraph implements IFixedPointSystem @Override public int getPredNodeCount(PointsToSetVariable v) { int result = 0; - for (Iterator eqs = getStatementsThatDef(v); eqs.hasNext();) { - AbstractStatement eq = eqs.next(); + for (AbstractStatement eq : Iterator2Iterable.make(getStatementsThatDef(v))) { if (isInteresting(eq)) { result++; } @@ -1035,8 +1032,7 @@ public class PropagationGraph implements IFixedPointSystem @Override public int getSuccNodeCount(PointsToSetVariable v) { int result = 0; - for (Iterator eqs = getStatementsThatUse(v); eqs.hasNext();) { - AbstractStatement eq = eqs.next(); + for (AbstractStatement eq : Iterator2Iterable.make(getStatementsThatUse(v))) { if (isInteresting(eq)) { result++; } @@ -1090,12 +1086,7 @@ public class PropagationGraph implements IFixedPointSystem } private int countImplicitEdges() { - int result = 0; - for (Iterator it = new GlobalImplicitIterator(); it.hasNext();) { - it.next(); - result++; - } - return result; + return IteratorUtil.count(new GlobalImplicitIterator()); } } diff --git a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/SSAPropagationCallGraphBuilder.java b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/SSAPropagationCallGraphBuilder.java index 2a6a3d771..67bb91541 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/SSAPropagationCallGraphBuilder.java +++ b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/SSAPropagationCallGraphBuilder.java @@ -77,6 +77,7 @@ import com.ibm.wala.util.CancelException; import com.ibm.wala.util.MonitorUtil; import com.ibm.wala.util.MonitorUtil.IProgressMonitor; import com.ibm.wala.util.collections.HashSetFactory; +import com.ibm.wala.util.collections.Iterator2Iterable; import com.ibm.wala.util.debug.Assertions; import com.ibm.wala.util.debug.UnimplementedError; import com.ibm.wala.util.intset.IntIterator; @@ -256,8 +257,8 @@ public abstract class SSAPropagationCallGraphBuilder extends PropagationCallGrap ConstraintVisitor v = makeVisitor(node); IRView ir = v.ir; - for (Iterator x = ir.getBlocks(); x.hasNext();) { - BasicBlock b = (BasicBlock) x.next(); + for (ISSABasicBlock sbb : Iterator2Iterable.make(ir.getBlocks())) { + BasicBlock b = (BasicBlock) sbb; addBlockInstructionConstraints(node, ir, b, v, monitor); if (wasChanged(node)) { return; @@ -300,20 +301,21 @@ public abstract class SSAPropagationCallGraphBuilder extends PropagationCallGrap private void addPhiConstraints(CGNode node, ControlFlowGraph controlFlowGraph, BasicBlock b, ConstraintVisitor v) { // visit each phi instruction in each successor block - for (Iterator sbs = controlFlowGraph.getSuccNodes(b); sbs.hasNext();) { - BasicBlock sb = (BasicBlock) sbs.next(); + for (ISSABasicBlock isb : Iterator2Iterable.make(controlFlowGraph.getSuccNodes(b))) { + BasicBlock sb = (BasicBlock) isb; if (!sb.hasPhi()) { continue; } int n = 0; - for (Iterator back = controlFlowGraph.getPredNodes(sb); back.hasNext(); n++) { - if (back.next() == b) { + for (IBasicBlock back : Iterator2Iterable.make(controlFlowGraph.getPredNodes(sb))) { + if (back == b) { break; } + ++n; } assert n < controlFlowGraph.getPredNodeCount(sb); - for (Iterator phis = sb.iteratePhis(); phis.hasNext();) { - SSAPhiInstruction phi = (SSAPhiInstruction) phis.next(); + for (SSAInstruction inst : Iterator2Iterable.make(sb.iteratePhis())) { + SSAPhiInstruction phi = (SSAPhiInstruction) inst; if (phi == null) { continue; } @@ -484,8 +486,8 @@ public abstract class SSAPropagationCallGraphBuilder extends PropagationCallGrap } ControlFlowGraph g = ir.getControlFlowGraph(); List result = new ArrayList<>(g.getPredNodeCount(bb)); - for (Iterator it = g.getPredNodes(bb); it.hasNext();) { - BasicBlock pred = (BasicBlock) it.next(); + for (ISSABasicBlock sbb : Iterator2Iterable.make(g.getPredNodes(bb))) { + BasicBlock pred = (BasicBlock) sbb; if (DEBUG) { System.err.println("pred: " + pred); } @@ -2039,8 +2041,7 @@ public abstract class SSAPropagationCallGraphBuilder extends PropagationCallGrap // todo: enhance this by solving a dead-code elimination // problem. InterestingVisitor v = makeInterestingVisitor(node, vn); - for (Iterator it = du.getUses(v.vn); it.hasNext();) { - SSAInstruction s = it.next(); + for (SSAInstruction s : Iterator2Iterable.make(du.getUses(v.vn))) { s.visit(v); if (v.bingo) { return false; @@ -2397,8 +2398,8 @@ public abstract class SSAPropagationCallGraphBuilder extends PropagationCallGrap Iterator exceptionTypes = ((ExceptionHandlerBasicBlock) ir.getControlFlowGraph().getNode( instruction.getBasicBlockNumber())).getCaughtExceptionTypes(); HashSet types = HashSetFactory.make(10); - for (; exceptionTypes.hasNext();) { - IClass c = ir.getMethod().getClassHierarchy().lookupClass(exceptionTypes.next()); + for (TypeReference tr : Iterator2Iterable.make(exceptionTypes)) { + IClass c = ir.getMethod().getClassHierarchy().lookupClass(tr); if (c != null) { types.add(c); } diff --git a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/cfa/ZeroXInstanceKeys.java b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/cfa/ZeroXInstanceKeys.java index 9ddaa8b64..db7b94257 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/cfa/ZeroXInstanceKeys.java +++ b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/cfa/ZeroXInstanceKeys.java @@ -12,7 +12,6 @@ package com.ibm.wala.ipa.callgraph.propagation.cfa; import java.util.Collections; import java.util.HashSet; -import java.util.Iterator; import java.util.Map; import java.util.Set; @@ -35,6 +34,7 @@ import com.ibm.wala.types.TypeName; import com.ibm.wala.types.TypeReference; import com.ibm.wala.util.collections.HashMapFactory; import com.ibm.wala.util.collections.HashSetFactory; +import com.ibm.wala.util.collections.Iterator2Iterable; /** * Flexible class to create {@link InstanceKey}s depending on various policies ranging from class-based (i.e. 0-CFA) to @@ -231,8 +231,7 @@ public class ZeroXInstanceKeys implements InstanceKeyFactory { */ private Map countAllocsByType(CGNode node) { Map count = HashMapFactory.make(); - for (Iterator it = contextInterpreter.iterateNewSites(node); it.hasNext();) { - NewSiteReference n = it.next(); + for (NewSiteReference n : Iterator2Iterable.make(contextInterpreter.iterateNewSites(node))) { IClass alloc = cha.lookupClass(n.getDeclaredType()); if (alloc != null) { Integer old = count.get(alloc); 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 3ff8eae25..5c3527543 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 @@ -11,7 +11,6 @@ package com.ibm.wala.ipa.callgraph.propagation.rta; import java.util.HashSet; -import java.util.Iterator; import java.util.Set; import com.ibm.wala.analysis.reflection.ReflectionContextInterpreter; @@ -54,6 +53,7 @@ import com.ibm.wala.types.TypeReference; import com.ibm.wala.util.CancelException; import com.ibm.wala.util.MonitorUtil.IProgressMonitor; import com.ibm.wala.util.collections.HashSetFactory; +import com.ibm.wala.util.collections.Iterator2Iterable; /** * Abstract superclass of various RTA flavors @@ -136,8 +136,7 @@ public abstract class AbstractRTABuilder extends PropagationCallGraphBuilder { * Add a constraint for each allocate */ private void addNewConstraints(CGNode node) { - for (Iterator it = getRTAContextInterpreter().iterateNewSites(node); it.hasNext();) { - NewSiteReference n = it.next(); + for (NewSiteReference n : Iterator2Iterable.make(getRTAContextInterpreter().iterateNewSites(node))) { visitNew(node, n); } } @@ -146,8 +145,7 @@ public abstract class AbstractRTABuilder extends PropagationCallGraphBuilder { * Add a constraint for each invoke */ private void addCallConstraints(CGNode node) { - for (Iterator it = getRTAContextInterpreter().iterateCallSites(node); it.hasNext();) { - CallSiteReference c = it.next(); + for (CallSiteReference c : Iterator2Iterable.make(getRTAContextInterpreter().iterateCallSites(node))) { visitInvoke(node, c); } } @@ -156,12 +154,10 @@ public abstract class AbstractRTABuilder extends PropagationCallGraphBuilder { * Handle accesses to static fields */ private void addFieldConstraints(CGNode node) { - for (Iterator it = getRTAContextInterpreter().iterateFieldsRead(node); it.hasNext();) { - FieldReference f = it.next(); + for (FieldReference f : Iterator2Iterable.make(getRTAContextInterpreter().iterateFieldsRead(node))) { processFieldAccess(f); } - for (Iterator it = getRTAContextInterpreter().iterateFieldsWritten(node); it.hasNext();) { - FieldReference f = it.next(); + for (FieldReference f : Iterator2Iterable.make(getRTAContextInterpreter().iterateFieldsWritten(node))) { processFieldAccess(f); } } diff --git a/com.ibm.wala.core/src/com/ibm/wala/ipa/cfg/AbstractInterproceduralCFG.java b/com.ibm.wala.core/src/com/ibm/wala/ipa/cfg/AbstractInterproceduralCFG.java index 371e0eb9d..f4ea638e7 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/ipa/cfg/AbstractInterproceduralCFG.java +++ b/com.ibm.wala.core/src/com/ibm/wala/ipa/cfg/AbstractInterproceduralCFG.java @@ -25,6 +25,7 @@ import com.ibm.wala.ssa.SSAAbstractInvokeInstruction; import com.ibm.wala.ssa.SSAInstruction; import com.ibm.wala.util.collections.FilterIterator; import com.ibm.wala.util.collections.IndiscriminateFilter; +import com.ibm.wala.util.collections.Iterator2Iterable; import com.ibm.wala.util.collections.MapIterator; import com.ibm.wala.util.debug.Assertions; import com.ibm.wala.util.debug.UnimplementedError; @@ -182,8 +183,7 @@ public abstract class AbstractInterproceduralCFG imple System.err.println("nPred: " + cfg.getPredNodeCount(bb)); } - for (Iterator ps = cfg.getPredNodes(bb); ps.hasNext();) { - T pb = ps.next(); + for (T pb : Iterator2Iterable.make(cfg.getPredNodes(bb))) { if (DEBUG_LEVEL > 1) { System.err.println("Consider previous block: " + pb); } @@ -289,8 +289,7 @@ public abstract class AbstractInterproceduralCFG imple System.err.println("addInterproceduralEdgesForEntryAndExitBlocks " + n); } - for (Iterator callers = cg.getPredNodes(n); callers.hasNext();) { - CGNode caller = callers.next(); + for (CGNode caller : Iterator2Iterable.make(cg.getPredNodes(n))) { if (DEBUG_LEVEL > 1) { System.err.println("got caller " + caller); } @@ -331,8 +330,7 @@ public abstract class AbstractInterproceduralCFG imple BasicBlockInContext b2 = new BasicBlockInContext<>(n, entryBlock); g.addEdge(b1, b2); // also add edges from exit node to all return nodes (successor of call bb) - for (Iterator succIter = ccfg.getSuccNodes(callerBB); succIter.hasNext();) { - T returnBB = succIter.next(); + for (T returnBB : Iterator2Iterable.make(ccfg.getSuccNodes(callerBB))) { BasicBlockInContext b3 = new BasicBlockInContext<>(n, exitBlock); BasicBlockInContext b4 = new BasicBlockInContext<>(caller, returnBB); addNodeForBasicBlockIfNeeded(b4); @@ -882,8 +880,7 @@ public abstract class AbstractInterproceduralCFG imple throw new IllegalArgumentException("bb == null"); } ControlFlowGraph cfg = getCFG(bb); - for (Iterator it = cfg.getPredNodes(bb.getDelegate()); it.hasNext();) { - T b = it.next(); + for (T b : Iterator2Iterable.make(cfg.getPredNodes(bb.getDelegate()))) { if (hasCall(new BasicBlockInContext<>(bb.getNode(), b))) { return true; } diff --git a/com.ibm.wala.core/src/com/ibm/wala/ipa/cfg/PrunedCFG.java b/com.ibm.wala.core/src/com/ibm/wala/ipa/cfg/PrunedCFG.java index 3195f34c0..f4192913f 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/ipa/cfg/PrunedCFG.java +++ b/com.ibm.wala.core/src/com/ibm/wala/ipa/cfg/PrunedCFG.java @@ -23,6 +23,7 @@ import com.ibm.wala.cfg.IBasicBlock; import com.ibm.wala.classLoader.IMethod; import com.ibm.wala.util.collections.FilterIterator; import com.ibm.wala.util.collections.Iterator2Collection; +import com.ibm.wala.util.collections.Iterator2Iterable; import com.ibm.wala.util.graph.AbstractNumberedGraph; import com.ibm.wala.util.graph.Graph; import com.ibm.wala.util.graph.NumberedEdgeManager; @@ -96,8 +97,8 @@ public class PrunedCFG> extends AbstractNumberedGrap @Override public IntSet getSuccNodeNumbers(T N) { MutableIntSet bits = IntSetUtil.make(); - for (Iterator EE = getSuccNodes(N); EE.hasNext();) { - bits.add(EE.next().getNumber()); + for (T EE : Iterator2Iterable.make(getSuccNodes(N))) { + bits.add(EE.getNumber()); } return bits; @@ -116,8 +117,8 @@ public class PrunedCFG> extends AbstractNumberedGrap @Override public IntSet getPredNodeNumbers(T N) { MutableIntSet bits = IntSetUtil.make(); - for (Iterator EE = getPredNodes(N); EE.hasNext();) { - bits.add(EE.next().getNumber()); + for (T EE : Iterator2Iterable.make(getPredNodes(N))) { + bits.add(EE.getNumber()); } return bits; @@ -125,8 +126,8 @@ public class PrunedCFG> extends AbstractNumberedGrap @Override public boolean hasEdge(T src, T dst) { - for (Iterator EE = getSuccNodes(src); EE.hasNext();) { - if (EE.next().equals(dst)) { + for (T EE : Iterator2Iterable.make(getSuccNodes(src))) { + if (EE.equals(dst)) { return true; } } @@ -279,8 +280,8 @@ public class PrunedCFG> extends AbstractNumberedGrap @Override public List getExceptionalSuccessors(final T N) { ArrayList result = new ArrayList<>(); - for (Iterator it = edges.getExceptionalSuccessors(N); it.hasNext();) { - result.add(it.next()); + for (T s : Iterator2Iterable.make(edges.getExceptionalSuccessors(N))) { + result.add(s); } return result; } @@ -350,10 +351,11 @@ public class PrunedCFG> extends AbstractNumberedGrap int i = 0; MutableIntSet valid = IntSetUtil.make(); - for (Iterator pbs = cfg.getPredNodes(bb); pbs.hasNext(); i++) { - if (nodes.containsNode(pbs.next())) { + for (T pb : Iterator2Iterable.make(cfg.getPredNodes(bb))) { + if (nodes.containsNode(pb)) { valid.add(i); } + ++i; } return valid; diff --git a/com.ibm.wala.core/src/com/ibm/wala/ipa/cha/ClassHierarchy.java b/com.ibm.wala.core/src/com/ibm/wala/ipa/cha/ClassHierarchy.java index 63a170bd3..8ed3fddf0 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/ipa/cha/ClassHierarchy.java +++ b/com.ibm.wala.core/src/com/ibm/wala/ipa/cha/ClassHierarchy.java @@ -40,6 +40,7 @@ import com.ibm.wala.util.MonitorUtil.IProgressMonitor; import com.ibm.wala.util.collections.HashMapFactory; import com.ibm.wala.util.collections.HashSetFactory; import com.ibm.wala.util.collections.Iterator2Collection; +import com.ibm.wala.util.collections.Iterator2Iterable; import com.ibm.wala.util.collections.MapIterator; import com.ibm.wala.util.collections.MapUtil; import com.ibm.wala.util.debug.Assertions; @@ -273,13 +274,12 @@ public class ClassHierarchy implements IClassHierarchy { System.err.println(("Add all classes from loader " + loader)); } Collection toRemove = HashSetFactory.make(); - for (Iterator it = loader.iterateAllClasses(); it.hasNext();) { + for (IClass klass : Iterator2Iterable.make(loader.iterateAllClasses())) { if (progressMonitor != null) { if (progressMonitor.isCanceled()) { throw new CancelCHAConstructionException(); } } - IClass klass = it.next(); boolean added = addClass(klass); if (!added) { toRemove.add(klass); @@ -606,9 +606,7 @@ public class ClassHierarchy implements IClassHierarchy { */ private Set computeOverriders(Node node, Selector selector) { HashSet result = HashSetFactory.make(3); - for (Iterator it = node.getChildren(); it.hasNext();) { - - Node child = it.next(); + for (Node child : Iterator2Iterable.make(node.getChildren())) { IMethod m = findMethod(child.getJavaClass(), selector); if (m != null) { result.add(m); @@ -640,8 +638,7 @@ public class ClassHierarchy implements IClassHierarchy { private void recursiveStringify(Node n, StringBuffer buffer) { buffer.append(n.toString()).append("\n"); - for (Iterator it = n.getChildren(); it.hasNext();) { - Node child = it.next(); + for (Node child : Iterator2Iterable.make(n.getChildren())) { recursiveStringify(child, buffer); } } @@ -1048,8 +1045,7 @@ public class ClassHierarchy implements IClassHierarchy { assert node != null : "null node for class " + T; HashSet result = HashSetFactory.make(3); result.add(T); - for (Iterator it = node.getChildren(); it.hasNext();) { - Node child = it.next(); + for (Node child : Iterator2Iterable.make(node.getChildren())) { result.addAll(computeSubClasses(child.klass.getReference())); } return result; 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 3c97f2732..231e75883 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 @@ -11,7 +11,6 @@ package com.ibm.wala.ipa.modref; import java.util.Collection; -import java.util.Iterator; import java.util.Map; import java.util.Set; @@ -33,6 +32,7 @@ import com.ibm.wala.ssa.SSAInstruction; import com.ibm.wala.ssa.SSANewInstruction; import com.ibm.wala.ssa.SSAPutInstruction; import com.ibm.wala.util.collections.HashSetFactory; +import com.ibm.wala.util.collections.Iterator2Iterable; import com.ibm.wala.util.intset.OrdinalSet; /** @@ -130,8 +130,8 @@ public class ModRef { SSAInstruction.Visitor v = makeModVisitor(n, result, pa, h); IR ir = n.getIR(); if (ir != null) { - for (Iterator it = ir.iterateNormalInstructions(); it.hasNext();) { - it.next().visit(v); + for (SSAInstruction inst : Iterator2Iterable.make(ir.iterateNormalInstructions())) { + inst.visit(v); assert ! result.contains(null); } } @@ -151,8 +151,7 @@ public class ModRef { SSAInstruction.Visitor v = makeRefVisitor(n, result, pa, h); IR ir = n.getIR(); if (ir != null) { - for (Iterator it = ir.iterateNormalInstructions(); it.hasNext();) { - SSAInstruction x = it.next(); + for (SSAInstruction x : Iterator2Iterable.make(ir.iterateNormalInstructions())) { x.visit(v); assert ! result.contains(null) : x; } diff --git a/com.ibm.wala.core/src/com/ibm/wala/ipa/modref/ModRefFieldAccess.java b/com.ibm.wala.core/src/com/ibm/wala/ipa/modref/ModRefFieldAccess.java index dab8be675..b25c69c74 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/ipa/modref/ModRefFieldAccess.java +++ b/com.ibm.wala.core/src/com/ibm/wala/ipa/modref/ModRefFieldAccess.java @@ -13,7 +13,6 @@ package com.ibm.wala.ipa.modref; import java.util.HashMap; import java.util.HashSet; -import java.util.Iterator; import java.util.LinkedList; import java.util.List; import java.util.Map; @@ -28,6 +27,7 @@ import com.ibm.wala.ssa.SSAGetInstruction; import com.ibm.wala.ssa.SSAInstruction; import com.ibm.wala.ssa.SSAPutInstruction; import com.ibm.wala.types.FieldReference; +import com.ibm.wala.util.collections.Iterator2Iterable; /** * Computes interprocedural field accesses for a given method. @@ -119,8 +119,7 @@ public final class ModRefFieldAccess { continue; } - for (Iterator it = ir.iterateNormalInstructions(); it.hasNext();) { - SSAInstruction instr = it.next(); + for (SSAInstruction instr : Iterator2Iterable.make(ir.iterateNormalInstructions())) { if (instr instanceof SSAGetInstruction) { SSAGetInstruction get = (SSAGetInstruction) instr; FieldReference fref = get.getDeclaredField(); @@ -165,8 +164,7 @@ public final class ModRefFieldAccess { final IR ir = node.getIR(); if (ir != null) { - for (Iterator it = ir.iterateNormalInstructions(); it.hasNext();) { - SSAInstruction instr = it.next(); + for (SSAInstruction instr : Iterator2Iterable.make(ir.iterateNormalInstructions())) { if (instr instanceof SSAGetInstruction) { SSAGetInstruction get = (SSAGetInstruction) instr; FieldReference fref = get.getDeclaredField(); @@ -197,8 +195,7 @@ public final class ModRefFieldAccess { } } - for (Iterator it = cg.getSuccNodes(node); it.hasNext();) { - CGNode n = it.next(); + for (CGNode n : Iterator2Iterable.make(cg.getSuccNodes(node))) { if (!done.contains(n)) { done.add(n); TwoMaps t = recAdd(n); 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 2f65c74e7..e4a9d7c05 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 @@ -286,8 +286,7 @@ public class PDG implements NumberedGraph { // any // control-dependent successors if (src != null) { - for (Iterator succ = cdg.getSuccNodes(bb); succ.hasNext();) { - ISSABasicBlock bb2 = succ.next(); + for (ISSABasicBlock bb2 : Iterator2Iterable.make(cdg.getSuccNodes(bb))) { for (SSAInstruction st : bb2) { if (st != null) { Statement dest = ssaInstruction2Statement(st, ir, instructionIndices); @@ -333,12 +332,10 @@ public class PDG implements NumberedGraph { */ if (!dOptions.equals(DataDependenceOptions.NONE)) { for (ISSABasicBlock bb : cdg) { - for (Iterator ps = bb.iteratePhis(); ps.hasNext();) { - SSAPhiInstruction phi = ps.next(); + for (SSAPhiInstruction phi : Iterator2Iterable.make(bb.iteratePhis())) { Statement phiSt = ssaInstruction2Statement(phi, ir, instructionIndices); int phiUseIndex = 0; - for (Iterator preds = controlFlowGraph.getPredNodes(bb); preds.hasNext();) { - ISSABasicBlock pb = preds.next(); + for (ISSABasicBlock pb : Iterator2Iterable.make(controlFlowGraph.getPredNodes(bb))) { int use = phi.getUse(phiUseIndex); if (use == AbstractIntStackMachine.TOP) { // the predecessor is part of some infeasible bytecode. we probably don't want slices to include such code, so ignore. @@ -358,8 +355,7 @@ public class PDG implements NumberedGraph { delegate.addEdge(pst, phiSt, Dependency.CONTROL_DEP); /** END Custom change: control deps */ } else { - for (Iterator cdps = cdg.getPredNodes(pb); cdps.hasNext();) { - ISSABasicBlock cpb = cdps.next(); + for (ISSABasicBlock cpb : Iterator2Iterable.make(cdg.getPredNodes(pb))) { /** BEGIN Custom change: control deps */ if (cpb.getLastInstructionIndex() < 0) { continue; @@ -451,8 +447,7 @@ public class PDG implements NumberedGraph { // statement for (int i = 0; i < statement.getNumberOfDefs(); i++) { int def = statement.getDef(i); - for (Iterator it2 = DU.getUses(def); it2.hasNext();) { - SSAInstruction use = it2.next(); + for (SSAInstruction use : Iterator2Iterable.make(DU.getUses(def))) { if (dOptions.isIgnoreBasePtrs()) { if (use instanceof SSANewInstruction) { // cut out array length parameters @@ -488,8 +483,7 @@ public class PDG implements NumberedGraph { } ValueNumberCarrier a = (ValueNumberCarrier) s; - for (Iterator it2 = DU.getUses(a.getValueNumber()); it2.hasNext();) { - SSAInstruction use = it2.next(); + for (SSAInstruction use : Iterator2Iterable.make(DU.getUses(a.getValueNumber()))) { if (dOptions.isIgnoreBasePtrs()) { if (use instanceof SSANewInstruction) { // cut out array length parameters @@ -952,8 +946,7 @@ public class PDG implements NumberedGraph { */ private void createSpecialStatements(IR ir) { // create a node for instructions which do not correspond to bytecode - for (Iterator it = ir.iterateAllInstructions(); it.hasNext();) { - SSAInstruction s = it.next(); + for (SSAInstruction s : Iterator2Iterable.make(ir.iterateAllInstructions())) { if (s instanceof SSAPhiInstruction) { delegate.addNode(new PhiStatement(node, (SSAPhiInstruction) s)); } else if (s instanceof SSAGetCaughtExceptionInstruction) { 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 a62dcdaa5..6e26135c2 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 @@ -35,6 +35,7 @@ import com.ibm.wala.util.collections.EmptyIterator; import com.ibm.wala.util.collections.HashMapFactory; import com.ibm.wala.util.collections.HashSetFactory; import com.ibm.wala.util.collections.Iterator2Collection; +import com.ibm.wala.util.collections.Iterator2Iterable; import com.ibm.wala.util.collections.IteratorUtil; import com.ibm.wala.util.debug.Assertions; import com.ibm.wala.util.graph.AbstractNumberedGraph; @@ -371,10 +372,8 @@ public class SDG extends AbstractNumberedGraph } // data dependence predecessors - for (Iterator it = cg.getPredNodes(N.getNode()); it.hasNext();) { - CGNode caller = it.next(); - for (Iterator it2 = cg.getPossibleSites(caller, N.getNode()); it2.hasNext();) { - CallSiteReference site = it2.next(); + for (CGNode caller : Iterator2Iterable.make(cg.getPredNodes(N.getNode()))) { + for (CallSiteReference site : Iterator2Iterable.make(cg.getPossibleSites(caller, N.getNode()))) { IR ir = caller.getIR(); IntSet indices = ir.getCallInstructionIndices(site); for (IntIterator ii = indices.intIterator(); ii.hasNext();) { @@ -402,10 +401,8 @@ public class SDG extends AbstractNumberedGraph Collection result = HashSetFactory.make(5); if (!dOptions.equals(DataDependenceOptions.NONE)) { // data dependence predecessors - for (Iterator it = cg.getPredNodes(N.getNode()); it.hasNext();) { - CGNode caller = it.next(); - for (Iterator it2 = cg.getPossibleSites(caller, N.getNode()); it2.hasNext();) { - CallSiteReference site = it2.next(); + for (CGNode caller : Iterator2Iterable.make(cg.getPredNodes(N.getNode()))) { + for (CallSiteReference site : Iterator2Iterable.make(cg.getPossibleSites(caller, N.getNode()))) { IR ir = caller.getIR(); IntSet indices = ir.getCallInstructionIndices(site); for (IntIterator ii = indices.intIterator(); ii.hasNext();) { @@ -427,10 +424,8 @@ public class SDG extends AbstractNumberedGraph case METHOD_ENTRY: Collection result = HashSetFactory.make(5); if (!cOptions.isIgnoreInterproc()) { - for (Iterator it = cg.getPredNodes(N.getNode()); it.hasNext();) { - CGNode caller = it.next(); - for (Iterator it2 = cg.getPossibleSites(caller, N.getNode()); it2.hasNext();) { - CallSiteReference site = it2.next(); + for (CGNode caller : Iterator2Iterable.make(cg.getPredNodes(N.getNode()))) { + for (CallSiteReference site : Iterator2Iterable.make(cg.getPossibleSites(caller, N.getNode()))) { IR ir = caller.getIR(); IntSet indices = ir.getCallInstructionIndices(site); for (IntIterator ii = indices.intIterator(); ii.hasNext();) { @@ -494,10 +489,8 @@ public class SDG extends AbstractNumberedGraph Collection result = HashSetFactory.make(5); if (!dOptions.equals(DataDependenceOptions.NONE)) { // data dependence predecessors - for (Iterator it = cg.getPredNodes(N.getNode()); it.hasNext();) { - CGNode caller = it.next(); - for (Iterator it2 = cg.getPossibleSites(caller, N.getNode()); it2.hasNext();) { - CallSiteReference site = it2.next(); + for (CGNode caller : Iterator2Iterable.make(cg.getPredNodes(N.getNode()))) { + for (CallSiteReference site : Iterator2Iterable.make(cg.getPossibleSites(caller, N.getNode()))) { IR ir = caller.getIR(); IntSet indices = ir.getCallInstructionIndices(site); for (IntIterator ii = indices.intIterator(); ii.hasNext();) { @@ -515,10 +508,8 @@ public class SDG extends AbstractNumberedGraph Collection result = HashSetFactory.make(5); if (!dOptions.equals(DataDependenceOptions.NONE)) { // data dependence predecessors - for (Iterator it = cg.getPredNodes(N.getNode()); it.hasNext();) { - CGNode caller = it.next(); - for (Iterator it2 = cg.getPossibleSites(caller, N.getNode()); it2.hasNext();) { - CallSiteReference site = it2.next(); + for (CGNode caller : Iterator2Iterable.make(cg.getPredNodes(N.getNode()))) { + for (CallSiteReference site : Iterator2Iterable.make(cg.getPossibleSites(caller, N.getNode()))) { IR ir = caller.getIR(); IntSet indices = ir.getCallInstructionIndices(site); for (IntIterator ii = indices.intIterator(); ii.hasNext();) { @@ -537,10 +528,8 @@ public class SDG extends AbstractNumberedGraph Collection result = HashSetFactory.make(5); if (!dOptions.equals(DataDependenceOptions.NONE)) { // data dependence predecessors - for (Iterator it = cg.getPredNodes(N.getNode()); it.hasNext();) { - CGNode caller = it.next(); - for (Iterator it2 = cg.getPossibleSites(caller, N.getNode()); it2.hasNext();) { - CallSiteReference site = it2.next(); + for (CGNode caller : Iterator2Iterable.make(cg.getPredNodes(N.getNode()))) { + for (CallSiteReference site : Iterator2Iterable.make(cg.getPossibleSites(caller, N.getNode()))) { IR ir = caller.getIR(); IntSet indices = ir.getCallInstructionIndices(site); for (IntIterator ii = indices.intIterator(); ii.hasNext();) { @@ -766,8 +755,7 @@ public class SDG extends AbstractNumberedGraph public IntSet getPredNodeNumbers(Statement node) { // TODO: optimize me. MutableSparseIntSet result = MutableSparseIntSet.makeEmpty(); - for (Iterator it = getPredNodes(node); it.hasNext();) { - Statement s = it.next(); + for (Statement s : Iterator2Iterable.make(getPredNodes(node))) { result.add(getNumber(s)); } return result; @@ -777,8 +765,7 @@ public class SDG extends AbstractNumberedGraph public IntSet getSuccNodeNumbers(Statement node) { // TODO: optimize me. MutableSparseIntSet result = MutableSparseIntSet.makeEmpty(); - for (Iterator it = getSuccNodes(node); it.hasNext();) { - Statement s = it.next(); + for (Statement s : Iterator2Iterable.make(getSuccNodes(node))) { result.add(getNumber(s)); } return result; diff --git a/com.ibm.wala.core/src/com/ibm/wala/ssa/DefUse.java b/com.ibm.wala.core/src/com/ibm/wala/ssa/DefUse.java index 959e4f8c3..330b79eba 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/ssa/DefUse.java +++ b/com.ibm.wala.core/src/com/ibm/wala/ssa/DefUse.java @@ -14,6 +14,7 @@ import java.util.ArrayList; import java.util.Iterator; import com.ibm.wala.util.collections.EmptyIterator; +import com.ibm.wala.util.collections.Iterator2Iterable; import com.ibm.wala.util.debug.Assertions; import com.ibm.wala.util.intset.IntIterator; import com.ibm.wala.util.intset.IntSet; @@ -99,8 +100,8 @@ public class DefUse { * Initialize the allInstructions field with every {@link SSAInstruction} in the ir. */ protected void initAllInstructions() { - for (Iterator it = ir.iterateAllInstructions(); it.hasNext();) { - allInstructions.add(it.next()); + for (SSAInstruction inst : Iterator2Iterable.make(ir.iterateAllInstructions())) { + allInstructions.add(inst); } } diff --git a/com.ibm.wala.core/src/com/ibm/wala/ssa/IR.java b/com.ibm.wala.core/src/com/ibm/wala/ssa/IR.java index 9434faa49..ca1180b21 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/ssa/IR.java +++ b/com.ibm.wala.core/src/com/ibm/wala/ssa/IR.java @@ -26,6 +26,7 @@ import com.ibm.wala.types.TypeReference; import com.ibm.wala.util.collections.CompoundIterator; import com.ibm.wala.util.collections.HashMapFactory; import com.ibm.wala.util.collections.HashSetFactory; +import com.ibm.wala.util.collections.Iterator2Iterable; import com.ibm.wala.util.debug.Assertions; import com.ibm.wala.util.intset.BasicNaturalRelation; import com.ibm.wala.util.intset.IntIterator; @@ -167,8 +168,7 @@ public abstract class IR implements IRView { result.append(")"); } result.append("\n"); - for (Iterator it = bb.iteratePhis(); it.hasNext();) { - SSAPhiInstruction phi = it.next(); + for (SSAPhiInstruction phi : Iterator2Iterable.make(bb.iteratePhis())) { if (phi != null) { result.append(" " + phi.toString(symbolTable)).append("\n"); } @@ -234,8 +234,7 @@ public abstract class IR implements IRView { } } } - for (Iterator it = bb.iteratePis(); it.hasNext();) { - SSAPiInstruction pi = it.next(); + for (SSAPiInstruction pi : Iterator2Iterable.make(bb.iteratePis())) { if (pi != null) { result.append(" " + pi.toString(symbolTable)).append("\n"); } @@ -464,8 +463,8 @@ public abstract class IR implements IRView { * visit each normal (non-phi, non-pi, non-catch) instruction in this IR */ public void visitNormalInstructions(SSAInstruction.Visitor v) { - for (Iterator i = iterateNormalInstructions(); i.hasNext();) { - i.next().visit(v); + for (SSAInstruction inst : Iterator2Iterable.make(iterateNormalInstructions())) { + inst.visit(v); } } @@ -473,8 +472,8 @@ public abstract class IR implements IRView { * visit each instruction in this IR */ public void visitAllInstructions(SSAInstruction.Visitor v) { - for (Iterator i = iterateAllInstructions(); i.hasNext();) { - i.next().visit(v); + for (SSAInstruction inst : Iterator2Iterable.make(iterateAllInstructions())) { + inst.visit(v); } } diff --git a/com.ibm.wala.core/src/com/ibm/wala/ssa/SSACFG.java b/com.ibm.wala.core/src/com/ibm/wala/ssa/SSACFG.java index 783402420..20110fd3f 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/ssa/SSACFG.java +++ b/com.ibm.wala.core/src/com/ibm/wala/ssa/SSACFG.java @@ -34,6 +34,7 @@ import com.ibm.wala.types.TypeReference; import com.ibm.wala.util.collections.EmptyIterator; import com.ibm.wala.util.collections.HashMapFactory; import com.ibm.wala.util.collections.Iterator2Collection; +import com.ibm.wala.util.collections.Iterator2Iterable; import com.ibm.wala.util.collections.MapIterator; import com.ibm.wala.util.debug.Assertions; import com.ibm.wala.util.debug.UnimplementedError; @@ -509,8 +510,8 @@ public class SSACFG implements ControlFlowGraph, compressPhis(); ArrayList result = new ArrayList<>(); - for (Iterator it = iteratePhis(); it.hasNext();) { - result.add(it.next()); + for (SSAInstruction inst : Iterator2Iterable.make(iteratePhis())) { + result.add(inst); } for (int i = getFirstInstructionIndex(); i <= getLastInstructionIndex(); i++) { @@ -520,8 +521,8 @@ public class SSACFG implements ControlFlowGraph, } } - for (Iterator it = iteratePis(); it.hasNext();) { - result.add(it.next()); + for (SSAInstruction inst : Iterator2Iterable.make(iteratePis())) { + result.add(inst); } return result; } @@ -1013,10 +1014,9 @@ public class SSACFG implements ControlFlowGraph, throw new IllegalArgumentException("b is null"); } final IBasicBlock n = delegate.getNode(b.getNumber()); - final Iterator> i = delegate.getExceptionalSuccessors(n).iterator(); + final Collection> ss = delegate.getExceptionalSuccessors(n); final List c = new ArrayList<>(getSuccNodeCount(b)); - for (; i.hasNext();) { - final IBasicBlock s = i.next(); + for (final IBasicBlock s : ss) { c.add(basicBlocks[delegate.getNumber(s)]); } return c; @@ -1081,10 +1081,9 @@ public class SSACFG implements ControlFlowGraph, throw new IllegalArgumentException("b is null"); } IBasicBlock n = delegate.getNode(b.getNumber()); - final Iterator> i = delegate.getNormalSuccessors(n).iterator(); + final Collection> ss = delegate.getNormalSuccessors(n); Collection c = new ArrayList<>(getSuccNodeCount(b)); - for (; i.hasNext();) { - IBasicBlock s = i.next(); + for (IBasicBlock s : ss) { c.add(basicBlocks[delegate.getNumber(s)]); } return c; @@ -1099,10 +1098,9 @@ public class SSACFG implements ControlFlowGraph, throw new IllegalArgumentException("b is null"); } IBasicBlock n = delegate.getNode(b.getNumber()); - final Iterator> i = delegate.getNormalPredecessors(n).iterator(); + final Collection> ss = delegate.getNormalPredecessors(n); Collection c = new ArrayList<>(getPredNodeCount(b)); - for (; i.hasNext();) { - IBasicBlock s = i.next(); + for (IBasicBlock s : ss) { c.add(basicBlocks[delegate.getNumber(s)]); } return c; diff --git a/com.ibm.wala.core/src/com/ibm/wala/ssa/analysis/DeadAssignmentElimination.java b/com.ibm.wala.core/src/com/ibm/wala/ssa/analysis/DeadAssignmentElimination.java index 6160c637c..98cb3e811 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/ssa/analysis/DeadAssignmentElimination.java +++ b/com.ibm.wala.core/src/com/ibm/wala/ssa/analysis/DeadAssignmentElimination.java @@ -11,7 +11,6 @@ package com.ibm.wala.ssa.analysis; import java.util.HashSet; -import java.util.Iterator; import java.util.Map; import java.util.Map.Entry; @@ -25,6 +24,7 @@ import com.ibm.wala.util.CancelException; import com.ibm.wala.util.CancelRuntimeException; import com.ibm.wala.util.collections.HashMapFactory; import com.ibm.wala.util.collections.HashSetFactory; +import com.ibm.wala.util.collections.Iterator2Iterable; /** * Eliminate dead assignments (phis) from an SSA IR. @@ -65,8 +65,7 @@ public class DeadAssignmentElimination { } if (b.hasPhi()) { HashSet toRemove = HashSetFactory.make(5); - for (Iterator it = b.iteratePhis(); it.hasNext();) { - SSAPhiInstruction phi = it.next(); + for (SSAPhiInstruction phi : Iterator2Iterable.make(b.iteratePhis())) { if (phi != null) { int def = phi.getDef(); if (solution.isDead(def)) { @@ -103,8 +102,8 @@ public class DeadAssignmentElimination { */ DeadValueSystem(IR ir, DefUse DU) { // create a variable for each potentially dead phi instruction. - for (Iterator it = ir.iteratePhis(); it.hasNext();) { - SSAPhiInstruction phi = (SSAPhiInstruction) it.next(); + for (SSAInstruction inst : Iterator2Iterable.make(ir.iteratePhis())) { + SSAPhiInstruction phi = (SSAPhiInstruction) inst; if (phi == null) { continue; } @@ -114,8 +113,7 @@ public class DeadAssignmentElimination { trivialDead.add(new Integer(def)); } else { boolean maybeDead = true; - for (Iterator uses = DU.getUses(def); uses.hasNext();) { - SSAInstruction u = uses.next(); + for (SSAInstruction u : Iterator2Iterable.make(DU.getUses(def))) { if (!(u instanceof SSAPhiInstruction)) { // certainly not dead maybeDead = false; @@ -134,8 +132,8 @@ public class DeadAssignmentElimination { for (Entry E : vars.entrySet()) { Integer def = E.getKey(); BooleanVariable B = E.getValue(); - for (Iterator uses = DU.getUses(def.intValue()); uses.hasNext();) { - SSAPhiInstruction u = (SSAPhiInstruction) uses.next(); + for (SSAInstruction use : Iterator2Iterable.make(DU.getUses(def.intValue()))) { + SSAPhiInstruction u = (SSAPhiInstruction) use; Integer ud = new Integer(u.getDef()); if (trivialDead.contains(ud)) { // do nothing ... u will not keep def live diff --git a/com.ibm.wala.core/src/com/ibm/wala/ssa/analysis/ExplodedControlFlowGraph.java b/com.ibm.wala.core/src/com/ibm/wala/ssa/analysis/ExplodedControlFlowGraph.java index a4a1bc699..69c2c82e1 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/ssa/analysis/ExplodedControlFlowGraph.java +++ b/com.ibm.wala.core/src/com/ibm/wala/ssa/analysis/ExplodedControlFlowGraph.java @@ -30,6 +30,7 @@ import com.ibm.wala.types.TypeReference; import com.ibm.wala.util.collections.EmptyIterator; import com.ibm.wala.util.collections.HashSetFactory; import com.ibm.wala.util.collections.Iterator2Collection; +import com.ibm.wala.util.collections.Iterator2Iterable; import com.ibm.wala.util.collections.NonNullSingletonIterator; import com.ibm.wala.util.collections.SimpleVector; import com.ibm.wala.util.debug.Assertions; @@ -313,8 +314,7 @@ public class ExplodedControlFlowGraph implements ControlFlowGraph it = ir.getControlFlowGraph().getPredNodes(original); it.hasNext();) { - ISSABasicBlock s = it.next(); + for (ISSABasicBlock s : Iterator2Iterable.make(ir.getControlFlowGraph().getPredNodes(original))) { if (s.isEntryBlock()) { // it's possible for an entry block to have instructions; in this case, add // the exploded basic block for the last instruction in the entry block @@ -356,8 +356,7 @@ public class ExplodedControlFlowGraph implements ControlFlowGraph result = new ArrayList<>(); - for (Iterator it = ir.getControlFlowGraph().getSuccNodes(eb.original); it.hasNext();) { - ISSABasicBlock s = it.next(); + for (ISSABasicBlock s : Iterator2Iterable.make(ir.getControlFlowGraph().getSuccNodes(eb.original))) { if (s.equals(ir.getControlFlowGraph().exit())) { result.add(exit()); } else { @@ -379,8 +378,7 @@ public class ExplodedControlFlowGraph implements ControlFlowGraph it = getSuccNodes(src); it.hasNext();) { - IExplodedBasicBlock succ = it.next(); + for (IExplodedBasicBlock succ : Iterator2Iterable.make(getSuccNodes(src))) { if (succ == dst) { return true; } @@ -443,8 +441,8 @@ public class ExplodedControlFlowGraph implements ControlFlowGraph it = getPredNodes(node); it.hasNext();) { - result.add(getNumber(it.next())); + for (IExplodedBasicBlock ebb : Iterator2Iterable.make(getPredNodes(node))) { + result.add(getNumber(ebb)); } return result; } diff --git a/com.ibm.wala.core/src/com/ibm/wala/viz/PDFViewUtil.java b/com.ibm.wala.core/src/com/ibm/wala/viz/PDFViewUtil.java index 7463080e1..0b261b59e 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/viz/PDFViewUtil.java +++ b/com.ibm.wala.core/src/com/ibm/wala/viz/PDFViewUtil.java @@ -11,8 +11,6 @@ package com.ibm.wala.viz; import java.util.HashMap; -import java.util.Iterator; - import com.ibm.wala.cfg.CFGSanitizer; import com.ibm.wala.ipa.cha.IClassHierarchy; import com.ibm.wala.ssa.IR; @@ -26,6 +24,7 @@ import com.ibm.wala.ssa.SSAPhiInstruction; import com.ibm.wala.ssa.SSAPiInstruction; import com.ibm.wala.util.WalaException; import com.ibm.wala.util.collections.HashMapFactory; +import com.ibm.wala.util.collections.Iterator2Iterable; import com.ibm.wala.util.graph.Graph; import com.ibm.wala.util.strings.StringStuff; @@ -120,8 +119,7 @@ public class PDFViewUtil { result.append(""); } result.append("\\n"); - for (Iterator it = bb.iteratePhis(); it.hasNext();) { - SSAPhiInstruction phi = it.next(); + for (SSAPhiInstruction phi : Iterator2Iterable.make(bb.iteratePhis())) { if (phi != null) { result.append(" " + phi.toString(ir.getSymbolTable())).append("\\l"); } @@ -144,8 +142,7 @@ public class PDFViewUtil { result.append("\\l"); } } - for (Iterator it = bb.iteratePis(); it.hasNext();) { - SSAPiInstruction pi = it.next(); + for (SSAPiInstruction pi : Iterator2Iterable.make(bb.iteratePis())) { if (pi != null) { result.append(" " + pi.toString(ir.getSymbolTable())).append("\\l"); } diff --git a/com.ibm.wala.core/src/com/ibm/wala/viz/viewer/CgPanel.java b/com.ibm.wala.core/src/com/ibm/wala/viz/viewer/CgPanel.java index 6c845c27b..c503fca47 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/viz/viewer/CgPanel.java +++ b/com.ibm.wala.core/src/com/ibm/wala/viz/viewer/CgPanel.java @@ -11,7 +11,6 @@ package com.ibm.wala.viz.viewer; import java.util.ArrayList; -import java.util.Iterator; import java.util.List; import java.util.Set; @@ -29,6 +28,7 @@ import com.ibm.wala.classLoader.CallSiteReference; import com.ibm.wala.ipa.callgraph.CGNode; import com.ibm.wala.ipa.callgraph.CallGraph; import com.ibm.wala.ssa.IR; +import com.ibm.wala.util.collections.Iterator2Iterable; public class CgPanel extends JSplitPane{ @@ -111,8 +111,7 @@ public class CgPanel extends JSplitPane{ Object userObject = treeNode.getUserObject(); if (userObject instanceof CGNode) { CGNode cgNode = (CGNode) userObject; - for (Iterator iter = cgNode.iterateCallSites(); iter.hasNext();) { - CallSiteReference csr = iter.next(); + for (CallSiteReference csr : Iterator2Iterable.make(cgNode.iterateCallSites())) { newChilds.add(new DefaultMutableTreeNode(csr)); } } else { diff --git a/com.ibm.wala.dalvik.test/source/com/ibm/wala/dalvik/test/callGraph/DroidBenchCGTest.java b/com.ibm.wala.dalvik.test/source/com/ibm/wala/dalvik/test/callGraph/DroidBenchCGTest.java index 211103c7a..3f76514c6 100644 --- a/com.ibm.wala.dalvik.test/source/com/ibm/wala/dalvik/test/callGraph/DroidBenchCGTest.java +++ b/com.ibm.wala.dalvik.test/source/com/ibm/wala/dalvik/test/callGraph/DroidBenchCGTest.java @@ -16,7 +16,6 @@ import java.io.File; import java.net.URI; import java.util.Collection; import java.util.Collections; -import java.util.Iterator; import java.util.LinkedList; import java.util.List; import java.util.Map; @@ -37,6 +36,7 @@ import com.ibm.wala.types.TypeReference; import com.ibm.wala.util.NullProgressMonitor; import com.ibm.wala.util.collections.HashMapFactory; import com.ibm.wala.util.collections.HashSetFactory; +import com.ibm.wala.util.collections.Iterator2Iterable; import com.ibm.wala.util.collections.Pair; import com.ibm.wala.util.io.FileUtil; @@ -80,10 +80,8 @@ public abstract class DroidBenchCGTest extends DalvikCallGraphTestBase { public static Set assertUserCodeReachable(CallGraph cg, Set uncalled) { Set result = HashSetFactory.make(); - for(Iterator clss = cg.getClassHierarchy().getLoader(ClassLoaderReference.Application).iterateAllClasses(); - clss.hasNext(); ) + for(IClass cls : Iterator2Iterable.make(cg.getClassHierarchy().getLoader(ClassLoaderReference.Application).iterateAllClasses())) { - IClass cls = clss.next(); if (cls.isInterface()) { continue; } diff --git a/com.ibm.wala.dalvik/src/com/ibm/wala/dalvik/classLoader/WDexClassLoaderImpl.java b/com.ibm.wala.dalvik/src/com/ibm/wala/dalvik/classLoader/WDexClassLoaderImpl.java index 4ef09045c..28a2efc60 100644 --- a/com.ibm.wala.dalvik/src/com/ibm/wala/dalvik/classLoader/WDexClassLoaderImpl.java +++ b/com.ibm.wala.dalvik/src/com/ibm/wala/dalvik/classLoader/WDexClassLoaderImpl.java @@ -50,7 +50,6 @@ package com.ibm.wala.dalvik.classLoader; import java.io.IOException; import java.util.Collection; import java.util.HashSet; -import java.util.Iterator; import java.util.List; import java.util.Set; @@ -63,6 +62,7 @@ import com.ibm.wala.ipa.cha.IClassHierarchy; import com.ibm.wala.types.ClassLoaderReference; import com.ibm.wala.types.TypeName; import com.ibm.wala.util.collections.HashSetFactory; +import com.ibm.wala.util.collections.Iterator2Iterable; import com.ibm.wala.util.config.SetOfClasses; import com.ibm.wala.util.warnings.Warning; import com.ibm.wala.util.warnings.Warnings; @@ -133,8 +133,7 @@ public class WDexClassLoaderImpl extends ClassLoaderImpl { private static Set getDexFiles(Module M) { HashSet result = HashSetFactory.make(); - for (Iterator it = M.getEntries(); it.hasNext();) { - ModuleEntry entry = it.next(); + for (ModuleEntry entry : Iterator2Iterable.make(M.getEntries())) { if (entry instanceof DexModuleEntry) { result.add(entry); } diff --git a/com.ibm.wala.dalvik/src/com/ibm/wala/dalvik/ssa/AbstractIntRegisterMachine.java b/com.ibm.wala.dalvik/src/com/ibm/wala/dalvik/ssa/AbstractIntRegisterMachine.java index 331e5f0b3..63b5cc88d 100644 --- a/com.ibm.wala.dalvik/src/com/ibm/wala/dalvik/ssa/AbstractIntRegisterMachine.java +++ b/com.ibm.wala.dalvik/src/com/ibm/wala/dalvik/ssa/AbstractIntRegisterMachine.java @@ -11,8 +11,6 @@ *******************************************************************************/ package com.ibm.wala.dalvik.ssa; -import java.util.Iterator; - import com.ibm.wala.dalvik.classLoader.DexCFG; import com.ibm.wala.dalvik.classLoader.DexCFG.BasicBlock; import com.ibm.wala.dalvik.classLoader.DexConstants; @@ -59,6 +57,7 @@ import com.ibm.wala.shrikeBT.SwitchInstruction; import com.ibm.wala.shrikeBT.ThrowInstruction; import com.ibm.wala.util.CancelException; import com.ibm.wala.util.CancelRuntimeException; +import com.ibm.wala.util.collections.Iterator2Iterable; import com.ibm.wala.util.debug.UnimplementedError; import com.ibm.wala.util.graph.INodeWithNumber; @@ -233,8 +232,8 @@ public abstract class AbstractIntRegisterMachine implements FixedPointConstants /* * Add only the entry variable to the work list. */ - for (Iterator it = getFixedPointSystem().getStatementsThatUse(entry); it.hasNext();) { - AbstractStatement s = (AbstractStatement) it.next(); + for (INodeWithNumber inn : Iterator2Iterable.make(getFixedPointSystem().getStatementsThatUse(entry))) { + AbstractStatement s = (AbstractStatement) inn; addToWorkList(s); } } diff --git a/com.ibm.wala.ide.jdt/source/com/ibm/wala/ide/AbstractJavaAnalysisAction.java b/com.ibm.wala.ide.jdt/source/com/ibm/wala/ide/AbstractJavaAnalysisAction.java index d35c62a6c..180c1263c 100644 --- a/com.ibm.wala.ide.jdt/source/com/ibm/wala/ide/AbstractJavaAnalysisAction.java +++ b/com.ibm.wala.ide.jdt/source/com/ibm/wala/ide/AbstractJavaAnalysisAction.java @@ -40,6 +40,7 @@ import com.ibm.wala.ide.util.JavaEclipseProjectPath; import com.ibm.wala.ipa.callgraph.AnalysisScope; import com.ibm.wala.types.ClassLoaderReference; import com.ibm.wala.util.collections.HashSetFactory; +import com.ibm.wala.util.collections.Iterator2Iterable; import com.ibm.wala.util.debug.Assertions; /** @@ -86,8 +87,7 @@ public abstract class AbstractJavaAnalysisAction implements IObjectActionDelegat @Override protected IStatus run(IProgressMonitor monitor) { - for (Iterator it = selection.iterator(); it.hasNext();) { - Object object = it.next(); + for (Object object : Iterator2Iterable.make((Iterator) selection.iterator())) { if (object instanceof IJavaElement) { IJavaElement e = (IJavaElement) object; IJavaProject jp = e.getJavaProject(); @@ -136,8 +136,7 @@ public abstract class AbstractJavaAnalysisAction implements IObjectActionDelegat protected Collection computeJavaProjects() { IStructuredSelection selection = (IStructuredSelection) currentSelection; Collection projects = HashSetFactory.make(); - for (Iterator it = selection.iterator(); it.hasNext();) { - Object object = it.next(); + for (Object object : Iterator2Iterable.make((Iterator) selection.iterator())) { if (object instanceof IJavaElement) { IJavaElement e = (IJavaElement) object; IJavaProject jp = e.getJavaProject(); diff --git a/com.ibm.wala.ide.jsdt/source/com/ibm/wala/ide/util/JsdtUtil.java b/com.ibm.wala.ide.jsdt/source/com/ibm/wala/ide/util/JsdtUtil.java index b4437c3a0..a0d648ad0 100644 --- a/com.ibm.wala.ide.jsdt/source/com/ibm/wala/ide/util/JsdtUtil.java +++ b/com.ibm.wala.ide.jsdt/source/com/ibm/wala/ide/util/JsdtUtil.java @@ -13,7 +13,6 @@ package com.ibm.wala.ide.util; import java.io.IOException; import java.net.URL; import java.util.Collections; -import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Set; @@ -55,6 +54,7 @@ import com.ibm.wala.ide.util.HeadlessUtil.EclipseCompiler; import com.ibm.wala.ide.util.HeadlessUtil.Parser; import com.ibm.wala.ipa.callgraph.AnalysisScope; import com.ibm.wala.util.collections.HashSetFactory; +import com.ibm.wala.util.collections.Iterator2Iterable; import com.ibm.wala.util.collections.Pair; import com.ibm.wala.util.graph.Graph; import com.ibm.wala.util.graph.impl.SlowSparseNumberedGraph; @@ -83,8 +83,8 @@ public class JsdtUtil { List modules = s.getModules(JavaScriptTypes.jsLoader); Set mes = HashSetFactory.make(); for(Module m : modules) { - for(Iterator mm = m.getEntries(); mm.hasNext(); ) { - mes.add(mm.next()); + for(ModuleEntry entry : Iterator2Iterable.make(m.getEntries())) { + mes.add(entry); } } return mes; diff --git a/com.ibm.wala.ide/src/com/ibm/wala/ide/ui/SWTTreeViewer.java b/com.ibm.wala.ide/src/com/ibm/wala/ide/ui/SWTTreeViewer.java index 4b25809c4..ebd279488 100644 --- a/com.ibm.wala.ide/src/com/ibm/wala/ide/ui/SWTTreeViewer.java +++ b/com.ibm.wala.ide/src/com/ibm/wala/ide/ui/SWTTreeViewer.java @@ -11,7 +11,6 @@ package com.ibm.wala.ide.ui; import java.util.Collection; -import java.util.Iterator; import java.util.LinkedList; import java.util.List; @@ -30,6 +29,7 @@ import org.eclipse.ui.PlatformUI; import com.ibm.wala.util.PlatformUtil; import com.ibm.wala.util.WalaException; +import com.ibm.wala.util.collections.Iterator2Iterable; import com.ibm.wala.util.debug.Assertions; import com.ibm.wala.util.graph.Graph; import com.ibm.wala.viz.NodeDecorator; @@ -236,8 +236,8 @@ public class SWTTreeViewer extends AbstractJFaceRunner { Object[] result = new Object[graph.getSuccNodeCount(parentElement)]; int i = 0; - for (Iterator it = graph.getSuccNodes(parentElement); it.hasNext();) { - result[i++] = it.next(); + for (Object o : Iterator2Iterable.make(graph.getSuccNodes(parentElement))) { + result[i++] = o; } return result; } 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 2249af203..b6e03457f 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 @@ -10,7 +10,6 @@ *******************************************************************************/ package com.ibm.wala.ide.ui; -import java.util.Iterator; import java.util.function.Predicate; import org.eclipse.jface.action.Action; @@ -25,6 +24,7 @@ import com.ibm.wala.ssa.SSAInstruction; import com.ibm.wala.ssa.SSAPhiInstruction; import com.ibm.wala.ssa.analysis.IExplodedBasicBlock; import com.ibm.wala.util.WalaException; +import com.ibm.wala.util.collections.Iterator2Iterable; import com.ibm.wala.util.debug.Assertions; import com.ibm.wala.util.graph.Graph; import com.ibm.wala.util.graph.GraphSlicer; @@ -117,8 +117,7 @@ public class ViewIFDSLocalAction extends Action { if (bb.getDelegate() instanceof IExplodedBasicBlock) { IExplodedBasicBlock delegate = (IExplodedBasicBlock) bb.getDelegate(); String s = delegate.getNumber() + " " + result.getResult(t) + "\\n" + stringify(delegate.getInstruction()); - for (Iterator phis = delegate.iteratePhis(); phis.hasNext();) { - SSAPhiInstruction phi = phis.next(); + for (SSAPhiInstruction phi : Iterator2Iterable.make(delegate.iteratePhis())) { s += " " + phi; } if (delegate.isCatchBlock()) { diff --git a/com.ibm.wala.scandroid/source/org/scandroid/util/AndroidAnalysisContext.java b/com.ibm.wala.scandroid/source/org/scandroid/util/AndroidAnalysisContext.java index 7aa8b48d0..9e1451748 100644 --- a/com.ibm.wala.scandroid/source/org/scandroid/util/AndroidAnalysisContext.java +++ b/com.ibm.wala.scandroid/source/org/scandroid/util/AndroidAnalysisContext.java @@ -124,8 +124,7 @@ public class AndroidAnalysisContext { /* if (options.classHierarchyWarnings()) { // log ClassHierarchy warnings - for (Iterator wi = Warnings.iterator(); wi.hasNext();) { - Warning w = wi.next(); + for (Warning w : Iterator2Iterable.make(Warnings.iterator())) { } } diff --git a/com.ibm.wala.scandroid/source/org/scandroid/util/CGAnalysisContext.java b/com.ibm.wala.scandroid/source/org/scandroid/util/CGAnalysisContext.java index eaa3cdffb..42c3a2332 100644 --- a/com.ibm.wala.scandroid/source/org/scandroid/util/CGAnalysisContext.java +++ b/com.ibm.wala.scandroid/source/org/scandroid/util/CGAnalysisContext.java @@ -157,8 +157,7 @@ public class CGAnalysisContext { /* if (analysisContext.getOptions().cgBuilderWarnings()) { // CallGraphBuilder construction warnings - for (Iterator wi = Warnings.iterator(); wi.hasNext();) { - Warning w = wi.next(); + for (Warning w : Iterator2Iterable.make(Warnings.iterator())) { } } @@ -189,8 +188,7 @@ public class CGAnalysisContext { /* // makeCallGraph warnings - for (Iterator wi = Warnings.iterator(); wi.hasNext();) { - Warning w = wi.next(); + for (Warning w : Iterator2Iterable.make(Warnings.iterator())) { } */ @@ -267,14 +265,12 @@ public class CGAnalysisContext { /* if (options.stdoutCG()) { - for (Iterator nodeI = cg.iterator(); nodeI.hasNext();) { - CGNode node = nodeI.next(); + for (CGNode node : Iterator2Iterable.make(cg.iterator())) { } } - for (Iterator nodeI = cg.iterator(); nodeI.hasNext();) { - CGNode node = nodeI.next(); + for (CGNode node : Iterator2Iterable.make(cg.iterator())) { if (node.getMethod().isSynthetic()) { SSACFG ssaCFG = node.getIR().getControlFlowGraph(); int totalBlocks = ssaCFG.getNumberOfNodes(); diff --git a/com.ibm.wala.scandroid/source/org/scandroid/util/DexDotUtil.java b/com.ibm.wala.scandroid/source/org/scandroid/util/DexDotUtil.java index 2e8aa81f6..21f4c2f9c 100644 --- a/com.ibm.wala.scandroid/source/org/scandroid/util/DexDotUtil.java +++ b/com.ibm.wala.scandroid/source/org/scandroid/util/DexDotUtil.java @@ -17,10 +17,9 @@ import java.io.File; import java.io.FileWriter; import java.io.IOException; import java.util.Collection; -import java.util.Iterator; - import com.ibm.wala.util.WalaException; import com.ibm.wala.util.collections.Iterator2Collection; +import com.ibm.wala.util.collections.Iterator2Iterable; import com.ibm.wala.util.debug.Assertions; import com.ibm.wala.util.graph.Graph; import com.ibm.wala.viz.DotUtil; @@ -210,8 +209,7 @@ public class DexDotUtil extends DotUtil { outputNodes(labels, result, dotNodes); for (T n : g) { - for (Iterator it2 = g.getSuccNodes(n); it2.hasNext();) { - T s = it2.next(); + for (T s : Iterator2Iterable.make(g.getSuccNodes(n))) { result.append(" "); result.append(getPort(n, labels)); result.append(" -> "); diff --git a/com.ibm.wala.util/src/com/ibm/wala/dataflow/graph/DataflowSolver.java b/com.ibm.wala.util/src/com/ibm/wala/dataflow/graph/DataflowSolver.java index 1314359ba..781aee69b 100644 --- a/com.ibm.wala.util/src/com/ibm/wala/dataflow/graph/DataflowSolver.java +++ b/com.ibm.wala.util/src/com/ibm/wala/dataflow/graph/DataflowSolver.java @@ -10,13 +10,13 @@ *******************************************************************************/ package com.ibm.wala.dataflow.graph; -import java.util.Iterator; import java.util.Map; import com.ibm.wala.fixedpoint.impl.DefaultFixedPointSolver; import com.ibm.wala.fixpoint.IVariable; import com.ibm.wala.fixpoint.UnaryOperator; import com.ibm.wala.util.collections.HashMapFactory; +import com.ibm.wala.util.collections.Iterator2Iterable; import com.ibm.wala.util.collections.ObjectArrayMapping; import com.ibm.wala.util.collections.Pair; import com.ibm.wala.util.graph.Graph; @@ -80,8 +80,7 @@ public abstract class DataflowSolver> extends DefaultF } if (functions.hasEdgeTransferFunctions()) { - for (Iterator it2 = G.getSuccNodes(N); it2.hasNext();) { - T S = it2.next(); + for (T S : Iterator2Iterable.make(G.getSuccNodes(N))) { v = makeEdgeVariable(N, S); edge2Var.put(Pair.make(N, S), v); } @@ -199,8 +198,8 @@ public abstract class DataflowSolver> extends DefaultF // todo: optimize further using unary operators when possible? V[] rhs = makeStmtRHS(nPred); int i = 0; - for (Iterator it2 = G.getPredNodes(node); it2.hasNext();) { - rhs[i++] = (functions.hasEdgeTransferFunctions()) ? getEdge(it2.next(), node) : getOut(it2.next()); + for (Object o : Iterator2Iterable.make(G.getPredNodes(node))) { + rhs[i++] = (functions.hasEdgeTransferFunctions()) ? getEdge(o, node) : getOut(o); } newStatement(getIn(node), meet, rhs, toWorkList, eager); } @@ -219,8 +218,7 @@ public abstract class DataflowSolver> extends DefaultF // add edge transfer operations, if requested if (functions.hasEdgeTransferFunctions()) { for (T node : G) { - for (Iterator it2 = G.getSuccNodes(node); it2.hasNext();) { - T succ = it2.next(); + for (T succ : Iterator2Iterable.make(G.getSuccNodes(node))) { UnaryOperator f = functions.getEdgeTransferFunction(node, succ); if (!f.isIdentity()) { newStatement(getEdge(node, succ), f, (functions.hasNodeTransferFunctions()) ? getOut(node) : getIn(node), toWorkList, @@ -246,8 +244,7 @@ public abstract class DataflowSolver> extends DefaultF if (functions.hasEdgeTransferFunctions()) { for (T node : G) { - for (Iterator it2 = G.getSuccNodes(node); it2.hasNext();) { - T succ = it2.next(); + for (T succ : Iterator2Iterable.make(G.getSuccNodes(node))) { UnaryOperator f = functions.getEdgeTransferFunction(node, succ); if (f.isIdentity()) { uf.union(getEdge(node, succ), (functions.hasNodeTransferFunctions()) ? getOut(node) : getIn(node)); diff --git a/com.ibm.wala.util/src/com/ibm/wala/fixedpoint/impl/AbstractFixedPointSolver.java b/com.ibm.wala.util/src/com/ibm/wala/fixedpoint/impl/AbstractFixedPointSolver.java index 099424661..e8eb8f71c 100644 --- a/com.ibm.wala.util/src/com/ibm/wala/fixedpoint/impl/AbstractFixedPointSolver.java +++ b/com.ibm.wala.util/src/com/ibm/wala/fixedpoint/impl/AbstractFixedPointSolver.java @@ -24,6 +24,7 @@ import com.ibm.wala.fixpoint.UnaryStatement; import com.ibm.wala.util.CancelException; import com.ibm.wala.util.MonitorUtil; import com.ibm.wala.util.MonitorUtil.IProgressMonitor; +import com.ibm.wala.util.collections.Iterator2Iterable; import com.ibm.wala.util.debug.VerboseAction; import com.ibm.wala.util.graph.INodeWithNumber; @@ -216,8 +217,8 @@ public abstract class AbstractFixedPointSolver> implement @Override public String toString() { StringBuffer result = new StringBuffer("Fixed Point System:\n"); - for (Iterator it = getStatements(); it.hasNext();) { - result.append(it.next()).append("\n"); + for (INodeWithNumber nwn : Iterator2Iterable.make(getStatements())) { + result.append(nwn).append("\n"); } return result.toString(); } @@ -239,8 +240,8 @@ public abstract class AbstractFixedPointSolver> implement * Add all to the work list. */ public void addAllStatementsToWorkList() { - for (Iterator i = getStatements(); i.hasNext();) { - AbstractStatement eq = (AbstractStatement) i.next(); + for (INodeWithNumber nwn : Iterator2Iterable.make(getStatements())) { + AbstractStatement eq = (AbstractStatement) nwn; addToWorkList(eq); } } @@ -252,8 +253,8 @@ public abstract class AbstractFixedPointSolver> implement * @param v the variable that has changed */ public void changedVariable(T v) { - for (Iterator it = getFixedPointSystem().getStatementsThatUse(v); it.hasNext();) { - AbstractStatement s = (AbstractStatement) it.next(); + for (INodeWithNumber nwn : Iterator2Iterable.make(getFixedPointSystem().getStatementsThatUse(v))) { + AbstractStatement s = (AbstractStatement) nwn; addToWorkList(s); } } diff --git a/com.ibm.wala.util/src/com/ibm/wala/util/graph/AbstractGraph.java b/com.ibm.wala.util/src/com/ibm/wala/util/graph/AbstractGraph.java index 663705da1..51aad9a81 100644 --- a/com.ibm.wala.util/src/com/ibm/wala/util/graph/AbstractGraph.java +++ b/com.ibm.wala.util/src/com/ibm/wala/util/graph/AbstractGraph.java @@ -12,6 +12,8 @@ package com.ibm.wala.util.graph; import java.util.Iterator; +import com.ibm.wala.util.collections.Iterator2Iterable; + /** * Basic functionality for a {@link Graph} that delegates node and edge management. */ @@ -191,8 +193,7 @@ public abstract class AbstractGraph implements Graph { StringBuffer sb = new StringBuffer(); for (T n : this) { sb.append(n.toString()).append("\n"); - for (Iterator ss = getSuccNodes(n); ss.hasNext();) { - T s = ss.next(); + for (T s : Iterator2Iterable.make(getSuccNodes(n))) { sb.append(edgeString(n, s)).append(s); sb.append("\n"); } diff --git a/com.ibm.wala.util/src/com/ibm/wala/util/graph/Acyclic.java b/com.ibm.wala.util/src/com/ibm/wala/util/graph/Acyclic.java index 07971fe00..ef94ad3cd 100644 --- a/com.ibm.wala.util/src/com/ibm/wala/util/graph/Acyclic.java +++ b/com.ibm.wala.util/src/com/ibm/wala/util/graph/Acyclic.java @@ -17,6 +17,7 @@ import java.util.Set; import java.util.Stack; import com.ibm.wala.util.collections.HashSetFactory; +import com.ibm.wala.util.collections.Iterator2Iterable; import com.ibm.wala.util.intset.BasicNaturalRelation; import com.ibm.wala.util.intset.IBinaryNaturalRelation; import com.ibm.wala.util.intset.IntIterator; @@ -73,8 +74,7 @@ public class Acyclic { private static void dfs(BasicNaturalRelation result, T root, NumberedGraph G, Set visited, Set onstack) { visited.add(root); onstack.add(root); - for (Iterator it = G.getSuccNodes(root); it.hasNext();) { - T dstNode = it.next(); + for (T dstNode : Iterator2Iterable.make(G.getSuccNodes(root))) { if (onstack.contains(dstNode)) { int src = G.getNumber(root); int dst = G.getNumber(dstNode); diff --git a/com.ibm.wala.util/src/com/ibm/wala/util/graph/GraphIntegrity.java b/com.ibm.wala.util/src/com/ibm/wala/util/graph/GraphIntegrity.java index 7cb89a8c5..7d7e84871 100644 --- a/com.ibm.wala.util/src/com/ibm/wala/util/graph/GraphIntegrity.java +++ b/com.ibm.wala.util/src/com/ibm/wala/util/graph/GraphIntegrity.java @@ -15,6 +15,8 @@ import java.util.HashSet; import java.util.Iterator; import com.ibm.wala.util.collections.HashSetFactory; +import com.ibm.wala.util.collections.Iterator2Iterable; +import com.ibm.wala.util.collections.IteratorUtil; import com.ibm.wala.util.graph.traverse.BFSIterator; import com.ibm.wala.util.graph.traverse.DFS; @@ -45,21 +47,13 @@ public class GraphIntegrity { private static void checkEdgeCounts(Graph G) throws UnsoundGraphException { for (T N : G) { int count1 = G.getSuccNodeCount(N); - int count2 = 0; - for (Iterator it2 = G.getSuccNodes(N); it2.hasNext();) { - it2.next(); - count2++; - } + int count2 = IteratorUtil.count(G.getSuccNodes(N)); if (count1 != count2) { throw new UnsoundGraphException("getSuccNodeCount " + count1 + " is wrong for node " + N); } int count3 = G.getPredNodeCount(N); - int count4 = 0; - for (Iterator it2 = G.getPredNodes(N); it2.hasNext();) { - it2.next(); - count4++; - } + int count4 = IteratorUtil.count(G.getPredNodes(N)); if (count3 != count4) { throw new UnsoundGraphException("getPredNodeCount " + count1 + " is wrong for node " + N); } @@ -71,13 +65,11 @@ public class GraphIntegrity { if (!G.containsNode(N)) { throw new UnsoundGraphException(N + " is not contained in the the graph " + G.containsNode(N)); } - PRED: for (Iterator p = G.getPredNodes(N); p.hasNext();) { - T pred = p.next(); + PRED: for (T pred : Iterator2Iterable.make(G.getPredNodes(N))) { if (!G.containsNode(pred)) { throw new UnsoundGraphException(pred + " is a predecessor of " + N + " but is not contained in the graph"); } - for (Iterator s = G.getSuccNodes(pred); s.hasNext();) { - Object succ = s.next(); + for (Object succ : Iterator2Iterable.make(G.getSuccNodes(pred))) { if (succ.equals(N)) { continue PRED; } @@ -87,13 +79,11 @@ public class GraphIntegrity { G.getSuccNodes(pred); throw new UnsoundGraphException(pred + " is a predecessor of " + N + " but inverse doesn't hold"); } - SUCC: for (Iterator s = G.getSuccNodes(N); s.hasNext();) { - T succ = s.next(); + SUCC: for (T succ : Iterator2Iterable.make(G.getSuccNodes(N))) { if (!G.containsNode(succ)) { throw new UnsoundGraphException(succ + " is a successor of " + N + " but is not contained in the graph"); } - for (Iterator p = G.getPredNodes(succ); p.hasNext();) { - Object pred = p.next(); + for (Object pred : Iterator2Iterable.make(G.getPredNodes(succ))) { if (pred.equals(N)) { continue SUCC; } @@ -122,21 +112,9 @@ public class GraphIntegrity { } n2++; } - n3 = 0; - for (Iterator it = new BFSIterator<>(G); it.hasNext();) { - it.next(); - n3++; - } - n4 = 0; - for (Iterator it = DFS.iterateDiscoverTime(G); it.hasNext();) { - it.next(); - n4++; - } - n5 = 0; - for (Iterator it = DFS.iterateFinishTime(G); it.hasNext();) { - it.next(); - n5++; - } + n3 = IteratorUtil.count(new BFSIterator<>(G)); + n4 = IteratorUtil.count(DFS.iterateDiscoverTime(G)); + n5 = IteratorUtil.count(DFS.iterateFinishTime(G)); } catch (RuntimeException e) { e.printStackTrace(); throw new UnsoundGraphException(e.toString()); diff --git a/com.ibm.wala.util/src/com/ibm/wala/util/graph/GraphPrint.java b/com.ibm.wala.util/src/com/ibm/wala/util/graph/GraphPrint.java index ff72c1db0..03d9f1fb1 100644 --- a/com.ibm.wala.util/src/com/ibm/wala/util/graph/GraphPrint.java +++ b/com.ibm.wala.util/src/com/ibm/wala/util/graph/GraphPrint.java @@ -10,8 +10,7 @@ *******************************************************************************/ package com.ibm.wala.util.graph; -import java.util.Iterator; - +import com.ibm.wala.util.collections.Iterator2Iterable; import com.ibm.wala.util.graph.impl.SlowSparseNumberedGraph; /** @@ -28,8 +27,7 @@ public class GraphPrint { sg.addNode(name); } for (T n : G) { - for (Iterator it2 = G.getSuccNodes(n); it2.hasNext(); ) { - T d = it2.next(); + for (T d : Iterator2Iterable.make(G.getSuccNodes(n))) { sg.addEdge(n,d); } } diff --git a/com.ibm.wala.util/src/com/ibm/wala/util/graph/dominators/DominanceFrontiers.java b/com.ibm.wala.util/src/com/ibm/wala/util/graph/dominators/DominanceFrontiers.java index 55dfd5df4..1d1c90512 100644 --- a/com.ibm.wala.util/src/com/ibm/wala/util/graph/dominators/DominanceFrontiers.java +++ b/com.ibm.wala.util/src/com/ibm/wala/util/graph/dominators/DominanceFrontiers.java @@ -16,6 +16,7 @@ import java.util.Set; import com.ibm.wala.util.collections.HashMapFactory; import com.ibm.wala.util.collections.HashSetFactory; +import com.ibm.wala.util.collections.Iterator2Iterable; import com.ibm.wala.util.collections.NonNullSingletonIterator; import com.ibm.wala.util.graph.Graph; import com.ibm.wala.util.graph.traverse.DFS; @@ -76,18 +77,15 @@ public class DominanceFrontiers { DF.put(X, DF_X); // DF_local - for (Iterator YS = G.getSuccNodes(X); YS.hasNext();) { - T Y = YS.next(); + for (T Y : Iterator2Iterable.make(G.getSuccNodes(X))) { if (dom.getIdom(Y) != X) { DF_X.add(Y); } } // DF_up - for (Iterator ZS = DT.getSuccNodes(X); ZS.hasNext();) { - T Z = ZS.next(); - for (Iterator YS2 = getDominanceFrontier(Z); YS2.hasNext();) { - T Y2 = YS2.next(); + for (T Z : Iterator2Iterable.make(DT.getSuccNodes(X))) { + for (T Y2 : Iterator2Iterable.make(getDominanceFrontier(Z))) { if (dom.getIdom(Y2) != X) DF_X.add(Y2); } diff --git a/com.ibm.wala.util/src/com/ibm/wala/util/graph/dominators/Dominators.java b/com.ibm.wala.util/src/com/ibm/wala/util/graph/dominators/Dominators.java index 7d0c30587..a3c384eaa 100644 --- a/com.ibm.wala.util/src/com/ibm/wala/util/graph/dominators/Dominators.java +++ b/com.ibm.wala.util/src/com/ibm/wala/util/graph/dominators/Dominators.java @@ -18,6 +18,7 @@ import java.util.Set; import com.ibm.wala.util.collections.EmptyIterator; import com.ibm.wala.util.collections.HashMapFactory; import com.ibm.wala.util.collections.HashSetFactory; +import com.ibm.wala.util.collections.Iterator2Iterable; import com.ibm.wala.util.collections.NonNullSingletonIterator; import com.ibm.wala.util.debug.Assertions; import com.ibm.wala.util.graph.AbstractGraph; @@ -586,8 +587,8 @@ public abstract class Dominators { StringBuffer sb = new StringBuffer(); for (T node : G) { sb.append("Dominators of " + node + ":\n"); - for (Iterator j = dominators(node); j.hasNext();) - sb.append(" " + j.next() + "\n"); + for (T dom : Iterator2Iterable.make(dominators(node))) + sb.append(" " + dom + "\n"); sb.append("\n"); } return sb.toString(); diff --git a/com.ibm.wala.util/src/com/ibm/wala/util/graph/impl/SlowSparseNumberedGraph.java b/com.ibm.wala.util/src/com/ibm/wala/util/graph/impl/SlowSparseNumberedGraph.java index 2b3ef6e03..f46335288 100644 --- a/com.ibm.wala.util/src/com/ibm/wala/util/graph/impl/SlowSparseNumberedGraph.java +++ b/com.ibm.wala.util/src/com/ibm/wala/util/graph/impl/SlowSparseNumberedGraph.java @@ -11,8 +11,7 @@ package com.ibm.wala.util.graph.impl; import java.io.Serializable; -import java.util.Iterator; - +import com.ibm.wala.util.collections.Iterator2Iterable; import com.ibm.wala.util.graph.AbstractNumberedGraph; import com.ibm.wala.util.graph.Graph; import com.ibm.wala.util.graph.NumberedEdgeManager; @@ -77,8 +76,8 @@ public class SlowSparseNumberedGraph extends AbstractNumberedGraph impleme into.addNode(name); } for (T n : g) { - for (Iterator it2 = g.getSuccNodes(n); it2.hasNext();) { - into.addEdge(n, it2.next()); + for (T succ : Iterator2Iterable.make(g.getSuccNodes(n))) { + into.addEdge(n, succ); } } } diff --git a/com.ibm.wala.util/src/com/ibm/wala/util/graph/labeled/SlowSparseNumberedLabeledGraph.java b/com.ibm.wala.util/src/com/ibm/wala/util/graph/labeled/SlowSparseNumberedLabeledGraph.java index b39b01b47..a69af0e35 100644 --- a/com.ibm.wala.util/src/com/ibm/wala/util/graph/labeled/SlowSparseNumberedLabeledGraph.java +++ b/com.ibm.wala.util/src/com/ibm/wala/util/graph/labeled/SlowSparseNumberedLabeledGraph.java @@ -48,8 +48,7 @@ */ package com.ibm.wala.util.graph.labeled; -import java.util.Iterator; - +import com.ibm.wala.util.collections.Iterator2Iterable; import com.ibm.wala.util.graph.NumberedNodeManager; import com.ibm.wala.util.graph.impl.SlowNumberedNodeManager; @@ -75,8 +74,7 @@ public class SlowSparseNumberedLabeledGraph extends AbstractNumberedLabele into.addNode(name); } for (T n : g) { - for (Iterator it2 = g.getSuccNodes(n); it2.hasNext();) { - T s = it2.next(); + for (T s : Iterator2Iterable.make(g.getSuccNodes(n))) { for(U l : g.getEdgeLabels(n, s)) { into.addEdge(n, s, l); } diff --git a/com.ibm.wala.util/src/com/ibm/wala/util/graph/traverse/BFSIterator.java b/com.ibm.wala.util/src/com/ibm/wala/util/graph/traverse/BFSIterator.java index ebfb6bc31..fc99d0db7 100644 --- a/com.ibm.wala.util/src/com/ibm/wala/util/graph/traverse/BFSIterator.java +++ b/com.ibm.wala.util/src/com/ibm/wala/util/graph/traverse/BFSIterator.java @@ -16,6 +16,7 @@ import java.util.Iterator; import java.util.NoSuchElementException; import com.ibm.wala.util.collections.HashSetFactory; +import com.ibm.wala.util.collections.Iterator2Iterable; import com.ibm.wala.util.collections.NonNullSingletonIterator; import com.ibm.wala.util.debug.UnimplementedError; import com.ibm.wala.util.graph.Graph; @@ -105,8 +106,7 @@ public class BFSIterator implements Iterator { } private void visitChildren(T N) { - for (Iterator children = getConnected(N); children.hasNext();) { - T child = children.next(); + for (T child : Iterator2Iterable.make(getConnected(N))) { if (!visited.contains(child)) { Q.add(child); visited.add(child); diff --git a/com.ibm.wala.util/src/com/ibm/wala/util/graph/traverse/BoundedBFSIterator.java b/com.ibm.wala.util/src/com/ibm/wala/util/graph/traverse/BoundedBFSIterator.java index d1980e394..531d457b1 100644 --- a/com.ibm.wala.util/src/com/ibm/wala/util/graph/traverse/BoundedBFSIterator.java +++ b/com.ibm.wala.util/src/com/ibm/wala/util/graph/traverse/BoundedBFSIterator.java @@ -16,6 +16,7 @@ import java.util.Iterator; import java.util.NoSuchElementException; import com.ibm.wala.util.collections.HashSetFactory; +import com.ibm.wala.util.collections.Iterator2Iterable; import com.ibm.wala.util.collections.NonNullSingletonIterator; import com.ibm.wala.util.graph.Graph; @@ -127,8 +128,7 @@ public class BoundedBFSIterator implements Iterator { if (boundary[currentHops] == 0) { boundary[currentHops] = Q.size(); } - for (Iterator children = getConnected(N); children.hasNext();) { - T child = children.next(); + for (T child : Iterator2Iterable.make(getConnected(N))) { if (!visited.contains(child)) { Q.add(child); visited.add(child); diff --git a/com.ibm.wala.util/src/com/ibm/wala/util/graph/traverse/DFSDiscoverTimeIterator.java b/com.ibm.wala.util/src/com/ibm/wala/util/graph/traverse/DFSDiscoverTimeIterator.java index be3a6cb63..038b1947d 100644 --- a/com.ibm.wala.util/src/com/ibm/wala/util/graph/traverse/DFSDiscoverTimeIterator.java +++ b/com.ibm.wala.util/src/com/ibm/wala/util/graph/traverse/DFSDiscoverTimeIterator.java @@ -15,6 +15,7 @@ import java.util.Iterator; import java.util.NoSuchElementException; import com.ibm.wala.util.collections.EmptyIterator; +import com.ibm.wala.util.collections.Iterator2Iterable; import com.ibm.wala.util.collections.NonNullSingletonIterator; import com.ibm.wala.util.debug.UnimplementedError; import com.ibm.wala.util.graph.NumberedGraph; @@ -85,8 +86,7 @@ public abstract class DFSDiscoverTimeIterator extends ArrayList implements assert getPendingChildren(toReturn) != null; do { T stackTop = peek(); - for (Iterator it = getPendingChildren(stackTop); it.hasNext();) { - T child = it.next(); + for (T child : Iterator2Iterable.make(getPendingChildren(stackTop))) { if (getPendingChildren(child) == null) { // found a new child. visitEdge(stackTop, child); diff --git a/com.ibm.wala.util/src/com/ibm/wala/util/graph/traverse/DFSFinishTimeIterator.java b/com.ibm.wala.util/src/com/ibm/wala/util/graph/traverse/DFSFinishTimeIterator.java index 1167e0910..806b59e76 100644 --- a/com.ibm.wala.util/src/com/ibm/wala/util/graph/traverse/DFSFinishTimeIterator.java +++ b/com.ibm.wala.util/src/com/ibm/wala/util/graph/traverse/DFSFinishTimeIterator.java @@ -15,6 +15,7 @@ import java.util.Iterator; import java.util.NoSuchElementException; import com.ibm.wala.util.collections.EmptyIterator; +import com.ibm.wala.util.collections.Iterator2Iterable; import com.ibm.wala.util.debug.UnimplementedError; import com.ibm.wala.util.graph.Graph; @@ -106,8 +107,7 @@ public abstract class DFSFinishTimeIterator extends ArrayList implements I recurse: while (!empty()) { T v = peek(); Iterator pc = getPendingChildren(v); - for (Iterator e = pc; e.hasNext();) { - T n = e.next(); + for (T n : Iterator2Iterable.make(pc)) { assert n != null : "null node in pc"; Iterator nChildren = getPendingChildren(n); if (nChildren == null) { diff --git a/com.ibm.wala.util/src/com/ibm/wala/util/graph/traverse/DFSPathFinder.java b/com.ibm.wala.util/src/com/ibm/wala/util/graph/traverse/DFSPathFinder.java index 9ce5baa4f..c31d1bf38 100644 --- a/com.ibm.wala.util/src/com/ibm/wala/util/graph/traverse/DFSPathFinder.java +++ b/com.ibm.wala.util/src/com/ibm/wala/util/graph/traverse/DFSPathFinder.java @@ -18,6 +18,7 @@ import java.util.Map; import java.util.function.Predicate; import com.ibm.wala.util.collections.HashMapFactory; +import com.ibm.wala.util.collections.Iterator2Iterable; import com.ibm.wala.util.collections.NonNullSingletonIterator; import com.ibm.wala.util.graph.Graph; @@ -171,8 +172,7 @@ public class DFSPathFinder extends ArrayList { assert getPendingChildren(currentNode) != null; do { T stackTop = peek(); - for (Iterator it = getPendingChildren(stackTop); it.hasNext();) { - T child = it.next(); + for (T child : Iterator2Iterable.make(getPendingChildren(stackTop))) { if (getPendingChildren(child) == null) { // found a new child. push(child); diff --git a/com.ibm.wala.util/src/com/ibm/wala/util/graph/traverse/WelshPowell.java b/com.ibm.wala.util/src/com/ibm/wala/util/graph/traverse/WelshPowell.java index 4c6191569..8212ad8da 100644 --- a/com.ibm.wala.util/src/com/ibm/wala/util/graph/traverse/WelshPowell.java +++ b/com.ibm.wala.util/src/com/ibm/wala/util/graph/traverse/WelshPowell.java @@ -11,12 +11,12 @@ package com.ibm.wala.util.graph.traverse; import java.util.Comparator; -import java.util.Iterator; import java.util.Map; import java.util.SortedSet; import java.util.TreeSet; import com.ibm.wala.util.collections.HashMapFactory; +import com.ibm.wala.util.collections.Iterator2Iterable; import com.ibm.wala.util.graph.NumberedGraph; public class WelshPowell { @@ -108,15 +108,13 @@ public class WelshPowell { for(T m : vertices) { if (colors[G.getNumber(m)] == -1) { color_me: { - for(Iterator ps = G.getPredNodes(m); ps.hasNext(); ) { - T p = ps.next(); + for(T p : Iterator2Iterable.make(G.getPredNodes(m)) ) { if (colors[ G.getNumber(p) ] == currentColor) { break color_me; } } - for(Iterator ss = G.getSuccNodes(m); ss.hasNext(); ) { - T s = ss.next(); + for(T s : Iterator2Iterable.make(G.getSuccNodes(m))) { if (colors[G.getNumber(s)] == currentColor) { break color_me; } diff --git a/com.ibm.wala.util/src/com/ibm/wala/util/processes/JavaLauncher.java b/com.ibm.wala.util/src/com/ibm/wala/util/processes/JavaLauncher.java index 726704314..5d5863a7c 100644 --- a/com.ibm.wala.util/src/com/ibm/wala/util/processes/JavaLauncher.java +++ b/com.ibm.wala.util/src/com/ibm/wala/util/processes/JavaLauncher.java @@ -14,11 +14,11 @@ import java.io.File; import java.io.IOException; import java.util.ArrayList; import java.util.Collections; -import java.util.Iterator; import java.util.List; import java.util.logging.Logger; import com.ibm.wala.util.PlatformUtil; +import com.ibm.wala.util.collections.Iterator2Iterable; /** * A Java process launcher @@ -269,9 +269,9 @@ public class JavaLauncher extends Launcher { if (getXtraClassPath() == null || getXtraClassPath().isEmpty()) { return cp.trim(); } else { - for (Iterator it = getXtraClassPath().iterator(); it.hasNext();) { + for (String p : Iterator2Iterable.make(getXtraClassPath().iterator())) { cp += File.pathSeparatorChar; - cp += it.next(); + cp += p; } return cp.trim(); } diff --git a/com.ibm.wala.util/src/com/ibm/wala/viz/DotUtil.java b/com.ibm.wala.util/src/com/ibm/wala/viz/DotUtil.java index b97ebf08a..c8ea7ca4d 100644 --- a/com.ibm.wala.util/src/com/ibm/wala/viz/DotUtil.java +++ b/com.ibm.wala.util/src/com/ibm/wala/viz/DotUtil.java @@ -18,10 +18,9 @@ import java.nio.charset.StandardCharsets; import java.nio.file.Files; import java.util.Arrays; import java.util.Collection; -import java.util.Iterator; - import com.ibm.wala.util.WalaException; import com.ibm.wala.util.collections.Iterator2Collection; +import com.ibm.wala.util.collections.Iterator2Iterable; import com.ibm.wala.util.graph.Graph; /** @@ -214,8 +213,7 @@ public class DotUtil { outputNodes(labels, result, dotNodes); for (T n : g) { - for (Iterator it2 = g.getSuccNodes(n); it2.hasNext();) { - T s = it2.next(); + for (T s : Iterator2Iterable.make(g.getSuccNodes(n))) { result.append(" "); result.append(getPort(n, labels)); result.append(" -> "); From 5a02cde69032b1b34ffe1e75e27b09e9c773cfa3 Mon Sep 17 00:00:00 2001 From: Julian Dolby Date: Wed, 6 Dec 2017 19:04:27 +0800 Subject: [PATCH 34/69] more flexibility to not extract calls for invokedynamic. Potentially, this will break instrumented methods that have massive numbers of invokedynamics in them, but that seems unlikely to happen at least with Java use of invokedynamic so far. We can burn this bridge when we come to it. --- .../com/ibm/wala/shrike/cg/OfflineDynamicCallGraph.java | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/com.ibm.wala.shrike/src/com/ibm/wala/shrike/cg/OfflineDynamicCallGraph.java b/com.ibm.wala.shrike/src/com/ibm/wala/shrike/cg/OfflineDynamicCallGraph.java index a2e8c5eae..ee05e3cca 100644 --- a/com.ibm.wala.shrike/src/com/ibm/wala/shrike/cg/OfflineDynamicCallGraph.java +++ b/com.ibm.wala.shrike/src/com/ibm/wala/shrike/cg/OfflineDynamicCallGraph.java @@ -100,6 +100,7 @@ public class OfflineDynamicCallGraph { private static boolean patchExits = true; private static boolean patchCalls = false; private static boolean extractCalls = true; + private static boolean extractDynamicCalls = false; private static Class runtime = Runtime.class; @@ -121,6 +122,8 @@ public class OfflineDynamicCallGraph { patchExits = false; } else if ("--patch-calls".equals(args[i])) { patchCalls = true; + } else if ("--extract-dynamic-calls".equals(args[i])) { + extractDynamicCalls = true; } else if ("--rt-jar".equals(args[i])) { System.err.println("using " + args[i+1] + " as stdlib"); OfflineInstrumenter libReader = new OfflineInstrumenter(); @@ -243,7 +246,10 @@ public class OfflineDynamicCallGraph { me.visitInstructions(new AddTracingToInvokes() { @Override public void visitInvoke(final IInvokeInstruction inv) { - if (inv.getMethodName().equals("") || (r.getAccessFlags()&Constants.ACC_INTERFACE) != 0) { + if (inv.getMethodName().equals("") || + (r.getAccessFlags()&Constants.ACC_INTERFACE) != 0 || + (!extractDynamicCalls && inv instanceof InvokeDynamicInstruction)) + { super.visitInvoke(inv); } else { this.replaceWith(new MethodEditor.Patch() { From d29e278291dc0b93db6ef128291c1d19cf6c8079 Mon Sep 17 00:00:00 2001 From: Julian Dolby Date: Fri, 8 Dec 2017 11:19:41 +0800 Subject: [PATCH 35/69] more instrumentation fixes remove junk from dominators --- .../tests/shrike/DynamicCallGraphTest.java | 1 - .../shrike/DynamicCallGraphTestBase.java | 4 ++ .../shrike/cg/OfflineDynamicCallGraph.java | 48 +++++++++++++------ .../util/graph/dominators/Dominators.java | 4 -- .../graph/dominators/NumberedDominators.java | 7 +-- 5 files changed, 38 insertions(+), 26 deletions(-) diff --git a/com.ibm.wala.core.tests/src/com/ibm/wala/core/tests/shrike/DynamicCallGraphTest.java b/com.ibm.wala.core.tests/src/com/ibm/wala/core/tests/shrike/DynamicCallGraphTest.java index 33d717aa8..f3cdf8096 100644 --- a/com.ibm.wala.core.tests/src/com/ibm/wala/core/tests/shrike/DynamicCallGraphTest.java +++ b/com.ibm.wala.core.tests/src/com/ibm/wala/core/tests/shrike/DynamicCallGraphTest.java @@ -78,7 +78,6 @@ public class DynamicCallGraphTest extends DynamicCallGraphTestBase { instrument(testJarLocation); run("lambda.SortingExample", null); CallGraph staticCG = staticCG("Llambda/SortingExample", null); - System.err.println(staticCG); checkEdges(staticCG); } diff --git a/com.ibm.wala.core.tests/src/com/ibm/wala/core/tests/shrike/DynamicCallGraphTestBase.java b/com.ibm.wala.core.tests/src/com/ibm/wala/core/tests/shrike/DynamicCallGraphTestBase.java index a3ab3473b..2a9807a83 100644 --- a/com.ibm.wala.core.tests/src/com/ibm/wala/core/tests/shrike/DynamicCallGraphTestBase.java +++ b/com.ibm.wala.core.tests/src/com/ibm/wala/core/tests/shrike/DynamicCallGraphTestBase.java @@ -189,6 +189,10 @@ public abstract class DynamicCallGraphTestBase extends WalaTestCase { try (final BufferedReader dynamicEdgesFile = new BufferedReader(new InputStreamReader(new GZIPInputStream(new FileInputStream(cgLocation))))) { String line; loop: while ((line = dynamicEdgesFile.readLine()) != null) { + if (line.startsWith("call to") || line.startsWith("return from")) { + continue; + } + lines++; StringTokenizer edge = new StringTokenizer(line, "\t"); diff --git a/com.ibm.wala.shrike/src/com/ibm/wala/shrike/cg/OfflineDynamicCallGraph.java b/com.ibm.wala.shrike/src/com/ibm/wala/shrike/cg/OfflineDynamicCallGraph.java index ee05e3cca..70c761e0d 100644 --- a/com.ibm.wala.shrike/src/com/ibm/wala/shrike/cg/OfflineDynamicCallGraph.java +++ b/com.ibm.wala.shrike/src/com/ibm/wala/shrike/cg/OfflineDynamicCallGraph.java @@ -98,10 +98,11 @@ public class OfflineDynamicCallGraph { private final static boolean verify = true; private static boolean patchExits = true; - private static boolean patchCalls = false; + private static boolean patchCalls = true; private static boolean extractCalls = true; private static boolean extractDynamicCalls = false; - + private static boolean extractConstructors = true; + private static Class runtime = Runtime.class; private static SetOfClasses filter; @@ -124,6 +125,8 @@ public class OfflineDynamicCallGraph { patchCalls = true; } else if ("--extract-dynamic-calls".equals(args[i])) { extractDynamicCalls = true; + } else if ("--extract-constructors".equals(args[i])) { + extractConstructors = true; } else if ("--rt-jar".equals(args[i])) { System.err.println("using " + args[i+1] + " as stdlib"); OfflineInstrumenter libReader = new OfflineInstrumenter(); @@ -171,7 +174,7 @@ public class OfflineDynamicCallGraph { final ClassReader r = ci.getReader(); - final Map>,MethodData> methods = HashMapFactory.make(); + final Map methods = HashMapFactory.make(); for (int m = 0; m < ci.getReader().getMethodCount(); m++) { final MethodData d = ci.visitMethod(m); @@ -246,7 +249,7 @@ public class OfflineDynamicCallGraph { me.visitInstructions(new AddTracingToInvokes() { @Override public void visitInvoke(final IInvokeInstruction inv) { - if (inv.getMethodName().equals("") || + if ((!extractConstructors && inv.getMethodName().equals("")) || (r.getAccessFlags()&Constants.ACC_INTERFACE) != 0 || (!extractDynamicCalls && inv instanceof InvokeDynamicInstruction)) { @@ -255,24 +258,36 @@ public class OfflineDynamicCallGraph { this.replaceWith(new MethodEditor.Patch() { @Override public void emitTo(final Output w) { - final String methodSignature = inv.getInvocationCode().hasImplicitThis() && !(inv instanceof InvokeDynamicInstruction)? - "(" + inv.getClassType() + inv.getMethodSignature().substring(1): - inv.getMethodSignature(); - Pair> key = Pair.make(inv.getClassType(), Pair.make(inv.getMethodName(), methodSignature)); + final String methodSignature = + inv.getInvocationCode().hasImplicitThis() && !(inv instanceof InvokeDynamicInstruction)? + "(" + inv.getClassType() + inv.getMethodSignature().substring(1): + inv.getMethodSignature(); + Object key; + if (inv instanceof InvokeDynamicInstruction) { + key = inv; + } else { + key = Pair.make(inv.getClassType(), Pair.make(inv.getMethodName(), methodSignature)); + } + if (! methods.containsKey(key)) { MethodData trampoline = ci.createEmptyMethodData("$shrike$trampoline$" + methods.size(), methodSignature, Constants.ACC_STATIC|Constants.ACC_PRIVATE); methods.put(key, trampoline); MethodEditor me = new MethodEditor(trampoline); me.beginPass(); me.insertAtStart(new MethodEditor.Patch() { + private String hackType(String type) { + if ("B".equals(type) || "C".equals(type) || "S".equals(type) || "Z".equals(type)) { + return "I"; + } else { + return type; + } + } + @Override public void emitTo(MethodEditor.Output w) { String[] types = Util.getParamsTypes(null, methodSignature); for(int i = 0, local = 0; i < types.length; i++) { - String type = types[i]; - if ("B".equals(type) || "C".equals(type) || "S".equals(type) || "Z".equals(type)) { - type = "I"; - } + String type = hackType(types[i]); w.emit(LoadInstruction.make(type, local)); if ("J".equals(type) || "D".equals(type)) { local += 2; @@ -288,11 +303,14 @@ public class OfflineDynamicCallGraph { InvokeInstruction inst = InvokeInstruction.make(inv.getMethodSignature(), inv.getClassType(), inv.getMethodName(), mode); w.emit(inst); } - } + //w.emit(ReturnInstruction.make(hackType(inv.getMethodSignature().substring(inv.getMethodSignature().indexOf(")")+1)))); + } }); + me.applyPatches(); me.endPass(); + me.beginPass(); me.visitInstructions(new AddTracingToInvokes()); me.applyPatches(); @@ -334,7 +352,7 @@ public class OfflineDynamicCallGraph { w.emit(Util.makeInvoke(runtime, "execution", new Class[] {String.class, String.class, Object.class})); } }); - + // this updates the data d me.applyPatches(); @@ -346,7 +364,7 @@ public class OfflineDynamicCallGraph { w.flush(); } - if (verify) { + if (verify && !extractConstructors) { Verifier v = new Verifier(d); // v.setClassHierarchy(cha); v.verify(); diff --git a/com.ibm.wala.util/src/com/ibm/wala/util/graph/dominators/Dominators.java b/com.ibm.wala.util/src/com/ibm/wala/util/graph/dominators/Dominators.java index a3c384eaa..f879f9b7f 100644 --- a/com.ibm.wala.util/src/com/ibm/wala/util/graph/dominators/Dominators.java +++ b/com.ibm.wala.util/src/com/ibm/wala/util/graph/dominators/Dominators.java @@ -99,10 +99,6 @@ public abstract class Dominators { return false; } - public Graph getGraph() { - return G; - } - /** * return the immediate dominator of node */ diff --git a/com.ibm.wala.util/src/com/ibm/wala/util/graph/dominators/NumberedDominators.java b/com.ibm.wala.util/src/com/ibm/wala/util/graph/dominators/NumberedDominators.java index 411f8549b..202a098ef 100644 --- a/com.ibm.wala.util/src/com/ibm/wala/util/graph/dominators/NumberedDominators.java +++ b/com.ibm.wala.util/src/com/ibm/wala/util/graph/dominators/NumberedDominators.java @@ -34,11 +34,6 @@ public class NumberedDominators extends Dominators { analyze(); } - @Override - public NumberedGraph getGraph() { - return (NumberedGraph) G; - } - /* * Look-aside table for DominatorInfo objects */ @@ -48,7 +43,7 @@ public class NumberedDominators extends Dominators { @Override protected final DominatorInfo getInfo(T node) { assert node != null; - return (DominatorInfo) infoMap[getGraph().getNumber(node)]; + return (DominatorInfo) infoMap[((NumberedGraph)G).getNumber(node)]; } } From fc62c16d9b2d10211c1961ab734d6285121a932c Mon Sep 17 00:00:00 2001 From: Raffi Khatchadourian Date: Tue, 19 Dec 2017 15:42:27 -0500 Subject: [PATCH 36/69] Fix https://github.com/wala/WALA/issues/273. --- com.ibm.wala.core/src/com/ibm/wala/util/strings/Atom.java | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/com.ibm.wala.core/src/com/ibm/wala/util/strings/Atom.java b/com.ibm.wala.core/src/com/ibm/wala/util/strings/Atom.java index 3bfab6b15..092e0cefd 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/util/strings/Atom.java +++ b/com.ibm.wala.core/src/com/ibm/wala/util/strings/Atom.java @@ -173,6 +173,11 @@ public final class Atom implements Serializable { public final boolean startsWith(Atom start) { assert (start != null); + // can't start with something that's longer. + if (val.length < start.val.length) + return false; + + // otherwise, we know that this length is greater than or equal to the length of start. for (int i = 0; i < start.val.length; ++i) { if (val[i] != start.val[i]) return false; From f60c164ec1a8416e7e005869c7e40396c0edbdef Mon Sep 17 00:00:00 2001 From: Ben Liblit Date: Tue, 19 Dec 2017 12:57:25 -0600 Subject: [PATCH 37/69] Escape "<" and ">" in Javadoc when not used as HTML tag syntax --- .../jdt/JDTJava2CAstTranslator.java | 2 +- .../js/nodejs/test/NodejsRequireJsonTest.java | 2 +- ...odejsRequireTargetSelectorResolveTest.java | 2 +- .../js/nodejs/NodejsCallGraphBuilderUtil.java | 2 +- .../nodejs/NodejsRequireTargetSelector.java | 4 +- .../js/nodejs/NodejsRequiredCoreModule.java | 2 +- .../js/nodejs/NodejsRequiredSourceModule.java | 2 +- .../src/arraybounds/NotDetectable.java | 4 +- .../ContextSensitiveReachingDefs.java | 2 +- .../arraybounds/ArrayBoundsGraph.java | 8 ++-- .../arraybounds/ArrayBoundsGraphBuilder.java | 12 +++--- .../arraybounds/ConditionNormalizer.java | 2 +- .../hypergraph/DirectedHyperEdge.java | 2 +- .../hypergraph/algorithms/ShortestPath.java | 4 +- .../hypergraph/weight/NormalOrder.java | 2 +- .../hypergraph/weight/ReverseOrder.java | 2 +- .../analysis/reflection/CloneInterpreter.java | 2 +- .../reflection/FactoryBypassInterpreter.java | 2 +- .../src/com/ibm/wala/cfg/IBasicBlock.java | 4 +- .../src/com/ibm/wala/cfg/InducedCFG.java | 2 +- .../cfg/exc/ExceptionPruningAnalysis.java | 2 +- .../wala/cfg/exc/InterprocAnalysisResult.java | 2 +- .../ibm/wala/cfg/exc/NullPointerAnalysis.java | 2 +- .../ibm/wala/cfg/exc/inter/AnalysisUtil.java | 4 +- .../cfg/exc/inter/DelegatingMethodState.java | 2 +- .../inter/InterprocAnalysisResultWrapper.java | 2 +- .../cfg/exc/inter/InterprocMethodState.java | 4 +- .../inter/InterprocNullPointerAnalysis.java | 6 +-- .../cfg/exc/inter/IntraprocAnalysisState.java | 4 +- .../intra/ExplodedCFGNullPointerAnalysis.java | 2 +- .../intra/IntraprocNullPointerAnalysis.java | 2 +- .../ibm/wala/cfg/exc/intra/MethodState.java | 2 +- .../ibm/wala/cfg/exc/intra/MutableCFG.java | 2 +- .../cfg/exc/intra/NegativeGraphFilter.java | 2 +- .../cfg/exc/intra/NullPointerFrameWork.java | 2 +- .../wala/cfg/exc/intra/NullPointerSolver.java | 2 +- .../wala/cfg/exc/intra/NullPointerState.java | 6 +-- .../NullPointerTransferFunctionProvider.java | 2 +- .../wala/classLoader/ArrayClassLoader.java | 2 +- .../ibm/wala/classLoader/IClassLoader.java | 2 +- .../ibm/wala/classLoader/JarStreamModule.java | 2 +- .../ibm/wala/dataflow/IFDS/CallFlowEdges.java | 12 +++--- .../wala/dataflow/IFDS/LocalPathEdges.java | 22 +++++------ .../wala/dataflow/IFDS/LocalSummaryEdges.java | 6 +-- .../PartiallyBalancedTabulationSolver.java | 2 +- .../com/ibm/wala/dataflow/IFDS/PathEdge.java | 2 +- .../dataflow/IFDS/SingletonFlowFunction.java | 2 +- .../wala/dataflow/IFDS/TabulationResult.java | 2 +- .../wala/dataflow/IFDS/TabulationSolver.java | 38 +++++++++---------- .../demandpa/flowgraph/AbstractFlowGraph.java | 4 +- .../SimpleDemandPointerFlowGraph.java | 18 ++++----- .../demandpa/util/SimpleMemoryAccessMap.java | 4 +- .../ibm/wala/escape/FILiveObjectAnalysis.java | 2 +- .../ibm/wala/escape/ILiveObjectAnalysis.java | 12 +++--- .../wala/escape/IMethodEscapeAnalysis.java | 2 +- .../ibm/wala/escape/INodeEscapeAnalysis.java | 2 +- .../com/ibm/wala/ipa/callgraph/Context.java | 2 +- .../ipa/callgraph/impl/ExplicitCallGraph.java | 2 +- .../callgraph/impl/UnionContextSelector.java | 2 +- .../com/ibm/wala/ipa/callgraph/impl/Util.java | 2 +- .../callgraph/propagation/InstanceKey.java | 4 +- .../ipa/callgraph/propagation/PointerKey.java | 8 ++-- .../PropagationCallGraphBuilder.java | 8 ++-- .../propagation/PropagationGraph.java | 8 ++-- .../propagation/PropagationSystem.java | 4 +- .../propagation/cfa/CallerContextPair.java | 2 +- .../propagation/cfa/CallerSiteContext.java | 2 +- .../cfa/CallerSiteContextPair.java | 2 +- .../propagation/cfa/ZeroXInstanceKeys.java | 6 +-- .../rta/DelegatingExplicitCallGraph.java | 4 +- .../propagation/rta/TypeBasedHeapModel.java | 4 +- .../rta/TypeBasedPointerAnalysis.java | 2 +- .../com/ibm/wala/ipa/cha/ClassHierarchy.java | 10 ++--- .../com/ibm/wala/ipa/cha/IClassHierarchy.java | 4 +- .../wala/ipa/modref/ModRefFieldAccess.java | 2 +- .../summaries/BypassMethodTargetSelector.java | 4 +- .../ibm/wala/ipa/summaries/MethodBypass.java | 4 +- .../ibm/wala/ipa/summaries/MethodSummary.java | 2 +- .../summaries/SummarizedMethodWithNames.java | 2 +- .../ipa/summaries/VolatileMethodSummary.java | 2 +- .../ipa/summaries/XMLMethodSummaryReader.java | 2 +- .../src/com/ibm/wala/ssa/AuxiliaryCache.java | 6 +-- .../src/com/ibm/wala/ssa/DefUse.java | 6 +-- .../src/com/ibm/wala/ssa/IAuxiliaryCache.java | 2 +- .../src/com/ibm/wala/ssa/SSABuilder.java | 6 +-- .../src/com/ibm/wala/ssa/SSACFG.java | 4 +- .../src/com/ibm/wala/ssa/SSACache.java | 8 ++-- .../src/com/ibm/wala/ssa/SymbolTable.java | 4 +- .../analysis/DeadAssignmentElimination.java | 2 +- .../src/com/ibm/wala/types/Descriptor.java | 2 +- .../com/ibm/wala/types/FieldReference.java | 2 +- .../com/ibm/wala/types/MethodReference.java | 2 +- .../src/com/ibm/wala/types/TypeName.java | 4 +- .../src/com/ibm/wala/types/TypeReference.java | 4 +- .../wala/types/generics/ClassSignature.java | 2 +- .../types/generics/ClassTypeSignature.java | 2 +- .../ibm/wala/util/PrimitiveAssignability.java | 2 +- .../wala/util/bytecode/BytecodeStream.java | 2 +- .../wala/util/ssa/ClassLookupException.java | 2 +- .../com/ibm/wala/util/ssa/IInstantiator.java | 2 +- .../ibm/wala/util/ssa/ParameterAccessor.java | 8 ++-- .../src/com/ibm/wala/util/ssa/SSAValue.java | 2 +- .../ibm/wala/util/ssa/SSAValueManager.java | 2 +- .../util/ssa/TypeSafeInstructionFactory.java | 2 +- .../com/ibm/wala/util/ssa/package-info.java | 2 +- .../src/com/ibm/wala/util/strings/Atom.java | 6 +-- .../callgraph/androidModel/AndroidModel.java | 2 +- .../androidModel/AndroidModelClass.java | 2 +- .../callgraph/androidModel/IntentModel.java | 2 +- .../callgraph/androidModel/MicroModel.java | 2 +- .../ipa/callgraph/androidModel/MiniModel.java | 2 +- .../callgraph/androidModel/package-info.java | 2 +- .../AndroidModelParameterManager.java | 2 +- .../DefaultInstantiationBehavior.java | 2 +- .../parameters/FlatInstantiator.java | 2 +- .../parameters/IInstantiationBehavior.java | 2 +- .../androidModel/parameters/Instantiator.java | 2 +- .../LoadedInstantiationBehavior.java | 2 +- .../parameters/ReuseParameters.java | 2 +- .../parameters/SpecializedInstantiator.java | 2 +- .../androidModel/parameters/package-info.java | 2 +- .../structure/AbstractAndroidModel.java | 2 +- .../structure/LoopAndroidModel.java | 2 +- .../structure/LoopKillAndroidModel.java | 2 +- .../structure/SequentialAndroidModel.java | 2 +- .../structure/SingleStartAndroidModel.java | 2 +- .../androidModel/structure/package-info.java | 2 +- .../androidModel/stubs/AndroidBoot.java | 2 +- .../stubs/AndroidStartComponentTool.java | 2 +- .../androidModel/stubs/ExternalModel.java | 2 +- .../androidModel/stubs/Overrides.java | 2 +- .../stubs/SystemServiceModel.java | 2 +- .../stubs/UnknownTargetModel.java | 2 +- .../androidModel/stubs/package-info.java | 2 +- .../ipa/callgraph/impl/AndroidEntryPoint.java | 2 +- .../propagation/cfa/AndroidContext.java | 2 +- .../ipa/callgraph/propagation/cfa/Intent.java | 2 +- .../propagation/cfa/IntentContext.java | 2 +- .../cfa/IntentContextInterpreter.java | 2 +- .../cfa/IntentContextSelector.java | 2 +- .../callgraph/propagation/cfa/IntentMap.java | 2 +- .../propagation/cfa/IntentStarters.java | 2 +- .../propagation/cfa/package-info.java | 2 +- .../ibm/wala/dalvik/ssa/DexSSABuilder.java | 6 +-- .../wala/dalvik/util/AndroidComponent.java | 2 +- .../dalvik/util/AndroidEntryPointLocator.java | 2 +- .../dalvik/util/AndroidEntryPointManager.java | 2 +- .../dalvik/util/AndroidManifestXMLReader.java | 2 +- .../dalvik/util/AndroidPreFlightChecks.java | 2 +- .../dalvik/util/AndroidSettingFactory.java | 2 +- .../ibm/wala/dalvik/util/AndroidTypes.java | 2 +- .../util/androidEntryPoints/ActivityEP.java | 2 +- .../androidEntryPoints/ApplicationEP.java | 2 +- .../util/androidEntryPoints/FragmentEP.java | 2 +- .../util/androidEntryPoints/LoaderCB.java | 2 +- .../util/androidEntryPoints/LocationEP.java | 2 +- .../util/androidEntryPoints/ProviderEP.java | 2 +- .../util/androidEntryPoints/ServiceEP.java | 2 +- .../util/androidEntryPoints/package-info.java | 2 +- .../ibm/wala/dalvik/util/package-info.java | 2 +- .../org/scandroid/model/AppModelMethod.java | 2 +- .../synthmethod/SSAtoXMLVisitor.java | 2 +- .../com/ibm/wala/shrikeBT/DupInstruction.java | 2 +- .../src/com/ibm/wala/sourcepos/CRTData.java | 2 +- .../src/com/ibm/wala/sourcepos/CRTFlags.java | 2 +- .../src/com/ibm/wala/sourcepos/CRTable.java | 2 +- .../src/com/ibm/wala/sourcepos/Debug.java | 2 +- .../sourcepos/InvalidCRTDataException.java | 2 +- .../sourcepos/InvalidPositionException.java | 2 +- .../wala/sourcepos/InvalidRangeException.java | 2 +- .../sourcepos/InvalidSourceInfoException.java | 2 +- .../ibm/wala/sourcepos/MethodPositions.java | 2 +- .../src/com/ibm/wala/sourcepos/Position.java | 2 +- .../wala/sourcepos/PositionsAttribute.java | 2 +- .../src/com/ibm/wala/sourcepos/Range.java | 2 +- .../util/graph/dominators/Dominators.java | 2 +- .../graph/traverse/BoundedBFSIterator.java | 2 +- .../ibm/wala/util/heapTrace/HeapTracer.java | 8 ++-- .../wala/util/intset/IntegerUnionFind.java | 4 +- 179 files changed, 294 insertions(+), 294 deletions(-) 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 9f3fbb79d..25dba509b 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 @@ -2438,7 +2438,7 @@ public abstract class JDTJava2CAstTranslator { /** * Expands the form: for ( [final] Type var: iterable ) { ... } Into something equivalent to: for ( Iterator iter = * iterable.iter(); iter.hasNext(); ) { [final] Type var = (Type) iter.next(); ... } Or, in the case of an array: for ( int idx = - * 0; i < iterable.length; i++ ) { [final] Type var = iterable[idx]; ... } Except that the expression "iterable" is only evaluate + * 0; i < iterable.length; i++ ) { [final] Type var = iterable[idx]; ... } Except that the expression "iterable" is only evaluate * once (or is it?) * * @param n diff --git a/com.ibm.wala.cast.js.nodejs.test/src/com/ibm/wala/cast/js/nodejs/test/NodejsRequireJsonTest.java b/com.ibm.wala.cast.js.nodejs.test/src/com/ibm/wala/cast/js/nodejs/test/NodejsRequireJsonTest.java index 58410888c..ffb1f7d05 100644 --- a/com.ibm.wala.cast.js.nodejs.test/src/com/ibm/wala/cast/js/nodejs/test/NodejsRequireJsonTest.java +++ b/com.ibm.wala.cast.js.nodejs.test/src/com/ibm/wala/cast/js/nodejs/test/NodejsRequireJsonTest.java @@ -22,7 +22,7 @@ import com.ibm.wala.ipa.callgraph.CallGraph; import com.ibm.wala.ipa.callgraph.propagation.PropagationCallGraphBuilder; /** - * @author Brian Pfretzschner + * @author Brian Pfretzschner <brian.pfretzschner@gmail.com> */ public class NodejsRequireJsonTest { diff --git a/com.ibm.wala.cast.js.nodejs.test/src/com/ibm/wala/cast/js/nodejs/test/NodejsRequireTargetSelectorResolveTest.java b/com.ibm.wala.cast.js.nodejs.test/src/com/ibm/wala/cast/js/nodejs/test/NodejsRequireTargetSelectorResolveTest.java index 78db42e08..22c273afb 100644 --- a/com.ibm.wala.cast.js.nodejs.test/src/com/ibm/wala/cast/js/nodejs/test/NodejsRequireTargetSelectorResolveTest.java +++ b/com.ibm.wala.cast.js.nodejs.test/src/com/ibm/wala/cast/js/nodejs/test/NodejsRequireTargetSelectorResolveTest.java @@ -22,7 +22,7 @@ import com.ibm.wala.ipa.callgraph.CallGraph; import com.ibm.wala.ipa.callgraph.propagation.PropagationCallGraphBuilder; /** - * @author Brian Pfretzschner + * @author Brian Pfretzschner <brian.pfretzschner@gmail.com> */ public class NodejsRequireTargetSelectorResolveTest { diff --git a/com.ibm.wala.cast.js.nodejs/src/com/ibm/wala/cast/js/nodejs/NodejsCallGraphBuilderUtil.java b/com.ibm.wala.cast.js.nodejs/src/com/ibm/wala/cast/js/nodejs/NodejsCallGraphBuilderUtil.java index d41042c36..75666c596 100644 --- a/com.ibm.wala.cast.js.nodejs/src/com/ibm/wala/cast/js/nodejs/NodejsCallGraphBuilderUtil.java +++ b/com.ibm.wala.cast.js.nodejs/src/com/ibm/wala/cast/js/nodejs/NodejsCallGraphBuilderUtil.java @@ -46,7 +46,7 @@ import com.ibm.wala.ssa.IRFactory; import com.ibm.wala.util.WalaException; /** - * @author Brian Pfretzschner + * @author Brian Pfretzschner <brian.pfretzschner@gmail.com> */ public class NodejsCallGraphBuilderUtil extends JSCallGraphUtil { diff --git a/com.ibm.wala.cast.js.nodejs/src/com/ibm/wala/cast/js/nodejs/NodejsRequireTargetSelector.java b/com.ibm.wala.cast.js.nodejs/src/com/ibm/wala/cast/js/nodejs/NodejsRequireTargetSelector.java index 0e8c6e4e9..0dd2c7d3b 100644 --- a/com.ibm.wala.cast.js.nodejs/src/com/ibm/wala/cast/js/nodejs/NodejsRequireTargetSelector.java +++ b/com.ibm.wala.cast.js.nodejs/src/com/ibm/wala/cast/js/nodejs/NodejsRequireTargetSelector.java @@ -51,7 +51,7 @@ import com.ibm.wala.util.ssa.ClassLookupException; * This class is used by WALA internals to resolve to what functions a call * could potentially invoke. * - * @author Brian Pfretzschner + * @author Brian Pfretzschner <brian.pfretzschner@gmail.com> */ public class NodejsRequireTargetSelector implements MethodTargetSelector { @@ -314,7 +314,7 @@ public class NodejsRequireTargetSelector implements MethodTargetSelector { * 1. let PARTS = path split(START) * 2. let I = count of PARTS - 1 * 3. let DIRS = [] - * 4. while I >= 0, + * 4. while I >= 0, * a. if PARTS[I] = "node_modules" CONTINUE * b. DIR = path join(PARTS[0 .. I] + "node_modules") * c. DIRS = DIRS + DIR diff --git a/com.ibm.wala.cast.js.nodejs/src/com/ibm/wala/cast/js/nodejs/NodejsRequiredCoreModule.java b/com.ibm.wala.cast.js.nodejs/src/com/ibm/wala/cast/js/nodejs/NodejsRequiredCoreModule.java index 97183f4cb..2b8326013 100644 --- a/com.ibm.wala.cast.js.nodejs/src/com/ibm/wala/cast/js/nodejs/NodejsRequiredCoreModule.java +++ b/com.ibm.wala.cast.js.nodejs/src/com/ibm/wala/cast/js/nodejs/NodejsRequiredCoreModule.java @@ -24,7 +24,7 @@ import com.ibm.wala.util.collections.HashSetFactory; import com.ibm.wala.util.io.TemporaryFile; /** - * @author Brian Pfretzschner + * @author Brian Pfretzschner <brian.pfretzschner@gmail.com> */ public class NodejsRequiredCoreModule extends NodejsRequiredSourceModule { diff --git a/com.ibm.wala.cast.js.nodejs/src/com/ibm/wala/cast/js/nodejs/NodejsRequiredSourceModule.java b/com.ibm.wala.cast.js.nodejs/src/com/ibm/wala/cast/js/nodejs/NodejsRequiredSourceModule.java index 4ad4c7074..34c17ece1 100644 --- a/com.ibm.wala.cast.js.nodejs/src/com/ibm/wala/cast/js/nodejs/NodejsRequiredSourceModule.java +++ b/com.ibm.wala.cast.js.nodejs/src/com/ibm/wala/cast/js/nodejs/NodejsRequiredSourceModule.java @@ -30,7 +30,7 @@ import com.ibm.wala.util.io.Streams; * environment. The resulting function will be named GLOBAL_PREFIX + relative * file-name. To retrieve the final function name, use getFunctioName(). * - * @author Brian Pfretzschner + * @author Brian Pfretzschner <brian.pfretzschner@gmail.com> */ public class NodejsRequiredSourceModule extends SourceFileModule { diff --git a/com.ibm.wala.core.testdata/src/arraybounds/NotDetectable.java b/com.ibm.wala.core.testdata/src/arraybounds/NotDetectable.java index 7eadd7fcd..2e5d45206 100644 --- a/com.ibm.wala.core.testdata/src/arraybounds/NotDetectable.java +++ b/com.ibm.wala.core.testdata/src/arraybounds/NotDetectable.java @@ -45,12 +45,12 @@ public class NotDetectable { } /** - * This example does not work: We know 5 > 3 and sometimes length > 5 > 3. In + * This example does not work: We know 5 > 3 and sometimes length > 5 > 3. In * case of variables this conditional relation is resolved by introducing pi * nodes. For constants pi nodes can be generated, but the pi variables will * not be used (maybe due to constant propagation?). Additionally 5 != 3, so * even if we would use pi-variables for 5, there would be no relation to 3: 0 - * -(5)-> 5, 5 -(-5)-> 0, {5,length} -(0)-> 5', 0 -(3)-> 3, 3 -(-3)-> 0 Given + * -(5)-> 5, 5 -(-5)-> 0, {5,length} -(0)-> 5', 0 -(3)-> 3, 3 -(-3)-> 0 Given * the inequality graph above, we know that 5,5',3 are larger than 0 and 5 * larger 3 and length is larger than 5', but not 5' larger than 3. Which is * not always the case in general anyway. diff --git a/com.ibm.wala.core.tests/src/com/ibm/wala/examples/analysis/dataflow/ContextSensitiveReachingDefs.java b/com.ibm.wala.core.tests/src/com/ibm/wala/examples/analysis/dataflow/ContextSensitiveReachingDefs.java index b91e5aa50..92594fb4f 100644 --- a/com.ibm.wala.core.tests/src/com/ibm/wala/examples/analysis/dataflow/ContextSensitiveReachingDefs.java +++ b/com.ibm.wala.core.tests/src/com/ibm/wala/examples/analysis/dataflow/ContextSensitiveReachingDefs.java @@ -195,7 +195,7 @@ public class ContextSensitiveReachingDefs { * balanced since a definition in a callee used as a seed for the analysis may then reach a caller, yielding a "return" without a * corresponding "call." An alternative to this approach, used in the Reps-Horwitz-Sagiv POPL95 paper, would be to "lift" the * domain of putstatic instructions with a 0 (bottom) element, have a 0->0 transition in all transfer functions, and then seed the - * analysis with the path edge (main_entry, 0) -> (main_entry, 0). We choose the partially-balanced approach to avoid pollution of + * analysis with the path edge (main_entry, 0) -> (main_entry, 0). We choose the partially-balanced approach to avoid pollution of * the flow functions. * */ diff --git a/com.ibm.wala.core/src/com/ibm/wala/analysis/arraybounds/ArrayBoundsGraph.java b/com.ibm.wala.core/src/com/ibm/wala/analysis/arraybounds/ArrayBoundsGraph.java index 18305a197..be0086fad 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/analysis/arraybounds/ArrayBoundsGraph.java +++ b/com.ibm.wala.core/src/com/ibm/wala/analysis/arraybounds/ArrayBoundsGraph.java @@ -156,8 +156,8 @@ public class ArrayBoundsGraph extends DirectedHyperGraph { /** * Add variable as constant with value value. * - * This will create the following construct: [zero] -(value)-> [h1] -0- > - * [variable] -(-value)-> [h2] -0-> [zero]. + * This will create the following construct: [zero] -(value)-> [h1] -0- > + * [variable] -(-value)-> [h2] -0-> [zero]. * * The bidirectional linking, allows things like * @@ -214,8 +214,8 @@ public class ArrayBoundsGraph extends DirectedHyperGraph { * Adds var as source var. A source var is a variable, which can be used as * source for shortest path computation. * - * This will create the following construct: [unlimited] -> [var] -> [var] - * -(unlimited)-> [unlimited] + * This will create the following construct: [unlimited] -> [var] -> [var] + * -(unlimited)-> [unlimited] * * This is a trap door construct: if [var] is not set to 0 it will get the * value unlimited, if [var] is set to 0 it will stay 0. diff --git a/com.ibm.wala.core/src/com/ibm/wala/analysis/arraybounds/ArrayBoundsGraphBuilder.java b/com.ibm.wala.core/src/com/ibm/wala/analysis/arraybounds/ArrayBoundsGraphBuilder.java index 02467097e..19c10629a 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/analysis/arraybounds/ArrayBoundsGraphBuilder.java +++ b/com.ibm.wala.core/src/com/ibm/wala/analysis/arraybounds/ArrayBoundsGraphBuilder.java @@ -112,16 +112,16 @@ public class ArrayBoundsGraphBuilder { /** * Case 1: piRestrictor restricts the pi variable for upper/ lower bounds graph * Given this code below, we want to create a hyper edge - * {piParent, piRestrictor} --> {piVar}. + * {piParent, piRestrictor} --> {piVar}. * - * If is op in {<, >} we now, that the distance from piRestrictor to piVar - * is +-1 as ( a < b ) <==> ( a <= b - 1), same with "<". + * If is op in {<, >} we now, that the distance from piRestrictor to piVar + * is +-1 as ( a < b ) <==> ( a <= b - 1), same with "<". * To be more precise we introduce a helper node and add - * {piRestrictor} -- (-)1 --> {helper} - * {piParent, helper} --> {piVar} + * {piRestrictor} -- (-)1 --> {helper} + * {piParent, helper} --> {piVar} * * Case 2: no restriction is given by the branch (i.e. the operator is not equal) - * {piParent} --> {piVar} + * {piParent} --> {piVar} * * if (piParent op piRestrictor) {piVar = piParent} * diff --git a/com.ibm.wala.core/src/com/ibm/wala/analysis/arraybounds/ConditionNormalizer.java b/com.ibm.wala.core/src/com/ibm/wala/analysis/arraybounds/ConditionNormalizer.java index 37a2642ab..c3df28525 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/analysis/arraybounds/ConditionNormalizer.java +++ b/com.ibm.wala.core/src/com/ibm/wala/analysis/arraybounds/ConditionNormalizer.java @@ -22,7 +22,7 @@ public class ConditionNormalizer { * hand side of the comparison, also if the branch is not taken, the * operation needs to be negated. * - * p.a. the condition is !(rhs >= lhs), it will be normalized to lhs > rhs + * p.a. the condition is !(rhs >= lhs), it will be normalized to lhs > rhs * * @param cnd * condition to normalize diff --git a/com.ibm.wala.core/src/com/ibm/wala/analysis/arraybounds/hypergraph/DirectedHyperEdge.java b/com.ibm.wala.core/src/com/ibm/wala/analysis/arraybounds/hypergraph/DirectedHyperEdge.java index a0dd4aaac..e43668ffc 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/analysis/arraybounds/hypergraph/DirectedHyperEdge.java +++ b/com.ibm.wala.core/src/com/ibm/wala/analysis/arraybounds/hypergraph/DirectedHyperEdge.java @@ -11,7 +11,7 @@ import com.ibm.wala.analysis.arraybounds.hypergraph.weight.edgeweights.EdgeWeigh * @author Stephan Gocht {@code } * * @param - * Type used in HyperNodes (HyperNode) + * Type used in HyperNodes (HyperNode<T>) */ public class DirectedHyperEdge { /** Contains all destinations of this HyperEdge */ diff --git a/com.ibm.wala.core/src/com/ibm/wala/analysis/arraybounds/hypergraph/algorithms/ShortestPath.java b/com.ibm.wala.core/src/com/ibm/wala/analysis/arraybounds/hypergraph/algorithms/ShortestPath.java index 5ed3b2247..c6dca59c8 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/analysis/arraybounds/hypergraph/algorithms/ShortestPath.java +++ b/com.ibm.wala.core/src/com/ibm/wala/analysis/arraybounds/hypergraph/algorithms/ShortestPath.java @@ -172,8 +172,8 @@ public class ShortestPath { * *
        * (n1, n2)->(n3)
    -   * Round 1: n1 = unset, n2 = -3 -> n3 = max(unset,-3) = -3
    -   * Round 2: n1 = 1, n2 = -3 -> n3 = max(1,-3) = 1
    +   * Round 1: n1 = unset, n2 = -3 -> n3 = max(unset,-3) = -3
    +   * Round 2: n1 = 1, n2 = -3 -> n3 = max(1,-3) = 1
        * 
    * * Would we compute the minimum of n3 over all rounds, it would be -3, but 1 diff --git a/com.ibm.wala.core/src/com/ibm/wala/analysis/arraybounds/hypergraph/weight/NormalOrder.java b/com.ibm.wala.core/src/com/ibm/wala/analysis/arraybounds/hypergraph/weight/NormalOrder.java index e07e3fabc..504eabb07 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/analysis/arraybounds/hypergraph/weight/NormalOrder.java +++ b/com.ibm.wala.core/src/com/ibm/wala/analysis/arraybounds/hypergraph/weight/NormalOrder.java @@ -5,7 +5,7 @@ import java.util.Comparator; import com.ibm.wala.analysis.arraybounds.hypergraph.weight.Weight.Type; /** - * Defines a normal Order on Weight: unlimited < ... < -1 < 0 < 1 < ... not_set + * Defines a normal Order on Weight: unlimited < ... < -1 < 0 < 1 < ... not_set * is not comparable * * @author Stephan Gocht {@code } diff --git a/com.ibm.wala.core/src/com/ibm/wala/analysis/arraybounds/hypergraph/weight/ReverseOrder.java b/com.ibm.wala.core/src/com/ibm/wala/analysis/arraybounds/hypergraph/weight/ReverseOrder.java index 72c9397cc..0bddefbe3 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/analysis/arraybounds/hypergraph/weight/ReverseOrder.java +++ b/com.ibm.wala.core/src/com/ibm/wala/analysis/arraybounds/hypergraph/weight/ReverseOrder.java @@ -5,7 +5,7 @@ import java.util.Comparator; import com.ibm.wala.analysis.arraybounds.hypergraph.weight.Weight.Type; /** - * Defines a reverse Order on Weight: ... > 1 > 0 > -1 > ... > unlimited not_set + * Defines a reverse Order on Weight: ... > 1 > 0 > -1 > ... > unlimited not_set * is not comparable * * @author Stephan Gocht {@code } diff --git a/com.ibm.wala.core/src/com/ibm/wala/analysis/reflection/CloneInterpreter.java b/com.ibm.wala.core/src/com/ibm/wala/analysis/reflection/CloneInterpreter.java index d92bb0228..00a8ce4e7 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/analysis/reflection/CloneInterpreter.java +++ b/com.ibm.wala.core/src/com/ibm/wala/analysis/reflection/CloneInterpreter.java @@ -94,7 +94,7 @@ public class CloneInterpreter implements SSAContextInterpreter { private final static int NEW_PC = 0; /** - * Mapping from TypeReference -> IR TODO: Soft references? + * Mapping from TypeReference -> IR TODO: Soft references? */ final private Map IRCache = HashMapFactory.make(); diff --git a/com.ibm.wala.core/src/com/ibm/wala/analysis/reflection/FactoryBypassInterpreter.java b/com.ibm.wala.core/src/com/ibm/wala/analysis/reflection/FactoryBypassInterpreter.java index aeaca10bf..6446e2f96 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/analysis/reflection/FactoryBypassInterpreter.java +++ b/com.ibm.wala.core/src/com/ibm/wala/analysis/reflection/FactoryBypassInterpreter.java @@ -67,7 +67,7 @@ import com.ibm.wala.util.warnings.Warnings; public class FactoryBypassInterpreter extends AbstractReflectionInterpreter { /** - * A Map from CallerSiteContext -> Set represents the types a factory method might create in a particular context + * A Map from CallerSiteContext -> Set <TypeReference>represents the types a factory method might create in a particular context */ private final Map> map = HashMapFactory.make(); diff --git a/com.ibm.wala.core/src/com/ibm/wala/cfg/IBasicBlock.java b/com.ibm.wala.core/src/com/ibm/wala/cfg/IBasicBlock.java index a5b9bddbf..a009c1cf4 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/cfg/IBasicBlock.java +++ b/com.ibm.wala.core/src/com/ibm/wala/cfg/IBasicBlock.java @@ -24,7 +24,7 @@ public interface IBasicBlock extends INodeWithNumber, Iterable extends INodeWithNumber, Iterable BasicBlock + * A partial map from Instruction -> BasicBlock */ private final BasicBlock[] i2block; diff --git a/com.ibm.wala.core/src/com/ibm/wala/cfg/exc/ExceptionPruningAnalysis.java b/com.ibm.wala.core/src/com/ibm/wala/cfg/exc/ExceptionPruningAnalysis.java index 17856b740..8f2ef6f90 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/cfg/exc/ExceptionPruningAnalysis.java +++ b/com.ibm.wala.core/src/com/ibm/wala/cfg/exc/ExceptionPruningAnalysis.java @@ -23,7 +23,7 @@ import com.ibm.wala.util.graph.GraphIntegrity.UnsoundGraphException; * control flow from a CFG. This is done by detecting exceptions that may always * (or never) appear. * - * @author Juergen Graf + * @author Juergen Graf <graf@kit.edu> * */ public interface ExceptionPruningAnalysis> { diff --git a/com.ibm.wala.core/src/com/ibm/wala/cfg/exc/InterprocAnalysisResult.java b/com.ibm.wala.core/src/com/ibm/wala/cfg/exc/InterprocAnalysisResult.java index b3802b3e0..b89a2b363 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/cfg/exc/InterprocAnalysisResult.java +++ b/com.ibm.wala.core/src/com/ibm/wala/cfg/exc/InterprocAnalysisResult.java @@ -17,7 +17,7 @@ import com.ibm.wala.ipa.callgraph.CGNode; /** * Interface to retrieve the result of the interprocedural analysis. * - * @author Juergen Graf + * @author Juergen Graf <graf@kit.edu> */ public interface InterprocAnalysisResult> { diff --git a/com.ibm.wala.core/src/com/ibm/wala/cfg/exc/NullPointerAnalysis.java b/com.ibm.wala.core/src/com/ibm/wala/cfg/exc/NullPointerAnalysis.java index 65eadb79d..09506e455 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/cfg/exc/NullPointerAnalysis.java +++ b/com.ibm.wala.core/src/com/ibm/wala/cfg/exc/NullPointerAnalysis.java @@ -31,7 +31,7 @@ import com.ibm.wala.util.graph.GraphIntegrity.UnsoundGraphException; * Tries to detect impossible (or always appearing) NullPointerExceptions and removes impossible * control flow from the CFG. * - * @author Juergen Graf + * @author Juergen Graf <graf@kit.edu> * */ public final class NullPointerAnalysis { diff --git a/com.ibm.wala.core/src/com/ibm/wala/cfg/exc/inter/AnalysisUtil.java b/com.ibm.wala.core/src/com/ibm/wala/cfg/exc/inter/AnalysisUtil.java index 407ed654d..dbf9896c7 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/cfg/exc/inter/AnalysisUtil.java +++ b/com.ibm.wala.core/src/com/ibm/wala/cfg/exc/inter/AnalysisUtil.java @@ -27,8 +27,8 @@ import com.ibm.wala.ssa.analysis.IExplodedBasicBlock; * This class has been developed as part of a student project "Studienarbeit" by Markus Herhoffer. * It has been adapted and integrated into the WALA project by Juergen Graf. * - * @author Markus Herhoffer - * @author Juergen Graf + * @author Markus Herhoffer <markus.herhoffer@student.kit.edu> + * @author Juergen Graf <graf@kit.edu> */ public final class AnalysisUtil { diff --git a/com.ibm.wala.core/src/com/ibm/wala/cfg/exc/inter/DelegatingMethodState.java b/com.ibm.wala.core/src/com/ibm/wala/cfg/exc/inter/DelegatingMethodState.java index 35856f005..a2c855472 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/cfg/exc/inter/DelegatingMethodState.java +++ b/com.ibm.wala.core/src/com/ibm/wala/cfg/exc/inter/DelegatingMethodState.java @@ -19,7 +19,7 @@ import com.ibm.wala.ssa.SSAAbstractInvokeInstruction; * This class combines two MethodState objects. A MethodState decides if a given method call may throw an exception. * If the primary MethodState thinks that the call may throw an exception, the fallback MethodState is asked. * - * @author Juergen Graf + * @author Juergen Graf <graf@kit.edu> * */ class DelegatingMethodState extends MethodState { diff --git a/com.ibm.wala.core/src/com/ibm/wala/cfg/exc/inter/InterprocAnalysisResultWrapper.java b/com.ibm.wala.core/src/com/ibm/wala/cfg/exc/inter/InterprocAnalysisResultWrapper.java index e703406b3..98b20f157 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/cfg/exc/inter/InterprocAnalysisResultWrapper.java +++ b/com.ibm.wala.core/src/com/ibm/wala/cfg/exc/inter/InterprocAnalysisResultWrapper.java @@ -23,7 +23,7 @@ import com.ibm.wala.ssa.analysis.IExplodedBasicBlock; /** * A wrapper for the interprocedural analysis result. * - * @author Juergen Graf + * @author Juergen Graf <graf@kit.edu> * */ class InterprocAnalysisResultWrapper implements InterprocAnalysisResult { diff --git a/com.ibm.wala.core/src/com/ibm/wala/cfg/exc/inter/InterprocMethodState.java b/com.ibm.wala.core/src/com/ibm/wala/cfg/exc/inter/InterprocMethodState.java index f0ded3e12..534abb4b3 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/cfg/exc/inter/InterprocMethodState.java +++ b/com.ibm.wala.core/src/com/ibm/wala/cfg/exc/inter/InterprocMethodState.java @@ -24,8 +24,8 @@ import com.ibm.wala.ssa.SSAAbstractInvokeInstruction; * This class has been developed as part of a student project "Studienarbeit" by Markus Herhoffer. * It has been adapted and integrated into the WALA project by Juergen Graf. * - * @author Markus Herhoffer - * @author Juergen Graf + * @author Markus Herhoffer <markus.herhoffer@student.kit.edu> + * @author Juergen Graf <graf@kit.edu> * */ class InterprocMethodState extends MethodState { diff --git a/com.ibm.wala.core/src/com/ibm/wala/cfg/exc/inter/InterprocNullPointerAnalysis.java b/com.ibm.wala.core/src/com/ibm/wala/cfg/exc/inter/InterprocNullPointerAnalysis.java index 1cc89d0df..0a54a5a87 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/cfg/exc/inter/InterprocNullPointerAnalysis.java +++ b/com.ibm.wala.core/src/com/ibm/wala/cfg/exc/inter/InterprocNullPointerAnalysis.java @@ -54,8 +54,8 @@ import com.ibm.wala.util.strings.Atom; * This class has been developed as part of a student project "Studienarbeit" by Markus Herhoffer. * It has been adapted and integrated into the WALA project by Juergen Graf. * - * @author Markus Herhoffer - * @author Juergen Graf + * @author Markus Herhoffer <markus.herhoffer@student.kit.edu> + * @author Juergen Graf <graf@kit.edu> * */ public final class InterprocNullPointerAnalysis { @@ -230,7 +230,7 @@ public final class InterprocNullPointerAnalysis { /** * Filter for CallGraphs * - * @author Markus Herhoffer + * @author Markus Herhoffer <markus.herhoffer@student.kit.edu> * */ private static class CallGraphFilter { diff --git a/com.ibm.wala.core/src/com/ibm/wala/cfg/exc/inter/IntraprocAnalysisState.java b/com.ibm.wala.core/src/com/ibm/wala/cfg/exc/inter/IntraprocAnalysisState.java index 4dfb90a7b..e19553dba 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/cfg/exc/inter/IntraprocAnalysisState.java +++ b/com.ibm.wala.core/src/com/ibm/wala/cfg/exc/inter/IntraprocAnalysisState.java @@ -31,8 +31,8 @@ import com.ibm.wala.util.graph.GraphIntegrity.UnsoundGraphException; * This class has been developed as part of a student project "Studienarbeit" by Markus Herhoffer. * It has been adapted and integrated into the WALA project by Juergen Graf. * - * @author Markus Herhoffer - * @author Juergen Graf + * @author Markus Herhoffer <markus.herhoffer@student.kit.edu> + * @author Juergen Graf <graf@kit.edu> * */ final class IntraprocAnalysisState implements ExceptionPruningAnalysis { diff --git a/com.ibm.wala.core/src/com/ibm/wala/cfg/exc/intra/ExplodedCFGNullPointerAnalysis.java b/com.ibm.wala.core/src/com/ibm/wala/cfg/exc/intra/ExplodedCFGNullPointerAnalysis.java index 8e6e1eccb..65bad8618 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/cfg/exc/intra/ExplodedCFGNullPointerAnalysis.java +++ b/com.ibm.wala.core/src/com/ibm/wala/cfg/exc/intra/ExplodedCFGNullPointerAnalysis.java @@ -27,7 +27,7 @@ import com.ibm.wala.util.graph.GraphIntegrity.UnsoundGraphException; /** * Intraprocedural null pointer analysis for the exploded control flow graph. * - * @author Juergen Graf + * @author Juergen Graf <graf@kit.edu> * */ public class ExplodedCFGNullPointerAnalysis implements ExceptionPruningAnalysis { diff --git a/com.ibm.wala.core/src/com/ibm/wala/cfg/exc/intra/IntraprocNullPointerAnalysis.java b/com.ibm.wala.core/src/com/ibm/wala/cfg/exc/intra/IntraprocNullPointerAnalysis.java index a316828b2..ab9a56d51 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/cfg/exc/intra/IntraprocNullPointerAnalysis.java +++ b/com.ibm.wala.core/src/com/ibm/wala/cfg/exc/intra/IntraprocNullPointerAnalysis.java @@ -57,7 +57,7 @@ import com.ibm.wala.util.graph.impl.SparseNumberedGraph; /** * Intraprocedural dataflow analysis to detect impossible NullPointerExceptions. * - * @author Juergen Graf + * @author Juergen Graf <graf@kit.edu> * */ public class IntraprocNullPointerAnalysis { diff --git a/com.ibm.wala.core/src/com/ibm/wala/cfg/exc/intra/MethodState.java b/com.ibm.wala.core/src/com/ibm/wala/cfg/exc/intra/MethodState.java index 9b2afbea8..4d864d8e7 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/cfg/exc/intra/MethodState.java +++ b/com.ibm.wala.core/src/com/ibm/wala/cfg/exc/intra/MethodState.java @@ -17,7 +17,7 @@ import com.ibm.wala.ssa.SSAAbstractInvokeInstruction; * Provides a way for the nullpointer analysis to decide whether or not a called method * may throw an exception. * - * @author Juergen Graf + * @author Juergen Graf <graf@kit.edu> * */ public abstract class MethodState { diff --git a/com.ibm.wala.core/src/com/ibm/wala/cfg/exc/intra/MutableCFG.java b/com.ibm.wala.core/src/com/ibm/wala/cfg/exc/intra/MutableCFG.java index cf4132e01..b2f284fe4 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/cfg/exc/intra/MutableCFG.java +++ b/com.ibm.wala.core/src/com/ibm/wala/cfg/exc/intra/MutableCFG.java @@ -26,7 +26,7 @@ import com.ibm.wala.util.intset.IntSet; /** * A modifiable control flow graph. * - * @author Juergen Graf + * @author Juergen Graf <graf@kit.edu> * */ public class MutableCFG> extends SparseNumberedGraph implements ControlFlowGraph { diff --git a/com.ibm.wala.core/src/com/ibm/wala/cfg/exc/intra/NegativeGraphFilter.java b/com.ibm.wala.core/src/com/ibm/wala/cfg/exc/intra/NegativeGraphFilter.java index 6c8e50d19..3eb481c77 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/cfg/exc/intra/NegativeGraphFilter.java +++ b/com.ibm.wala.core/src/com/ibm/wala/cfg/exc/intra/NegativeGraphFilter.java @@ -19,7 +19,7 @@ import com.ibm.wala.util.graph.Graph; * An EdgeFilter that ignores all edges contained in a given graph. This ca be used * to subtract a subgraph from its main graph. * - * @author Juergen Graf + * @author Juergen Graf <graf@kit.edu> * */ public class NegativeGraphFilter> implements EdgeFilter { diff --git a/com.ibm.wala.core/src/com/ibm/wala/cfg/exc/intra/NullPointerFrameWork.java b/com.ibm.wala.core/src/com/ibm/wala/cfg/exc/intra/NullPointerFrameWork.java index 2eccb72b9..be99fd83e 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/cfg/exc/intra/NullPointerFrameWork.java +++ b/com.ibm.wala.core/src/com/ibm/wala/cfg/exc/intra/NullPointerFrameWork.java @@ -26,7 +26,7 @@ import com.ibm.wala.util.intset.IntPair; * functions are not distribute (similar to constant propagation). Therefore we remove * back edges in the flow graph. * - * @author Juergen Graf + * @author Juergen Graf <graf@kit.edu> * */ public class NullPointerFrameWork implements IKilldallFramework { diff --git a/com.ibm.wala.core/src/com/ibm/wala/cfg/exc/intra/NullPointerSolver.java b/com.ibm.wala.core/src/com/ibm/wala/cfg/exc/intra/NullPointerSolver.java index e31e0bff7..fa826f020 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/cfg/exc/intra/NullPointerSolver.java +++ b/com.ibm.wala.core/src/com/ibm/wala/cfg/exc/intra/NullPointerSolver.java @@ -18,7 +18,7 @@ import com.ibm.wala.ssa.ISSABasicBlock; /** * Intraprocedural dataflow analysis to detect impossible NullPointerExceptions. * - * @author Juergen Graf + * @author Juergen Graf <graf@kit.edu> * */ public class NullPointerSolver extends DataflowSolver { diff --git a/com.ibm.wala.core/src/com/ibm/wala/cfg/exc/intra/NullPointerState.java b/com.ibm.wala.core/src/com/ibm/wala/cfg/exc/intra/NullPointerState.java index a06c86708..d46088889 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/cfg/exc/intra/NullPointerState.java +++ b/com.ibm.wala.core/src/com/ibm/wala/cfg/exc/intra/NullPointerState.java @@ -22,7 +22,7 @@ import com.ibm.wala.ssa.SymbolTable; /** * States for the ssa variables. * - * @author Juergen Graf + * @author Juergen Graf <graf@kit.edu> * */ public class NullPointerState extends AbstractVariable { @@ -76,7 +76,7 @@ public class NullPointerState extends AbstractVariable { *
        * v3 = phi v1, v2
        * ^ := Meet-operator
    -   * f := phiValueMeetFunction(3, {1, 2}) = v1,v2,v3 -> v1,v2,[v1 ^ v2]
    +   * f := phiValueMeetFunction(3, {1, 2}) = v1,v2,v3 -> v1,v2,[v1 ^ v2]
        * 
        * f(1,?,?) ^ f(?,1,?) = 1,?,? ^ ?,1,? = 1,1,?
        * 
    @@ -134,7 +134,7 @@ public class NullPointerState extends AbstractVariable {
        * 
        * ? == unknown, 1 == not null, 0 == null, * == both
        * 
    -   * meet | ? | 0 | 1 | * |  <- rhs
    +   * meet | ? | 0 | 1 | * |  <- rhs
        * -----|---|---|---|---|
        *    ? | ? | 0 | 1 | * |
        * -----|---|---|---|---|
    diff --git a/com.ibm.wala.core/src/com/ibm/wala/cfg/exc/intra/NullPointerTransferFunctionProvider.java b/com.ibm.wala.core/src/com/ibm/wala/cfg/exc/intra/NullPointerTransferFunctionProvider.java
    index 59284af38..419091fe5 100644
    --- a/com.ibm.wala.core/src/com/ibm/wala/cfg/exc/intra/NullPointerTransferFunctionProvider.java
    +++ b/com.ibm.wala.core/src/com/ibm/wala/cfg/exc/intra/NullPointerTransferFunctionProvider.java
    @@ -51,7 +51,7 @@ import com.ibm.wala.ssa.analysis.IExplodedBasicBlock;
     import com.ibm.wala.util.collections.Iterator2Iterable;
     
     /**
    - * @author Juergen Graf 
    + * @author Juergen Graf <graf@kit.edu>
      *
      */
     class NullPointerTransferFunctionProvider implements ITransferFunctionProvider {
    diff --git a/com.ibm.wala.core/src/com/ibm/wala/classLoader/ArrayClassLoader.java b/com.ibm.wala.core/src/com/ibm/wala/classLoader/ArrayClassLoader.java
    index 1ace8aad6..1c58f9c1a 100644
    --- a/com.ibm.wala.core/src/com/ibm/wala/classLoader/ArrayClassLoader.java
    +++ b/com.ibm.wala.core/src/com/ibm/wala/classLoader/ArrayClassLoader.java
    @@ -26,7 +26,7 @@ public class ArrayClassLoader {
       private final static boolean DEBUG = false;
     
       /**
    -   * map: TypeReference -> ArrayClass
    +   * map: TypeReference -> ArrayClass
        */
       final private HashMap arrayClasses = HashMapFactory.make();
     
    diff --git a/com.ibm.wala.core/src/com/ibm/wala/classLoader/IClassLoader.java b/com.ibm.wala.core/src/com/ibm/wala/classLoader/IClassLoader.java
    index b6ae10f8b..a51fcaaf0 100644
    --- a/com.ibm.wala.core/src/com/ibm/wala/classLoader/IClassLoader.java
    +++ b/com.ibm.wala.core/src/com/ibm/wala/classLoader/IClassLoader.java
    @@ -122,7 +122,7 @@ public interface IClassLoader {
       /**
        * blow away references to any classes in the set
        * 
    -   * @param toRemove Collection
    +   * @param toRemove Collection<IClass>
        */
       public abstract void removeAll(Collection toRemove);
     }
    diff --git a/com.ibm.wala.core/src/com/ibm/wala/classLoader/JarStreamModule.java b/com.ibm.wala.core/src/com/ibm/wala/classLoader/JarStreamModule.java
    index bfff0afab..062f44b6a 100644
    --- a/com.ibm.wala.core/src/com/ibm/wala/classLoader/JarStreamModule.java
    +++ b/com.ibm.wala.core/src/com/ibm/wala/classLoader/JarStreamModule.java
    @@ -29,7 +29,7 @@ import com.ibm.wala.util.warnings.Warnings;
     /**
      * Read in a jar file from an input stream. Most parts are copied from the NestedJarFileModule class
      * and adapted to work with an input stream. 
    - * @author Juergen Graf 
    + * @author Juergen Graf <juergen.graf@gmail.com>
      */
     public class JarStreamModule extends JarInputStream implements Module {
     
    diff --git a/com.ibm.wala.core/src/com/ibm/wala/dataflow/IFDS/CallFlowEdges.java b/com.ibm.wala.core/src/com/ibm/wala/dataflow/IFDS/CallFlowEdges.java
    index ed8d009da..39bd1a0ba 100644
    --- a/com.ibm.wala.core/src/com/ibm/wala/dataflow/IFDS/CallFlowEdges.java
    +++ b/com.ibm.wala.core/src/com/ibm/wala/dataflow/IFDS/CallFlowEdges.java
    @@ -25,11 +25,11 @@ import com.ibm.wala.util.intset.SparseIntSet;
     public class CallFlowEdges {
     
       /**
    -   * A map from integer -> (IBinaryNonNegativeIntRelation)
    +   * A map from integer -> (IBinaryNonNegativeIntRelation)
        * 
    -   * For a fact d2, edges[d2] gives a relation R=(c,d1) s.t. ( -> ) was recorded as a call flow edge.
    +   * For a fact d2, edges[d2] gives a relation R=(c,d1) s.t. (<c, d1> -> <s_p,d2>) was recorded as a call flow edge.
        * 
    -   * Note that we handle paths of the form  ->  specially, below.
    +   * Note that we handle paths of the form <c, d1> -> <s_p,d1> specially, below.
        * 
        * TODO: more representation optimization. A special representation for triples? sparse representations for CFG? exploit shorts
        * for ints?
    @@ -37,9 +37,9 @@ public class CallFlowEdges {
       private final SparseVector edges = new SparseVector<>(1, 1.1f);
     
       /**
    -   * a map from integer d1 -> int set.
    +   * a map from integer d1 -> int set.
        * 
    -   * for fact d1, identityPaths[d1] gives the set of block numbers C s.t. for c \in C,  ->  is an edge.
    +   * for fact d1, identityPaths[d1] gives the set of block numbers C s.t. for c \in C, <c, d1> -> <s_p, d1> is an edge.
        */
       private final SparseVector identityEdges = new SparseVector<>(1, 1.1f);
     
    @@ -47,7 +47,7 @@ public class CallFlowEdges {
       }
     
       /**
    -   * Record that we've discovered a call edge  -> 
    +   * Record that we've discovered a call edge <c,d1> -> <s_p, d2>
        * 
        * @param c global number identifying the call site node
        * @param d1 source fact at the call edge
    diff --git a/com.ibm.wala.core/src/com/ibm/wala/dataflow/IFDS/LocalPathEdges.java b/com.ibm.wala.core/src/com/ibm/wala/dataflow/IFDS/LocalPathEdges.java
    index b6701113a..45286d046 100644
    --- a/com.ibm.wala.core/src/com/ibm/wala/dataflow/IFDS/LocalPathEdges.java
    +++ b/com.ibm.wala.core/src/com/ibm/wala/dataflow/IFDS/LocalPathEdges.java
    @@ -33,11 +33,11 @@ public class LocalPathEdges {
       private final static boolean PARANOID = false;
     
       /**
    -   * A map from integer (d2) -> (IBinaryNonNegativeIntRelation)
    +   * A map from integer (d2) -> (IBinaryNonNegativeIntRelation)
        * 
    -   * For fact d2, paths[d2] gives a relation R=(n,d1) s.t. ( -> ) is a path edge.
    +   * For fact d2, paths[d2] gives a relation R=(n,d1) s.t. (<s_p, d1> -> <n,d2>) is a path edge.
        * 
    -   * Note that we handle paths of the form  ->  specially, below. We also handle paths of the form  ->  specially below.
        * 
        * We choose this somewhat convoluted representation for the following reasons: 1) of the (n, d1, d2) tuple-space, we expect the
    @@ -58,9 +58,9 @@ public class LocalPathEdges {
        * space or time of the non-merging IFDS solver, for which the original paths representation works well. Is there a better data
        * structure tradeoff?
        * 
    -   * A map from integer (d1) -> (IBinaryNonNegativeIntRelation)
    +   * A map from integer (d1) -> (IBinaryNonNegativeIntRelation)
        * 
    -   * For fact d1, paths[d1] gives a relation R=(n,d2) s.t. ( -> ) is a path edge.
    +   * For fact d1, paths[d1] gives a relation R=(n,d2) s.t. (<s_p, d1> -> <n,d2>) is a path edge.
        * 
        * 
        * We choose this somewhat convoluted representation for the following reasons: 1) of the (n, d1, d2) tuple-space, we expect the
    @@ -71,16 +71,16 @@ public class LocalPathEdges {
       private final SparseVector altPaths;
     
       /**
    -   * a map from integer d1 -> int set.
    +   * a map from integer d1 -> int set.
        * 
    -   * for fact d1, identityPaths[d1] gives the set of block numbers N s.t. for n \in N,  ->  is a path edge.
    +   * for fact d1, identityPaths[d1] gives the set of block numbers N s.t. for n \in N, <s_p, d1> -> <n, d1> is a path edge.
        */
       private final SparseVector identityPaths = new SparseVector<>(1, 1.1f);
     
       /**
    -   * a map from integer d2 -> int set
    +   * a map from integer d2 -> int set
        * 
    -   * for fact d2, zeroPaths[d2] gives the set of block numbers N s.t. for n \in N,  ->  is a path edge.
    +   * for fact d2, zeroPaths[d2] gives the set of block numbers N s.t. for n \in N, <s_p, 0> -> <n, d2> is a path edge.
        */
       private final SparseVector zeroPaths = new SparseVector<>(1, 1.1f);
     
    @@ -193,8 +193,8 @@ public class LocalPathEdges {
       }
     
       /**
    -   * N.B: If we're using the ZERO_PATH_SHORT_CIRCUIT, then we may have  ->  implicitly represented since we also
    -   * have  -> . However, getInverse()  will NOT  return these implicit d1 bits in the result. This translates
    +   * N.B: If we're using the ZERO_PATH_SHORT_CIRCUIT, then we may have <s_p, d1> -> <n, d2> implicitly represented since we also
    +   * have <s_p, 0> -> <n,d2>. However, getInverse() <b> will NOT </b> return these implicit d1 bits in the result. This translates
        * to saying that the caller had better not care about any other d1 other than d1==0 if d1==0 is present. This happens to be true
        * in the single use of getInverse() in the tabulation solver, which uses getInverse() to propagate flow from an exit node back to
        * the caller's return site(s). Since we know that we will see flow from fact 0 to the return sites(s), we don't care about other
    diff --git a/com.ibm.wala.core/src/com/ibm/wala/dataflow/IFDS/LocalSummaryEdges.java b/com.ibm.wala.core/src/com/ibm/wala/dataflow/IFDS/LocalSummaryEdges.java
    index 123f04210..ace18309f 100644
    --- a/com.ibm.wala.core/src/com/ibm/wala/dataflow/IFDS/LocalSummaryEdges.java
    +++ b/com.ibm.wala.core/src/com/ibm/wala/dataflow/IFDS/LocalSummaryEdges.java
    @@ -25,10 +25,10 @@ import com.ibm.wala.util.math.LongUtil;
     public class LocalSummaryEdges {
     
       /**
    -   * A map from integer n -> (IBinaryNonNegativeIntRelation)
    +   * A map from integer n -> (IBinaryNonNegativeIntRelation)
        * 
        * Let s_p be an entry to this procedure, and x be an exit. n is a integer which uniquely identifies an (s_p,x) relation. For any
    -   * such n, summaries[n] gives a relation R=(d1,d2) s.t. ( -> ) is a summary edge.
    +   * such n, summaries[n] gives a relation R=(d1,d2) s.t. (<s_p, d1> -> <x,d2>) is a summary edge.
        * 
        * Note that this representation is a little different from the representation described in the PoPL 95 paper. We cache summary
        * edges at the CALLEE, not at the CALLER!!! This allows us to avoid eagerly installing summary edges at all call sites to a
    @@ -61,7 +61,7 @@ public class LocalSummaryEdges {
       }
     
       /**
    -   * Record a summary edge for the flow d1 -> d2 from an entry s_p to an exit x.
    +   * Record a summary edge for the flow d1 -> d2 from an entry s_p to an exit x.
        * 
        * @param s_p local block number an entry
        * @param x local block number of an exit block
    diff --git a/com.ibm.wala.core/src/com/ibm/wala/dataflow/IFDS/PartiallyBalancedTabulationSolver.java b/com.ibm.wala.core/src/com/ibm/wala/dataflow/IFDS/PartiallyBalancedTabulationSolver.java
    index b24cc1642..01cef3538 100644
    --- a/com.ibm.wala.core/src/com/ibm/wala/dataflow/IFDS/PartiallyBalancedTabulationSolver.java
    +++ b/com.ibm.wala.core/src/com/ibm/wala/dataflow/IFDS/PartiallyBalancedTabulationSolver.java
    @@ -89,7 +89,7 @@ public class PartiallyBalancedTabulationSolver extends TabulationSolver
       }
     
       /**
    -   * A path edge  ->  was propagated, and  was an unbalanced seed.
    +   * A path edge <s_p, i> -> <n, j> was propagated, and <s_p, i> was an unbalanced seed.
        * So, we added a new seed callerSeed (to some return site) in the caller.  To be overridden
        * in subclasses.
        */
    diff --git a/com.ibm.wala.core/src/com/ibm/wala/dataflow/IFDS/PathEdge.java b/com.ibm.wala.core/src/com/ibm/wala/dataflow/IFDS/PathEdge.java
    index 199fe81bf..4db0dfe6c 100644
    --- a/com.ibm.wala.core/src/com/ibm/wala/dataflow/IFDS/PathEdge.java
    +++ b/com.ibm.wala.core/src/com/ibm/wala/dataflow/IFDS/PathEdge.java
    @@ -12,7 +12,7 @@ package com.ibm.wala.dataflow.IFDS;
     
     
     /**
    - * an individual edge  -> 
    + * an individual edge <entry, d1> -> <target, d2>
      * 
      * @param  node type in the supergraph
      */
    diff --git a/com.ibm.wala.core/src/com/ibm/wala/dataflow/IFDS/SingletonFlowFunction.java b/com.ibm.wala.core/src/com/ibm/wala/dataflow/IFDS/SingletonFlowFunction.java
    index 0a602b2bf..0c07d2af0 100644
    --- a/com.ibm.wala.core/src/com/ibm/wala/dataflow/IFDS/SingletonFlowFunction.java
    +++ b/com.ibm.wala.core/src/com/ibm/wala/dataflow/IFDS/SingletonFlowFunction.java
    @@ -13,7 +13,7 @@ package com.ibm.wala.dataflow.IFDS;
     import com.ibm.wala.util.intset.SparseIntSet;
     
     /**
    - * A flow function which has only the edge 0 -> dest
    + * A flow function which has only the edge 0 -> dest
      */
     public class SingletonFlowFunction implements IReversibleFlowFunction {
     
    diff --git a/com.ibm.wala.core/src/com/ibm/wala/dataflow/IFDS/TabulationResult.java b/com.ibm.wala.core/src/com/ibm/wala/dataflow/IFDS/TabulationResult.java
    index 2c162d214..7fbb8ebb7 100644
    --- a/com.ibm.wala.core/src/com/ibm/wala/dataflow/IFDS/TabulationResult.java
    +++ b/com.ibm.wala.core/src/com/ibm/wala/dataflow/IFDS/TabulationResult.java
    @@ -15,7 +15,7 @@ import java.util.Collection;
     import com.ibm.wala.util.intset.IntSet;
     
     /**
    - * The solution of a tabulation problem: a mapping from supergraph node -> bit vector representing the dataflow facts that hold at
    + * The solution of a tabulation problem: a mapping from supergraph node -> bit vector representing the dataflow facts that hold at
      * the entry to the supergraph node.
      * 
      * @param  type of node in the supergraph
    diff --git a/com.ibm.wala.core/src/com/ibm/wala/dataflow/IFDS/TabulationSolver.java b/com.ibm.wala.core/src/com/ibm/wala/dataflow/IFDS/TabulationSolver.java
    index 6a3dad199..8c43230ea 100644
    --- a/com.ibm.wala.core/src/com/ibm/wala/dataflow/IFDS/TabulationSolver.java
    +++ b/com.ibm.wala.core/src/com/ibm/wala/dataflow/IFDS/TabulationSolver.java
    @@ -110,23 +110,23 @@ public class TabulationSolver {
       private final TabulationProblem problem;
     
       /**
    -   * A map from Object (entry node in supergraph) -> LocalPathEdges.
    +   * A map from Object (entry node in supergraph) -> LocalPathEdges.
        *
    -   * Logically, this represents a set of edges (s_p,d_i) -> (n, d_j). The data structure is chosen to attempt to save space over
    +   * Logically, this represents a set of edges (s_p,d_i) -> (n, d_j). The data structure is chosen to attempt to save space over
        * representing each edge explicitly.
        */
       final private Map pathEdges = HashMapFactory.make();
     
       /**
    -   * A map from Object (entry node in supergraph) -> CallFlowEdges.
    +   * A map from Object (entry node in supergraph) -> CallFlowEdges.
        *
    -   * Logically, this represents a set of edges (c,d_i) -> (s_p, d_j). The data structure is chosen to attempt to save space over
    +   * Logically, this represents a set of edges (c,d_i) -> (s_p, d_j). The data structure is chosen to attempt to save space over
        * representing each edge explicitly.
        */
       final private Map callFlowEdges = HashMapFactory.make();
     
       /**
    -   * A map from Object (procedure) -> LocalSummaryEdges.
    +   * A map from Object (procedure) -> LocalSummaryEdges.
        *
        */
       final protected Map summaryEdges = HashMapFactory.make();
    @@ -754,7 +754,7 @@ public class TabulationSolver {
       }
     
       /**
    -   * Propagate the fact  ->  has arisen as a path edge. Returns true iff the path edge was not previously
    +   * Propagate the fact <s_p,i> -> <n, j> has arisen as a path edge. Returns <code>true</code> iff the path edge was not previously
        * observed.
        *
        * @param s_p entry block
    @@ -791,10 +791,10 @@ public class TabulationSolver {
       }
     
       /**
    -   * Merging: suppose we're doing propagate  ->  but we already have path edges  -> ,  -> , and
    -   *  ->.
    +   * Merging: suppose we're doing propagate <s_p,i> -> <n,j> but we already have path edges <s_p,i> -> <n, x>, <s_p,i> -> <n,y>, and
    +   * <s_p,i> -><n, z>.
        *
    -   * let \alpha be the merge function. then instead of  -> , we propagate  ->  !!!
    +   * let \alpha be the merge function. then instead of <s_p,i> -> <n,j>, we propagate <s_p,i> -> <n, \alpha(j,x,y,z) > !!!
        *
        * return -1 if no fact should be propagated
        */
    @@ -1042,9 +1042,9 @@ public class TabulationSolver {
       }
     
       /**
    -   * Indicates that due to a path edge  ->  (the 'edge'
    -   * parameter) and a normal flow function application, a new path edge  ->  was created. To be overridden in subclasses. We also use
    +   * Indicates that due to a path edge <s_p, d1> -> <n, d2> (the 'edge'
    +   * parameter) and a normal flow function application, a new path edge <s_p,
    +   * d1> -> <m, d3> was created. To be overridden in subclasses. We also use
        * this function to record call-to-return flow.
        *
        */
    @@ -1054,9 +1054,9 @@ public class TabulationSolver {
       }
     
       /**
    -   * Indicates that due to a path edge 'edge'  ->  and
    -   * application of a call flow function, a new path edge  ->
    -   *  was created. To be overridden in subclasses.
    +   * Indicates that due to a path edge 'edge' <s_p, d1> -> <n, d2> and
    +   * application of a call flow function, a new path edge <calleeEntry, d3> ->
    +   * <calleeEntry, d3> was created. To be overridden in subclasses.
        *
        */
       @SuppressWarnings("unused")
    @@ -1066,10 +1066,10 @@ public class TabulationSolver {
     
       /**
        * Combines [25] and [26-28]. In the caller we have a path edge
    -   * 'edgeToCallSite'  -> , where c is the call site. In the
    -   * callee, we have path edge 'calleeSummaryEdge'  -> . Of
    -   * course, there is a call edge  -> . Finally, we have a
    -   * return edge  -> .
    +   * 'edgeToCallSite' <s_c, d3> -> <c, d4>, where c is the call site. In the
    +   * callee, we have path edge 'calleeSummaryEdge' <s_p, d1> -> <e_p, d2>. Of
    +   * course, there is a call edge <c, d4> -> <s_p, d1>. Finally, we have a
    +   * return edge <e_p, d2> -> <returnSite, d5>.
        */
       @SuppressWarnings("unused")
       protected void newSummaryEdge(PathEdge edgeToCallSite, PathEdge calleeSummaryEdge, T returnSite, int d5) {
    diff --git a/com.ibm.wala.core/src/com/ibm/wala/demandpa/flowgraph/AbstractFlowGraph.java b/com.ibm.wala.core/src/com/ibm/wala/demandpa/flowgraph/AbstractFlowGraph.java
    index 5cd0e54d9..2b4314f60 100644
    --- a/com.ibm.wala.core/src/com/ibm/wala/demandpa/flowgraph/AbstractFlowGraph.java
    +++ b/com.ibm.wala.core/src/com/ibm/wala/demandpa/flowgraph/AbstractFlowGraph.java
    @@ -114,7 +114,7 @@ public abstract class AbstractFlowGraph extends SlowSparseNumberedLabeledGraph SSAInvokeInstruction. If we have (x, foo()), that means that x was def'fed by the return value from the
    +   * Map: LocalPointerKey -> SSAInvokeInstruction. If we have (x, foo()), that means that x was def'fed by the return value from the
        * call to foo()
        */
       protected final Map callDefs = HashMapFactory.make();
    @@ -127,7 +127,7 @@ public abstract class AbstractFlowGraph extends SlowSparseNumberedLabeledGraph> callParams = HashMapFactory.make();
     
       /**
    -   * Map: LocalPointerKey -> CGNode. If we have (x, foo), then x is a parameter of method foo. For now, we have to re-discover the
    +   * Map: LocalPointerKey -> CGNode. If we have (x, foo), then x is a parameter of method foo. For now, we have to re-discover the
        * parameter position. TODO this should just be a set; we can get the CGNode from the {@link LocalPointerKey}
        */
       protected final Map params = HashMapFactory.make();
    diff --git a/com.ibm.wala.core/src/com/ibm/wala/demandpa/flowgraph/SimpleDemandPointerFlowGraph.java b/com.ibm.wala.core/src/com/ibm/wala/demandpa/flowgraph/SimpleDemandPointerFlowGraph.java
    index ff059b903..475716081 100644
    --- a/com.ibm.wala.core/src/com/ibm/wala/demandpa/flowgraph/SimpleDemandPointerFlowGraph.java
    +++ b/com.ibm.wala.core/src/com/ibm/wala/demandpa/flowgraph/SimpleDemandPointerFlowGraph.java
    @@ -81,13 +81,13 @@ import com.ibm.wala.util.ref.ReferenceCleanser;
      * 
      * The edges represent
      * 
      - *
    • flow from local -> local representing assignment (i.e. phi,pi) - *
    • flow from instancekey -> local for news - *
    • flow from formal -> actual parameter - *
    • flow from return value -> local + *
    • flow from local -> local representing assignment (i.e. phi,pi) + *
    • flow from instancekey -> local for news + *
    • flow from formal -> actual parameter + *
    • flow from return value -> local *
    • match edges - *
    • local -> local edges representing loads/stores (e.g. x = y.f will have a edge x->y, labelled with f) for a getstatic x = Y.f, - * we have an edge from x -> Y.f. + *
    • local -> local edges representing loads/stores (e.g. x = y.f will have a edge x->y, labelled with f) for a getstatic x = Y.f, + * we have an edge from x -> Y.f. *
    * * N.B: Edges go OPPOSITE the flow of values. @@ -119,20 +119,20 @@ public class SimpleDemandPointerFlowGraph extends SlowSparseNumberedGraph IField. if we have (x,f), that means x was def'fed by a getfield on f. + * Map: LocalPointerKey -> IField. if we have (x,f), that means x was def'fed by a getfield on f. */ final Map getFieldDefs = HashMapFactory.make(); final Collection arrayDefs = HashSetFactory.make(); /** - * Map: LocalPointerKey -> SSAInvokeInstruction. If we have (x, foo()), that means that x was def'fed by the return value from a + * Map: LocalPointerKey -> SSAInvokeInstruction. If we have (x, foo()), that means that x was def'fed by the return value from a * call to foo() */ final Map callDefs = HashMapFactory.make(); /** - * Map: LocalPointerKey -> CGNode. If we have (x, foo), then x is a parameter of method foo. For now, we have to re-discover the + * Map: LocalPointerKey -> CGNode. If we have (x, foo), then x is a parameter of method foo. For now, we have to re-discover the * parameter position. */ final Map params = HashMapFactory.make(); diff --git a/com.ibm.wala.core/src/com/ibm/wala/demandpa/util/SimpleMemoryAccessMap.java b/com.ibm.wala.core/src/com/ibm/wala/demandpa/util/SimpleMemoryAccessMap.java index 36b570f71..2198d3630 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/demandpa/util/SimpleMemoryAccessMap.java +++ b/com.ibm.wala.core/src/com/ibm/wala/demandpa/util/SimpleMemoryAccessMap.java @@ -63,12 +63,12 @@ public class SimpleMemoryAccessMap implements MemoryAccessMap { private static final boolean ALWAYS_BUILD_IR = true; /** - * Map: IField -> Set + * Map: IField -> Set<MemoryAccess> */ final private Map> readMap = HashMapFactory.make(); /** - * Map: IField -> Set + * Map: IField -> Set<MemoryAccess> */ final private Map> writeMap = HashMapFactory.make(); 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 04e7cf7c5..01e3866b1 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 @@ -51,7 +51,7 @@ public class FILiveObjectAnalysis implements ILiveObjectAnalysis { private final HeapGraph heapGraph; /** - * Cached map from InstanceKey -> Set + * Cached map from InstanceKey -> Set<CGNode> */ final private Map> liveNodes = HashMapFactory.make(); diff --git a/com.ibm.wala.core/src/com/ibm/wala/escape/ILiveObjectAnalysis.java b/com.ibm.wala.core/src/com/ibm/wala/escape/ILiveObjectAnalysis.java index d3254e07d..fdbf2484d 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/escape/ILiveObjectAnalysis.java +++ b/com.ibm.wala.core/src/com/ibm/wala/escape/ILiveObjectAnalysis.java @@ -26,8 +26,8 @@ public interface ILiveObjectAnalysis { * @param m method in question * @param instructionIndex index of an instruction in SSA IR. in m. if -1, it is interpreted as a wildcard meaning "any statement" * @throws WalaException - * @returns true if an object allocated at the allocation site <allocMethod,allocPC> may be live immediately after the - * statement + * @returns true if an object allocated at the allocation site <allocMethod,allocPC> may be live immediately after the + * statement <m,instructionIndex> */ public boolean mayBeLive(CGNode allocMethod, int allocPC, CGNode m, int instructionIndex) throws WalaException; @@ -36,8 +36,8 @@ public interface ILiveObjectAnalysis { * @param m method in question * @param instructionIndex index of an instruction in SSA IR. in m. if -1, it is interpreted as a wildcard meaning "any statement" * @throws WalaException - * @returns true if an object allocated at the allocation site <allocMethod,allocPC> may be live immediately after the - * statement + * @returns true if an object allocated at the allocation site <allocMethod,allocPC> may be live immediately after the + * statement <m,instructionIndex> */ public boolean mayBeLive(InstanceKey ik, CGNode m, int instructionIndex) throws WalaException; @@ -45,8 +45,8 @@ public interface ILiveObjectAnalysis { * @param ik an instance key * @param m method in question * @param instructionIndices indices of instructions in SSA IR. - * @returns true if an object allocated at the allocation site <allocMethod,allocPC> may be live immediately after the - * statement for any instructionIndex in the set + * @returns true if an object allocated at the allocation site <allocMethod,allocPC> may be live immediately after the + * statement <m,instructionIndex> for any instructionIndex in the set */ public boolean mayBeLive(InstanceKey ik, CGNode m, IntSet instructionIndices); diff --git a/com.ibm.wala.core/src/com/ibm/wala/escape/IMethodEscapeAnalysis.java b/com.ibm.wala.core/src/com/ibm/wala/escape/IMethodEscapeAnalysis.java index 8049e80c6..0cf7cc32f 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/escape/IMethodEscapeAnalysis.java +++ b/com.ibm.wala.core/src/com/ibm/wala/escape/IMethodEscapeAnalysis.java @@ -22,7 +22,7 @@ public interface IMethodEscapeAnalysis { * @param allocMethod a method which holds an allocation site * @param allocPC bytecode index of allocation site * @param m method in question - * @returns true if an object allocated at the allocation site <allocMethod,allocPC> may escape from an activation of method m, + * @returns true if an object allocated at the allocation site <allocMethod,allocPC> may escape from an activation of method m, * false otherwise */ public boolean mayEscape(MethodReference allocMethod, int allocPC, MethodReference m) throws WalaException; diff --git a/com.ibm.wala.core/src/com/ibm/wala/escape/INodeEscapeAnalysis.java b/com.ibm.wala.core/src/com/ibm/wala/escape/INodeEscapeAnalysis.java index f9015f570..2c10a336d 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/escape/INodeEscapeAnalysis.java +++ b/com.ibm.wala.core/src/com/ibm/wala/escape/INodeEscapeAnalysis.java @@ -23,7 +23,7 @@ public interface INodeEscapeAnalysis extends IMethodEscapeAnalysis { * @param allocPC bytecode index of allocation site * @param node method in question * @throws WalaException - * @returns true if an object allocated at the allocation site <allocMethod,allocPC> may escape from an activation of node m, + * @returns true if an object allocated at the allocation site <allocMethod,allocPC> may escape from an activation of node m, * false otherwise */ public boolean mayEscape(CGNode allocNode, int allocPC, CGNode node) throws WalaException; diff --git a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/Context.java b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/Context.java index 7d9c76ff3..7fbf6810a 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/Context.java +++ b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/Context.java @@ -16,7 +16,7 @@ package com.ibm.wala.ipa.callgraph; * For example, for CFA-1, there is only one name ("caller"); and the context maps "caller" to an IMethod * * As another example, for CPA, there would be name for each parameter slot ("zero","one","two"), and the Context provides a mapping - * from this name to a set of types. eg. "one" -> {java.lang.String, java.lang.Date} + * from this name to a set of types. eg. "one" -> {java.lang.String, java.lang.Date} */ public interface Context { /** 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 f4d6a5f84..fe7d2295f 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 @@ -134,7 +134,7 @@ public class ExplicitCallGraph extends BasicCallGraph imp public class ExplicitNode extends NodeImpl { /** - * A Mapping from call site program counter (int) -> Object, where Object is a CGNode if we've discovered exactly one target for + * A Mapping from call site program counter (int) -> Object, where Object is a CGNode if we've discovered exactly one target for * the site, or an IntSet of node numbers if we've discovered more than one target for the site. */ protected final SparseVector targets = new SparseVector<>(); diff --git a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/impl/UnionContextSelector.java b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/impl/UnionContextSelector.java index c4ddb0d85..6846921de 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/impl/UnionContextSelector.java +++ b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/impl/UnionContextSelector.java @@ -31,7 +31,7 @@ import com.ibm.wala.util.intset.IntSet; * * @see com.ibm.wala.ipa.callgraph.impl.DelegatingContextSelector * - * @author Tobias Blaschke + * @author Tobias Blaschke <code@tobiasblaschke.de> */ public class UnionContextSelector implements ContextSelector { private final ContextSelector A; 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 e267887d9..772f294d4 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 @@ -188,7 +188,7 @@ public class Util { /** * @return Entrypoints for a set of J2SE Main classes * @throws IllegalArgumentException if classNames == null - * @throws IllegalArgumentException if (classNames != null) and (0 < classNames.length) and (classNames[0] == null) + * @throws IllegalArgumentException if (classNames != null) and (0 < classNames.length) and (classNames[0] == null) * @throws IllegalArgumentException if classNames.length == 0 */ public static Iterable makeMainEntrypoints(final ClassLoaderReference loaderRef, final IClassHierarchy cha, diff --git a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/InstanceKey.java b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/InstanceKey.java index 772dd501c..e2ca8d698 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/InstanceKey.java +++ b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/InstanceKey.java @@ -23,10 +23,10 @@ import com.ibm.wala.util.collections.Pair; * An InstanceKey serves as the representative for an equivalence class of * objects in the heap, that can be pointed to. * - * For example, for 0-CFA, an InstanceKey would embody an ... we model + * For example, for 0-CFA, an InstanceKey would embody an <IClass>... we model * all instances of a particular class * - * For 0-1-CFA, an InstanceKey could be , representing a + * For 0-1-CFA, an InstanceKey could be <IMethod,statement #>, representing a * particular allocation statement in a particular method. */ public interface InstanceKey extends ContextItem { diff --git a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/PointerKey.java b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/PointerKey.java index 7a9becccc..47239f9ac 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/PointerKey.java +++ b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/PointerKey.java @@ -14,15 +14,15 @@ package com.ibm.wala.ipa.callgraph.propagation; * A PointerKey instance serves as the representative for an equivalence class * of pointers. (or more generally ...locations, if we allow primitives). * - * For example, a PointerKey for 0-CFA might be - a pair, where the + * For example, a PointerKey for 0-CFA might be - a <CGNode,int> pair, where the * int represents an SSA value number. This PointerKey would represent all - * values of the pointer of a particular local variable. - a , + * values of the pointer of a particular local variable. - a <FieldReference>, * representing the set of instances of a given field in the heap, or of a * particular static field. * * A PointerKey for 0-1-CFA, with 1-level of InstanceVar context in the Grove et - * al. terminology, would instead of FieldReference, use a - pair + * al. terminology, would instead of FieldReference, use a - <InstanceKey, + * FieldReference> pair */ public interface PointerKey { 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 3e5b8cefe..40ef1573f 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 @@ -589,7 +589,7 @@ public abstract class PropagationCallGraphBuilder implements CallGraphBuilder:= Cast_k( ) + * Unary op: <lhs>:= Cast_k( <rhs>) * * (Again, technically a binary op -- see note for Assign) * @@ -803,7 +803,7 @@ public abstract class PropagationCallGraphBuilder implements CallGraphBuilder:= ArrayLoad( <arrayref>) Side effect: Creates new equations. + * Binary op: <dummy>:= ArrayLoad( <arrayref>) Side effect: Creates new equations. */ public final class ArrayLoadOperator extends UnarySideEffect implements IPointerOperator { protected final MutableIntSet priorInstances = rememberGetPutHistory ? IntSetUtil.make() : null; @@ -892,7 +892,7 @@ public abstract class PropagationCallGraphBuilder implements CallGraphBuilder:= ArrayStore( <arrayref>) Side effect: Creates new equations. + * Binary op: <dummy>:= ArrayStore( <arrayref>) Side effect: Creates new equations. */ public final class ArrayStoreOperator extends UnarySideEffect implements IPointerOperator { @Override @@ -976,7 +976,7 @@ public abstract class PropagationCallGraphBuilder implements CallGraphBuilder:= GetField( ) Side effect: Creates new equations. + * Binary op: <dummy>:= GetField( <ref>) Side effect: Creates new equations. */ public class GetFieldOperator extends UnarySideEffect implements IPointerOperator { private final IField field; diff --git a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/PropagationGraph.java b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/PropagationGraph.java index dcf9ac3f6..428c24966 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/PropagationGraph.java +++ b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/PropagationGraph.java @@ -442,7 +442,7 @@ public class PropagationGraph implements IFixedPointSystem } /** - * A graph of just the variables in the system. v1 -> v2 iff there exists equation e s.t. e uses v1 and e defs v2. + * A graph of just the variables in the system. v1 -> v2 iff there exists equation e s.t. e uses v1 and e defs v2. * * Note that this graph trickily and fragilely reuses the nodeManager from the delegateGraph, above. This will work ok as long as * every variable is inserted in the delegateGraph. @@ -834,7 +834,7 @@ public class PropagationGraph implements IFixedPointSystem } /** - * A graph of just the variables in the system. v1 -> v2 iff there exists an assignment equation e s.t. e uses v1 and e defs v2. + * A graph of just the variables in the system. v1 -> v2 iff there exists an assignment equation e s.t. e uses v1 and e defs v2. * */ public NumberedGraph getAssignmentGraph() { @@ -848,7 +848,7 @@ public class PropagationGraph implements IFixedPointSystem } /** - * A graph of just the variables in the system. v1 -> v2 iff there exists an Assingnment or Filter equation e s.t. e uses v1 and e + * A graph of just the variables in the system. v1 -> v2 iff there exists an Assingnment or Filter equation e s.t. e uses v1 and e * defs v2. * */ @@ -871,7 +871,7 @@ public class PropagationGraph implements IFixedPointSystem } /** - * A graph of just the variables in the system. v1 -> v2 that are related by def-use with "interesting" operators + * A graph of just the variables in the system. v1 -> v2 that are related by def-use with "interesting" operators * */ private abstract class FilteredConstraintGraphView extends AbstractNumberedGraph { diff --git a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/PropagationSystem.java b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/PropagationSystem.java index 41f683ea4..c0fd3823c 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/PropagationSystem.java +++ b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/PropagationSystem.java @@ -81,7 +81,7 @@ public class PropagationSystem extends DefaultFixedPointSolver instanceKeys = MutableMapping.make(); /** - * A mapping from IClass -> MutableSharedBitVectorIntSet The range represents the instance keys that correspond to a given class. + * A mapping from IClass -> MutableSharedBitVectorIntSet The range represents the instance keys that correspond to a given class. * This mapping is used to filter sets based on declared types; e.g., in cast constraints */ final private Map class2InstanceKey = HashMapFactory.make(); @@ -104,7 +104,7 @@ public class PropagationSystem extends DefaultFixedPointSolver Set + * This maintains a map from PointsToSetVariable -> Set<UnarySideEffect> */ final private Map> fixedSetMap = HashMapFactory.make(); diff --git a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/cfa/CallerContextPair.java b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/cfa/CallerContextPair.java index cf55d55fe..6c27ec084 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/cfa/CallerContextPair.java +++ b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/cfa/CallerContextPair.java @@ -17,7 +17,7 @@ import com.ibm.wala.ipa.callgraph.ContextItem; import com.ibm.wala.ipa.callgraph.ContextKey; /** - * This is a {@link Context} which is defined by a pair consisting of . + * This is a {@link Context} which is defined by a pair consisting of <caller node, base context>. * * The base context is typically some special case; e.g., a JavaTypeContext used for reflection. */ diff --git a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/cfa/CallerSiteContext.java b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/cfa/CallerSiteContext.java index 662378aa4..540c407e1 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/cfa/CallerSiteContext.java +++ b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/cfa/CallerSiteContext.java @@ -16,7 +16,7 @@ import com.ibm.wala.ipa.callgraph.ContextItem; import com.ibm.wala.ipa.callgraph.ContextKey; /** - * A context which is a pair. + * A context which is a <CGNode, CallSiteReference> pair. */ public class CallerSiteContext extends CallerContext { diff --git a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/cfa/CallerSiteContextPair.java b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/cfa/CallerSiteContextPair.java index 3db0f3075..a6d54e221 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/cfa/CallerSiteContextPair.java +++ b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/cfa/CallerSiteContextPair.java @@ -17,7 +17,7 @@ import com.ibm.wala.ipa.callgraph.ContextItem; import com.ibm.wala.ipa.callgraph.ContextKey; /** - * This is a context which is defined by a pair consisting of . + * This is a context which is defined by a pair consisting of <caller node, base context>. * * The base context is typically some special case; e.g., a JavaTypeContext used for reflection. */ diff --git a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/cfa/ZeroXInstanceKeys.java b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/cfa/ZeroXInstanceKeys.java index db7b94257..f9d76366f 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/cfa/ZeroXInstanceKeys.java +++ b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/cfa/ZeroXInstanceKeys.java @@ -86,8 +86,8 @@ public class ZeroXInstanceKeys implements InstanceKeyFactory { public static final int SMUSH_PRIMITIVE_HOLDERS = 8; /** - * This variant counts the N, number of allocation sites of a particular type T in each method. If N > SMUSH_LIMIT, then these N - * allocation sites are NOT distinguished ... instead there is a single abstract allocation site for + * This variant counts the N, number of allocation sites of a particular type T in each method. If N > SMUSH_LIMIT, then these N + * allocation sites are NOT distinguished ... instead there is a single abstract allocation site for <N,T> * * Probably the best choice in many cases. */ @@ -134,7 +134,7 @@ public class ZeroXInstanceKeys implements InstanceKeyFactory { final private RTAContextInterpreter contextInterpreter; /** - * a Map from CGNode->Set that should be smushed. + * a Map from CGNode->Set<IClass> that should be smushed. */ protected final Map> smushMap = HashMapFactory.make(); diff --git a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/rta/DelegatingExplicitCallGraph.java b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/rta/DelegatingExplicitCallGraph.java index c838a2837..10ffd625b 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/rta/DelegatingExplicitCallGraph.java +++ b/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/propagation/rta/DelegatingExplicitCallGraph.java @@ -50,10 +50,10 @@ public class DelegatingExplicitCallGraph extends ExplicitCallGraph { } /** - * In this implementation, super.targets is a mapping from call site -> + * In this implementation, super.targets is a mapping from call site -> * Object, where Object is a *