Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

NPE after upgrade to 1.6.5 #61

Closed
xenoterracide opened this issue Oct 19, 2018 · 2 comments
Closed

NPE after upgrade to 1.6.5 #61

xenoterracide opened this issue Oct 19, 2018 · 2 comments
Labels
Milestone

Comments

@xenoterracide
Copy link

xenoterracide commented Oct 19, 2018

* Exception is:
    org.gradle.api.tasks.TaskExecutionException: Execution failed for task ':spotbugsMain'.
    	at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:110)
    	at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.execute(ExecuteActionsTaskExecuter.java:77)
    	at org.gradle.api.internal.tasks.execution.OutputDirectoryCreatingTaskExecuter.execute(OutputDirectoryCreatingTaskExecuter.java:51)
    	at org.gradle.api.internal.tasks.execution.SkipUpToDateTaskExecuter.execute(SkipUpToDateTaskExecuter.java:59)
    	at org.gradle.api.internal.tasks.execution.ResolveTaskOutputCachingStateExecuter.execute(ResolveTaskOutputCachingStateExecuter.java:54)
    	at org.gradle.api.internal.tasks.execution.ValidatingTaskExecuter.execute(ValidatingTaskExecuter.java:59)
    	at org.gradle.api.internal.tasks.execution.SkipEmptySourceFilesTaskExecuter.execute(SkipEmptySourceFilesTaskExecuter.java:101)
    	at org.gradle.api.internal.tasks.execution.FinalizeInputFilePropertiesTaskExecuter.execute(FinalizeInputFilePropertiesTaskExecuter.java:44)
    	at org.gradle.api.internal.tasks.execution.CleanupStaleOutputsExecuter.execute(CleanupStaleOutputsExecuter.java:91)
    	at org.gradle.api.internal.tasks.execution.ResolveTaskArtifactStateTaskExecuter.execute(ResolveTaskArtifactStateTaskExecuter.java:62)
    	at org.gradle.api.internal.tasks.execution.SkipTaskWithNoActionsExecuter.execute(SkipTaskWithNoActionsExecuter.java:59)
    	at org.gradle.api.internal.tasks.execution.SkipOnlyIfTaskExecuter.execute(SkipOnlyIfTaskExecuter.java:54)
    	at org.gradle.api.internal.tasks.execution.ExecuteAtMostOnceTaskExecuter.execute(ExecuteAtMostOnceTaskExecuter.java:43)
    	at org.gradle.api.internal.tasks.execution.CatchExceptionTaskExecuter.execute(CatchExceptionTaskExecuter.java:34)
    	at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter$1.run(EventFiringTaskExecuter.java:51)
    	at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:300)
    	at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:292)
    	at org.gradle.internal.operations.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:174)
    	at org.gradle.internal.operations.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:90)
    	at org.gradle.internal.operations.DelegatingBuildOperationExecutor.run(DelegatingBuildOperationExecutor.java:31)
    	at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter.execute(EventFiringTaskExecuter.java:46)
    	at org.gradle.execution.taskgraph.LocalTaskInfoExecutor.execute(LocalTaskInfoExecutor.java:42)
    	at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$BuildOperationAwareWorkItemExecutor.execute(DefaultTaskExecutionGraph.java:277)
    	at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$BuildOperationAwareWorkItemExecutor.execute(DefaultTaskExecutionGraph.java:262)
    	at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$ExecutorWorker$1.execute(DefaultTaskPlanExecutor.java:135)
    	at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$ExecutorWorker$1.execute(DefaultTaskPlanExecutor.java:130)
    	at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$ExecutorWorker.execute(DefaultTaskPlanExecutor.java:200)
    	at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$ExecutorWorker.executeWithWork(DefaultTaskPlanExecutor.java:191)
    	at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$ExecutorWorker.run(DefaultTaskPlanExecutor.java:130)
    	at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:63)
    	at org.gradle.internal.concurrent.ManagedExecutorImpl$1.run(ManagedExecutorImpl.java:46)
    	at org.gradle.internal.concurrent.ThreadFactoryImpl$ManagedThreadRunnable.run(ThreadFactoryImpl.java:55)
    Caused by: java.lang.NullPointerException
    	at com.github.spotbugs.SpotBugsTask.lambda$run$1(SpotBugsTask.java:232)
    	at org.gradle.workers.internal.DefaultWorkerExecutor.submit(DefaultWorkerExecutor.java:79)
    	at com.github.spotbugs.SpotBugsTask.run(SpotBugsTask.java:231)
    	at org.gradle.internal.reflect.JavaMethod.invoke(JavaMethod.java:73)
    	at org.gradle.api.internal.project.taskfactory.StandardTaskAction.doExecute(StandardTaskAction.java:46)
    	at org.gradle.api.internal.project.taskfactory.StandardTaskAction.execute(StandardTaskAction.java:39)
    	at org.gradle.api.internal.project.taskfactory.StandardTaskAction.execute(StandardTaskAction.java:26)
    	at org.gradle.api.internal.AbstractTask$TaskActionWrapper.execute(AbstractTask.java:801)
    	at org.gradle.api.internal.AbstractTask$TaskActionWrapper.execute(AbstractTask.java:768)
    	at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter$1.run(ExecuteActionsTaskExecuter.java:131)
    	at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:300)
    	at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:292)
    	at org.gradle.internal.operations.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:174)
    	at org.gradle.internal.operations.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:90)
    	at org.gradle.internal.operations.DelegatingBuildOperationExecutor.run(DelegatingBuildOperationExecutor.java:31)
    	at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeAction(ExecuteActionsTaskExecuter.java:120)
    	at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:99)
    	... 31 more


    * Get more help at https://help.gradle.org

    BUILD FAILED in 2s
    4 actionable tasks: 4 executed
        at org.gradle.testkit.runner.internal.DefaultGradleRunner$1.execute(DefaultGradleRunner.java:237)
        at org.gradle.testkit.runner.internal.DefaultGradleRunner$1.execute(DefaultGradleRunner.java:234)
        at org.gradle.testkit.runner.internal.DefaultGradleRunner.run(DefaultGradleRunner.java:298)
        at org.gradle.testkit.runner.internal.DefaultGradleRunner.build(DefaultGradleRunner.java:234)
        at com.xenoterracide.gradle.plugin.bundle.WorkingProjectTest.untagged(WorkingProjectTest.java:82)
