Two consecutive task tags (XXX, TODO, FIXME, ...) in a comment in any scala file crash the build
Write "//XXX TODO" in any Scala file. Make: "Project->clean". The build will crash. No class files are generated. It does not matter where you put this in your file. (As long as it is a comment.) This happens for any two "task tags" next to each other. (I haven't checked all combinations, though.)
(I found this when I tried to build Scalacheck with Eclipse.)
As far as I know, there is no hint for the user what goes wrong. The project just does not compile. (Which means: A whole project does not compile. And you have no hint, why. Or where the problem is.)
The error message is: >>>Problems occurred when invoking code from plug-in: "org.eclipse.core.resources".<<<
Stacktrace:
java.lang.StringIndexOutOfBoundsException: String index out of range: -11
at java.lang.String.substring(String.java:1937)
at scala.tools.eclipse.TaskScanner$$anonfun$5.apply(TaskScanner.scala:48)
at scala.tools.eclipse.TaskScanner$$anonfun$5.apply(TaskScanner.scala:48)
at scala.collection.TraversableLike$$anonfun$map$1.apply(TraversableLike.scala:204)
at scala.collection.TraversableLike$$anonfun$map$1.apply(TraversableLike.scala:204)
at scala.collection.mutable.ResizableArray$class.foreach(ResizableArray.scala:57)
at scala.collection.mutable.ArrayBuffer.foreach(ArrayBuffer.scala:43)
at scala.collection.TraversableLike$class.map(TraversableLike.scala:204)
at scala.collection.mutable.ArrayBuffer.map(ArrayBuffer.scala:43)
at scala.tools.eclipse.TaskScanner$$anonfun$extractTasks$1.apply(TaskScanner.scala:74)
at scala.tools.eclipse.TaskScanner$$anonfun$extractTasks$1.apply(TaskScanner.scala:74)
at scala.collection.TraversableLike$$anonfun$flatMap$1.apply(TraversableLike.scala:225)
at scala.collection.TraversableLike$$anonfun$flatMap$1.apply(TraversableLike.scala:225)
at scala.collection.mutable.ResizableArray$class.foreach(ResizableArray.scala:57)
at scala.collection.mutable.ArrayBuffer.foreach(ArrayBuffer.scala:43)
at scala.collection.TraversableLike$class.flatMap(TraversableLike.scala:225)
at scala.collection.mutable.ArrayBuffer.flatMap(ArrayBuffer.scala:43)
at scala.tools.eclipse.TaskScanner.extractTasks(TaskScanner.scala:74)
at scala.tools.eclipse.EclipseBuildManager$BuildReporter.comment(EclipseBuildManager.scala:98)
at scala.tools.nsc.CompilationUnits$CompilationUnit.comment(CompilationUnits.scala:81)
at scala.tools.nsc.ast.parser.Scanners$UnitScanner.foundComment(Scanners.scala:1068)
at scala.tools.nsc.ast.parser.Scanners$Scanner.skipComment(Scanners.scala:449)
at scala.tools.nsc.ast.parser.Scanners$Scanner.fetchToken(Scanners.scala:293)
at scala.tools.nsc.ast.parser.Scanners$Scanner.nextToken(Scanners.scala:176)
at scala.tools.nsc.ast.parser.Scanners$Scanner.init(Scanners.scala:886)
at scala.tools.nsc.ast.parser.Parsers$UnitParser.<init>(Parsers.scala:67)
at scala.tools.nsc.ast.parser.Parsers$UnitParser.<init>(Parsers.scala:64)
at scala.tools.nsc.ast.parser.SyntaxAnalyzer$ParserPhase.apply(SyntaxAnalyzer.scala:27)
at scala.tools.nsc.Global$GlobalPhase$$anonfun$applyPhase$1.apply(Global.scala:271)
at scala.tools.nsc.Global$GlobalPhase$$anonfun$applyPhase$1.apply(Global.scala:271)
at scala.tools.nsc.reporters.Reporter.withSource(Reporter.scala:48)
at scala.tools.nsc.Global$GlobalPhase.applyPhase(Global.scala:271)
at scala.tools.nsc.Global$GlobalPhase$$anonfun$run$1.apply(Global.scala:247)
at scala.tools.nsc.Global$GlobalPhase$$anonfun$run$1.apply(Global.scala:247)
at scala.collection.Iterator$class.foreach(Iterator.scala:631)
at scala.collection.mutable.ListBuffer$$anon$1.foreach(ListBuffer.scala:304)
at scala.tools.nsc.Global$GlobalPhase.run(Global.scala:247)
at scala.tools.nsc.Global$Run.compileSources(Global.scala:728)
at scala.tools.nsc.Global$Run.compileFiles(Global.scala:799)
at scala.tools.nsc.interactive.RefinedBuildManager.update0$1(RefinedBuildManager.scala:123)
at scala.tools.nsc.interactive.RefinedBuildManager.update(RefinedBuildManager.scala:182)
at scala.tools.nsc.interactive.RefinedBuildManager.update(RefinedBuildManager.scala:92)
at scala.tools.eclipse.EclipseBuildManager.build(EclipseBuildManager.scala:119)
at scala.tools.eclipse.ScalaProject.build(ScalaProject.scala:421)
at scala.tools.eclipse.ScalaBuilder.build(ScalaBuilder.scala:87)
at org.eclipse.core.internal.events.BuildManager$2.run(BuildManager.java:627)
at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42)
at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:170)
at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:201)
at org.eclipse.core.internal.events.BuildManager$1.run(BuildManager.java:253)
at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42)
at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:256)
at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:218)
at org.eclipse.core.internal.events.BuildManager.build(BuildManager.java:360)
at org.eclipse.core.internal.resources.Project$1.run(Project.java:523)
at org.eclipse.core.internal.resources.Workspace.run(Workspace.java:1800)
at org.eclipse.core.internal.resources.Workspace.run(Workspace.java:1782)
at org.eclipse.core.internal.resources.Project.internalBuild(Project.java:502)
at org.eclipse.core.internal.resources.Project.build(Project.java:94)
at org.eclipse.ui.actions.BuildAction.invokeOperation(BuildAction.java:221)
at org.eclipse.ui.actions.WorkspaceAction.execute(WorkspaceAction.java:162)
at org.eclipse.ui.actions.WorkspaceAction$2.runInWorkspace(WorkspaceAction.java:483)
at org.eclipse.core.internal.resources.InternalWorkspaceJob.run(InternalWorkspaceJob.java:38)
at org.eclipse.core.internal.jobs.Worker.run(Worker.java:55)
(I found this when I tried to build Scalacheck with Eclipse.)
As far as I know, there is no hint for the user what goes wrong. The project just does not compile. (Which means: A whole project does not compile. And you have no hint, why. Or where the problem is.)
The error message is: >>>Problems occurred when invoking code from plug-in: "org.eclipse.core.resources".<<<
Stacktrace:
java.lang.StringIndexOutOfBoundsException: String index out of range: -11
at java.lang.String.substring(String.java:1937)
at scala.tools.eclipse.TaskScanner$$anonfun$5.apply(TaskScanner.scala:48)
at scala.tools.eclipse.TaskScanner$$anonfun$5.apply(TaskScanner.scala:48)
at scala.collection.TraversableLike$$anonfun$map$1.apply(TraversableLike.scala:204)
at scala.collection.TraversableLike$$anonfun$map$1.apply(TraversableLike.scala:204)
at scala.collection.mutable.ResizableArray$class.foreach(ResizableArray.scala:57)
at scala.collection.mutable.ArrayBuffer.foreach(ArrayBuffer.scala:43)
at scala.collection.TraversableLike$class.map(TraversableLike.scala:204)
at scala.collection.mutable.ArrayBuffer.map(ArrayBuffer.scala:43)
at scala.tools.eclipse.TaskScanner$$anonfun$extractTasks$1.apply(TaskScanner.scala:74)
at scala.tools.eclipse.TaskScanner$$anonfun$extractTasks$1.apply(TaskScanner.scala:74)
at scala.collection.TraversableLike$$anonfun$flatMap$1.apply(TraversableLike.scala:225)
at scala.collection.TraversableLike$$anonfun$flatMap$1.apply(TraversableLike.scala:225)
at scala.collection.mutable.ResizableArray$class.foreach(ResizableArray.scala:57)
at scala.collection.mutable.ArrayBuffer.foreach(ArrayBuffer.scala:43)
at scala.collection.TraversableLike$class.flatMap(TraversableLike.scala:225)
at scala.collection.mutable.ArrayBuffer.flatMap(ArrayBuffer.scala:43)
at scala.tools.eclipse.TaskScanner.extractTasks(TaskScanner.scala:74)
at scala.tools.eclipse.EclipseBuildManager$BuildReporter.comment(EclipseBuildManager.scala:98)
at scala.tools.nsc.CompilationUnits$CompilationUnit.comment(CompilationUnits.scala:81)
at scala.tools.nsc.ast.parser.Scanners$UnitScanner.foundComment(Scanners.scala:1068)
at scala.tools.nsc.ast.parser.Scanners$Scanner.skipComment(Scanners.scala:449)
at scala.tools.nsc.ast.parser.Scanners$Scanner.fetchToken(Scanners.scala:293)
at scala.tools.nsc.ast.parser.Scanners$Scanner.nextToken(Scanners.scala:176)
at scala.tools.nsc.ast.parser.Scanners$Scanner.init(Scanners.scala:886)
at scala.tools.nsc.ast.parser.Parsers$UnitParser.<init>(Parsers.scala:67)
at scala.tools.nsc.ast.parser.Parsers$UnitParser.<init>(Parsers.scala:64)
at scala.tools.nsc.ast.parser.SyntaxAnalyzer$ParserPhase.apply(SyntaxAnalyzer.scala:27)
at scala.tools.nsc.Global$GlobalPhase$$anonfun$applyPhase$1.apply(Global.scala:271)
at scala.tools.nsc.Global$GlobalPhase$$anonfun$applyPhase$1.apply(Global.scala:271)
at scala.tools.nsc.reporters.Reporter.withSource(Reporter.scala:48)
at scala.tools.nsc.Global$GlobalPhase.applyPhase(Global.scala:271)
at scala.tools.nsc.Global$GlobalPhase$$anonfun$run$1.apply(Global.scala:247)
at scala.tools.nsc.Global$GlobalPhase$$anonfun$run$1.apply(Global.scala:247)
at scala.collection.Iterator$class.foreach(Iterator.scala:631)
at scala.collection.mutable.ListBuffer$$anon$1.foreach(ListBuffer.scala:304)
at scala.tools.nsc.Global$GlobalPhase.run(Global.scala:247)
at scala.tools.nsc.Global$Run.compileSources(Global.scala:728)
at scala.tools.nsc.Global$Run.compileFiles(Global.scala:799)
at scala.tools.nsc.interactive.RefinedBuildManager.update0$1(RefinedBuildManager.scala:123)
at scala.tools.nsc.interactive.RefinedBuildManager.update(RefinedBuildManager.scala:182)
at scala.tools.nsc.interactive.RefinedBuildManager.update(RefinedBuildManager.scala:92)
at scala.tools.eclipse.EclipseBuildManager.build(EclipseBuildManager.scala:119)
at scala.tools.eclipse.ScalaProject.build(ScalaProject.scala:421)
at scala.tools.eclipse.ScalaBuilder.build(ScalaBuilder.scala:87)
at org.eclipse.core.internal.events.BuildManager$2.run(BuildManager.java:627)
at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42)
at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:170)
at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:201)
at org.eclipse.core.internal.events.BuildManager$1.run(BuildManager.java:253)
at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42)
at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:256)
at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:218)
at org.eclipse.core.internal.events.BuildManager.build(BuildManager.java:360)
at org.eclipse.core.internal.resources.Project$1.run(Project.java:523)
at org.eclipse.core.internal.resources.Workspace.run(Workspace.java:1800)
at org.eclipse.core.internal.resources.Workspace.run(Workspace.java:1782)
at org.eclipse.core.internal.resources.Project.internalBuild(Project.java:502)
at org.eclipse.core.internal.resources.Project.build(Project.java:94)
at org.eclipse.ui.actions.BuildAction.invokeOperation(BuildAction.java:221)
at org.eclipse.ui.actions.WorkspaceAction.execute(WorkspaceAction.java:162)
at org.eclipse.ui.actions.WorkspaceAction$2.runInWorkspace(WorkspaceAction.java:483)
at org.eclipse.core.internal.resources.InternalWorkspaceJob.run(InternalWorkspaceJob.java:38)
at org.eclipse.core.internal.jobs.Worker.run(Worker.java:55)
Leave a comment
on 2010-05-20 10:25 *
By Mirko Stocker
That's an easy fix, but hard to spot :-) We need static code analysis tools for Scala!
(In revision:b61d84c5a359ab037c17394a0205f8bffe8f262a) Closes #1000017. Thanks to Mirko Stocker for the patch.
Branch:master
Branch:master