Scala-js: Cannot generate the Scaladoc for the library on JDK 9

Created on 11 Oct 2017  路  6Comments  路  Source: scala-js/scala-js

On JDK 9, library/doc crashes with the following exception:

[error]   bad constant pool tag 20 at byte 108
[error]      while compiling: /localhome/doeraene/projects/scalajs/library/src/main/scala/scala/scalajs/reflect/annotation/EnableReflectiveInstantiation.scala
[error]         during phase: globalPhase=terminal, enteringPhase=parser
[error]      library version: version 2.12.3
[error]     compiler version: version 2.12.3
[error]   reconstructed args: -implicits -bootclasspath /home/doeraene/.ivy2/cache/org.scala-lang/scala-library/jars/scala-library-2.12.3.jar -feature -P:scalajs:sjsDefinedByDefault -P:scalajs:suppressExportDeprecations -unchecked -doc-external-doc:/home/doeraene/.ivy2/cache/org.scala-lang/scala-library/jars/scala-library-2.12.3.jar#http://www.scala-lang.org/api/2.12.3/ -doc-external-doc:/home/doeraene/.ivy2/cache/org.scala-lang/scala-reflect/jars/scala-reflect-2.12.3.jar#http://www.scala-lang.org/api/2.12.3/ -doc-external-doc:/localhome/doeraene/projects/scalajs/library/target/scala-2.12/scalajs-library_2.12-0.6.21-SNAPSHOT.jar#http://www.scala-js.org/api/scalajs-library/0.6.21-SNAPSHOT/ -classpath /home/doeraene/.ivy2/cache/org.scala-lang/scala-reflect/jars/scala-reflect-2.12.3.jar:/localhome/doeraene/projects/scalajs/library/target/scala-2.12/scalajs-library_2.12-0.6.21-SNAPSHOT.jar -encoding utf8 -deprecation -groups -Xfatal-warnings -d /localhome/doeraene/projects/scalajs/library/target/scala-2.12/api -Xplugin:/localhome/doeraene/projects/scalajs/compiler/target/scala-2.12/scalajs-compiler_2.12.3-0.6.21-SNAPSHOT.jar
[error]
[error]   last tree to typer: Ident(<argument>)
[error]        tree position: <unknown>
[error]             tree tpe: scala.scalajs.reflect.InstantiatableClass
[error]               symbol: <none>
[error]    symbol definition: <none> (a NoSymbol)
[error]       symbol package: <none>
[error]        symbol owners:
[error]            call site: package <root> in <none>
[error]
[error] <Cannot read source file>
scala.reflect.internal.FatalError:
  bad constant pool tag 20 at byte 108
     while compiling: /localhome/doeraene/projects/scalajs/library/src/main/scala/scala/scalajs/reflect/annotation/EnableReflectiveInstantiation.scala
        during phase: globalPhase=terminal, enteringPhase=parser
     library version: version 2.12.3
    compiler version: version 2.12.3
  reconstructed args: -implicits -bootclasspath /home/doeraene/.ivy2/cache/org.scala-lang/scala-library/jars/scala-library-2.12.3.jar -feature -P:scalajs:sjsDefinedByDefault -P:scalajs:suppressExportDeprecations -unchecked -doc-external-doc:/home/doeraene/.ivy2/cache/org.scala-lang/scala-library/jars/scala-library-2.12.3.jar#http://www.scala-lang.org/api/2.12.3/ -doc-external-doc:/home/doeraene/.ivy2/cache/org.scala-lang/scala-reflect/jars/scala-reflect-2.12.3.jar#http://www.scala-lang.org/api/2.12.3/ -doc-external-doc:/localhome/doeraene/projects/scalajs/library/target/scala-2.12/scalajs-library_2.12-0.6.21-SNAPSHOT.jar#http://www.scala-js.org/api/scalajs-library/0.6.21-SNAPSHOT/ -classpath /home/doeraene/.ivy2/cache/org.scala-lang/scala-reflect/jars/scala-reflect-2.12.3.jar:/localhome/doeraene/projects/scalajs/library/target/scala-2.12/scalajs-library_2.12-0.6.21-SNAPSHOT.jar -encoding utf8 -deprecation -groups -Xfatal-warnings -d /localhome/doeraene/projects/scalajs/library/target/scala-2.12/api -Xplugin:/localhome/doeraene/projects/scalajs/compiler/target/scala-2.12/scalajs-compiler_2.12.3-0.6.21-SNAPSHOT.jar

  last tree to typer: Ident(<argument>)
       tree position: <unknown>
            tree tpe: scala.scalajs.reflect.InstantiatableClass
              symbol: <none>
   symbol definition: <none> (a NoSymbol)
      symbol package: <none>
       symbol owners:
           call site: package <root> in <none>