[xeno@freyja gradle-plugin-bundle]$ ./gradlew dependencies

> Task :dependencies FAILED

------------------------------------------------------------
Root project
------------------------------------------------------------

annotationProcessor - Annotation processors and their dependencies for source set 'main'.
+--- com.google.errorprone:error_prone_core:2.+ -> 2.3.2
|    +--- com.google.errorprone:error_prone_annotation:2.3.2
|    |    \--- com.google.guava:guava:23.5-jre
|    |         +--- com.google.code.findbugs:jsr305:1.3.9 -> 3.0.0
|    |         +--- org.checkerframework:checker-qual:2.0.0 -> 2.5.3
|    |         +--- com.google.errorprone:error_prone_annotations:2.0.18 -> 2.3.2
|    |         +--- com.google.j2objc:j2objc-annotations:1.1
|    |         \--- org.codehaus.mojo:animal-sniffer-annotations:1.14
|    +--- com.google.errorprone:error_prone_type_annotations:2.3.2
|    +--- com.google.errorprone:error_prone_check_api:2.3.2
|    |    +--- com.google.errorprone:error_prone_annotation:2.3.2 (*)
|    |    +--- com.google.code.findbugs:jsr305:3.0.0
|    |    +--- org.checkerframework:dataflow:2.5.3
|    |    |    +--- org.checkerframework:checker-qual:2.5.3
|    |    |    \--- org.checkerframework:javacutil:2.5.3
|    |    |         \--- org.checkerframework:checker-qual:2.5.3
|    |    +--- com.googlecode.java-diff-utils:diffutils:1.3.0
|    |    +--- com.google.errorprone:error_prone_annotations:2.3.2
|    |    \--- com.github.kevinstern:software-and-algorithms:1.0
|    +--- com.github.stephenc.jcip:jcip-annotations:1.0-1
|    +--- org.pcollections:pcollections:2.1.2
|    +--- com.google.guava:guava:23.5-jre (*)
|    +--- com.google.auto:auto-common:0.10
|    |    \--- com.google.guava:guava:23.5-jre (*)
|    +--- com.google.code.findbugs:jFormatString:3.0.0
|    +--- com.google.code.findbugs:jsr305:3.0.0
|    +--- org.checkerframework:dataflow:2.5.3 (*)
|    +--- com.google.errorprone:error_prone_annotations:2.3.2
|    \--- com.google.protobuf:protobuf-java:3.4.0
+--- com.google.errorprone:error_prone_core:2.3.2 (*)
+--- com.google.errorprone:error_prone_type_annotations:2.3.2
+--- com.google.j2objc:j2objc-annotations:1.1
+--- com.google.guava:guava:23.5-jre (*)
+--- com.google.code.findbugs:jsr305:3.0.0
+--- com.github.kevinstern:software-and-algorithms:1.0
+--- com.github.stephenc.jcip:jcip-annotations:1.0-1
+--- org.checkerframework:dataflow:2.5.3 (*)
+--- org.codehaus.mojo:animal-sniffer-annotations:1.14
+--- com.google.errorprone:error_prone_annotations:2.3.2
+--- org.pcollections:pcollections:2.1.2
+--- com.google.protobuf:protobuf-java:3.4.0
+--- org.checkerframework:javacutil:2.5.3 (*)
+--- com.google.code.findbugs:jFormatString:3.0.0
+--- com.google.errorprone:error_prone_annotation:2.3.2 (*)
+--- org.checkerframework:checker-qual:2.5.3
+--- com.google.errorprone:error_prone_check_api:2.3.2 (*)
+--- com.google.auto:auto-common:0.10 (*)
\--- com.googlecode.java-diff-utils:diffutils:1.3.0

