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

NullPointerException when passing -Xshow-phases to scalac #621

Closed
enolan opened this issue Apr 2, 2018 · 7 comments · Fixed by #1314
Closed

NullPointerException when passing -Xshow-phases to scalac #621

enolan opened this issue Apr 2, 2018 · 7 comments · Fixed by #1314
Assignees

Comments

@enolan
Copy link

enolan commented Apr 2, 2018

I'm not sure if this should be reported against sbt or Zinc or Scala itself or what.

steps

  • Create a directory with a trivial SBT project (it must have at least one .scala file) and set scalacOptions ++= Seq("-Xshow-phases") in build.sbt. It also crashes if you do set scalacOptions += "-Xshow-phases" at the sbt prompt.
  • sbt compile
  • Observe failure

problem

NullPointerException in java.lang.Thread.run(Thread.java:748). The compile command fails, returning you to the sbt shell. This seems very similar to #3623, but I'm using SBT 1.1.2 where it should be fixed. Log:

sbt:sample-name> compile
[info] Compiling 1 Scala source to /home/enolan/junk/npeTestcase/target/scala-2.12/classes ...
[error] ## Exception when compiling 1 sources to /home/enolan/junk/npeTestcase/target/scala-2.12/classes
[error] null
[error] xsbt.ZincCompiler.phaseDescriptors$lzycompute(CallbackGlobal.scala:121)
[error] xsbt.ZincCompiler.phaseDescriptors(CallbackGlobal.scala:119)
[error] scala.tools.nsc.Global$Run.<init>(Global.scala:1180)
[error] scala.tools.nsc.Global.phaseNames$lzycompute(Global.scala:698)
[error] scala.tools.nsc.Global.phaseNames(Global.scala:697)
[error] scala.tools.nsc.Global.phaseHelp(Global.scala:729)
[error] scala.tools.nsc.Global.phaseDescriptions(Global.scala:703)
[error] scala.tools.nsc.CompilerCommand.getInfoMessage(CompilerCommand.scala:99)
[error] xsbt.CachedCompiler0.run(CompilerInterface.scala:121)
[error] xsbt.CachedCompiler0.run(CompilerInterface.scala:105)
[error] xsbt.CompilerInterface.run(CompilerInterface.scala:31)
[error] sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
[error] sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
[error] sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
[error] java.lang.reflect.Method.invoke(Method.java:498)
[error] sbt.internal.inc.AnalyzingCompiler.call(AnalyzingCompiler.scala:237)
[error] sbt.internal.inc.AnalyzingCompiler.compile(AnalyzingCompiler.scala:111)
[error] sbt.internal.inc.AnalyzingCompiler.compile(AnalyzingCompiler.scala:90)
[error] sbt.internal.inc.MixedAnalyzingCompiler.$anonfun$compile$3(MixedAnalyzingCompiler.scala:83)
[error] scala.runtime.java8.JFunction0$mcV$sp.apply(JFunction0$mcV$sp.java:12)
[error] sbt.internal.inc.MixedAnalyzingCompiler.timed(MixedAnalyzingCompiler.scala:134)
[error] sbt.internal.inc.MixedAnalyzingCompiler.compileScala$1(MixedAnalyzingCompiler.scala:74)
[error] sbt.internal.inc.MixedAnalyzingCompiler.compile(MixedAnalyzingCompiler.scala:117)
[error] sbt.internal.inc.IncrementalCompilerImpl.$anonfun$compileInternal$1(IncrementalCompilerImpl.scala:305)
[error] sbt.internal.inc.IncrementalCompilerImpl.$anonfun$compileInternal$1$adapted(IncrementalCompilerImpl.scala:305)
[error] sbt.internal.inc.Incremental$.doCompile(Incremental.scala:101)
[error] sbt.internal.inc.Incremental$.$anonfun$compile$4(Incremental.scala:82)
[error] sbt.internal.inc.IncrementalCommon.recompileClasses(IncrementalCommon.scala:110)
[error] sbt.internal.inc.IncrementalCommon.cycle(IncrementalCommon.scala:57)
[error] sbt.internal.inc.Incremental$.$anonfun$compile$3(Incremental.scala:84)
[error] sbt.internal.inc.Incremental$.manageClassfiles(Incremental.scala:129)
[error] sbt.internal.inc.Incremental$.compile(Incremental.scala:75)
[error] sbt.internal.inc.IncrementalCompile$.apply(Compile.scala:61)
[error] sbt.internal.inc.IncrementalCompilerImpl.compileInternal(IncrementalCompilerImpl.scala:309)
[error] sbt.internal.inc.IncrementalCompilerImpl.$anonfun$compileIncrementally$1(IncrementalCompilerImpl.scala:267)
[error] sbt.internal.inc.IncrementalCompilerImpl.handleCompilationError(IncrementalCompilerImpl.scala:158)
[error] sbt.internal.inc.IncrementalCompilerImpl.compileIncrementally(IncrementalCompilerImpl.scala:237)
[error] sbt.internal.inc.IncrementalCompilerImpl.compile(IncrementalCompilerImpl.scala:68)
[error] sbt.Defaults$.compileIncrementalTaskImpl(Defaults.scala:1432)
[error] sbt.Defaults$.$anonfun$compileIncrementalTask$1(Defaults.scala:1406)
[error] scala.Function1.$anonfun$compose$1(Function1.scala:44)
[error] sbt.internal.util.$tilde$greater.$anonfun$$u2219$1(TypeFunctions.scala:39)
[error] sbt.std.Transform$$anon$4.work(System.scala:66)
[error] sbt.Execute.$anonfun$submit$2(Execute.scala:262)
[error] sbt.internal.util.ErrorHandling$.wideConvert(ErrorHandling.scala:16)
[error] sbt.Execute.work(Execute.scala:271)
[error] sbt.Execute.$anonfun$submit$1(Execute.scala:262)
[error] sbt.ConcurrentRestrictions$$anon$4.$anonfun$submitValid$1(ConcurrentRestrictions.scala:174)
[error] sbt.CompletionService$$anon$2.call(CompletionService.scala:36)
[error] java.util.concurrent.FutureTask.run(FutureTask.java:266)
[error] java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
[error] java.util.concurrent.FutureTask.run(FutureTask.java:266)
[error] java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
[error] java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
[error] java.lang.Thread.run(Thread.java:748)
[error]            
[error] java.lang.NullPointerException
[error] 	at xsbt.ZincCompiler.phaseDescriptors$lzycompute(CallbackGlobal.scala:121)
[error] 	at xsbt.ZincCompiler.phaseDescriptors(CallbackGlobal.scala:119)
[error] 	at scala.tools.nsc.Global$Run.<init>(Global.scala:1180)
[error] 	at scala.tools.nsc.Global.phaseNames$lzycompute(Global.scala:698)
[error] 	at scala.tools.nsc.Global.phaseNames(Global.scala:697)
[error] 	at scala.tools.nsc.Global.phaseHelp(Global.scala:729)
[error] 	at scala.tools.nsc.Global.phaseDescriptions(Global.scala:703)
[error] 	at scala.tools.nsc.CompilerCommand.getInfoMessage(CompilerCommand.scala:99)
[error] 	at xsbt.CachedCompiler0.run(CompilerInterface.scala:121)
[error] 	at xsbt.CachedCompiler0.run(CompilerInterface.scala:105)
[error] 	at xsbt.CompilerInterface.run(CompilerInterface.scala:31)
[error] 	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
[error] 	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
[error] 	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
[error] 	at java.lang.reflect.Method.invoke(Method.java:498)
[error] 	at sbt.internal.inc.AnalyzingCompiler.call(AnalyzingCompiler.scala:237)
[error] 	at sbt.internal.inc.AnalyzingCompiler.compile(AnalyzingCompiler.scala:111)
[error] 	at sbt.internal.inc.AnalyzingCompiler.compile(AnalyzingCompiler.scala:90)
[error] 	at sbt.internal.inc.MixedAnalyzingCompiler.$anonfun$compile$3(MixedAnalyzingCompiler.scala:83)
[error] 	at scala.runtime.java8.JFunction0$mcV$sp.apply(JFunction0$mcV$sp.java:12)
[error] 	at sbt.internal.inc.MixedAnalyzingCompiler.timed(MixedAnalyzingCompiler.scala:134)
[error] 	at sbt.internal.inc.MixedAnalyzingCompiler.compileScala$1(MixedAnalyzingCompiler.scala:74)
[error] 	at sbt.internal.inc.MixedAnalyzingCompiler.compile(MixedAnalyzingCompiler.scala:117)
[error] 	at sbt.internal.inc.IncrementalCompilerImpl.$anonfun$compileInternal$1(IncrementalCompilerImpl.scala:305)
[error] 	at sbt.internal.inc.IncrementalCompilerImpl.$anonfun$compileInternal$1$adapted(IncrementalCompilerImpl.scala:305)
[error] 	at sbt.internal.inc.Incremental$.doCompile(Incremental.scala:101)
[error] 	at sbt.internal.inc.Incremental$.$anonfun$compile$4(Incremental.scala:82)
[error] 	at sbt.internal.inc.IncrementalCommon.recompileClasses(IncrementalCommon.scala:110)
[error] 	at sbt.internal.inc.IncrementalCommon.cycle(IncrementalCommon.scala:57)
[error] 	at sbt.internal.inc.Incremental$.$anonfun$compile$3(Incremental.scala:84)
[error] 	at sbt.internal.inc.Incremental$.manageClassfiles(Incremental.scala:129)
[error] 	at sbt.internal.inc.Incremental$.compile(Incremental.scala:75)
[error] 	at sbt.internal.inc.IncrementalCompile$.apply(Compile.scala:61)
[error] 	at sbt.internal.inc.IncrementalCompilerImpl.compileInternal(IncrementalCompilerImpl.scala:309)
[error] 	at sbt.internal.inc.IncrementalCompilerImpl.$anonfun$compileIncrementally$1(IncrementalCompilerImpl.scala:267)
[error] 	at sbt.internal.inc.IncrementalCompilerImpl.handleCompilationError(IncrementalCompilerImpl.scala:158)
[error] 	at sbt.internal.inc.IncrementalCompilerImpl.compileIncrementally(IncrementalCompilerImpl.scala:237)
[error] 	at sbt.internal.inc.IncrementalCompilerImpl.compile(IncrementalCompilerImpl.scala:68)
[error] 	at sbt.Defaults$.compileIncrementalTaskImpl(Defaults.scala:1432)
[error] 	at sbt.Defaults$.$anonfun$compileIncrementalTask$1(Defaults.scala:1406)
[error] 	at scala.Function1.$anonfun$compose$1(Function1.scala:44)
[error] 	at sbt.internal.util.$tilde$greater.$anonfun$$u2219$1(TypeFunctions.scala:39)
[error] 	at sbt.std.Transform$$anon$4.work(System.scala:66)
[error] 	at sbt.Execute.$anonfun$submit$2(Execute.scala:262)
[error] 	at sbt.internal.util.ErrorHandling$.wideConvert(ErrorHandling.scala:16)
[error] 	at sbt.Execute.work(Execute.scala:271)
[error] 	at sbt.Execute.$anonfun$submit$1(Execute.scala:262)
[error] 	at sbt.ConcurrentRestrictions$$anon$4.$anonfun$submitValid$1(ConcurrentRestrictions.scala:174)
[error] 	at sbt.CompletionService$$anon$2.call(CompletionService.scala:36)
[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] (Compile / compileIncremental) java.lang.NullPointerException
[error] Total time: 0 s, completed Apr 2, 2018 2:22:03 PM

