Skip to content

Commit 93b0cd8

Browse files
Merge pull request #15 from SimY4/master
Allow to specify packages to include/exclude.
2 parents 4cc5419 + a7f836a commit 93b0cd8

File tree

2 files changed

+97
-75
lines changed

2 files changed

+97
-75
lines changed
Lines changed: 95 additions & 74 deletions
Original file line numberDiff line numberDiff line change
@@ -1,75 +1,96 @@
1-
package de.andrena.tools.nopackagecycles;
2-
3-
import java.io.File;
4-
import java.io.IOException;
5-
import java.util.ArrayList;
6-
import java.util.Collection;
7-
8-
import jdepend.framework.JDepend;
9-
import jdepend.framework.JavaPackage;
10-
11-
import org.apache.maven.enforcer.rule.api.EnforcerRule;
12-
import org.apache.maven.enforcer.rule.api.EnforcerRuleException;
13-
import org.apache.maven.enforcer.rule.api.EnforcerRuleHelper;
14-
import org.codehaus.plexus.component.configurator.expression.ExpressionEvaluationException;
15-
16-
public class NoPackageCyclesRule implements EnforcerRule {
17-
18-
private boolean includeTests = true;
19-
20-
public void execute(EnforcerRuleHelper helper) throws EnforcerRuleException {
21-
try {
22-
executePackageCycleCheckIfNecessary(helper);
23-
} catch (ExpressionEvaluationException e) {
24-
throw new EnforcerRuleException("Unable to lookup an expression " + e.getLocalizedMessage(), e);
25-
} catch (IOException e) {
26-
throw new EnforcerRuleException("Unable to access target directory " + e.getLocalizedMessage(), e);
27-
}
28-
}
29-
30-
private void executePackageCycleCheckIfNecessary(EnforcerRuleHelper helper)
31-
throws ExpressionEvaluationException, IOException, EnforcerRuleException {
32-
DirectoriesWithClasses directories = new DirectoriesWithClasses(helper, includeTests);
33-
if (directories.directoriesWithClassesFound()) {
34-
executePackageCycleCheck(directories);
35-
} else {
36-
helper.getLog().info("No directories with classes to check for cycles found.");
37-
}
38-
}
39-
40-
private void executePackageCycleCheck(Iterable<File> directories) throws IOException, EnforcerRuleException {
41-
JDepend jdepend = createJDepend();
42-
for (File directory : directories) {
43-
jdepend.addDirectory(directory.getAbsolutePath());
44-
}
45-
jdepend.analyze();
46-
if (jdepend.containsCycles()) {
47-
throw new EnforcerRuleException("There are package cycles:" + getPackageCycles(jdepend));
48-
}
49-
}
50-
51-
protected JDepend createJDepend() {
52-
return new JDepend();
53-
}
54-
55-
private String getPackageCycles(JDepend jdepend) {
56-
Collection<JavaPackage> packages = jdepend.getPackages();
57-
return new PackageCycleOutput(new ArrayList<JavaPackage>(packages)).getOutput();
58-
}
59-
60-
public String getCacheId() {
61-
return "";
62-
}
63-
64-
public boolean isCacheable() {
65-
return false;
66-
}
67-
68-
public boolean isResultValid(EnforcerRule arg0) {
69-
return false;
70-
}
71-
72-
public void setIncludeTests(boolean includeTests) {
73-
this.includeTests = includeTests;
74-
}
1+
package de.andrena.tools.nopackagecycles;
2+
3+
import java.io.File;
4+
import java.io.IOException;
5+
import java.util.ArrayList;
6+
import java.util.Collection;
7+
import java.util.List;
8+
9+
import jdepend.framework.JDepend;
10+
import jdepend.framework.JavaPackage;
11+
import jdepend.framework.PackageFilter;
12+
13+
import org.apache.maven.enforcer.rule.api.EnforcerRule;
14+
import org.apache.maven.enforcer.rule.api.EnforcerRuleException;
15+
import org.apache.maven.enforcer.rule.api.EnforcerRuleHelper;
16+
import org.codehaus.plexus.component.configurator.expression.ExpressionEvaluationException;
17+
18+
public class NoPackageCyclesRule implements EnforcerRule {
19+
20+
private boolean includeTests = true;
21+
private List<String> includedPackages = new ArrayList<>();
22+
private List<String> excludedPackages = new ArrayList<>();
23+
24+
public void execute(EnforcerRuleHelper helper) throws EnforcerRuleException {
25+
try {
26+
executePackageCycleCheckIfNecessary(helper);
27+
} catch (ExpressionEvaluationException e) {
28+
throw new EnforcerRuleException("Unable to lookup an expression " + e.getLocalizedMessage(), e);
29+
} catch (IOException e) {
30+
throw new EnforcerRuleException("Unable to access target directory " + e.getLocalizedMessage(), e);
31+
}
32+
}
33+
34+
private void executePackageCycleCheckIfNecessary(EnforcerRuleHelper helper)
35+
throws ExpressionEvaluationException, IOException, EnforcerRuleException {
36+
DirectoriesWithClasses directories = new DirectoriesWithClasses(helper, includeTests);
37+
if (directories.directoriesWithClassesFound()) {
38+
executePackageCycleCheck(helper, directories);
39+
} else {
40+
helper.getLog().info("No directories with classes to check for cycles found.");
41+
}
42+
}
43+
44+
private void executePackageCycleCheck(EnforcerRuleHelper helper, Iterable<File> directories) throws IOException, EnforcerRuleException {
45+
JDepend jdepend = createJDepend(helper);
46+
for (File directory : directories) {
47+
jdepend.addDirectory(directory.getAbsolutePath());
48+
}
49+
jdepend.analyze();
50+
if (jdepend.containsCycles()) {
51+
throw new EnforcerRuleException("There are package cycles:" + getPackageCycles(jdepend));
52+
}
53+
}
54+
55+
protected JDepend createJDepend(EnforcerRuleHelper helper) {
56+
if (!includedPackages.isEmpty()) {
57+
helper.getLog().warn("Package cycles rule check is restricted to check only these packages: " + includedPackages);
58+
}
59+
if (!excludedPackages.isEmpty()) {
60+
helper.getLog().warn("These packages were excluded from package cycle rule check: " + excludedPackages);
61+
}
62+
return new JDepend(PackageFilter.all()
63+
.including(includedPackages)
64+
.excluding(excludedPackages));
65+
}
66+
67+
private String getPackageCycles(JDepend jdepend) {
68+
Collection<JavaPackage> packages = jdepend.getPackages();
69+
return new PackageCycleOutput(new ArrayList<JavaPackage>(packages)).getOutput();
70+
}
71+
72+
public String getCacheId() {
73+
return "";
74+
}
75+
76+
public boolean isCacheable() {
77+
return false;
78+
}
79+
80+
public boolean isResultValid(EnforcerRule arg0) {
81+
return false;
82+
}
83+
84+
public void setIncludeTests(boolean includeTests) {
85+
this.includeTests = includeTests;
86+
}
87+
88+
public void setIncludedPackages(List<String> includedPackages) {
89+
this.includedPackages = includedPackages;
90+
}
91+
92+
public void setExcludedPackages(List<String> excludedPackages) {
93+
this.excludedPackages = excludedPackages;
94+
}
95+
7596
}

src/test/java/de/andrena/tools/nopackagecycles/NoPackageCyclesRuleTest.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
import jdepend.framework.JDepend;
1212

1313
import org.apache.maven.enforcer.rule.api.EnforcerRuleException;
14+
import org.apache.maven.enforcer.rule.api.EnforcerRuleHelper;
1415
import org.junit.Before;
1516
import org.junit.Rule;
1617
import org.junit.Test;
@@ -24,7 +25,7 @@ public class NoPackageCyclesRuleTest {
2425

2526
private class NoPackageCyclesRuleMock extends NoPackageCyclesRule {
2627
@Override
27-
protected JDepend createJDepend() {
28+
protected JDepend createJDepend(EnforcerRuleHelper helper) {
2829
return jdependMock;
2930
}
3031
}

0 commit comments

Comments
 (0)