apiElements - API elements for main. (n)
No dependencies

archives - Configuration for archive artifacts.
No dependencies

checkstyle - The Checkstyle libraries to be used for this project.
+--- com.puppycrawl.tools:checkstyle:6.19
|    +--- antlr:antlr:2.7.7
|    +--- org.antlr:antlr4-runtime:4.5.3
|    +--- commons-beanutils:commons-beanutils:1.9.2
|    +--- commons-collections:commons-collections:3.2.2
|    +--- commons-cli:commons-cli:1.3.1
|    \--- com.google.guava:guava:19.0
+--- commons-collections:commons-collections:3.2.2
+--- commons-beanutils:commons-beanutils:1.9.2
+--- com.google.guava:guava:19.0
+--- commons-cli:commons-cli:1.3.1
+--- antlr:antlr:2.7.7
+--- com.puppycrawl.tools:checkstyle:6.19 (*)
\--- org.antlr:antlr4-runtime:4.5.3

compile - Dependencies for source set 'main' (deprecated, use 'implementation' instead).
No dependencies

compileClasspath - Compile classpath for source set 'main'.
+--- io.spring.gradle:dependency-management-plugin:1.+ -> 1.0.6.RELEASE
+--- gradle.plugin.com.github.spotbugs:spotbugs-gradle-plugin:1.6.5
|    \--- com.github.spotbugs:spotbugs:3.1.7
|         +--- org.ow2.asm:asm:6.2
|         +--- org.ow2.asm:asm-analysis:6.2
|         |    \--- org.ow2.asm:asm-tree:6.2
|         |         \--- org.ow2.asm:asm:6.2
|         +--- org.ow2.asm:asm-commons:6.2
|         |    +--- org.ow2.asm:asm:6.2
|         |    +--- org.ow2.asm:asm-tree:6.2 (*)
|         |    \--- org.ow2.asm:asm-analysis:6.2 (*)
|         +--- org.ow2.asm:asm-tree:6.2 (*)
|         +--- org.ow2.asm:asm-util:6.2
|         |    +--- org.ow2.asm:asm:6.2
|         |    +--- org.ow2.asm:asm-tree:6.2 (*)
|         |    \--- org.ow2.asm:asm-analysis:6.2 (*)
|         +--- org.ow2.asm:asm-xml:6.2
|         |    +--- org.ow2.asm:asm:6.2
|         |    \--- org.ow2.asm:asm-util:6.2 (*)
|         +--- org.apache.bcel:bcel:6.2
|         +--- net.jcip:jcip-annotations:1.0
|         +--- org.dom4j:dom4j:2.1.0
|         |    \--- jaxen:jaxen:1.1.6
|         +--- jaxen:jaxen:1.1.6
|         +--- commons-lang:commons-lang:2.6
|         \--- com.github.spotbugs:spotbugs-annotations:3.1.7
|              \--- com.google.code.findbugs:jsr305:3.0.2
+--- net.ltgt.gradle:gradle-errorprone-plugin:0.0.+ -> 0.0.16
+--- org.eclipse.jgit:org.eclipse.jgit:5.+ -> 5.1.2.201810061102-r
|    +--- com.jcraft:jsch:0.1.54
|    |    \--- com.jcraft:jzlib:1.0.7 -> 1.1.1
|    +--- com.jcraft:jzlib:1.1.1
|    +--- com.googlecode.javaewah:JavaEWAH:1.1.6
|    \--- org.slf4j:slf4j-api:1.7.2
+--- org.apache.bcel:bcel:6.2
+--- com.googlecode.javaewah:JavaEWAH:1.1.6
+--- com.jcraft:jsch:0.1.54 (*)
+--- com.google.code.findbugs:jsr305:3.0.2
+--- org.dom4j:dom4j:2.1.0 (*)
+--- org.ow2.asm:asm-xml:6.2 (*)
+--- org.ow2.asm:asm-commons:6.2 (*)
+--- commons-lang:commons-lang:2.6
+--- org.ow2.asm:asm-util:6.2 (*)
+--- com.jcraft:jzlib:1.1.1
+--- org.ow2.asm:asm-analysis:6.2 (*)
+--- org.ow2.asm:asm:6.2
+--- net.jcip:jcip-annotations:1.0
+--- com.github.spotbugs:spotbugs-annotations:3.1.7 (*)
+--- io.spring.gradle:dependency-management-plugin:1.0.6.RELEASE
+--- org.ow2.asm:asm-tree:6.2 (*)
+--- org.slf4j:slf4j-api:1.7.2
+--- net.ltgt.gradle:gradle-errorprone-plugin:0.0.16
+--- gradle.plugin.com.github.spotbugs:spotbugs-gradle-plugin:1.6.5 (*)
+--- jaxen:jaxen:1.1.6
+--- com.github.spotbugs:spotbugs:3.1.7 (*)
\--- org.eclipse.jgit:org.eclipse.jgit:5.1.2.201810061102-r (*)

