From ea1d6412021e370f46a1edd3ccde9bf91b0115dd Mon Sep 17 00:00:00 2001 From: Mahdi Khosravi Date: Sun, 12 Nov 2023 14:53:50 +0000 Subject: [PATCH 1/5] add includeNonAffected Methods --- .../illinois/starts/jdeps/MethodsMojo.java | 22 ++++++++++++++++--- 1 file changed, 19 insertions(+), 3 deletions(-) diff --git a/starts-plugin/src/main/java/edu/illinois/starts/jdeps/MethodsMojo.java b/starts-plugin/src/main/java/edu/illinois/starts/jdeps/MethodsMojo.java index 1f800f20..4f61110c 100644 --- a/starts-plugin/src/main/java/edu/illinois/starts/jdeps/MethodsMojo.java +++ b/starts-plugin/src/main/java/edu/illinois/starts/jdeps/MethodsMojo.java @@ -78,6 +78,12 @@ public class MethodsMojo extends DiffMojo { @Parameter(property = "computeAffectedTests", defaultValue = FALSE) private boolean computeAffectedTests; + /* + * Set this to "true" to include non-affected methods as well. + */ + @Parameter(property = "includeNonAffected", required = false, defaultValue = "true") + private boolean includeNonAffected; + public void setDebug(boolean debug) { this.debug = debug; } @@ -253,6 +259,10 @@ private void logInfoStatements(boolean impacted) { logger.log(Level.INFO, "AffectedTestClasses: " + affectedTestClasses.size()); } + if (includeNonAffected) { + logger.log(Level.INFO, "NonAffectedMethods: " + nonAffectedMethods.size()); + } + // DEBUG PRINTS if (debug) { logger.log(Level.INFO, "ChangedMethods: " + changedMethods); @@ -260,6 +270,9 @@ private void logInfoStatements(boolean impacted) { if (computeAffectedTests) { logger.log(Level.INFO, "AffectedTestClasses: " + affectedTestClasses); } + if (includeNonAffected) { + logger.log(Level.INFO, "NonAffectedMethods: " + nonAffectedMethods); + } } } @@ -285,9 +298,12 @@ protected void computeChangedMethods() throws MojoExecutionException { changedClasses = dataList == null ? new HashSet() : dataList.get(4); newClasses = MethodLevelStaticDepsBuilder.getClasses(); newClasses.removeAll(oldClasses); - // nonAffectedMethods = MethodLevelStaticDepsBuilder.computeMethods(); - // nonAffectedMethods.removeAll(changedMethods); - // nonAffectedMethods.removeAll(newMethods); + + if (includeNonAffected) { + nonAffectedMethods = MethodLevelStaticDepsBuilder.computeMethods(); + nonAffectedMethods.removeAll(changedMethods); + nonAffectedMethods.removeAll(newMethods); + } } /** From 0d499c8e6258cb94e9a400fe7ff9e1981c8c0ca1 Mon Sep 17 00:00:00 2001 From: Mahdi Khosravi Date: Sun, 12 Nov 2023 15:09:42 +0000 Subject: [PATCH 2/5] added non affected classes for methods mojo --- .../illinois/starts/jdeps/MethodsMojo.java | 38 ++++++++++++++++--- 1 file changed, 32 insertions(+), 6 deletions(-) diff --git a/starts-plugin/src/main/java/edu/illinois/starts/jdeps/MethodsMojo.java b/starts-plugin/src/main/java/edu/illinois/starts/jdeps/MethodsMojo.java index 4f61110c..d5f0c87b 100644 --- a/starts-plugin/src/main/java/edu/illinois/starts/jdeps/MethodsMojo.java +++ b/starts-plugin/src/main/java/edu/illinois/starts/jdeps/MethodsMojo.java @@ -5,6 +5,7 @@ package edu.illinois.starts.jdeps; import java.io.IOException; +import java.lang.reflect.Method; import java.net.URL; import java.nio.file.Files; import java.nio.file.Paths; @@ -40,7 +41,8 @@ public class MethodsMojo extends DiffMojo { private Set oldClasses; private Set changedClasses; private Set affectedTestClasses; - private Set nonAffectedMethods; // This may not be needed at all + private Set nonAffectedMethods; + private Set nonAffectedClasses; private Map methodsCheckSum; private Map> methodToTestClasses; private ClassLoader loader; @@ -81,8 +83,14 @@ public class MethodsMojo extends DiffMojo { /* * Set this to "true" to include non-affected methods as well. */ - @Parameter(property = "includeNonAffected", required = false, defaultValue = "true") - private boolean includeNonAffected; + @Parameter(property = "includeNonAffectedMethods", required = false, defaultValue = "false") + private boolean includeNonAffectedMethods; + + /* + * Set this to "true" to include non-affected classes as well. + */ + @Parameter(property = "includeNonAffectedClasses", required = false, defaultValue = "false") + private boolean includeNonAffectedClasses; public void setDebug(boolean debug) { this.debug = debug; @@ -138,6 +146,10 @@ public Set getNonAffectedMethods() { return Collections.unmodifiableSet(nonAffectedMethods); } + public Set getNonAffectedClasses() { + return Collections.unmodifiableSet(nonAffectedClasses); + } + /** * This method first builds the method-level static dependencies by calling * MethodLevelStaticDepsBuilder.buildMethodsGraph(). @@ -193,6 +205,7 @@ protected void runMethods(boolean impacted) throws MojoExecutionException { changedClasses = new HashSet<>(); newClasses = MethodLevelStaticDepsBuilder.getClasses(); nonAffectedMethods = new HashSet<>(); + nonAffectedClasses = new HashSet<>(); if (computeAffectedTests) { affectedTestClasses = MethodLevelStaticDepsBuilder.computeTestClasses(); @@ -259,10 +272,14 @@ private void logInfoStatements(boolean impacted) { logger.log(Level.INFO, "AffectedTestClasses: " + affectedTestClasses.size()); } - if (includeNonAffected) { + if (includeNonAffectedMethods) { logger.log(Level.INFO, "NonAffectedMethods: " + nonAffectedMethods.size()); } + if (includeNonAffectedClasses) { + logger.log(Level.INFO, "NonAffectedClasses: " + nonAffectedClasses.size()); + } + // DEBUG PRINTS if (debug) { logger.log(Level.INFO, "ChangedMethods: " + changedMethods); @@ -270,9 +287,12 @@ private void logInfoStatements(boolean impacted) { if (computeAffectedTests) { logger.log(Level.INFO, "AffectedTestClasses: " + affectedTestClasses); } - if (includeNonAffected) { + if (includeNonAffectedMethods) { logger.log(Level.INFO, "NonAffectedMethods: " + nonAffectedMethods); } + if (includeNonAffectedClasses) { + logger.log(Level.INFO, "NonAffectedClasses: " + nonAffectedClasses); + } } } @@ -299,11 +319,17 @@ protected void computeChangedMethods() throws MojoExecutionException { newClasses = MethodLevelStaticDepsBuilder.getClasses(); newClasses.removeAll(oldClasses); - if (includeNonAffected) { + if (includeNonAffectedMethods) { nonAffectedMethods = MethodLevelStaticDepsBuilder.computeMethods(); nonAffectedMethods.removeAll(changedMethods); nonAffectedMethods.removeAll(newMethods); } + + if (includeNonAffectedClasses) { + nonAffectedClasses = MethodLevelStaticDepsBuilder.getClasses(); + nonAffectedClasses.removeAll(changedClasses); + nonAffectedClasses.removeAll(newClasses); + } } /** From 06379562edc97c0fe2409633b5630c1cd4b51947 Mon Sep 17 00:00:00 2001 From: Mahdi Khosravi Date: Sun, 12 Nov 2023 15:38:57 +0000 Subject: [PATCH 3/5] add setter for methods --- .../main/java/edu/illinois/starts/jdeps/MethodsMojo.java | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/starts-plugin/src/main/java/edu/illinois/starts/jdeps/MethodsMojo.java b/starts-plugin/src/main/java/edu/illinois/starts/jdeps/MethodsMojo.java index d5f0c87b..2bedcd28 100644 --- a/starts-plugin/src/main/java/edu/illinois/starts/jdeps/MethodsMojo.java +++ b/starts-plugin/src/main/java/edu/illinois/starts/jdeps/MethodsMojo.java @@ -112,6 +112,10 @@ public void setComputeAffectedTests(boolean computeAffectedTests) { this.computeAffectedTests = computeAffectedTests; } + public void setIncludeNonAffectedClasses(boolean includeNonAffectedClasses) { + this.includeNonAffectedClasses = includeNonAffectedClasses; + } + public Set getAffectedMethods() { Set affectedMethods = new HashSet<>(); affectedMethods.addAll(changedMethods); @@ -146,7 +150,7 @@ public Set getNonAffectedMethods() { return Collections.unmodifiableSet(nonAffectedMethods); } - public Set getNonAffectedClasses() { + public Set getNonAffectedClasses() { return Collections.unmodifiableSet(nonAffectedClasses); } From 03b02c3be5df0470c27a004d04c1dd264c9b3831 Mon Sep 17 00:00:00 2001 From: Mahdi Khosravi Date: Sun, 12 Nov 2023 15:45:03 +0000 Subject: [PATCH 4/5] added relevant code for non affected in hybrid mojo --- .../edu/illinois/starts/jdeps/HybridMojo.java | 31 +++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/starts-plugin/src/main/java/edu/illinois/starts/jdeps/HybridMojo.java b/starts-plugin/src/main/java/edu/illinois/starts/jdeps/HybridMojo.java index c21e9fb6..a1dd511f 100644 --- a/starts-plugin/src/main/java/edu/illinois/starts/jdeps/HybridMojo.java +++ b/starts-plugin/src/main/java/edu/illinois/starts/jdeps/HybridMojo.java @@ -40,6 +40,7 @@ public class HybridMojo extends DiffMojo { private Set oldClasses; private Set affectedTestClasses; private Set nonAffectedMethods; + private Set nonAffectedClasses; private Map methodsCheckSum; private Map> classesChecksum; private Map> methodToTestClasses; @@ -69,6 +70,12 @@ public class HybridMojo extends DiffMojo { @Parameter(property = "computeAffectedTests", defaultValue = FALSE) private boolean computeAffectedTests; + /* + * Set this to "true" to include non-affected classes as well. + */ + @Parameter(property = "includeNonAffectedClasses", required = false, defaultValue = "false") + private boolean includeNonAffectedClasses; + public void setComputeImpactedMethods(boolean computeImpactedMethods) { this.computeImpactedMethods = computeImpactedMethods; } @@ -81,6 +88,10 @@ public void setComputeAffectedTests(boolean computeAffectedTests) { this.computeAffectedTests = computeAffectedTests; } + public void setIncludeNonAffectedClasses(boolean includeNonAffectedClasses) { + this.includeNonAffectedClasses = includeNonAffectedClasses; + } + public Set getAffectedMethods() { Set affectedMethods = new HashSet<>(); affectedMethods.addAll(changedMethods); @@ -151,6 +162,10 @@ public Set getNonAffectedMethods() { return Collections.unmodifiableSet(nonAffectedMethods); } + public Set getNonAffectedClasses() { + return Collections.unmodifiableSet(nonAffectedClasses); + } + /** * This method first builds the method-level static dependencies by calling * MethodLevelStaticDepsBuilder.buildMethodsGraph(). @@ -215,6 +230,7 @@ protected void runHybrid(boolean impacted) throws MojoExecutionException { changedClassesWithChangedHeaders = new HashSet<>(); changedClassesWithoutChangedHeaders = new HashSet<>(); nonAffectedMethods = new HashSet<>(); + nonAffectedClasses = new HashSet<>(); if (computeAffectedTests) { affectedTestClasses = MethodLevelStaticDepsBuilder.computeTestClasses(); @@ -302,6 +318,10 @@ private void logInfo(boolean impacted) { logger.log(Level.INFO, "ImpactedClasses: " + impactedClasses.size()); } + if (includeNonAffectedClasses) { + logger.log(Level.INFO, "NonAffectedClasses: " + nonAffectedClasses.size()); + } + // DEBUG PRINTS if (debug) { logger.log(Level.INFO, "ImpactedMethods: " + impactedMethods); @@ -313,6 +333,9 @@ private void logInfo(boolean impacted) { logger.log(Level.INFO, "AffectedTestClasses: " + affectedTestClasses); logger.log(Level.INFO, "ClassToTestClassGraph: " + classToTestClassGraph); } + if (includeNonAffectedClasses) { + logger.log(Level.INFO, "NonAffectedClasses: " + nonAffectedClasses); + } } } @@ -360,6 +383,14 @@ protected void setChangedAndNonaffectedMethods() throws MojoExecutionException { .addAll(classToTestClassGraph.getOrDefault(changedClassesWithChangedHeader, new HashSet<>())); } } + + if (includeNonAffectedClasses) { + nonAffectedClasses = MethodLevelStaticDepsBuilder.getClasses(); + nonAffectedClasses.removeAll(newClasses); + nonAffectedClasses.removeAll(deletedClasses); + nonAffectedClasses.removeAll(changedClassesWithChangedHeaders); + nonAffectedClasses.removeAll(changedClassesWithoutChangedHeaders); + } } /** From 55964925171f5a7f13eb2ee824006998bae0d77c Mon Sep 17 00:00:00 2001 From: Mahdi Khosravi Date: Sun, 12 Nov 2023 15:46:52 +0000 Subject: [PATCH 5/5] changed default to true --- .../edu/illinois/starts/jdeps/HybridMojo.java | 2 +- .../illinois/starts/jdeps/MethodsMojo.java | 21 +------------------ 2 files changed, 2 insertions(+), 21 deletions(-) diff --git a/starts-plugin/src/main/java/edu/illinois/starts/jdeps/HybridMojo.java b/starts-plugin/src/main/java/edu/illinois/starts/jdeps/HybridMojo.java index a1dd511f..23a07fc6 100644 --- a/starts-plugin/src/main/java/edu/illinois/starts/jdeps/HybridMojo.java +++ b/starts-plugin/src/main/java/edu/illinois/starts/jdeps/HybridMojo.java @@ -73,7 +73,7 @@ public class HybridMojo extends DiffMojo { /* * Set this to "true" to include non-affected classes as well. */ - @Parameter(property = "includeNonAffectedClasses", required = false, defaultValue = "false") + @Parameter(property = "includeNonAffectedClasses", required = false, defaultValue = "true") private boolean includeNonAffectedClasses; public void setComputeImpactedMethods(boolean computeImpactedMethods) { diff --git a/starts-plugin/src/main/java/edu/illinois/starts/jdeps/MethodsMojo.java b/starts-plugin/src/main/java/edu/illinois/starts/jdeps/MethodsMojo.java index 2bedcd28..1af70b83 100644 --- a/starts-plugin/src/main/java/edu/illinois/starts/jdeps/MethodsMojo.java +++ b/starts-plugin/src/main/java/edu/illinois/starts/jdeps/MethodsMojo.java @@ -80,16 +80,10 @@ public class MethodsMojo extends DiffMojo { @Parameter(property = "computeAffectedTests", defaultValue = FALSE) private boolean computeAffectedTests; - /* - * Set this to "true" to include non-affected methods as well. - */ - @Parameter(property = "includeNonAffectedMethods", required = false, defaultValue = "false") - private boolean includeNonAffectedMethods; - /* * Set this to "true" to include non-affected classes as well. */ - @Parameter(property = "includeNonAffectedClasses", required = false, defaultValue = "false") + @Parameter(property = "includeNonAffectedClasses", required = false, defaultValue = "true") private boolean includeNonAffectedClasses; public void setDebug(boolean debug) { @@ -276,10 +270,6 @@ private void logInfoStatements(boolean impacted) { logger.log(Level.INFO, "AffectedTestClasses: " + affectedTestClasses.size()); } - if (includeNonAffectedMethods) { - logger.log(Level.INFO, "NonAffectedMethods: " + nonAffectedMethods.size()); - } - if (includeNonAffectedClasses) { logger.log(Level.INFO, "NonAffectedClasses: " + nonAffectedClasses.size()); } @@ -291,9 +281,6 @@ private void logInfoStatements(boolean impacted) { if (computeAffectedTests) { logger.log(Level.INFO, "AffectedTestClasses: " + affectedTestClasses); } - if (includeNonAffectedMethods) { - logger.log(Level.INFO, "NonAffectedMethods: " + nonAffectedMethods); - } if (includeNonAffectedClasses) { logger.log(Level.INFO, "NonAffectedClasses: " + nonAffectedClasses); } @@ -323,12 +310,6 @@ protected void computeChangedMethods() throws MojoExecutionException { newClasses = MethodLevelStaticDepsBuilder.getClasses(); newClasses.removeAll(oldClasses); - if (includeNonAffectedMethods) { - nonAffectedMethods = MethodLevelStaticDepsBuilder.computeMethods(); - nonAffectedMethods.removeAll(changedMethods); - nonAffectedMethods.removeAll(newMethods); - } - if (includeNonAffectedClasses) { nonAffectedClasses = MethodLevelStaticDepsBuilder.getClasses(); nonAffectedClasses.removeAll(changedClasses);