Skip to content

Commit a7f836a

Browse files
author
Alex Simkin
committed
Add warning log when include/exclude packages parameter is set.
1 parent 62dceec commit a7f836a

File tree

2 files changed

+97
-90
lines changed

2 files changed

+97
-90
lines changed
Lines changed: 95 additions & 89 deletions
Original file line numberDiff line numberDiff line change
@@ -1,90 +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-
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(directories);
39-
} else {
40-
helper.getLog().info("No directories with classes to check for cycles found.");
41-
}
42-
}
43-
44-
private void executePackageCycleCheck(Iterable<File> directories) throws IOException, EnforcerRuleException {
45-
JDepend jdepend = createJDepend();
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() {
56-
return new JDepend(PackageFilter.all()
57-
.including(includedPackages)
58-
.excluding(excludedPackages));
59-
}
60-
61-
private String getPackageCycles(JDepend jdepend) {
62-
Collection<JavaPackage> packages = jdepend.getPackages();
63-
return new PackageCycleOutput(new ArrayList<JavaPackage>(packages)).getOutput();
64-
}
65-
66-
public String getCacheId() {
67-
return "";
68-
}
69-
70-
public boolean isCacheable() {
71-
return false;
72-
}
73-
74-
public boolean isResultValid(EnforcerRule arg0) {
75-
return false;
76-
}
77-
78-
public void setIncludeTests(boolean includeTests) {
79-
this.includeTests = includeTests;
80-
}
81-
82-
public void setIncludedPackages(List<String> includedPackages) {
83-
this.includedPackages = includedPackages;
84-
}
85-
86-
public void setExcludedPackages(List<String> excludedPackages) {
87-
this.excludedPackages = excludedPackages;
88-
}
89-
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+
9096
}

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)