Skip to content

Commit

Permalink
Fix issue #42: Add option to also ignore unresolvable signatures in Ant
Browse files Browse the repository at this point in the history
  • Loading branch information
uschindler committed Nov 23, 2014
1 parent f8b5eee commit ad53067
Show file tree
Hide file tree
Showing 2 changed files with 27 additions and 4 deletions.
12 changes: 11 additions & 1 deletion src/main/java/de/thetaphi/forbiddenapis/AntTask.java
Original file line number Diff line number Diff line change
Expand Up @@ -57,6 +57,7 @@ public final class AntTask extends Task {
private boolean internalRuntimeForbidden = false;
private boolean restrictClassFilename = true;
private boolean failOnMissingClasses = true;
private boolean failOnUnresolvableSignatures = true;
private boolean ignoreEmptyFileset = false;

@Override
Expand All @@ -74,7 +75,7 @@ public void execute() throws BuildException {
classFiles.setProject(getProject());
apiSignatures.setProject(getProject());

final Checker checker = new Checker(loader, internalRuntimeForbidden, failOnMissingClasses, true) {
final Checker checker = new Checker(loader, internalRuntimeForbidden, failOnMissingClasses, failOnUnresolvableSignatures) {
@Override
protected void logError(String msg) {
log(msg, Project.MSG_ERR);
Expand Down Expand Up @@ -273,6 +274,15 @@ public void setFailOnMissingClasses(boolean failOnMissingClasses) {
this.failOnMissingClasses = failOnMissingClasses;
}

/**
* Fail the build if a class referenced in a signature is missing. If this parameter is set to
* to false, then such signatures are silently ignored.
* Defaults to {@code true}.
*/
public void setFailOnUnresolvableSignatures(boolean failOnUnresolvableSignatures) {
this.failOnUnresolvableSignatures = failOnUnresolvableSignatures;
}

/**
* Forbids calls to classes from the internal java runtime (like sun.misc.Unsafe)
* Defaults to {@code false}.
Expand Down
19 changes: 16 additions & 3 deletions src/test/antunit/TestInlineSignatures.xml
Original file line number Diff line number Diff line change
Expand Up @@ -83,9 +83,22 @@
java.lang.String#forbiddenFoobarField @ should be ignored
java.awt.Color @ Color is disallowed, thats not bad, because ANT has no colors... (this was just added to don't fail because of missing signatures)
</forbiddenapis>
<au:assertLogContains text="Class 'foo.bar.ForbiddenApis' not found on classpath while parsing signature: foo.bar.ForbiddenApis#testMethod() [signature ignored]"/>
<au:assertLogContains text="Method not found while parsing signature: java.lang.String#forbiddenFoobarMethod() [signature ignored]"/>
<au:assertLogContains text="Field not found while parsing signature: java.lang.String#forbiddenFoobarField [signature ignored]"/>
<au:assertLogContains level="warning" text="Class 'foo.bar.ForbiddenApis' not found on classpath while parsing signature: foo.bar.ForbiddenApis#testMethod() [signature ignored]"/>
<au:assertLogContains level="warning" text="Method not found while parsing signature: java.lang.String#forbiddenFoobarMethod() [signature ignored]"/>
<au:assertLogContains level="warning" text="Field not found while parsing signature: java.lang.String#forbiddenFoobarField [signature ignored]"/>
</target>

<target name="testDontFailOnMissingWithAttribute">
<forbiddenapis classpathref="path.run" failOnUnresolvableSignatures="false">
<fileset refid="main.classes"/>
foo.bar.ForbiddenApis#testMethod() @ should be ignored
java.lang.String#forbiddenFoobarMethod() @ should be ignored
java.lang.String#forbiddenFoobarField @ should be ignored
java.awt.Color @ Color is disallowed, thats not bad, because ANT has no colors... (this was just added to don't fail because of missing signatures)
</forbiddenapis>
<au:assertLogContains level="warning" text="Class 'foo.bar.ForbiddenApis' not found on classpath while parsing signature: foo.bar.ForbiddenApis#testMethod() [signature ignored]"/>
<au:assertLogContains level="warning" text="Method not found while parsing signature: java.lang.String#forbiddenFoobarMethod() [signature ignored]"/>
<au:assertLogContains level="warning" text="Field not found while parsing signature: java.lang.String#forbiddenFoobarField [signature ignored]"/>
</target>

</project>

0 comments on commit ad53067

Please sign in to comment.