<Cannot read source file>
        at scala.reflect.internal.Reporting.abort(Reporting.scala:61)
        at scala.reflect.internal.Reporting.abort$(Reporting.scala:57)
        at scala.reflect.internal.SymbolTable.abort(SymbolTable.scala:16)
        at scala.tools.nsc.symtab.classfile.ClassfileParser$ConstantPool.errorBadTag(ClassfileParser.scala:366)
        at scala.tools.nsc.symtab.classfile.ClassfileParser$ConstantPool.<init>(ClassfileParser.scala:191)
        at scala.tools.nsc.symtab.SymbolLoaders$ClassfileLoader$classfileParser$.newConstantPool(SymbolLoaders.scala:294)
        at scala.tools.nsc.symtab.classfile.ClassfileParser.$anonfun$parse$1(ClassfileParser.scala:155)
        at scala.tools.nsc.symtab.classfile.ClassfileParser.parse(ClassfileParser.scala:127)
        at scala.tools.nsc.symtab.SymbolLoaders$ClassfileLoader.doComplete(SymbolLoaders.scala:316)
        at scala.tools.nsc.symtab.SymbolLoaders$SymbolLoader.complete(SymbolLoaders.scala:218)
        at scala.reflect.internal.Symbols$Symbol.info(Symbols.scala:1531)
        at scala.tools.nsc.doc.base.MemberLookupBase.$anonfun$lookupInTemplate$4(MemberLookupBase.scala:149)
        at scala.tools.nsc.doc.base.MemberLookupBase.$anonfun$lookupInTemplate$4$adapted(MemberLookupBase.scala:149)
        at scala.collection.TraversableLike.$anonfun$filterImpl$1(TraversableLike.scala:248)
        at scala.collection.immutable.List.foreach(List.scala:389)
        at scala.collection.TraversableLike.filterImpl(TraversableLike.scala:247)
        at scala.collection.TraversableLike.filterImpl$(TraversableLike.scala:245)
        at scala.collection.AbstractTraversable.filterImpl(Traversable.scala:104)
        at scala.collection.TraversableLike.filter(TraversableLike.scala:259)
        at scala.collection.TraversableLike.filter$(TraversableLike.scala:259)
        at scala.collection.AbstractTraversable.filter(Traversable.scala:104)
        at scala.tools.nsc.doc.base.MemberLookupBase.cleanupBogusClasses$1(MemberLookupBase.scala:149)
        at scala.tools.nsc.doc.base.MemberLookupBase.lookupInTemplate(MemberLookupBase.scala:160)
        at scala.tools.nsc.doc.base.MemberLookupBase.lookupInTemplate(MemberLookupBase.scala:124)
        at scala.tools.nsc.doc.base.MemberLookupBase.lookupInRootPackage(MemberLookupBase.scala:111)
        at scala.tools.nsc.doc.base.MemberLookupBase.memberLookup(MemberLookupBase.scala:52)
        at scala.tools.nsc.doc.base.MemberLookupBase.memberLookup$(MemberLookupBase.scala:48)
        at scala.tools.nsc.doc.DocFactory$$anon$1.memberLookup(DocFactory.scala:68)
        at scala.tools.nsc.doc.base.MemberLookupBase$$anon$1.link$lzycompute(MemberLookupBase.scala:27)
        at scala.tools.nsc.doc.base.MemberLookupBase$$anon$1.link(MemberLookupBase.scala:27)
        at scala.tools.nsc.doc.base.comment.EntityLink$.unapply(Body.scala:74)
        at scala.tools.nsc.doc.html.Page$.inlineToStr(Page.scala:29)
        at scala.tools.nsc.doc.html.Page$.$anonfun$inlineToStr$1(Page.scala:18)
        at scala.tools.nsc.doc.html.Page$.$anonfun$inlineToStr$1$adapted(Page.scala:18)
        at scala.collection.TraversableLike.$anonfun$flatMap$1(TraversableLike.scala:241)
        at scala.collection.immutable.List.foreach(List.scala:389)
        at scala.collection.TraversableLike.flatMap(TraversableLike.scala:241)
        at scala.collection.TraversableLike.flatMap$(TraversableLike.scala:238)
        at scala.collection.immutable.List.flatMap(List.scala:352)
        at scala.tools.nsc.doc.html.Page$.inlineToStr(Page.scala:18)
        at scala.tools.nsc.doc.html.Page$.$anonfun$inlineToStr$1(Page.scala:18)
        at scala.tools.nsc.doc.html.Page$.$anonfun$inlineToStr$1$adapted(Page.scala:18)
        at scala.collection.TraversableLike.$anonfun$flatMap$1(TraversableLike.scala:241)
        at scala.collection.immutable.List.foreach(List.scala:389)
        at scala.collection.TraversableLike.flatMap(TraversableLike.scala:241)
        at scala.collection.TraversableLike.flatMap$(TraversableLike.scala:238)
        at scala.collection.immutable.List.flatMap(List.scala:352)
        at scala.tools.nsc.doc.html.Page$.inlineToStr(Page.scala:18)
        at scala.tools.nsc.doc.html.Page$.$anonfun$inlineToStr$1(Page.scala:18)
        at scala.tools.nsc.doc.html.Page$.$anonfun$inlineToStr$1$adapted(Page.scala:18)
        at scala.collection.TraversableLike.$anonfun$flatMap$1(TraversableLike.scala:241)
        at scala.collection.immutable.List.foreach(List.scala:389)
        at scala.collection.TraversableLike.flatMap(TraversableLike.scala:241)
        at scala.collection.TraversableLike.flatMap$(TraversableLike.scala:238)
        at scala.collection.immutable.List.flatMap(List.scala:352)
        at scala.tools.nsc.doc.html.Page$.inlineToStr(Page.scala:18)
        at scala.tools.nsc.doc.html.page.IndexScript.$anonfun$shortDesc$2(IndexScript.scala:90)
        at scala.tools.nsc.doc.html.page.IndexScript.shortDesc(IndexScript.scala:89)
        at scala.tools.nsc.doc.html.page.IndexScript.$anonfun$packages$4(IndexScript.scala:47)
        at scala.tools.nsc.doc.html.page.IndexScript.$anonfun$packages$3(IndexScript.scala:41)
        at scala.collection.TraversableLike.$anonfun$map$1(TraversableLike.scala:234)
        at scala.collection.Iterator.foreach(Iterator.scala:929)
        at scala.collection.Iterator.foreach$(Iterator.scala:929)
        at scala.collection.AbstractIterator.foreach(Iterator.scala:1417)
        at scala.collection.IterableLike.foreach(IterableLike.scala:71)
        at scala.collection.IterableLike.foreach$(IterableLike.scala:70)
        at scala.collection.AbstractIterable.foreach(Iterable.scala:54)
        at scala.collection.TraversableLike.map(TraversableLike.scala:234)
        at scala.collection.TraversableLike.map$(TraversableLike.scala:227)
        at scala.collection.AbstractTraversable.map(Traversable.scala:104)
        at scala.tools.nsc.doc.html.page.IndexScript.$anonfun$packages$1(IndexScript.scala:32)
        at scala.collection.TraversableLike.$anonfun$map$1(TraversableLike.scala:234)
        at scala.collection.immutable.HashMap$HashMap1.foreach(HashMap.scala:231)
        at scala.collection.immutable.HashMap$HashTrieMap.foreach(HashMap.scala:462)
        at scala.collection.TraversableLike.map(TraversableLike.scala:234)
        at scala.collection.TraversableLike.map$(TraversableLike.scala:227)
        at scala.collection.AbstractTraversable.map(Traversable.scala:104)
        at scala.tools.nsc.doc.html.page.IndexScript.<init>(IndexScript.scala:28)
        at scala.tools.nsc.doc.html.page.IndexScript$.apply(IndexScript.scala:152)
        at scala.tools.nsc.doc.html.HtmlFactory.generate(HtmlFactory.scala:104)
        at scala.tools.nsc.doc.html.Doclet.generateImpl(Doclet.scala:23)
        at scala.tools.nsc.doc.doclet.Generator.generate(Generator.scala:23)
        at scala.tools.nsc.doc.DocFactory.generate$1(DocFactory.scala:128)
        at scala.tools.nsc.doc.DocFactory.document(DocFactory.scala:131)
        at xsbt.Runner.run(ScaladocInterface.scala:26)
        at xsbt.ScaladocInterface.run(ScaladocInterface.scala:10)
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.base/java.lang.reflect.Method.invoke(Method.java:564)
        at sbt.compiler.AnalyzingCompiler.call(AnalyzingCompiler.scala:107)
        at sbt.compiler.AnalyzingCompiler.doc(AnalyzingCompiler.scala:73)
        at sbt.compiler.AnalyzingCompiler.doc(AnalyzingCompiler.scala:68)
        at sbt.Doc$$anonfun$scaladoc$1.apply(Doc.scala:23)
        at sbt.Doc$$anonfun$scaladoc$1.apply(Doc.scala:23)
        at sbt.RawCompileLike$$anonfun$prepare$1.apply(RawCompileLike.scala:64)
        at sbt.RawCompileLike$$anonfun$prepare$1.apply(RawCompileLike.scala:56)
        at sbt.RawCompileLike$$anonfun$cached$1$$anonfun$2$$anonfun$apply$1.apply(RawCompileLike.scala:49)
        at sbt.RawCompileLike$$anonfun$cached$1$$anonfun$2$$anonfun$apply$1.apply(RawCompileLike.scala:47)
        at sbt.Tracked$$anonfun$outputChanged$1.apply(Tracked.scala:84)
        at sbt.Tracked$$anonfun$outputChanged$1.apply(Tracked.scala:79)
        at sbt.RawCompileLike$$anonfun$cached$1.apply(RawCompileLike.scala:54)
        at sbt.RawCompileLike$$anonfun$cached$1.apply(RawCompileLike.scala:39)
        at sbt.Defaults$$anonfun$docTaskSettings$3.apply(Defaults.scala:856)
        at sbt.Defaults$$anonfun$docTaskSettings$3.apply(Defaults.scala:834)
        at scala.Function1$$anonfun$compose$1.apply(Function1.scala:47)
        at sbt.$tilde$greater$$anonfun$$u2219$1.apply(TypeFunctions.scala:40)
        at sbt.std.Transform$$anon$4.work(System.scala:63)
        at sbt.Execute$$anonfun$submit$1$$anonfun$apply$1.apply(Execute.scala:228)
        at sbt.Execute$$anonfun$submit$1$$anonfun$apply$1.apply(Execute.scala:228)
        at sbt.ErrorHandling$.wideConvert(ErrorHandling.scala:17)
        at sbt.Execute.work(Execute.scala:237)
        at sbt.Execute$$anonfun$submit$1.apply(Execute.scala:228)
        at sbt.Execute$$anonfun$submit$1.apply(Execute.scala:228)
        at sbt.ConcurrentRestrictions$$anon$4$$anonfun$1.apply(ConcurrentRestrictions.scala:159)
        at sbt.CompletionService$$anon$2.call(CompletionService.scala:28)
        at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
        at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:514)
        at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
        at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
        at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
        at java.base/java.lang.Thread.run(Thread.java:844)
