Skip to content

java.lang.NullPointerException: Cannot invoke "scala.reflect.internal.Types$Type.params()" because the return value of "scala.reflect.internal.Trees$Tree.tpe()" is null #13079

Open
@domdorn

Description

@domdorn

Reproduction steps

Scala version: 2.13.15; 2.13.16

package com.acme.someproject.somemicroservice.projections.impl

import scala.concurrent.Future

trait Handler[Envelope] {

  def process(envelope: Envelope): Future[Unit]

}

class CopyScenarioEventsProjectionHandler(
                                           managerServiceIn: ServiceA,
                                           assetServiceIn: ServiceB,
                                         ) {

}

trait ServiceA {

}


trait ServiceB {}

final case class OperationInfo(
                                correlationId: String,
                                source: String,
                                scenarioId: String
                              )



case class Tester[Envelope](handler: () => Handler[Envelope])

class CopyScenarioProjection(
  managerService: ServiceA,
  assetService: ServiceB,
)(maxGlobalOffset: Any, maxSeqNr: Any, from: Any) {

  def test(x: Any) = {
    Tester(() =>
      new CopyScenarioEventsProjectionHandler(managerService, assetService)(
        maxGlobalOffset,
        maxSeqNr,
        from
      )(OperationInfo("a", "b", "c")){
        // this breaks it!
        // in this sample, the compiler at least says "CopyScenarioEventsProjectionHandler does not take parameters"
        // in my original code, this message was not printed, just the exception was shown
      }
    )
  }

}

Problem

During a refactor yesterday, I changed the CopyScenarioEventsProjectionHandler but forgot to update the code calling it.
The compiler died with the exception