compileOnly - Compile only dependencies for source set 'main'.
No dependencies

default - Configuration for default artifacts.
+--- io.spring.gradle:dependency-management-plugin:1.+ -> 1.0.6.RELEASE
+--- gradle.plugin.com.github.spotbugs:spotbugs-gradle-plugin:1.6.5
|    \--- com.github.spotbugs:spotbugs:3.1.7
|         +--- org.ow2.asm:asm:6.2
|         +--- org.ow2.asm:asm-analysis:6.2
|         |    \--- org.ow2.asm:asm-tree:6.2
|         |         \--- org.ow2.asm:asm:6.2
|         +--- org.ow2.asm:asm-commons:6.2
|         |    +--- org.ow2.asm:asm:6.2
|         |    +--- org.ow2.asm:asm-tree:6.2 (*)
|         |    \--- org.ow2.asm:asm-analysis:6.2 (*)
|         +--- org.ow2.asm:asm-tree:6.2 (*)
|         +--- org.ow2.asm:asm-util:6.2
|         |    +--- org.ow2.asm:asm:6.2
|         |    +--- org.ow2.asm:asm-tree:6.2 (*)
|         |    \--- org.ow2.asm:asm-analysis:6.2 (*)
|         +--- org.ow2.asm:asm-xml:6.2
|         |    +--- org.ow2.asm:asm:6.2
|         |    \--- org.ow2.asm:asm-util:6.2 (*)
|         +--- org.apache.bcel:bcel:6.2
|         +--- net.jcip:jcip-annotations:1.0
|         +--- org.dom4j:dom4j:2.1.0
|         |    \--- jaxen:jaxen:1.1.6
|         +--- jaxen:jaxen:1.1.6
|         +--- commons-lang:commons-lang:2.6
|         \--- com.github.spotbugs:spotbugs-annotations:3.1.7
|              \--- com.google.code.findbugs:jsr305:3.0.2
+--- net.ltgt.gradle:gradle-errorprone-plugin:0.0.+ -> 0.0.16
\--- org.eclipse.jgit:org.eclipse.jgit:5.+ -> 5.1.2.201810061102-r
     +--- com.jcraft:jsch:0.1.54
     |    \--- com.jcraft:jzlib:1.0.7 -> 1.1.1
     +--- com.jcraft:jzlib:1.1.1
     +--- com.googlecode.javaewah:JavaEWAH:1.1.6
     \--- org.slf4j:slf4j-api:1.7.2