[error] (library/compile:doc) scala.reflect.internal.FatalError:
[error]   bad constant pool tag 20 at byte 108
[error]      while compiling: /localhome/doeraene/projects/scalajs/library/src/main/scala/scala/scalajs/reflect/annotation/EnableReflectiveInstantiation.scala
[error]         during phase: globalPhase=terminal, enteringPhase=parser
[error]      library version: version 2.12.3
[error]     compiler version: version 2.12.3
[error]   reconstructed args: -implicits -bootclasspath /home/doeraene/.ivy2/cache/org.scala-lang/scala-library/jars/scala-library-2.12.3.jar -feature -P:scalajs:sjsDefinedByDefault -P:scalajs:suppressExportDeprecations -unchecked -doc-external-doc:/home/doeraene/.ivy2/cache/org.scala-lang/scala-library/jars/scala-library-2.12.3.jar#http://www.scala-lang.org/api/2.12.3/ -doc-external-doc:/home/doeraene/.ivy2/cache/org.scala-lang/scala-reflect/jars/scala-reflect-2.12.3.jar#http://www.scala-lang.org/api/2.12.3/ -doc-external-doc:/localhome/doeraene/projects/scalajs/library/target/scala-2.12/scalajs-library_2.12-0.6.21-SNAPSHOT.jar#http://www.scala-js.org/api/scalajs-library/0.6.21-SNAPSHOT/ -classpath /home/doeraene/.ivy2/cache/org.scala-lang/scala-reflect/jars/scala-reflect-2.12.3.jar:/localhome/doeraene/projects/scalajs/library/target/scala-2.12/scalajs-library_2.12-0.6.21-SNAPSHOT.jar -encoding utf8 -deprecation -groups -Xfatal-warnings -d /localhome/doeraene/projects/scalajs/library/target/scala-2.12/api -Xplugin:/localhome/doeraene/projects/scalajs/compiler/target/scala-2.12/scalajs-compiler_2.12.3-0.6.21-SNAPSHOT.jar
[error]
[error]   last tree to typer: Ident(<argument>)
[error]        tree position: <unknown>
[error]             tree tpe: scala.scalajs.reflect.InstantiatableClass
[error]               symbol: <none>
[error]    symbol definition: <none> (a NoSymbol)
[error]       symbol package: <none>
[error]        symbol owners:
[error]            call site: package <root> in <none>
[error]
[error] <Cannot read source file>
[error] Total time: 7 s, completed Oct 10, 2017, 10:12:42 PM

