cvogt / cbt

CBT - fun, fast, intuitive, compositional, statically checked builds written in Scala
Other
488 stars 60 forks source link

cbt eval throws NPE when defaultScalaVersion is overridden #567

Open bbarker opened 6 years ago

bbarker commented 6 years ago

To reproduce:

brandon@beb82dell0:~/workspace/ProjectGists/Scala$ mkdir CBT_eval_with_override
brandon@beb82dell0:~/workspace/ProjectGists/Scala$ cd CBT_eval_with_override/
brandon@beb82dell0:~/workspace/ProjectGists/Scala/CBT_eval_with_override$ cbt tools createMain
(Note: nailgun not found. It makes CBT faster! Try 'brew install nailgun' or 'apt-get install nailgun'.)
Created Main.scala
()
brandon@beb82dell0:~/workspace/ProjectGists/Scala/CBT_eval_with_override$ cbt tools createBuild
(Note: nailgun not found. It makes CBT faster! Try 'brew install nailgun' or 'apt-get install nailgun'.)
Created build/build.scala
()
brandon@beb82dell0:~/workspace/ProjectGists/Scala/CBT_eval_with_override$ emacs build/build.scala 
  1. add with CommandLineOverrides to Build class definition
  2. add override val defaultScalaVersion = "2.12.4" (exact version doesn't matter)
brandon@beb82dell0:~/workspace/ProjectGists/Scala/CBT_eval_with_override$ cbt eval scalaVersion
(Note: nailgun not found. It makes CBT faster! Try 'brew install nailgun' or 'apt-get install nailgun'.)
Compiling to /home/brandon/workspace/ProjectGists/Scala/CBT_eval_with_override/build/target/scala-2.11/classes
[warn] Pruning sources from previous analysis, due to incompatible CompileSetup.
[info] Compiling 1 Scala source to /home/brandon/workspace/ProjectGists/Scala/CBT_eval_with_override/build/target/scala-2.11/classes...
[info] Compile success at Nov 17, 2017 1:51:06 PM [2.114s]
Exception in thread "main" java.lang.NullPointerException
    at cbt.Stage1Lib.libMajorVersion(Stage1Lib.scala:22)
    at cbt.BaseBuild$class.scalaMajorVersion(BasicBuild.scala:56)
    at cbt_eval_with_override_build.Build.scalaMajorVersion(build.scala:3)
    at cbt.BaseBuild$class.scalaTarget(BasicBuild.scala:83)
    at cbt_eval_with_override_build.Build.scalaTarget(build.scala:3)
    at cbt.BaseBuild$class.moduleKey(BasicBuild.scala:20)
    at cbt_eval_with_override_build.Build.moduleKey$lzycompute(build.scala:3)
    at cbt_eval_with_override_build.Build.moduleKey(build.scala:3)
    at cbt.DependencyImplementation$class.taskCache(resolver.scala:20)
    at cbt_eval_with_override_build.Build.taskCache$lzycompute(build.scala:3)
    at cbt_eval_with_override_build.Build.taskCache(build.scala:3)
    at cbt.DynamicOverrides$class.$init$(DynamicOverrides.scala:5)
    at cbt_eval_with_override_build.Build.<init>(build.scala:3)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
    at cbt.DirectoryDependency$$anonfun$cbt$DirectoryDependency$$loadCustomBuild$1$3.apply(DirectoryDependency.scala:104)
    at cbt.DirectoryDependency$$anonfun$cbt$DirectoryDependency$$loadCustomBuild$1$3.apply(DirectoryDependency.scala:104)
    at scala.Option.map(Option.scala:146)
    at cbt.DirectoryDependency$.cbt$DirectoryDependency$$loadCustomBuild$1(DirectoryDependency.scala:103)
    at cbt.DirectoryDependency$$anonfun$cbt$DirectoryDependency$$loadBuild$1$1.apply(DirectoryDependency.scala:39)
    at scala.Option.getOrElse(Option.scala:121)
    at cbt.DirectoryDependency$.cbt$DirectoryDependency$$loadBuild$1(DirectoryDependency.scala:39)
    at cbt.DirectoryDependency$$anonfun$apply$4.apply(DirectoryDependency.scala:119)
    at cbt.DirectoryDependency$$anonfun$apply$4.apply(DirectoryDependency.scala:118)
    at cbt.LazyDependency.dependency$lzycompute(LazyDependency.scala:3)
    at cbt.LazyDependency.dependency(LazyDependency.scala:3)
    at cbt.Lib$$anonfun$3.cbt$Lib$$anonfun$$g$1(Lib.scala:102)
    at cbt.Lib$$anonfun$3$$anonfun$apply$5.apply(Lib.scala:105)
    at cbt.Lib.cbt$Lib$$callInternal(Lib.scala:175)
    at cbt.Lib.getReflective(Lib.scala:143)
    at cbt.Lib.callReflective(Lib.scala:106)
    at cbt.Stage2$.run(Stage2.scala:35)
    at cbt.Stage2.run(Stage2.scala)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at cbt.Stage1$.run(Stage1.scala:209)
    at cbt.Stage1.run(Stage1.scala)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at cbt.NailgunLauncher.main(NailgunLauncher.java:120)
brandon@beb82dell0:~/workspace/ProjectGists/Scala/CBT_eval_with_override$ 

I'll also note it doesn't seem to matter what the argument to cbt eval is - it could be some other member as well with the same result.

If this doesn't help to repro, maybe it is linux specific - I'm using Ubuntu 16.04. Can throw together a docker container if necessary. Here is the code.

lolgab commented 6 years ago

I have the same exact problem... Pulled on this repo: https://github.com/lolgab/full-stack-scala