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:42:46 UTC
svn commit: r1741860 -
/webservices/axiom/trunk/buildutils/enforcer-maven-plugin/src/main/java/org/apache/axiom/buildutils/enforcer/
Author: veithen
Date: Sun May 1 11:42:45 2016
New Revision: 1741860
URL: http://svn.apache.org/viewvc?rev=1741860&view=rev
Log:
Enforce distinction between class and package references.
Added:
webservices/axiom/trunk/buildutils/enforcer-maven-plugin/src/main/java/org/apache/axiom/buildutils/enforcer/Clazz.java (with props)
webservices/axiom/trunk/buildutils/enforcer-maven-plugin/src/main/java/org/apache/axiom/buildutils/enforcer/Package.java (with props)
Modified:
webservices/axiom/trunk/buildutils/enforcer-maven-plugin/src/main/java/org/apache/axiom/buildutils/enforcer/ClassProcessor.java
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/Reference.java
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/ReferenceProcessor.java
Modified: webservices/axiom/trunk/buildutils/enforcer-maven-plugin/src/main/java/org/apache/axiom/buildutils/enforcer/ClassProcessor.java
URL: http://svn.apache.org/viewvc/webservices/axiom/trunk/buildutils/enforcer-maven-plugin/src/main/java/org/apache/axiom/buildutils/enforcer/ClassProcessor.java?rev=1741860&r1=1741859&r2=1741860&view=diff
==============================================================================
--- webservices/axiom/trunk/buildutils/enforcer-maven-plugin/src/main/java/org/apache/axiom/buildutils/enforcer/ClassProcessor.java (original)
+++ webservices/axiom/trunk/buildutils/enforcer-maven-plugin/src/main/java/org/apache/axiom/buildutils/enforcer/ClassProcessor.java Sun May 1 11:42:45 2016
@@ -39,7 +39,7 @@ final class ClassProcessor extends Class
String[] interfaces) {
deprecated = (access & Opcodes.ACC_DEPRECATED) != 0;
if (!deprecated) {
- referenceProcessor = new ReferenceProcessor(referenceCollector, Type.getObjectType(name).getClassName());
+ referenceProcessor = new ReferenceProcessor(referenceCollector, new Clazz(Type.getObjectType(name).getClassName()));
referenceProcessor.processType(Type.getObjectType(superName));
for (String iface : interfaces) {
referenceProcessor.processType(Type.getObjectType(iface));
Added: webservices/axiom/trunk/buildutils/enforcer-maven-plugin/src/main/java/org/apache/axiom/buildutils/enforcer/Clazz.java
URL: http://svn.apache.org/viewvc/webservices/axiom/trunk/buildutils/enforcer-maven-plugin/src/main/java/org/apache/axiom/buildutils/enforcer/Clazz.java?rev=1741860&view=auto
==============================================================================
--- webservices/axiom/trunk/buildutils/enforcer-maven-plugin/src/main/java/org/apache/axiom/buildutils/enforcer/Clazz.java (added)
+++ webservices/axiom/trunk/buildutils/enforcer-maven-plugin/src/main/java/org/apache/axiom/buildutils/enforcer/Clazz.java Sun May 1 11:42:45 2016
@@ -0,0 +1,50 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.axiom.buildutils.enforcer;
+
+final class Clazz {
+ private final String name;
+
+ Clazz(String name) {
+ this.name = name;
+ }
+
+ String getName() {
+ return name;
+ }
+
+ Package getPackage() {
+ return new Package(name.substring(0, name.lastIndexOf('.')));
+ }
+
+ @Override
+ public int hashCode() {
+ return name.hashCode();
+ }
+
+ @Override
+ public boolean equals(Object obj) {
+ return obj instanceof Clazz && ((Clazz)obj).name.equals(name);
+ }
+
+ @Override
+ public String toString() {
+ return name;
+ }
+}
Propchange: webservices/axiom/trunk/buildutils/enforcer-maven-plugin/src/main/java/org/apache/axiom/buildutils/enforcer/Clazz.java
------------------------------------------------------------------------------
svn:eol-style = native
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=1741860&r1=1741859&r2=1741860&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:42:45 2016
@@ -47,11 +47,11 @@ public class EnforceMojo extends Abstrac
if (!classesDir.exists()) {
return;
}
- Set<Reference> ignoredClassReferences = new HashSet<Reference>();
+ Set<Reference<Clazz>> ignoredClassReferences = new HashSet<>();
if (ignore != null) {
for (String ignoreRule : ignore.split(",")) {
String[] s = ignoreRule.split("->");
- ignoredClassReferences.add(new Reference(s[0].trim(), s[1].trim()));
+ ignoredClassReferences.add(new Reference<Clazz>(new Clazz(s[0].trim()), new Clazz(s[1].trim())));
}
}
DirectoryScanner ds = new DirectoryScanner();
@@ -71,10 +71,10 @@ public class EnforceMojo extends Abstrac
throw new MojoExecutionException("Failed to read " + relativePath + ": " + ex.getMessage(), ex);
}
}
- Set<Reference> references = referenceCollector.getClassReferencesForPackageCycle();
+ Set<Reference<Clazz>> references = referenceCollector.getClassReferencesForPackageCycle();
if (references != null) {
StringBuilder buffer = new StringBuilder("Package cycle detected. Classes involved:");
- for (Reference reference : references) {
+ for (Reference<Clazz> reference : references) {
buffer.append("\n ");
buffer.append(reference.getFrom());
buffer.append(" -> ");
@@ -82,10 +82,10 @@ public class EnforceMojo extends Abstrac
}
throw new MojoFailureException(buffer.toString());
}
- Set<Reference> unusedIgnoredClassReferences = referenceCollector.getUnusedIgnoredClassReferences();
+ Set<Reference<Clazz>> unusedIgnoredClassReferences = referenceCollector.getUnusedIgnoredClassReferences();
if (!unusedIgnoredClassReferences.isEmpty()) {
StringBuilder buffer = new StringBuilder("Found unused ignored class references:");
- for (Reference reference : unusedIgnoredClassReferences) {
+ for (Reference<Clazz> reference : unusedIgnoredClassReferences) {
buffer.append("\n ");
buffer.append(reference.getFrom());
buffer.append(" -> ");
Added: webservices/axiom/trunk/buildutils/enforcer-maven-plugin/src/main/java/org/apache/axiom/buildutils/enforcer/Package.java
URL: http://svn.apache.org/viewvc/webservices/axiom/trunk/buildutils/enforcer-maven-plugin/src/main/java/org/apache/axiom/buildutils/enforcer/Package.java?rev=1741860&view=auto
==============================================================================
--- webservices/axiom/trunk/buildutils/enforcer-maven-plugin/src/main/java/org/apache/axiom/buildutils/enforcer/Package.java (added)
+++ webservices/axiom/trunk/buildutils/enforcer-maven-plugin/src/main/java/org/apache/axiom/buildutils/enforcer/Package.java Sun May 1 11:42:45 2016
@@ -0,0 +1,46 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.axiom.buildutils.enforcer;
+
+final class Package {
+ private final String name;
+
+ Package(String name) {
+ this.name = name;
+ }
+
+ String getName() {
+ return name;
+ }
+
+ @Override
+ public int hashCode() {
+ return name.hashCode();
+ }
+
+ @Override
+ public boolean equals(Object obj) {
+ return obj instanceof Package && ((Package)obj).name.equals(name);
+ }
+
+ @Override
+ public String toString() {
+ return name;
+ }
+}
Propchange: webservices/axiom/trunk/buildutils/enforcer-maven-plugin/src/main/java/org/apache/axiom/buildutils/enforcer/Package.java
------------------------------------------------------------------------------
svn:eol-style = native
Modified: webservices/axiom/trunk/buildutils/enforcer-maven-plugin/src/main/java/org/apache/axiom/buildutils/enforcer/Reference.java
URL: http://svn.apache.org/viewvc/webservices/axiom/trunk/buildutils/enforcer-maven-plugin/src/main/java/org/apache/axiom/buildutils/enforcer/Reference.java?rev=1741860&r1=1741859&r2=1741860&view=diff
==============================================================================
--- webservices/axiom/trunk/buildutils/enforcer-maven-plugin/src/main/java/org/apache/axiom/buildutils/enforcer/Reference.java (original)
+++ webservices/axiom/trunk/buildutils/enforcer-maven-plugin/src/main/java/org/apache/axiom/buildutils/enforcer/Reference.java Sun May 1 11:42:45 2016
@@ -18,20 +18,20 @@
*/
package org.apache.axiom.buildutils.enforcer;
-final class Reference {
- private final String from;
- private final String to;
+final class Reference<T> {
+ private final T from;
+ private final T to;
- Reference(String from, String to) {
+ Reference(T from, T to) {
this.from = from;
this.to = to;
}
- public String getFrom() {
+ public T getFrom() {
return from;
}
- public String getTo() {
+ public T getTo() {
return to;
}
@@ -43,7 +43,7 @@ final class Reference {
@Override
public boolean equals(Object obj) {
if (obj instanceof Reference) {
- Reference other = (Reference)obj;
+ Reference<?> other = (Reference<?>)obj;
return from.equals(other.from) && to.equals(other.to);
} else {
return false;
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=1741860&r1=1741859&r2=1741860&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:42:45 2016
@@ -25,34 +25,30 @@ 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> ignoredClassReferences;
- private final Set<Reference> unusedIgnoredClassReferences;
- private final Set<Reference> packageReferences = new HashSet<>();
- private final Map<Reference,Reference> classReferenceSamples = new HashMap<>();
+ 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> ignoredClassReferences) {
+ ReferenceCollector(Set<Reference<Clazz>> ignoredClassReferences) {
this.ignoredClassReferences = ignoredClassReferences;
unusedIgnoredClassReferences = new HashSet<>(ignoredClassReferences);
}
- private static String getPackageName(String className) {
- return className.substring(0, className.lastIndexOf('.'));
- }
-
- void collectClassReference(String from, String to) {
- Reference classReference = new Reference(from, to);
+ void collectClassReference(Reference<Clazz> classReference) {
if (ignoredClassReferences.contains(classReference)) {
unusedIgnoredClassReferences.remove(classReference);
} else {
- String fromPackage = getPackageName(from);
- String toPackage = getPackageName(to);
+ Package fromPackage = classReference.getFrom().getPackage();
+ Package toPackage = classReference.getTo().getPackage();
if (!fromPackage.equals(toPackage)) {
- Reference packageReference = new Reference(fromPackage, toPackage);
+ Reference<Package> packageReference = new Reference<Package>(fromPackage, toPackage);
if (packageReferences.add(packageReference)) {
classReferenceSamples.put(packageReference, classReference);
}
@@ -60,18 +56,23 @@ final class ReferenceCollector {
}
}
- Set<Reference> getClassReferencesForPackageCycle() {
- DirectedGraph<String,Reference> graph = new DefaultDirectedGraph<>(Reference.class);
- for (Reference reference : packageReferences) {
+ 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<String,Reference>> cycles = new StrongConnectivityInspector<String,Reference>(graph).stronglyConnectedSubgraphs();
- for (DirectedSubgraph<String,Reference> cycle : cycles) {
+ 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> classReferences = new HashSet<>();
- for (Reference packageReference : cycle.edgeSet()) {
+ Set<Reference<Clazz>> classReferences = new HashSet<>();
+ for (Reference<Package> packageReference : cycle.edgeSet()) {
classReferences.add(classReferenceSamples.get(packageReference));
}
return classReferences;
@@ -80,7 +81,7 @@ final class ReferenceCollector {
return null;
}
- Set<Reference> getUnusedIgnoredClassReferences() {
+ Set<Reference<Clazz>> getUnusedIgnoredClassReferences() {
return unusedIgnoredClassReferences;
}
}
Modified: webservices/axiom/trunk/buildutils/enforcer-maven-plugin/src/main/java/org/apache/axiom/buildutils/enforcer/ReferenceProcessor.java
URL: http://svn.apache.org/viewvc/webservices/axiom/trunk/buildutils/enforcer-maven-plugin/src/main/java/org/apache/axiom/buildutils/enforcer/ReferenceProcessor.java?rev=1741860&r1=1741859&r2=1741860&view=diff
==============================================================================
--- webservices/axiom/trunk/buildutils/enforcer-maven-plugin/src/main/java/org/apache/axiom/buildutils/enforcer/ReferenceProcessor.java (original)
+++ webservices/axiom/trunk/buildutils/enforcer-maven-plugin/src/main/java/org/apache/axiom/buildutils/enforcer/ReferenceProcessor.java Sun May 1 11:42:45 2016
@@ -22,9 +22,9 @@ import org.objectweb.asm.Type;
final class ReferenceProcessor {
private final ReferenceCollector referenceCollector;
- private final String origin;
+ private final Clazz origin;
- ReferenceProcessor(ReferenceCollector referenceCollector, String origin) {
+ ReferenceProcessor(ReferenceCollector referenceCollector, Clazz origin) {
this.referenceCollector = referenceCollector;
this.origin = origin;
}
@@ -32,7 +32,7 @@ final class ReferenceProcessor {
public void processType(Type type) {
switch (type.getSort()) {
case Type.OBJECT:
- referenceCollector.collectClassReference(origin, type.getClassName());
+ referenceCollector.collectClassReference(new Reference<Clazz>(origin, new Clazz(type.getClassName())));
break;
case Type.ARRAY:
processType(type.getElementType());