You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ws.apache.org by ve...@apache.org on 2016/05/01 13:56:07 UTC

svn commit: r1741861 - in /webservices/axiom/trunk/buildutils/enforcer-maven-plugin/src/main/java/org/apache/axiom/buildutils/enforcer: EnforceMojo.java PackageCycleDetector.java ReferenceCollector.java ReferenceFilter.java

Author: veithen
Date: Sun May  1 11:56:07 2016
New Revision: 1741861

URL: http://svn.apache.org/viewvc?rev=1741861&view=rev
Log:
Factor out the logic that removes ignored class references.

Added:
    webservices/axiom/trunk/buildutils/enforcer-maven-plugin/src/main/java/org/apache/axiom/buildutils/enforcer/PackageCycleDetector.java
      - copied, changed from r1741860, webservices/axiom/trunk/buildutils/enforcer-maven-plugin/src/main/java/org/apache/axiom/buildutils/enforcer/ReferenceCollector.java
    webservices/axiom/trunk/buildutils/enforcer-maven-plugin/src/main/java/org/apache/axiom/buildutils/enforcer/ReferenceFilter.java
      - copied, changed from r1741860, webservices/axiom/trunk/buildutils/enforcer-maven-plugin/src/main/java/org/apache/axiom/buildutils/enforcer/ReferenceCollector.java
Modified:
    webservices/axiom/trunk/buildutils/enforcer-maven-plugin/src/main/java/org/apache/axiom/buildutils/enforcer/EnforceMojo.java
    webservices/axiom/trunk/buildutils/enforcer-maven-plugin/src/main/java/org/apache/axiom/buildutils/enforcer/ReferenceCollector.java

Modified: webservices/axiom/trunk/buildutils/enforcer-maven-plugin/src/main/java/org/apache/axiom/buildutils/enforcer/EnforceMojo.java
URL: http://svn.apache.org/viewvc/webservices/axiom/trunk/buildutils/enforcer-maven-plugin/src/main/java/org/apache/axiom/buildutils/enforcer/EnforceMojo.java?rev=1741861&r1=1741860&r2=1741861&view=diff
==============================================================================
--- webservices/axiom/trunk/buildutils/enforcer-maven-plugin/src/main/java/org/apache/axiom/buildutils/enforcer/EnforceMojo.java (original)
+++ webservices/axiom/trunk/buildutils/enforcer-maven-plugin/src/main/java/org/apache/axiom/buildutils/enforcer/EnforceMojo.java Sun May  1 11:56:07 2016
@@ -58,7 +58,8 @@ public class EnforceMojo extends Abstrac
         ds.setIncludes(new String[] { "**/*.class" });
         ds.setBasedir(classesDir);
         ds.scan();
-        ReferenceCollector referenceCollector = new ReferenceCollector(ignoredClassReferences);
+        PackageCycleDetector packageCycleDetector = new PackageCycleDetector();
+        ReferenceFilter referenceCollector = new ReferenceFilter(new PackageCycleDetector(), ignoredClassReferences);
         for (String relativePath : ds.getIncludedFiles()) {
             try {
                 InputStream in = new FileInputStream(new File(classesDir, relativePath));
@@ -71,7 +72,7 @@ public class EnforceMojo extends Abstrac
                 throw new MojoExecutionException("Failed to read " + relativePath + ": " + ex.getMessage(), ex);
             }
         }