To work around this, Scaladoc generation is disabled for library on JDK 9, but we'll have to reenable it at some point.

bug internal

All 6 comments

/cc @SethTisue. Apparently this issue means that now the community build fails (see #3381).

Copying my own probably-useful comment from the other closed ticket:

Hint: the constant pool tag 20 means "package" and was introduced in JVM 9. It is not present in JVM 8.

Fixed in 1ea99ad9ad0bbf5987437a1e1ad0b784d28bd7e7.

gah, this seems to have regressed, it's failing again at e.g. https://scala-ci.typesafe.com/view/scala-2.12.x/job/scala-2.12.x-jdk9-integrate-community-build/250/

not entirely sure if the regression is at your end or whether I might somehow have something wrong here:

# on Java 9+, the Scala.js build expects this property to be set.
# * note the kludgy specificity here, this will need further work
#   to be more flexible with different JVMs.
# * note that for `java -version`, Oracle and OpenJDK print different
#   things, so e.g. we might see:
#     openjdk version "9-Debian"
#     java version "9.0.4"
#   and lord knows what else, so matching on version strings must be done carefully
# * note that in the OpenJDK case it would be more correct to
#   use java9-rt-ext-oracle_corporation_9_debian, but it seems
#   highly unlikely that the difference would matter.
# * we have no actual guarantee that rt.jar is present in the given location.
#   if you've ever run sbt yourself on your machine on the JDK version in question,
#   sbt probably put the jar in the right place, maybe? if not, you can always
#   manually put it there yourself. that's what I did on our Jenkins workers
if   [[ `java -version 2>&1 | head -n 1` == *\"9*  ]]; then
  export SCALA_JS_OPTIONS=-Dscala.ext.dirs=$HOME/.sbt/0.13/java9-rt-ext-oracle_corporation_9_0_4
elif [[ `java -version 2>&1 | head -n 1` == *\"10* ]]; then
  export SCALA_JS_OPTIONS=-Dscala.ext.dirs=$HOME/.sbt/0.13/java9-rt-ext-oracle_corporation_10_0_1
else
  export SCALA_JS_OPTIONS=-Ddummy.ignore=nope
fi

or here:

  ${vars.base} {
    name: "scala-js"
    uri:  ${vars.uris.scala-js-uri}
    extra.options: [
      // hopefully avoid intermittent OutOfMemoryErrors with default 1.5G heap?
      "-Xmx2048m"
      // Java 8 vs 9 stuff; see run.sh
      ${SCALA_JS_OPTIONS}
    ]
    // not really sure how this list was arrived at
    extra.projects: [ "io", "logging", "linker", "testSuite" ]
    // exclude it here because we build it separately in scala-js-stubs
    extra.exclude: ["stubs"]
    extra.commands: ${vars.default-commands} [
      // - We disable source map tests to save ourselves a `npm install source-map-support` on the workers.
      //   Although only `testSuite` actually has tests, dbuild will try to run the tests for all projects
      //   that `testSuite` depends on (transitively), so we need to set it in a bunch of places.
      "set Seq(library, testInterface, jUnitRuntime, testSuite).map(p => jsEnv in p := new org.scalajs.jsenv.nodejs.NodeJSEnv(org.scalajs.jsenv.nodejs.NodeJSEnv.Config().withExecutable(\""${vars.node}"\").withSourceMap(false)))"
      "set MyScalaJSPlugin.wantSourceMaps in testSuite := false"
    ]
  }

Could you try removing your SCALAJS_OPTIONS altogether. We're supposed to take care of this stuff ourselves since https://github.com/scala-js/scala-js/pull/3385, but I think your workaround defeats our workaround ...

Was this page helpful?
0 / 5 - 0 ratings