you can see a failing test run/sha1 here https://bitbucket.org/xenoterracide/gradle-plugin-bundle/addon/pipelines/home#!/results/151/steps/%7Be81a5008-881e-4999-b806-9db81e9e2113%7D

@DPUkyle
Copy link
Contributor

DPUkyle commented Oct 25, 2018

Hi @xenoterracide. I forked your repo and am trying to reproduce this locally. In order to debug one of the failing test methods such as com.xenoterracide.gradle.plugin.bundle.WorkingProjectTest#tagged, I changed:
project = GradleRunner.create().withProjectDir( tmp ).withPluginClasspath();
to
project = GradleRunner.create().withProjectDir( tmp ).withPluginClasspath().forwardOutput().withDebug(true);

Kaboom -> apparently GradleRunner is not debuggable when used with kotlin 🤦‍♂️ gradle/gradle#6862

So while the test WorkingProjectTest clearly has problems with spotbugs-gradle-plugin:1.6.5, I can use 1.6.5 to run spotbugsMain on your plugin code itself. I simply removed the call to lockAllConfigurations() and then bumped to 1.6.5, then ran $ ./gradlew clean spotbugsMain. It's successful.

So let's keep in touch on this. I'm using tag v0.6.4 of your project and JDK 9.0.4.

@DPUkyle
Copy link
Contributor

DPUkyle commented Oct 26, 2018

OK, I troubleshot @xenoterracide 's failing build. I don't understand the root cause yet, but I at least have a workaround. Apply this snippet to a failing Kotlin buildscript:

tasks.named<com.github.spotbugs.SpotBugsTask>("spotbugsMain") {
    reports.xml.setEnabled(true)
}

(In @xenoterracide 's case, I applied this to tp/working/build.gradle.kts, upgraded spotbugs-plugin to v1.6.5 and the test passes)

tl;dr

The root cause is that reports.getEnabledReports() returns null in SpotBugsTask#run(). This should never happen because a default is configured in SpotBugsPlugin#configureReportsConventionMapping. So either the SpotBugsPlugin is not implementing something that Kotlin bulidscripts expect, or @xenoterracide 's plugin applies other plugins in such a way that they are not fully evaluated. Sorry to throw up my hands here but I don't know enough about Kotlin or the Kotlin buildscript to be of any help. I hope by documenting this that someone else can carry the torch forward.

In the meantime, I'll do two things:

  1. add a basic sanity test which uses a Kotlin buildscript. This test passes but unfortunately doesn't reproduce this issue
  2. add a null safety check in SpotBugsTask to log and abort the task execution in this case

DPUkyle added a commit to DPUkyle/spotbugs-gradle-plugin that referenced this issue Oct 26, 2018
…tBugsTask is not configured

 - This shouldn't ever happen; it might be related to the way Kotlin buildscripts apply plugins?
 - Also added a Kotlin buildscript-based simple sanity test

Signed-off-by: Kyle Moore <github@kylemoore.com>
@DPUkyle DPUkyle mentioned this issue Nov 7, 2018
@KengoTODA KengoTODA added this to the 1.6.6 milestone Nov 8, 2018
@KengoTODA KengoTODA added the bug label Nov 8, 2018
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

3 participants