-        Set<Reference<Clazz>> references = referenceCollector.getClassReferencesForPackageCycle();
+        Set<Reference<Clazz>> references = packageCycleDetector.getClassReferencesForPackageCycle();
         if (references != null) {
             StringBuilder buffer = new StringBuilder("Package cycle detected. Classes involved:");
             for (Reference<Clazz> reference : references) {

Copied: webservices/axiom/trunk/buildutils/enforcer-maven-plugin/src/main/java/org/apache/axiom/buildutils/enforcer/PackageCycleDetector.java (from r1741860, webservices/axiom/trunk/buildutils/enforcer-maven-plugin/src/main/java/org/apache/axiom/buildutils/enforcer/ReferenceCollector.java)
URL: http://svn.apache.org/viewvc/webservices/axiom/trunk/buildutils/enforcer-maven-plugin/src/main/java/org/apache/axiom/buildutils/enforcer/PackageCycleDetector.java?p2=webservices/axiom/trunk/buildutils/enforcer-maven-plugin/src/main/java/org/apache/axiom/buildutils/enforcer/PackageCycleDetector.java&p1=webservices/axiom/trunk/buildutils/enforcer-maven-plugin/src/main/java/org/apache/axiom/buildutils/enforcer/ReferenceCollector.java&r1=1741860&r2=1741861&rev=1741861&view=diff
==============================================================================
--- webservices/axiom/trunk/buildutils/enforcer-maven-plugin/src/main/java/org/apache/axiom/buildutils/enforcer/ReferenceCollector.java (original)
+++ webservices/axiom/trunk/buildutils/enforcer-maven-plugin/src/main/java/org/apache/axiom/buildutils/enforcer/PackageCycleDetector.java Sun May  1 11:56:07 2016
@@ -30,28 +30,17 @@ import org.jgrapht.alg.StrongConnectivit
 import org.jgrapht.graph.DefaultDirectedGraph;
 import org.jgrapht.graph.DirectedSubgraph;
 
-final class ReferenceCollector {
-    private final Set<Reference<Clazz>> ignoredClassReferences;
-    private final Set<Reference<Clazz>> unusedIgnoredClassReferences;
+final class PackageCycleDetector extends ReferenceCollector {
     private final Set<Reference<Package>> packageReferences = new HashSet<>();
     private final Map<Reference<Package>,Reference<Clazz>> classReferenceSamples = new HashMap<>();
     
-    ReferenceCollector(Set<Reference<Clazz>> ignoredClassReferences) {
-        this.ignoredClassReferences = ignoredClassReferences;
-        unusedIgnoredClassReferences = new HashSet<>(ignoredClassReferences);
-    }
-
     void collectClassReference(Reference<Clazz> classReference) {
-        if (ignoredClassReferences.contains(classReference)) {
-            unusedIgnoredClassReferences.remove(classReference);
-        } else {
-            Package fromPackage = classReference.getFrom().getPackage();
-            Package toPackage = classReference.getTo().getPackage();
-            if (!fromPackage.equals(toPackage)) {
-                Reference<Package> packageReference = new Reference<Package>(fromPackage, toPackage);
-                if (packageReferences.add(packageReference)) {
-                    classReferenceSamples.put(packageReference, classReference);
-                }
+        Package fromPackage = classReference.getFrom().getPackage();
+        Package toPackage = classReference.getTo().getPackage();
+        if (!fromPackage.equals(toPackage)) {
+            Reference<Package> packageReference = new Reference<Package>(fromPackage, toPackage);
+            if (packageReferences.add(packageReference)) {
+                classReferenceSamples.put(packageReference, classReference);
             }
         }
     }
@@ -80,8 +69,4 @@ final class ReferenceCollector {
         }
         return null;
     }
-
-    Set<Reference<Clazz>> getUnusedIgnoredClassReferences() {
-        return unusedIgnoredClassReferences;
-    }
 }

Modified: webservices/axiom/trunk/buildutils/enforcer-maven-plugin/src/main/java/org/apache/axiom/buildutils/enforcer/ReferenceCollector.java
URL: http://svn.apache.org/viewvc/webservices/axiom/trunk/buildutils/enforcer-maven-plugin/src/main/java/org/apache/axiom/buildutils/enforcer/ReferenceCollector.java?rev=1741861&r1=1741860&r2=1741861&view=diff
==============================================================================
--- webservices/axiom/trunk/buildutils/enforcer-maven-plugin/src/main/java/org/apache/axiom/buildutils/enforcer/ReferenceCollector.java (original)
+++ webservices/axiom/trunk/buildutils/enforcer-maven-plugin/src/main/java/org/apache/axiom/buildutils/enforcer/ReferenceCollector.java Sun May  1 11:56:07 2016
@@ -18,70 +18,6 @@
  */
 package org.apache.axiom.buildutils.enforcer;
 
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-
-import org.jgrapht.DirectedGraph;
-import org.jgrapht.EdgeFactory;
-import org.jgrapht.alg.StrongConnectivityInspector;
-import org.jgrapht.graph.DefaultDirectedGraph;
-import org.jgrapht.graph.DirectedSubgraph;
-
-final class ReferenceCollector {
-    private final Set<Reference<Clazz>> ignoredClassReferences;
-    private final Set<Reference<Clazz>> unusedIgnoredClassReferences;
-    private final Set<Reference<Package>> packageReferences = new HashSet<>();
-    private final Map<Reference<Package>,Reference<Clazz>> classReferenceSamples = new HashMap<>();
-    
-    ReferenceCollector(Set<Reference<Clazz>> ignoredClassReferences) {
-        this.ignoredClassReferences = ignoredClassReferences;
-        unusedIgnoredClassReferences = new HashSet<>(ignoredClassReferences);
-    }
-
-    void collectClassReference(Reference<Clazz> classReference) {
-        if (ignoredClassReferences.contains(classReference)) {
-            unusedIgnoredClassReferences.remove(classReference);
-        } else {
-            Package fromPackage = classReference.getFrom().getPackage();
-            Package toPackage = classReference.getTo().getPackage();
-            if (!fromPackage.equals(toPackage)) {
-                Reference<Package> packageReference = new Reference<Package>(fromPackage, toPackage);
-                if (packageReferences.add(packageReference)) {
-                    classReferenceSamples.put(packageReference, classReference);
-                }
-            }
-        }
-    }
-    
-    Set<Reference<Clazz>> getClassReferencesForPackageCycle() {
-        DirectedGraph<Package,Reference<Package>> graph = new DefaultDirectedGraph<>(new EdgeFactory<Package,Reference<Package>>() {
-            @Override
-            public Reference<Package> createEdge(Package sourceVertex, Package targetVertex) {
-                return new Reference<Package>(sourceVertex, targetVertex);
-            }
-        });
-        for (Reference<Package> reference : packageReferences) {
-            graph.addVertex(reference.getFrom());
-            graph.addVertex(reference.getTo());
-            graph.addEdge(reference.getFrom(), reference.getTo(), reference);
-        }
-        List<DirectedSubgraph<Package,Reference<Package>>> cycles = new StrongConnectivityInspector<Package,Reference<Package>>(graph).stronglyConnectedSubgraphs();
-        for (DirectedSubgraph<Package,Reference<Package>> cycle : cycles) {
-            if (cycle.vertexSet().size() > 1) {
-                Set<Reference<Clazz>> classReferences = new HashSet<>();
-                for (Reference<Package> packageReference : cycle.edgeSet()) {
-                    classReferences.add(classReferenceSamples.get(packageReference));
-                }
-                return classReferences;
-            }
-        }
-        return null;
-    }
-
-    Set<Reference<Clazz>> getUnusedIgnoredClassReferences() {
-        return unusedIgnoredClassReferences;
-    }
+abstract class ReferenceCollector {
+    abstract void collectClassReference(Reference<Clazz> classReference);
 }

Copied: webservices/axiom/trunk/buildutils/enforcer-maven-plugin/src/main/java/org/apache/axiom/buildutils/enforcer/ReferenceFilter.java (from r1741860, webservices/axiom/trunk/buildutils/enforcer-maven-plugin/src/main/java/org/apache/axiom/buildutils/enforcer/ReferenceCollector.java)
URL: http://svn.apache.org/viewvc/webservices/axiom/trunk/buildutils/enforcer-maven-plugin/src/main/java/org/apache/axiom/buildutils/enforcer/ReferenceFilter.java?p2=webservices/axiom/trunk/buildutils/enforcer-maven-plugin/src/main/java/org/apache/axiom/buildutils/enforcer/ReferenceFilter.java&p1=webservices/axiom/trunk/buildutils/enforcer-maven-plugin/src/main/java/org/apache/axiom/buildutils/enforcer/ReferenceCollector.java&r1=1741860&r2=1741861&rev=1741861&view=diff
==============================================================================
--- webservices/axiom/trunk/buildutils/enforcer-maven-plugin/src/main/java/org/apache/axiom/buildutils/enforcer/ReferenceCollector.java (original)
+++ webservices/axiom/trunk/buildutils/enforcer-maven-plugin/src/main/java/org/apache/axiom/buildutils/enforcer/ReferenceFilter.java Sun May  1 11:56:07 2016
@@ -18,25 +18,16 @@
  */
 package org.apache.axiom.buildutils.enforcer;
 
-import java.util.HashMap;
 import java.util.HashSet;
-import java.util.List;
-import java.util.Map;
 import java.util.Set;
 
-import org.jgrapht.DirectedGraph;
-import org.jgrapht.EdgeFactory;
-import org.jgrapht.alg.StrongConnectivityInspector;
-import org.jgrapht.graph.DefaultDirectedGraph;
-import org.jgrapht.graph.DirectedSubgraph;
-
-final class ReferenceCollector {
+final class ReferenceFilter extends ReferenceCollector {
+    private final ReferenceCollector parent;
     private final Set<Reference<Clazz>> ignoredClassReferences;
     private final Set<Reference<Clazz>> unusedIgnoredClassReferences;
-    private final Set<Reference<Package>> packageReferences = new HashSet<>();
-    private final Map<Reference<Package>,Reference<Clazz>> classReferenceSamples = new HashMap<>();
     
-    ReferenceCollector(Set<Reference<Clazz>> ignoredClassReferences) {
+    ReferenceFilter(ReferenceCollector parent, Set<Reference<Clazz>> ignoredClassReferences) {
+        this.parent = parent;
         this.ignoredClassReferences = ignoredClassReferences;
         unusedIgnoredClassReferences = new HashSet<>(ignoredClassReferences);
     }
@@ -45,40 +36,8 @@ final class ReferenceCollector {
         if (ignoredClassReferences.contains(classReference)) {
             unusedIgnoredClassReferences.remove(classReference);
         } else {
-            Package fromPackage = classReference.getFrom().getPackage();
-            Package toPackage = classReference.getTo().getPackage();
-            if (!fromPackage.equals(toPackage)) {
-                Reference<Package> packageReference = new Reference<Package>(fromPackage, toPackage);
-                if (packageReferences.add(packageReference)) {
-                    classReferenceSamples.put(packageReference, classReference);
-                }
-            }
-        }
-    }
-    
-    Set<Reference<Clazz>> getClassReferencesForPackageCycle() {
-        DirectedGraph<Package,Reference<Package>> graph = new DefaultDirectedGraph<>(new EdgeFactory<Package,Reference<Package>>() {
-            @Override
-            public Reference<Package> createEdge(Package sourceVertex, Package targetVertex) {
-                return new Reference<Package>(sourceVertex, targetVertex);
-            }
-        });
-        for (Reference<Package> reference : packageReferences) {
-            graph.addVertex(reference.getFrom());
-            graph.addVertex(reference.getTo());
-            graph.addEdge(reference.getFrom(), reference.getTo(), reference);
-        }
-        List<DirectedSubgraph<Package,Reference<Package>>> cycles = new StrongConnectivityInspector<Package,Reference<Package>>(graph).stronglyConnectedSubgraphs();
-        for (DirectedSubgraph<Package,Reference<Package>> cycle : cycles) {
-            if (cycle.vertexSet().size() > 1) {
-                Set<Reference<Clazz>> classReferences = new HashSet<>();
-                for (Reference<Package> packageReference : cycle.edgeSet()) {
-                    classReferences.add(classReferenceSamples.get(packageReference));
-                }
-                return classReferences;
-            }
+            parent.collectClassReference(classReference);
         }
-        return null;
     }
 
     Set<Reference<Clazz>> getUnusedIgnoredClassReferences() {