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..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 @@ -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 = "true") + 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); + } } /** 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..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 @@ -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; @@ -78,6 +80,12 @@ public class MethodsMojo 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 = "true") + private boolean includeNonAffectedClasses; + public void setDebug(boolean debug) { this.debug = debug; } @@ -98,6 +106,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); @@ -132,6 +144,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(). @@ -187,6 +203,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(); @@ -253,6 +270,10 @@ private void logInfoStatements(boolean impacted) { logger.log(Level.INFO, "AffectedTestClasses: " + affectedTestClasses.size()); } + if (includeNonAffectedClasses) { + logger.log(Level.INFO, "NonAffectedClasses: " + nonAffectedClasses.size()); + } + // DEBUG PRINTS if (debug) { logger.log(Level.INFO, "ChangedMethods: " + changedMethods); @@ -260,6 +281,9 @@ private void logInfoStatements(boolean impacted) { if (computeAffectedTests) { logger.log(Level.INFO, "AffectedTestClasses: " + affectedTestClasses); } + if (includeNonAffectedClasses) { + logger.log(Level.INFO, "NonAffectedClasses: " + nonAffectedClasses); + } } } @@ -285,9 +309,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 (includeNonAffectedClasses) { + nonAffectedClasses = MethodLevelStaticDepsBuilder.getClasses(); + nonAffectedClasses.removeAll(changedClasses); + nonAffectedClasses.removeAll(newClasses); + } } /**