scalacenter / bloop

Bloop is a build server and CLI tool to compile, test and run Scala fast from any editor or build tool.
https://scalacenter.github.io/bloop/
Apache License 2.0
907 stars 202 forks source link

Unexpected `NullPointerException` in sbt `unmanagedResources` #1360

Open 4lex1v opened 4 years ago

4lex1v commented 4 years ago

Hey bloop team!

I'm hitting a NullPointerException error when trying to generate bloop's config for the project. It works for all modules except one. After some investigation I've noticed that the error occurs because we have some additional resources configuration outside of module's root, e.g:

    Compile / unmanagedResources ++= Seq(
      file("file1.yml"),
      file("folder/file2.yaml"),
      ... etc
    ),

With the above setting, I'm getting the following error:

java.lang.NullPointerException stack trace

``` sbt:root> last [debug] > Exec(bloopInstall, Some(521bc6d9-2a6e-41f3-ad9d-1eacfbe6aa7f), Some(CommandSource(console0))) [debug] Evaluating tasks: checkBuildSources [debug] Running task... Cancel: bloop.integrations.sbt.Offloader$$anon$1@330d557e, check cycles: false, forcegc: true [debug] Evaluating tasks: analytics / bloopInstall, analyticsCli / bloopInstall, e2eTest / bloopInstall, clusterDeps / bloopInstall, bloopInstall [debug] Running task... Cancel: bloop.integrations.sbt.Offloader$$anon$1@3e3d8e6c, check cycles: false, forcegc: true [success] Generated .bloop\root-test.json [success] Generated .bloop\analyticsCli-test.json [success] Generated .bloop\clusterDeps-test.json [success] Generated .bloop\e2eTest-test.json [success] Generated .bloop\analytics-it.json [success] Generated .bloop\analytics-test.json [error] java.lang.NullPointerException [error] at bloop.config.util.ConfigUtil$.$anonfun$pathsOutsideRoots$2(ConfigUtil.scala:11) [error] at bloop.config.util.ConfigUtil$.$anonfun$pathsOutsideRoots$2$adapted(ConfigUtil.scala:8) [error] at scala.collection.LinearSeqOptimized.exists(LinearSeqOptimized.scala:95) [error] at scala.collection.LinearSeqOptimized.exists$(LinearSeqOptimized.scala:92) [error] at scala.collection.immutable.List.exists(List.scala:89) [error] at bloop.config.util.ConfigUtil$.$anonfun$pathsOutsideRoots$1(ConfigUtil.scala:8) [error] at bloop.config.util.ConfigUtil$.$anonfun$pathsOutsideRoots$1$adapted(ConfigUtil.scala:7) [error] at scala.collection.TraversableLike.$anonfun$filterImpl$1(TraversableLike.scala:256) [error] at scala.collection.Iterator.foreach(Iterator.scala:941) [error] at scala.collection.Iterator.foreach$(Iterator.scala:941) [error] at scala.collection.AbstractIterator.foreach(Iterator.scala:1429) [error] at scala.collection.IterableLike.foreach(IterableLike.scala:74) [error] at scala.collection.IterableLike.foreach$(IterableLike.scala:73) [error] at scala.collection.AbstractIterable.foreach(Iterable.scala:56) [error] at scala.collection.TraversableLike.filterImpl(TraversableLike.scala:255) [error] at scala.collection.TraversableLike.filterImpl$(TraversableLike.scala:249) [error] at scala.collection.AbstractTraversable.filterImpl(Traversable.scala:108) [error] at scala.collection.TraversableLike.filterNot(TraversableLike.scala:355) [error] at scala.collection.TraversableLike.filterNot$(TraversableLike.scala:355) [error] at scala.collection.AbstractTraversable.filterNot(Traversable.scala:108) [error] at bloop.config.util.ConfigUtil$.pathsOutsideRoots(ConfigUtil.scala:7) [error] at bloop.integrations.sbt.BloopDefaults$.$anonfun$bloopResourcesTask$2(SbtBloop.scala:1267) [error] at scala.Function1.$anonfun$compose$1(Function1.scala:49) [error] at sbt.internal.util.$tilde$greater.$anonfun$$u2219$1(TypeFunctions.scala:62) [error] at sbt.std.Transform$$anon$4.work(Transform.scala:67) [error] at sbt.Execute.$anonfun$submit$2(Execute.scala:281) [error] at sbt.internal.util.ErrorHandling$.wideConvert(ErrorHandling.scala:19) [error] at sbt.Execute.work(Execute.scala:290) [error] at sbt.Execute.$anonfun$submit$1(Execute.scala:281) [error] at sbt.ConcurrentRestrictions$$anon$4.$anonfun$submitValid$1(ConcurrentRestrictions.scala:178) [error] at sbt.CompletionService$$anon$2.call(CompletionService.scala:37) [error] at java.util.concurrent.FutureTask.run(FutureTask.java:266) [error] at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) [error] at java.util.concurrent.FutureTask.run(FutureTask.java:266) [error] at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) [error] at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) [error] at java.lang.Thread.run(Thread.java:748) [error] (analyticsCli / Compile / bloopGenerate) java.lang.NullPointerException [error] Total time: 4 s, completed Aug 25, 2020 5:34:09 PM [debug] > Exec(shell, None, None) [debug] Evaluating tasks: checkBuildSources [debug] Running task... Cancel: bloop.integrations.sbt.Offloader$$anon$1@31406eab, check cycles: false, forcegc: true ```

Changing the value of this setting to something like Seq.empty (i.e set analyticsCli / Compile / unmanagedResources := Seq.empty) addresses the problem and bloopInstall works.

If this would be important i'm using bloop 1.4.3, sbt 1.3.13 on Windows 10.

Please let me know if you need more details.

jvican commented 4 years ago

Thanks for the report! This should be an easy to fix, could you submit a fix in ConfigUtil so that nulls are correctly dealt with? I don't understand why the nulls are thrown but I wouldn't be surprised if it has anything to do with the relative file paths you have in your unmanagedResources.