Closed
Description
Minimized code
// T.scala
trait T { object O }
// J.java
class J { T.O$ o; }
% mkdir -p project src/main/scala src/main/java
% echo 'addSbtPlugin("ch.epfl.lamp" % "sbt-dotty" % "0.4.1")' > project/plugins.sbt
% echo 'crossScalaVersions := Seq("2.13.2", "0.24.0")' > build.sbt
% echo 'trait T { object O }' > src/main/scala/T.scala
% echo 'class J { T.O$ o; }' > src/main/java/J.java
% java -version
openjdk version "1.8.0_252"
% sbt ";clean ;++compile"
// success
// switch to jdk 11
% jabba use adopt@1.11.0-7
% java -version
openjdk version "11.0.7" 2020-04-14
% sbt ";clean ;++2.13.2 compile"
// success
% sbt ";clean ;++0.24.0 compile"
[error] -- [E006] Not Found Error: /Users/thanhbv/tmp/ex/src/main/java/J.java:1:10 -----
[error] 1 |class J { T.O$ o; }
[error] | ^
[error] | Not found: T
% echo 'compileOrder := CompileOrder.ScalaThenJava' >> build.sbt
% sbt ";clean ;++0.24.0 compile"
// crash, see below
Output
[error] compiler message file broken: key=compiler.misc.msg.bug arguments=11.0.7, {1}, {2}, {3}, {4}, {5}, {6}, {7}
[error] java.lang.NullPointerException
[error] at jdk.compiler/com.sun.tools.javac.jvm.ClassReader.setParameters(ClassReader.java:2562)
[error] at jdk.compiler/com.sun.tools.javac.jvm.ClassReader.readMethod(ClassReader.java:2460)
[error] at jdk.compiler/com.sun.tools.javac.jvm.ClassReader.readClass(ClassReader.java:2736)
[error] at jdk.compiler/com.sun.tools.javac.jvm.ClassReader.readClassBuffer(ClassReader.java:2808)
[error] at jdk.compiler/com.sun.tools.javac.jvm.ClassReader.readClassFile(ClassReader.java:2821)
[error] at jdk.compiler/com.sun.tools.javac.code.ClassFinder.fillIn(ClassFinder.java:359)
[error] at jdk.compiler/com.sun.tools.javac.code.ClassFinder.complete(ClassFinder.java:291)
[error] at jdk.compiler/com.sun.tools.javac.code.Symbol.complete(Symbol.java:642)
[error] at jdk.compiler/com.sun.tools.javac.code.Symbol$ClassSymbol.complete(Symbol.java:1326)
[error] at jdk.compiler/com.sun.tools.javac.code.Symbol$ClassSymbol.flags(Symbol.java:1259)
[error] at jdk.compiler/com.sun.tools.javac.comp.Resolve.isAccessible(Resolve.java:405)
[error] at jdk.compiler/com.sun.tools.javac.comp.Resolve.isAccessible(Resolve.java:389)
[error] at jdk.compiler/com.sun.tools.javac.comp.Resolve.findImmediateMemberType(Resolve.java:2171)
[error] at jdk.compiler/com.sun.tools.javac.comp.Resolve.findMemberType(Resolve.java:2226)
[error] at jdk.compiler/com.sun.tools.javac.comp.Resolve.findIdentInTypeInternal(Resolve.java:2422)
[error] at jdk.compiler/com.sun.tools.javac.comp.Resolve.findIdentInType(Resolve.java:2408)
[error] at jdk.compiler/com.sun.tools.javac.comp.Attr.selectSym(Attr.java:3731)
[error] at jdk.compiler/com.sun.tools.javac.comp.Attr.visitSelect(Attr.java:3601)
[error] at jdk.compiler/com.sun.tools.javac.tree.JCTree$JCFieldAccess.accept(JCTree.java:2114)
[error] at jdk.compiler/com.sun.tools.javac.comp.Attr.attribTree(Attr.java:655)
[error] at jdk.compiler/com.sun.tools.javac.comp.Attr.attribType(Attr.java:715)
[error] at jdk.compiler/com.sun.tools.javac.comp.Attr.attribType(Attr.java:708)
[error] at jdk.compiler/com.sun.tools.javac.comp.MemberEnter.visitVarDef(MemberEnter.java:264)
[error] at jdk.compiler/com.sun.tools.javac.tree.JCTree$JCVariableDecl.accept(JCTree.java:956)
[error] at jdk.compiler/com.sun.tools.javac.comp.MemberEnter.memberEnter(MemberEnter.java:163)
[error] at jdk.compiler/com.sun.tools.javac.comp.MemberEnter.memberEnter(MemberEnter.java:175)
[error] at jdk.compiler/com.sun.tools.javac.comp.TypeEnter$MembersPhase.finishClass(TypeEnter.java:958)
[error] at jdk.compiler/com.sun.tools.javac.comp.TypeEnter$MembersPhase.runPhase(TypeEnter.java:942)
[error] at jdk.compiler/com.sun.tools.javac.comp.TypeEnter$Phase.doCompleteEnvs(TypeEnter.java:282)
[error] at jdk.compiler/com.sun.tools.javac.comp.TypeEnter$MembersPhase.doCompleteEnvs(TypeEnter.java:877)
[error] at jdk.compiler/com.sun.tools.javac.comp.TypeEnter$Phase.completeEnvs(TypeEnter.java:251)
[error] at jdk.compiler/com.sun.tools.javac.comp.TypeEnter$Phase.completeEnvs(TypeEnter.java:266)
[error] at jdk.compiler/com.sun.tools.javac.comp.TypeEnter$Phase.completeEnvs(TypeEnter.java:266)
[error] at jdk.compiler/com.sun.tools.javac.comp.TypeEnter$Phase.completeEnvs(TypeEnter.java:266)
[error] at jdk.compiler/com.sun.tools.javac.comp.TypeEnter.complete(TypeEnter.java:198)
[error] at jdk.compiler/com.sun.tools.javac.code.Symbol.complete(Symbol.java:642)
[error] at jdk.compiler/com.sun.tools.javac.code.Symbol$ClassSymbol.complete(Symbol.java:1326)
[error] at jdk.compiler/com.sun.tools.javac.comp.Enter.complete(Enter.java:583)
[error] at jdk.compiler/com.sun.tools.javac.comp.Enter.main(Enter.java:560)
[error] at jdk.compiler/com.sun.tools.javac.main.JavaCompiler.enterTrees(JavaCompiler.java:1066)
[error] at jdk.compiler/com.sun.tools.javac.main.JavaCompiler.compile(JavaCompiler.java:937)
[error] at jdk.compiler/com.sun.tools.javac.api.JavacTaskImpl.lambda$doCall$0(JavacTaskImpl.java:104)
[error] at jdk.compiler/com.sun.tools.javac.api.JavacTaskImpl.handleExceptions(JavacTaskImpl.java:147)
[error] at jdk.compiler/com.sun.tools.javac.api.JavacTaskImpl.doCall(JavacTaskImpl.java:100)
[error] at jdk.compiler/com.sun.tools.javac.api.JavacTaskImpl.call(JavacTaskImpl.java:94)
[error] at sbt.internal.inc.javac.LocalJavaCompiler.run(LocalJava.scala:204)
[error] at sbt.internal.inc.javac.AnalyzingJavaCompiler.$anonfun$compile$11(AnalyzingJavaCompiler.scala:158)
[error] at scala.runtime.java8.JFunction0$mcV$sp.apply(JFunction0$mcV$sp.java:23)
[error] at sbt.internal.inc.javac.AnalyzingJavaCompiler.timed(AnalyzingJavaCompiler.scala:236)
[error] at sbt.internal.inc.javac.AnalyzingJavaCompiler.compile(AnalyzingJavaCompiler.scala:148)
[error] at sbt.internal.inc.MixedAnalyzingCompiler.$anonfun$compile$5(MixedAnalyzingCompiler.scala:134)
[error] at scala.runtime.java8.JFunction0$mcV$sp.apply(JFunction0$mcV$sp.java:23)
[error] at sbt.internal.inc.MixedAnalyzingCompiler.timed(MixedAnalyzingCompiler.scala:186)
[error] at sbt.internal.inc.MixedAnalyzingCompiler.compileJava$1(MixedAnalyzingCompiler.scala:100)
[error] at sbt.internal.inc.MixedAnalyzingCompiler.compile(MixedAnalyzingCompiler.scala:146)
[error] at sbt.internal.inc.IncrementalCompilerImpl.$anonfun$compileInternal$1(IncrementalCompilerImpl.scala:343)
[error] at sbt.internal.inc.IncrementalCompilerImpl.$anonfun$compileInternal$1$adapted(IncrementalCompilerImpl.scala:343)
[error] at sbt.internal.inc.Incremental$.doCompile(Incremental.scala:120)
[error] at sbt.internal.inc.Incremental$.$anonfun$compile$4(Incremental.scala:100)
[error] at sbt.internal.inc.IncrementalCommon.recompileClasses(IncrementalCommon.scala:180)
[error] at sbt.internal.inc.IncrementalCommon.cycle(IncrementalCommon.scala:98)
[error] at sbt.internal.inc.Incremental$.$anonfun$compile$3(Incremental.scala:102)
[error] at sbt.internal.inc.Incremental$.manageClassfiles(Incremental.scala:155)
[error] at sbt.internal.inc.Incremental$.compile(Incremental.scala:92)
[error] at sbt.internal.inc.IncrementalCompile$.apply(Compile.scala:75)
[error] at sbt.internal.inc.IncrementalCompilerImpl.compileInternal(IncrementalCompilerImpl.scala:348)
[error] at sbt.internal.inc.IncrementalCompilerImpl.$anonfun$compileIncrementally$1(IncrementalCompilerImpl.scala:301)
[error] at sbt.internal.inc.IncrementalCompilerImpl.handleCompilationError(IncrementalCompilerImpl.scala:168)
[error] at sbt.internal.inc.IncrementalCompilerImpl.compileIncrementally(IncrementalCompilerImpl.scala:248)
[error] at sbt.internal.inc.IncrementalCompilerImpl.compile(IncrementalCompilerImpl.scala:74)
[error] at sbt.Defaults$.compileIncrementalTaskImpl(Defaults.scala:1765)
[error] at sbt.Defaults$.$anonfun$compileIncrementalTask$1(Defaults.scala:1738)
[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.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
[error] at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515)
[error] at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
[error] at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
[error] at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
[error] at java.base/java.lang.Thread.run(Thread.java:834)
[error] (Compile / compileIncremental) javac returned non-zero exit code
Expectation
Compile successfully as in scala 2 or in java 8.
Notes:
Even if we compile T.scala using java 8 then the output classes still can not be used in java 11:
% jabba use adopt@1.8.0-252
% dotc src/main/scala/T.scala
% jabba use adopt@1.11.0-7
% javac -cp . src/main/java/J.java
// same NPE error
Because this issue, libraries built with java 8 can not be used in java 11