expectation

It prints a list of the compilation phases.

notes

This happens every time, it's not intermittent like sbt/sbt#3623.
sbt version: 1.1.2
scala version: 2.12.5

@eed3si9n
Copy link
Member

I am going to transfer this to Zinc.

@eed3si9n eed3si9n transferred this issue from sbt/sbt Nov 29, 2018
@eed3si9n eed3si9n added the bug label Nov 29, 2018
@eed3si9n
Copy link
Member

From #545, it looks like the direct cause of the issue is that in https://github.com/sbt/zinc/blob/v1.2.4/internal/compiler-bridge/src/main/scala/xsbt/CallbackGlobal.scala#L119-L126

  override lazy val phaseDescriptors = {
    phasesSet += sbtAnalyzer
    if (callback.enabled()) {
      phasesSet += sbtDependency
      phasesSet += apiExtractor
    }
    this.computePhaseDescriptors
  }

callback is called, which just wraps a var that's set to null:

  private[this] var callback0: AnalysisCallback = null

A likely fix is to fix run here (https://github.com/sbt/zinc/blob/v1.2.4/internal/compiler-bridge/src/main/scala/xsbt/CompilerInterface.scala#L113-L145) and move the compiler.set(callback, underlyingReporter) before:

    if (command.shouldStopWithInfo) {
      underlyingReporter.info(null, command.getInfoMessage(compiler), true)
      throw new InterfaceCompileFailed(args, Array(), StopInfoError)
    }

gets called.

@justjoheinz
Copy link

This still happens in sbt 1.2.8 and 1.3.0

@bsilla
Copy link

bsilla commented Apr 1, 2020

Still happens in sbt 1.3.8

@unkarjedy
Copy link
Contributor

still an issue in 1.4.0

@andyglow
Copy link

can see this in 1.5.3

@ghost
Copy link

ghost commented Feb 23, 2023

Current for Zinc 1.8.0 and sbt 1.8.2.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging a pull request may close this issue.

7 participants