diff --git a/CHANGELOG.md b/CHANGELOG.md index 65b55ab..c01e024 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,4 +1,6 @@ * Update animalsniffer 1.22 -> 1.23 +* Plugin requires now JavaBasePlugin instead of JavaPlugin. + Required for kotlin multiplatform 1.9.20 activating only base plugin with jvm().withJava() (#84) NOTE: animalsniffer 1.23 reports problems on fields without line number (but with field name), Plugin output would contain line 1 (default for not defined line) diff --git a/src/main/groovy/ru/vyarus/gradle/plugin/animalsniffer/AnimalSniffer.groovy b/src/main/groovy/ru/vyarus/gradle/plugin/animalsniffer/AnimalSniffer.groovy index 95a8fde..038d263 100644 --- a/src/main/groovy/ru/vyarus/gradle/plugin/animalsniffer/AnimalSniffer.groovy +++ b/src/main/groovy/ru/vyarus/gradle/plugin/animalsniffer/AnimalSniffer.groovy @@ -154,16 +154,17 @@ class AnimalSniffer extends SourceTask implements VerificationTask, Reporting _sourceDirs = collectSourceDirs() antBuilder.withClasspath(getAnimalsnifferClasspath()).execute { ant.taskdef(name: 'animalsniffer', classname: 'org.codehaus.mojo.animal_sniffer.ant.CheckSignatureTask') - ReportCollector collector = new ReportCollector(getSourcesDirs()) + ReportCollector collector = new ReportCollector(_sourceDirs) replaceBuildListener(project, collector) getAnimalsnifferSignatures().each { signature -> try { @@ -173,7 +174,7 @@ class AnimalSniffer extends SourceTask implements VerificationTask, Reporting collectSourceDirs() { + Set res = [] as Set + res.addAll(getSourcesDirs()) + // HACK to support kotlin multiplatform source path for jvm case (when withJava() active) + // this MUST BE rewritten into separate support for multiplatform + if (project.plugins.findPlugin('org.jetbrains.kotlin.multiplatform')) { + project.kotlin.sourceSets.each { + println it.kotlin.sourceDirectories.files + res.addAll(it.kotlin.sourceDirectories.files) + } + } + return res + } } diff --git a/src/main/groovy/ru/vyarus/gradle/plugin/animalsniffer/AnimalSnifferPlugin.groovy b/src/main/groovy/ru/vyarus/gradle/plugin/animalsniffer/AnimalSnifferPlugin.groovy index b74c6dd..e3bf6f0 100644 --- a/src/main/groovy/ru/vyarus/gradle/plugin/animalsniffer/AnimalSnifferPlugin.groovy +++ b/src/main/groovy/ru/vyarus/gradle/plugin/animalsniffer/AnimalSnifferPlugin.groovy @@ -11,7 +11,7 @@ import org.gradle.api.artifacts.Dependency import org.gradle.api.file.FileCollection import org.gradle.api.file.RegularFile import org.gradle.api.plugins.ExtraPropertiesExtension -import org.gradle.api.plugins.JavaPlugin +import org.gradle.api.plugins.JavaBasePlugin import org.gradle.api.plugins.ReportingBasePlugin import org.gradle.api.reporting.ReportingExtension import org.gradle.api.specs.NotSpec @@ -57,7 +57,7 @@ class AnimalSnifferPlugin implements Plugin { @Override void apply(Project project) { // activated only when java plugin is enabled - project.plugins.withType(JavaPlugin) { + project.plugins.withType(JavaBasePlugin) { this.project = project project.plugins.apply(ReportingBasePlugin) diff --git a/src/test/groovy/ru/vyarus/gradle/plugin/animalsniffer/UpstreamKitTest.groovy b/src/test/groovy/ru/vyarus/gradle/plugin/animalsniffer/UpstreamKitTest.groovy index 8d00ec5..62bb6b8 100644 --- a/src/test/groovy/ru/vyarus/gradle/plugin/animalsniffer/UpstreamKitTest.groovy +++ b/src/test/groovy/ru/vyarus/gradle/plugin/animalsniffer/UpstreamKitTest.groovy @@ -87,8 +87,7 @@ class UpstreamKitTest extends AbstractKitTest { then: "task successful" result.task(':animalsnifferMain').outcome == TaskOutcome.SUCCESS // testKit is incompatible with configuration cache, but I can check number of errors! - result.output.contains('1 problem was found storing the configuration cache.\n' + - '- Gradle runtime: support for using a Java agent with TestKit builds is not yet implemented with the configuration cache.') + result.output.contains('2 problems were found storing the configuration cache.') } } diff --git a/src/test/groovy/ru/vyarus/gradle/plugin/animalsniffer/multilang/KotlinSourceKitTest.groovy b/src/test/groovy/ru/vyarus/gradle/plugin/animalsniffer/multilang/KotlinSourceKitTest.groovy index d63802c..64b5c03 100644 --- a/src/test/groovy/ru/vyarus/gradle/plugin/animalsniffer/multilang/KotlinSourceKitTest.groovy +++ b/src/test/groovy/ru/vyarus/gradle/plugin/animalsniffer/multilang/KotlinSourceKitTest.groovy @@ -46,6 +46,59 @@ class KotlinSourceKitTest extends AbstractKitTest { """[Undefined reference] invalid.(Sample.kt:11) >> int Boolean.compare(boolean, boolean) +[Undefined reference] invalid.(Sample.kt:16) + >> java.nio.file.Path java.nio.file.Paths.get(String, String[]) +""") + + then: "report correct" + File file = file('/build/reports/animalsniffer/main.text') + file.exists() + file.readLines() == [ + "invalid.Sample:11 Undefined reference: int Boolean.compare(boolean, boolean)", + "invalid.Sample:16 Undefined reference: java.nio.file.Path java.nio.file.Paths.get(String, String[])" + ] + } + + def "Check kotlin multiplatform support"() { + setup: + build """ + plugins { + id 'org.jetbrains.kotlin.multiplatform' version '1.9.0-RC' + id 'ru.vyarus.animalsniffer' + } + + kotlin { + jvm().withJava() + } + + animalsniffer { + ignoreFailures = true + } + + repositories { mavenCentral()} + dependencies { + signature 'org.codehaus.mojo.signature:java16-sun:1.0@signature' + implementation platform('org.jetbrains.kotlin:kotlin-bom') + implementation 'org.jetbrains.kotlin:kotlin-stdlib-jdk8' + implementation 'org.slf4j:slf4j-api:1.7.25' + } + + """ + fileFromClasspath('src/jvmMain/kotlin/invalid/Sample.kt', '/ru/vyarus/gradle/plugin/animalsniffer/kotlin/invalid/Sample.kt') +// debug() + + when: "run task" + BuildResult result = run('check') + + then: "task successful" + result.task(':check').outcome == TaskOutcome.SUCCESS + + then: "found 2 violations" + result.output.contains("2 AnimalSniffer violations were found in 1 files") + result.output.replaceAll('\r', '').contains( + """[Undefined reference] invalid.(Sample.kt:11) + >> int Boolean.compare(boolean, boolean) + [Undefined reference] invalid.(Sample.kt:16) >> java.nio.file.Path java.nio.file.Paths.get(String, String[]) """)