From 654388e4eb5af59f369a67b670991b3d24e4fd96 Mon Sep 17 00:00:00 2001 From: ABHAY SINGH <75938293+ABHAY0O7@users.noreply.github.com> Date: Sat, 27 Mar 2021 23:00:13 +0530 Subject: [PATCH] Refactor ProjectDependencyAnalysis (#60) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: César Soto Valero --- .../core/analysis/DefaultClassAnalyzer.java | 1 + .../analysis/ProjectDependencyAnalysis.java | 35 +++++++++++++------ 2 files changed, 26 insertions(+), 10 deletions(-) diff --git a/depclean-core/src/main/java/se/kth/depclean/core/analysis/DefaultClassAnalyzer.java b/depclean-core/src/main/java/se/kth/depclean/core/analysis/DefaultClassAnalyzer.java index e19eed95..1ecfcee6 100644 --- a/depclean-core/src/main/java/se/kth/depclean/core/analysis/DefaultClassAnalyzer.java +++ b/depclean-core/src/main/java/se/kth/depclean/core/analysis/DefaultClassAnalyzer.java @@ -38,6 +38,7 @@ public class DefaultClassAnalyzer implements ClassAnalyzer { * @return A set of visited classes. * @throws IOException If there is an error. */ + @Override public Set analyze(URL url) throws IOException { CollectorClassFileVisitor visitor = new CollectorClassFileVisitor(); try { diff --git a/depclean-core/src/main/java/se/kth/depclean/core/analysis/ProjectDependencyAnalysis.java b/depclean-core/src/main/java/se/kth/depclean/core/analysis/ProjectDependencyAnalysis.java index 9a672432..4009ac13 100644 --- a/depclean-core/src/main/java/se/kth/depclean/core/analysis/ProjectDependencyAnalysis.java +++ b/depclean-core/src/main/java/se/kth/depclean/core/analysis/ProjectDependencyAnalysis.java @@ -21,7 +21,6 @@ import java.util.Collections; import java.util.HashSet; -import java.util.Iterator; import java.util.LinkedHashSet; import java.util.Set; import org.apache.maven.artifact.Artifact; @@ -31,14 +30,26 @@ */ public class ProjectDependencyAnalysis { + /** + * Store all the used declared artifacts (ie. used direct dependencies). + */ private final Set usedDeclaredArtifacts; + + /** + * Store all the used undeclared artifacts (ie. used transitive dependencies). + */ private final Set usedUndeclaredArtifacts; + + /** + * Store all the unused declared artifacts (ie. unused transitive dependencies). + */ private final Set unusedDeclaredArtifacts; /** * Ctor. */ - public ProjectDependencyAnalysis(Set usedDeclaredArtifacts, + public ProjectDependencyAnalysis( + Set usedDeclaredArtifacts, Set usedUndeclaredArtifacts, Set unusedDeclaredArtifacts) { this.usedDeclaredArtifacts = safeCopy(usedDeclaredArtifacts); @@ -46,31 +57,33 @@ public ProjectDependencyAnalysis(Set usedDeclaredArtifacts, this.unusedDeclaredArtifacts = safeCopy(unusedDeclaredArtifacts); } + /** + * To prevent unnecessary and unexpected modification in the set. + * + * @param The required set. + * @return An unmodifiable set corresponding to the provided set. + */ private Set safeCopy(Set set) { return (set == null) ? Collections.emptySet() : Collections.unmodifiableSet(new LinkedHashSet(set)); } /** - * Filter not-compile scoped artifacts from unused declared. + * Filter out artifacts with scope other than compile from the set of unused declared artifacts. * * @return updated project dependency analysis * @since 1.3 */ public ProjectDependencyAnalysis ignoreNonCompile() { Set filteredUnusedDeclared = new HashSet<>(unusedDeclaredArtifacts); - for (Iterator iter = filteredUnusedDeclared.iterator(); iter.hasNext(); ) { - Artifact artifact = iter.next(); - if (!artifact.getScope().equals(Artifact.SCOPE_COMPILE)) { - iter.remove(); - } - } + filteredUnusedDeclared.removeIf(artifact -> !artifact.getScope().equals(Artifact.SCOPE_COMPILE)); return new ProjectDependencyAnalysis(usedDeclaredArtifacts, usedUndeclaredArtifacts, filteredUnusedDeclared); } /** * Overrides the hash code value method of the object. */ + @Override public int hashCode() { int hashCode = getUsedDeclaredArtifacts().hashCode(); hashCode = (hashCode * 37) + getUsedUndeclaredArtifacts().hashCode(); @@ -79,7 +92,7 @@ public int hashCode() { } /** - * Used and declared artifacts. + * Used declared artifacts. * * @return {@link Artifact} */ @@ -110,6 +123,7 @@ public Set getUnusedDeclaredArtifacts() { /** * Overrides the standard equals method of Object. */ + @Override public boolean equals(Object object) { if (object instanceof ProjectDependencyAnalysis) { ProjectDependencyAnalysis analysis = (ProjectDependencyAnalysis) object; @@ -124,6 +138,7 @@ && getUsedUndeclaredArtifacts().equals(analysis.getUsedUndeclaredArtifacts()) /** * Overrides de toString standard method of class Object @see java.lang.Object#toString(). */ + @Override public String toString() { StringBuilder buffer = new StringBuilder();