Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -15,5 +15,32 @@
*/
package org.gradle.api.plugins.quality

import spock.lang.Issue

class FindBugsIntegrationTest extends AbstractFindBugsPluginIntegrationTest {

@Issue(["https://github.com/gradle/gradle/issues/1745",
"https://github.com/gradle/gradle/issues/1094"])
def "remove non-jar files from -auxclasspath"() {
given:
def nonJarFile = temporaryFolder.createFile("test.xml")
nonJarFile << 'something'
buildFile << """
apply plugin: 'findbugs'
apply plugin: 'java'

dependencies {
compile files('${nonJarFile.toString().replace('\\', '\\\\')}')
}
"""
testDirectory.createFile('src/main/java/a/A.java') << 'package a;class A{}'

when:
run 'findbugsMain'

then:
result.output.contains('BUILD SUCCESSFUL')
!result.error.contains('IOException')
!result.error.contains('Wrong magic bytes')
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ package org.gradle.api.plugins.quality.internal
import org.gradle.api.InvalidUserDataException
import org.gradle.api.NamedDomainObjectSet
import org.gradle.api.file.FileCollection
import org.gradle.api.internal.file.collections.SimpleFileCollection
import org.gradle.api.plugins.quality.internal.findbugs.FindBugsSpecBuilder
import org.gradle.api.plugins.quality.internal.findbugs.FindBugsXmlReportImpl;
import org.gradle.api.reporting.SingleFileReport
Expand Down Expand Up @@ -269,4 +270,24 @@ class FindBugsSpecBuilderTest extends Specification {
then:
args.containsAll([ "abc", "def" ])
}

def "with classpath"() {
def classFile = tempFolder.createFile('a.class')
def jarFile = tempFolder.createFile('b.jar')
def otherFile = tempFolder.createFile('c.other')
def dir = tempFolder.createDir('dir')
def nonexistent = new File('nonexistent-file')
def fileCollection = new SimpleFileCollection(classFile, jarFile, otherFile, dir, nonexistent)

when:

def args = builder.withClasspath(fileCollection).build().arguments
def auxclasspathIndex = args.findIndexOf { it == '-auxclasspath' }
def auxclasspath = args[auxclasspathIndex + 1]

then:
auxclasspathIndex >= 0
[classFile, jarFile, dir].every { auxclasspath.contains("$it") }
[otherFile, nonexistent].every { !auxclasspath.contains("$it") }
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -190,10 +190,16 @@ public FindBugsSpec build() {
if (has(classpath)) {
args.add("-auxclasspath");

// Filter unexisting files as FindBugs can't handle them.
// Filter files FindBugs can't handle
// See edu.umd.cs.findbugs.classfile.impl.ClassFactory.createFilesystemCodeBase
args.add(classpath.filter(new Spec<File>() {
public boolean isSatisfiedBy(File element) {
return element.exists();
if (element.isDirectory()) {
return true;
} else if (element.isFile()) {
return element.getName().endsWith(".class") || element.getName().endsWith(".jar");
}
return false;
}
}).getAsPath());
}
Expand Down