scala / bug

Scala 2 bug reports only. Please, no questions — proper bug reports only.
https://scala-lang.org
230 stars 21 forks source link

Scaladoc throws a NullPointerException when generating DOT files for graphviz #10114

Open scabug opened 7 years ago

scabug commented 7 years ago

The complete log can be found at https://travis-ci.org/ThoughtWorksInc/DeepLearning.scala/builds/184423818

java.lang.NullPointerException
    at scala.tools.nsc.doc.html.page.diagram.DotRunner.feedToDot(DotRunner.scala:44)
    at scala.tools.nsc.doc.html.page.diagram.DotDiagramGenerator.generateSVG(DotDiagramGenerator.scala:323)
    at scala.tools.nsc.doc.html.page.diagram.DotDiagramGenerator.generate(DotDiagramGenerator.scala:41)
    at scala.tools.nsc.doc.html.page.Template.createDiagram$1(Template.scala:664)
    at scala.tools.nsc.doc.html.page.Template.memberToCommentBodyHtml(Template.scala:647)
    at scala.tools.nsc.doc.html.page.Template.memberToCommentHtml(Template.scala:313)
    at scala.tools.nsc.doc.html.page.Template.<init>(Template.scala:124)
    at scala.tools.nsc.doc.html.HtmlFactory.scala$tools$nsc$doc$html$HtmlFactory$$writeTemplate$1(HtmlFactory.scala:144)
    at scala.tools.nsc.doc.html.HtmlFactory$$anonfun$scala$tools$nsc$doc$html$HtmlFactory$$writeTemplate$1$2.apply(HtmlFactory.scala:146)
    at scala.tools.nsc.doc.html.HtmlFactory$$anonfun$scala$tools$nsc$doc$html$HtmlFactory$$writeTemplate$1$2.apply(HtmlFactory.scala:146)
    at scala.collection.TraversableLike$$anonfun$map$1.apply(TraversableLike.scala:244)
    at scala.collection.TraversableLike$$anonfun$map$1.apply(TraversableLike.scala:244)
    at scala.collection.immutable.List.foreach(List.scala:318)
    at scala.collection.TraversableLike$class.map(TraversableLike.scala:244)
    at scala.collection.AbstractTraversable.map(Traversable.scala:105)
    at scala.tools.nsc.doc.html.HtmlFactory.scala$tools$nsc$doc$html$HtmlFactory$$writeTemplate$1(HtmlFactory.scala:146)
    at scala.tools.nsc.doc.html.HtmlFactory$$anonfun$scala$tools$nsc$doc$html$HtmlFactory$$writeTemplate$1$2.apply(HtmlFactory.scala:146)
    at scala.tools.nsc.doc.html.HtmlFactory$$anonfun$scala$tools$nsc$doc$html$HtmlFactory$$writeTemplate$1$2.apply(HtmlFactory.scala:146)
    at scala.collection.TraversableLike$$anonfun$map$1.apply(TraversableLike.scala:244)
    at scala.collection.TraversableLike$$anonfun$map$1.apply(TraversableLike.scala:244)
    at scala.collection.immutable.List.foreach(List.scala:318)
    at scala.collection.TraversableLike$class.map(TraversableLike.scala:244)
    at scala.collection.AbstractTraversable.map(Traversable.scala:105)
    at scala.tools.nsc.doc.html.HtmlFactory.scala$tools$nsc$doc$html$HtmlFactory$$writeTemplate$1(HtmlFactory.scala:146)
    at scala.tools.nsc.doc.html.HtmlFactory$$anonfun$scala$tools$nsc$doc$html$HtmlFactory$$writeTemplate$1$2.apply(HtmlFactory.scala:146)
    at scala.tools.nsc.doc.html.HtmlFactory$$anonfun$scala$tools$nsc$doc$html$HtmlFactory$$writeTemplate$1$2.apply(HtmlFactory.scala:146)
    at scala.collection.TraversableLike$$anonfun$map$1.apply(TraversableLike.scala:244)
    at scala.collection.TraversableLike$$anonfun$map$1.apply(TraversableLike.scala:244)
    at scala.collection.immutable.List.foreach(List.scala:318)
    at scala.collection.TraversableLike$class.map(TraversableLike.scala:244)
    at scala.collection.AbstractTraversable.map(Traversable.scala:105)
    at scala.tools.nsc.doc.html.HtmlFactory.scala$tools$nsc$doc$html$HtmlFactory$$writeTemplate$1(HtmlFactory.scala:146)
    at scala.tools.nsc.doc.html.HtmlFactory$$anonfun$scala$tools$nsc$doc$html$HtmlFactory$$writeTemplate$1$2.apply(HtmlFactory.scala:146)
    at scala.tools.nsc.doc.html.HtmlFactory$$anonfun$scala$tools$nsc$doc$html$HtmlFactory$$writeTemplate$1$2.apply(HtmlFactory.scala:146)
    at scala.collection.TraversableLike$$anonfun$map$1.apply(TraversableLike.scala:244)
    at scala.collection.TraversableLike$$anonfun$map$1.apply(TraversableLike.scala:244)
    at scala.collection.immutable.List.foreach(List.scala:318)
    at scala.collection.TraversableLike$class.map(TraversableLike.scala:244)
    at scala.collection.AbstractTraversable.map(Traversable.scala:105)
    at scala.tools.nsc.doc.html.HtmlFactory.scala$tools$nsc$doc$html$HtmlFactory$$writeTemplate$1(HtmlFactory.scala:146)
    at scala.tools.nsc.doc.html.HtmlFactory.writeTemplates(HtmlFactory.scala:150)
    at scala.tools.nsc.doc.html.HtmlFactory.generate(HtmlFactory.scala:129)
    at scala.tools.nsc.doc.html.Doclet.generateImpl(Doclet.scala:16)
    at scala.tools.nsc.doc.doclet.Generator.generate(Generator.scala:24)
    at scala.tools.nsc.doc.DocFactory.generate$1(DocFactory.scala:131)
    at scala.tools.nsc.doc.DocFactory.document(DocFactory.scala:134)
    at xsbt.Runner.run(ScaladocInterface.scala:26)
    at xsbt.ScaladocInterface.run(ScaladocInterface.scala:10)
    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:483)
    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:822)
    at sbt.Defaults$$anonfun$docTaskSettings$3.apply(Defaults.scala:800)
    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.util.concurrent.FutureTask.run(FutureTask.java:266)
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
    at java.util.concurrent.FutureTask.run(FutureTask.java:266)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at java.lang.Thread.run(Thread.java:745)
scabug commented 7 years ago

Imported From: https://issues.scala-lang.org/browse/SI-10114?orig=1 Reporter: @Atry Affected Versions: 2.10.6

scabug commented 7 years ago

@gourlaysama said: So dotProcess is null here apparently: https://github.com/scala/scala/blob/v2.10.6/src/compiler/scala/tools/nsc/doc/html/page/diagram/DotRunner.scala#L44

Except I can't tell how it could become null there, unless someone is calling things in parallel when they shouldn't.

scabug commented 7 years ago

@SethTisue said: Is the problem reproducible in 2.11 and/or 2.12?

scabug commented 7 years ago

@Atry said: I don't know. This exception is rare even in Scala 2.10

scabug commented 7 years ago

@Atry said: There is a workaround.

The following sbt setting suppresses this exception.

parallelExecution in Global := false