[error] java.lang.NullPointerException: Cannot invoke "scala.reflect.internal.Types$Type.params()" because the return value of "scala.reflect.internal.Trees$Tree.tpe()" is null
[error] scala.tools.nsc.typechecker.Typers$Typer.decompose$1(Typers.scala:2263)
[error] scala.tools.nsc.typechecker.Typers$Typer.decompose$1(Typers.scala:2262)
[error] scala.tools.nsc.typechecker.Typers$Typer.analyzeSuperConstructor(Typers.scala:2278)
[error] scala.tools.nsc.typechecker.Typers$Typer.typedDefDef(Typers.scala:2469)
[error] scala.tools.nsc.typechecker.Typers$Typer.typed1(Typers.scala:6250)
[error] scala.tools.nsc.typechecker.Typers$Typer.typed(Typers.scala:6344)
[error] scala.tools.nsc.typechecker.Typers$Typer.typedStat$1(Typers.scala:6422)
[error] scala.tools.nsc.typechecker.Typers$Typer.$anonfun$typedStats$10(Typers.scala:3547)
[error] scala.tools.nsc.typechecker.Typers$Typer.typedStats(Typers.scala:3547)
[error] scala.tools.nsc.typechecker.Typers$Typer.typedTemplate(Typers.scala:2133)
[error] scala.tools.nsc.typechecker.Typers$Typer.typedClassDef(Typers.scala:1971)
[error] scala.tools.nsc.typechecker.Typers$Typer.typed1(Typers.scala:6251)
[error] scala.tools.nsc.typechecker.Typers$Typer.typed(Typers.scala:6344)
[error] scala.tools.nsc.typechecker.Typers$Typer.typedStat$1(Typers.scala:6422)
[error] scala.tools.nsc.typechecker.Typers$Typer.$anonfun$typedStats$10(Typers.scala:3547)
[error] scala.tools.nsc.typechecker.Typers$Typer.typedStats(Typers.scala:3547)
[error] scala.tools.nsc.typechecker.Typers$Typer.typedBlock(Typers.scala:2643)
[error] scala.tools.nsc.typechecker.Typers$Typer.typedOutsidePatternMode$1(Typers.scala:6262)
[error] scala.tools.nsc.typechecker.Typers$Typer.typed1(Typers.scala:6298)
[error] scala.tools.nsc.typechecker.Typers$Typer.typed(Typers.scala:6344)
[error] scala.tools.nsc.typechecker.Typers$Typer.doTypedFunction(Typers.scala:6433)
[error] scala.tools.nsc.typechecker.Typers$Typer.typedFunction(Typers.scala:3203)
[error] scala.tools.nsc.typechecker.Typers$Typer.$anonfun$typed1$121(Typers.scala:6226)
[error] scala.tools.nsc.typechecker.Typers$Typer.typedFunction$1(Typers.scala:512)
[error] scala.tools.nsc.typechecker.Typers$Typer.typedOutsidePatternMode$1(Typers.scala:6266)
[error] scala.tools.nsc.typechecker.Typers$Typer.typed1(Typers.scala:6298)
[error] scala.tools.nsc.typechecker.Typers$Typer.typed(Typers.scala:6344)
[error] scala.tools.nsc.typechecker.Typers$Typer.typedArg(Typers.scala:3565)
[error] scala.tools.nsc.typechecker.Typers$Typer.handlePolymorphicCall$1(Typers.scala:3990)
[error] scala.tools.nsc.typechecker.Typers$Typer.doTypedApply(Typers.scala:4009)
[error] scala.tools.nsc.typechecker.Typers$Typer.normalTypedApply$1(Typers.scala:5285)
[error] scala.tools.nsc.typechecker.Typers$Typer.typedApply$1(Typers.scala:5296)
[error] scala.tools.nsc.typechecker.Typers$Typer.typed1(Typers.scala:6288)
[error] scala.tools.nsc.typechecker.Typers$Typer.typed(Typers.scala:6344)
[error] scala.tools.nsc.typechecker.Typers$Typer.computeType(Typers.scala:6433)
[error] scala.tools.nsc.typechecker.Namers$Namer.assignTypeToTree(Namers.scala:1085)
[error] scala.tools.nsc.typechecker.Namers$Namer.methodSig(Namers.scala:1446)
[error] scala.tools.nsc.typechecker.Namers$Namer.memberSig(Namers.scala:1929)
[error] scala.tools.nsc.typechecker.Namers$Namer.typeSig(Namers.scala:1880)
[error] scala.tools.nsc.typechecker.Namers$Namer$MonoTypeCompleter.completeImpl(Namers.scala:834)
[error] scala.tools.nsc.typechecker.Namers$LockingTypeCompleter.complete(Namers.scala:2077)
[error] scala.tools.nsc.typechecker.Namers$LockingTypeCompleter.complete$(Namers.scala:2075)
[error] scala.tools.nsc.typechecker.Namers$TypeCompleterBase.complete(Namers.scala:2070)
[error] scala.reflect.internal.Symbols$Symbol.completeInfo(Symbols.scala:1583)
[error] scala.reflect.internal.Symbols$Symbol.info(Symbols.scala:1548)
[error] scala.reflect.internal.Symbols$Symbol.initialize(Symbols.scala:1747)
[error] scala.tools.nsc.typechecker.Typers$Typer.typed1(Typers.scala:5916)
[error] scala.tools.nsc.typechecker.Typers$Typer.typed(Typers.scala:6344)
[error] scala.tools.nsc.typechecker.Typers$Typer.typedStat$1(Typers.scala:6422)
[error] scala.tools.nsc.typechecker.Typers$Typer.$anonfun$typedStats$10(Typers.scala:3547)
[error] scala.tools.nsc.typechecker.Typers$Typer.typedStats(Typers.scala:3547)
[error] scala.tools.nsc.typechecker.Typers$Typer.typedTemplate(Typers.scala:2133)
[error] scala.tools.nsc.typechecker.Typers$Typer.typedClassDef(Typers.scala:1971)
[error] scala.tools.nsc.typechecker.Typers$Typer.typed1(Typers.scala:6251)
[error] scala.tools.nsc.typechecker.Typers$Typer.typed(Typers.scala:6344)
[error] scala.tools.nsc.typechecker.Typers$Typer.typedStat$1(Typers.scala:6422)
[error] scala.tools.nsc.typechecker.Typers$Typer.$anonfun$typedStats$10(Typers.scala:3547)
[error] scala.tools.nsc.typechecker.Typers$Typer.typedStats(Typers.scala:3547)
[error] scala.tools.nsc.typechecker.Typers$Typer.typedPackageDef$1(Typers.scala:5925)
[error] scala.tools.nsc.typechecker.Typers$Typer.typed1(Typers.scala:6254)
[error] scala.tools.nsc.typechecker.Typers$Typer.typed(Typers.scala:6344)
[error] scala.tools.nsc.typechecker.Analyzer$typerFactory$TyperPhase.apply(Analyzer.scala:126)
[error] scala.tools.nsc.Global$GlobalPhase.applyPhase(Global.scala:483)
[error] scala.tools.nsc.typechecker.Analyzer$typerFactory$TyperPhase.run(Analyzer.scala:113)
[error] scala.tools.nsc.Global$Run.compileUnitsInternal(Global.scala:1564)
[error] scala.tools.nsc.Global$Run.compileUnits(Global.scala:1548)
[error] scala.tools.nsc.Global$Run.compileSources(Global.scala:1540)
[error] scala.tools.nsc.Global$Run.compileFiles(Global.scala:1653)
[error] scala.tools.xsbt.CachedCompiler0.run(CompilerBridge.scala:176)
[error] scala.tools.xsbt.CachedCompiler0.run(CompilerBridge.scala:139)
[error] scala.tools.xsbt.CompilerBridge.run(CompilerBridge.scala:43)
[error] sbt.internal.inc.AnalyzingCompiler.compile(AnalyzingCompiler.scala:91)
[error] sbt.internal.inc.MixedAnalyzingCompiler.$anonfun$compile$7(MixedAnalyzingCompiler.scala:196)
[error] scala.runtime.java8.JFunction0$mcV$sp.apply(JFunction0$mcV$sp.java:23)
[error] sbt.internal.inc.MixedAnalyzingCompiler.timed(MixedAnalyzingCompiler.scala:252)
[error] sbt.internal.inc.MixedAnalyzingCompiler.$anonfun$compile$4(MixedAnalyzingCompiler.scala:186)
[error] sbt.internal.inc.MixedAnalyzingCompiler.$anonfun$compile$4$adapted(MixedAnalyzingCompiler.scala:166)
[error] sbt.internal.inc.JarUtils$.withPreviousJar(JarUtils.scala:241)
[error] sbt.internal.inc.MixedAnalyzingCompiler.compileScala$1(MixedAnalyzingCompiler.scala:166)
[error] sbt.internal.inc.MixedAnalyzingCompiler.compile(MixedAnalyzingCompiler.scala:214)
[error] sbt.internal.inc.IncrementalCompilerImpl.$anonfun$compileInternal$1(IncrementalCompilerImpl.scala:542)
[error] sbt.internal.inc.IncrementalCompilerImpl.$anonfun$compileInternal$1$adapted(IncrementalCompilerImpl.scala:542)
[error] sbt.internal.inc.Incremental$.$anonfun$apply$3(Incremental.scala:178)
[error] sbt.internal.inc.Incremental$.$anonfun$apply$3$adapted(Incremental.scala:176)
[error] sbt.internal.inc.Incremental$$anon$2.run(Incremental.scala:454)
[error] sbt.internal.inc.IncrementalCommon$CycleState.next(IncrementalCommon.scala:117)
[error] sbt.internal.inc.IncrementalCommon$$anon$1.next(IncrementalCommon.scala:56)
[error] sbt.internal.inc.IncrementalCommon$$anon$1.next(IncrementalCommon.scala:52)
[error] sbt.internal.inc.IncrementalCommon.cycle(IncrementalCommon.scala:265)
[error] sbt.internal.inc.Incremental$.$anonfun$incrementalCompile$8(Incremental.scala:409)
[error] sbt.internal.inc.Incremental$.withClassfileManager(Incremental.scala:496)
[error] sbt.internal.inc.Incremental$.incrementalCompile(Incremental.scala:396)
[error] sbt.internal.inc.Incremental$.apply(Incremental.scala:204)
[error] sbt.internal.inc.IncrementalCompilerImpl.compileInternal(IncrementalCompilerImpl.scala:542)
[error] sbt.internal.inc.IncrementalCompilerImpl.$anonfun$compileIncrementally$1(IncrementalCompilerImpl.scala:496)
[error] sbt.internal.inc.IncrementalCompilerImpl.handleCompilationError(IncrementalCompilerImpl.scala:332)
[error] sbt.internal.inc.IncrementalCompilerImpl.compileIncrementally(IncrementalCompilerImpl.scala:433)
[error] sbt.internal.inc.IncrementalCompilerImpl.compile(IncrementalCompilerImpl.scala:137)
[error] sbt.Defaults$.compileIncrementalTaskImpl(Defaults.scala:2419)
[error] sbt.Defaults$.$anonfun$compileIncrementalTask$2(Defaults.scala:2369)
[error] sbt.internal.server.BspCompileTask$.$anonfun$compute$1(BspCompileTask.scala:41)
[error] sbt.internal.io.Retry$.apply(Retry.scala:47)
[error] sbt.internal.io.Retry$.apply(Retry.scala:29)
[error] sbt.internal.io.Retry$.apply(Retry.scala:24)
[error] sbt.internal.server.BspCompileTask$.compute(BspCompileTask.scala:41)
[error] sbt.Defaults$.$anonfun$compileIncrementalTask$1(Defaults.scala:2367)
[error] scala.Function1.$anonfun$compose$1(Function1.scala:49)
[error] sbt.internal.util.$tilde$greater.$anonfun$$u2219$1(TypeFunctions.scala:63)
[error] sbt.std.Transform$$anon$4.work(Transform.scala:69)
[error] sbt.Execute.$anonfun$submit$2(Execute.scala:283)
[error] sbt.internal.util.ErrorHandling$.wideConvert(ErrorHandling.scala:24)
[error] sbt.Execute.work(Execute.scala:292)
[error] sbt.Execute.$anonfun$submit$1(Execute.scala:283)
[error] sbt.ConcurrentRestrictions$$anon$4.$anonfun$submitValid$1(ConcurrentRestrictions.scala:265)
[error] sbt.CompletionService$$anon$2.call(CompletionService.scala:65)
[error] java.base/java.util.concurrent.FutureTask.run(FutureTask.java:317)
[error] java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:572)
[error] java.base/java.util.concurrent.FutureTask.run(FutureTask.java:317)
[error] java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144)
[error] java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642)
[error] java.base/java.lang.Thread.run(Thread.java:1583)

I've deleted everything from my project to create this reproducer. Here now the compiler at least says

.CopyScenarioEventsProjectionHandler does not take parameters
[error]       new CopyScenarioEventsProjectionHandler(managerService, assetService)(
[error]           ^

which helps to solve the problem. However, in my original code base, this message is not shown, just the exception.
Also IntelliJ is not recognizing the mistake.

Image

When this code is copied into scastie, the compilation just dies.

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions