Skip to content

Getting Position of Tree fails execution #13352

Closed
@BarkingBad

Description

@BarkingBad

Compiler version

3.1.0-RC1-bin-20210820-68044a6-NIGHTLY

When using traverseTree from Quotes TreeTraverser trait I check the position of each tree I visit. For some reason accessing the pos property, the execution fails. The stacktrace is leading to the assertion of the Span existence. The stacktrace is as follow:

Stacktrace
[error] Exception in thread "main" java.lang.AssertionError: assertion failed
[error]         at scala.runtime.Scala3RunTime$.assertFailed(Scala3RunTime.scala:11)
[error]         at dotty.tools.dotc.util.Spans$Span$.start$extension(Spans.scala:44)
[error]         at dotty.tools.dotc.util.SourcePosition.start(SourcePosition.scala:50)
[error]         at dotty.tools.dotc.util.SourcePosition.startLine(SourcePosition.scala:51)
[error]         at scala.quoted.runtime.impl.QuotesImpl$reflect$PositionMethods$.startLine(QuotesImpl.scala:2727)
[error]         at scala.quoted.runtime.impl.QuotesImpl$reflect$PositionMethods$.startLine(QuotesImpl.scala:2727)
[error]         at org.virtuslab.stacktraces.core.StacktracesInspector$Traverser$1.traverseTree(StacktracesInspector.scala:73)
[error]         at org.virtuslab.stacktraces.core.StacktracesInspector$Traverser$1.foldTree(StacktracesInspector.scala:78)
[error]         at org.virtuslab.stacktraces.core.StacktracesInspector$Traverser$1.foldTree(StacktracesInspector.scala:78)
[error]         at scala.quoted.Quotes$reflectModule$TreeAccumulator.foldOverTree(Quotes.scala:4329)
[error]         at scala.quoted.Quotes$reflectModule$TreeAccumulator.foldOverTree$(Quotes.scala:4247)
[error]         at org.virtuslab.stacktraces.core.StacktracesInspector$Traverser$1.foldOverTree(StacktracesInspector.scala:56)
[error]         at org.virtuslab.stacktraces.core.StacktracesInspector$Traverser$1.traverseTreeChildren(StacktracesInspector.scala:80)
[error]         at org.virtuslab.stacktraces.core.StacktracesInspector$Traverser$1.traverseTree(StacktracesInspector.scala:74)
[error]         at org.virtuslab.stacktraces.core.StacktracesInspector$Traverser$1.foldTree(StacktracesInspector.scala:78)
[error]         at org.virtuslab.stacktraces.core.StacktracesInspector$Traverser$1.foldTree(StacktracesInspector.scala:78)
[error]         at scala.quoted.Quotes$reflectModule$TreeAccumulator.foldOverTree(Quotes.scala:4304)
[error]         at scala.quoted.Quotes$reflectModule$TreeAccumulator.foldOverTree$(Quotes.scala:4247)
[error]         at org.virtuslab.stacktraces.core.StacktracesInspector$Traverser$1.foldOverTree(StacktracesInspector.scala:56)
[error]         at org.virtuslab.stacktraces.core.StacktracesInspector$Traverser$1.traverseTreeChildren(StacktracesInspector.scala:80)
[error]         at org.virtuslab.stacktraces.core.StacktracesInspector$Traverser$1.traverseTree(StacktracesInspector.scala:74)
[error]         at org.virtuslab.stacktraces.core.StacktracesInspector$Traverser$1.foldTree(StacktracesInspector.scala:78)
[error]         at org.virtuslab.stacktraces.core.StacktracesInspector$Traverser$1.foldTree(StacktracesInspector.scala:78)
[error]         at scala.quoted.Quotes$reflectModule$TreeAccumulator.foldTrees$$anonfun$1(Quotes.scala:4252)
[error]         at scala.collection.LinearSeqOps.foldLeft(LinearSeq.scala:169)
[error]         at scala.collection.LinearSeqOps.foldLeft$(LinearSeq.scala:165)
[error]         at scala.collection.immutable.List.foldLeft(List.scala:79)
[error]         at scala.quoted.Quotes$reflectModule$TreeAccumulator.foldTrees(Quotes.scala:4252)
[error]         at scala.quoted.Quotes$reflectModule$TreeAccumulator.foldTrees$(Quotes.scala:4247)
[error]         at org.virtuslab.stacktraces.core.StacktracesInspector$Traverser$1.foldTrees(StacktracesInspector.scala:56)
[error]         at scala.quoted.Quotes$reflectModule$TreeAccumulator.foldOverTree(Quotes.scala:4307)
[error]         at scala.quoted.Quotes$reflectModule$TreeAccumulator.foldOverTree$(Quotes.scala:4247)
[error]         at org.virtuslab.stacktraces.core.StacktracesInspector$Traverser$1.foldOverTree(StacktracesInspector.scala:56)
[error]         at org.virtuslab.stacktraces.core.StacktracesInspector$Traverser$1.traverseTreeChildren(StacktracesInspector.scala:80)
[error]         at org.virtuslab.stacktraces.core.StacktracesInspector$Traverser$1.traverseTree(StacktracesInspector.scala:74)
[error]         at org.virtuslab.stacktraces.core.StacktracesInspector$Traverser$1.foldTree(StacktracesInspector.scala:78)
[error]         at org.virtuslab.stacktraces.core.StacktracesInspector$Traverser$1.foldTree(StacktracesInspector.scala:78)
[error]         at scala.quoted.Quotes$reflectModule$TreeAccumulator.foldTrees$$anonfun$1(Quotes.scala:4252)
[error]         at scala.collection.LinearSeqOps.foldLeft(LinearSeq.scala:169)
[error]         at scala.collection.LinearSeqOps.foldLeft$(LinearSeq.scala:165)
[error]         at scala.collection.immutable.List.foldLeft(List.scala:79)
[error]         at scala.quoted.Quotes$reflectModule$TreeAccumulator.foldTrees(Quotes.scala:4252)
[error]         at scala.quoted.Quotes$reflectModule$TreeAccumulator.foldTrees$(Quotes.scala:4247)
[error]         at org.virtuslab.stacktraces.core.StacktracesInspector$Traverser$1.foldTrees(StacktracesInspector.scala:56)
[error]         at scala.quoted.Quotes$reflectModule$TreeAccumulator.foldOverTree(Quotes.scala:4313)
[error]         at scala.quoted.Quotes$reflectModule$TreeAccumulator.foldOverTree$(Quotes.scala:4247)
[error]         at org.virtuslab.stacktraces.core.StacktracesInspector$Traverser$1.foldOverTree(StacktracesInspector.scala:56)
[error]         at org.virtuslab.stacktraces.core.StacktracesInspector$Traverser$1.traverseTreeChildren(StacktracesInspector.scala:80)
[error]         at org.virtuslab.stacktraces.core.StacktracesInspector$Traverser$1.traverseTree(StacktracesInspector.scala:74)
[error]         at org.virtuslab.stacktraces.core.StacktracesInspector$Traverser$1.foldTree(StacktracesInspector.scala:78)
[error]         at org.virtuslab.stacktraces.core.StacktracesInspector$Traverser$1.foldTree(StacktracesInspector.scala:78)
[error]         at scala.quoted.Quotes$reflectModule$TreeAccumulator.foldTrees$$anonfun$1(Quotes.scala:4252)
[error]         at scala.collection.LinearSeqOps.foldLeft(LinearSeq.scala:169)
[error]         at scala.collection.LinearSeqOps.foldLeft$(LinearSeq.scala:165)
[error]         at scala.collection.immutable.List.foldLeft(List.scala:79)
[error]         at scala.quoted.Quotes$reflectModule$TreeAccumulator.foldTrees(Quotes.scala:4252)
[error]         at scala.quoted.Quotes$reflectModule$TreeAccumulator.foldTrees$(Quotes.scala:4247)
[error]         at org.virtuslab.stacktraces.core.StacktracesInspector$Traverser$1.foldTrees(StacktracesInspector.scala:56)
[error]         at scala.quoted.Quotes$reflectModule$TreeAccumulator.foldOverTree(Quotes.scala:4313)
[error]         at scala.quoted.Quotes$reflectModule$TreeAccumulator.foldOverTree$(Quotes.scala:4247)
[error]         at org.virtuslab.stacktraces.core.StacktracesInspector$Traverser$1.foldOverTree(StacktracesInspector.scala:56)
[error]         at org.virtuslab.stacktraces.core.StacktracesInspector$Traverser$1.traverseTreeChildren(StacktracesInspector.scala:80)
[error]         at org.virtuslab.stacktraces.core.StacktracesInspector$Traverser$1.traverseTree(StacktracesInspector.scala:74)
[error]         at org.virtuslab.stacktraces.core.StacktracesInspector$Traverser$1.foldTree(StacktracesInspector.scala:78)
[error]         at org.virtuslab.stacktraces.core.StacktracesInspector$Traverser$1.foldTree(StacktracesInspector.scala:78)
[error]         at scala.quoted.Quotes$reflectModule$TreeAccumulator.foldTrees$$anonfun$1(Quotes.scala:4252)
[error]         at scala.collection.LinearSeqOps.foldLeft(LinearSeq.scala:169)
[error]         at scala.collection.LinearSeqOps.foldLeft$(LinearSeq.scala:165)
[error]         at scala.collection.immutable.List.foldLeft(List.scala:79)
[error]         at scala.quoted.Quotes$reflectModule$TreeAccumulator.foldTrees(Quotes.scala:4252)
[error]         at scala.quoted.Quotes$reflectModule$TreeAccumulator.foldTrees$(Quotes.scala:4247)
[error]         at org.virtuslab.stacktraces.core.StacktracesInspector$Traverser$1.foldTrees(StacktracesInspector.scala:56)
[error]         at scala.quoted.Quotes$reflectModule$TreeAccumulator.foldOverTree(Quotes.scala:4313)
[error]         at scala.quoted.Quotes$reflectModule$TreeAccumulator.foldOverTree$(Quotes.scala:4247)
[error]         at org.virtuslab.stacktraces.core.StacktracesInspector$Traverser$1.foldOverTree(StacktracesInspector.scala:56)
[error]         at org.virtuslab.stacktraces.core.StacktracesInspector$Traverser$1.traverseTreeChildren(StacktracesInspector.scala:80)
[error]         at org.virtuslab.stacktraces.core.StacktracesInspector$Traverser$1.traverseTree(StacktracesInspector.scala:74)
[error]         at org.virtuslab.stacktraces.core.StacktracesInspector.inspect$$anonfun$1(StacktracesInspector.scala:114)
[error]         at scala.collection.immutable.List.foreach(List.scala:333)
[error]         at org.virtuslab.stacktraces.core.StacktracesInspector.inspect(StacktracesInspector.scala:119)
[error]         at scala.tasty.inspector.TastyInspector$TastyInspectorPhase$1.runOn(TastyInspector.scala:67)
[error]         at dotty.tools.dotc.Run.runPhases$4$$anonfun$4(Run.scala:205)
[error]         at scala.runtime.function.JProcedure1.apply(JProcedure1.java:15)
[error]         at scala.runtime.function.JProcedure1.apply(JProcedure1.java:10)
[error]         at scala.collection.ArrayOps$.foreach$extension(ArrayOps.scala:1323)
[error]         at dotty.tools.dotc.Run.runPhases$5(Run.scala:216)
[error]         at dotty.tools.dotc.Run.compileUnits$$anonfun$1(Run.scala:224)
[error]         at scala.runtime.java8.JFunction0$mcV$sp.apply(JFunction0$mcV$sp.scala:18)
[error]         at dotty.tools.dotc.util.Stats$.maybeMonitored(Stats.scala:68)
[error]         at dotty.tools.dotc.Run.compileUnits(Run.scala:231)
[error]         at dotty.tools.dotc.Run.compileUnits(Run.scala:172)
[error]         at dotty.tools.dotc.fromtasty.TASTYRun.compile(TASTYRun.scala:12)
[error]         at dotty.tools.dotc.Driver.doCompile(Driver.scala:39)
[error]         at dotty.tools.dotc.Driver.process(Driver.scala:199)
[error]         at dotty.tools.dotc.Driver.process(Driver.scala:167)
[error]         at dotty.tools.dotc.Driver.process(Driver.scala:179)
[error]         at scala.tasty.inspector.TastyInspector$.inspectFiles(TastyInspector.scala:106)
[error]         at scala.tasty.inspector.TastyInspector$.inspectAllTastyFiles(TastyInspector.scala:52)
[error]         at org.virtuslab.stacktraces.core.StacktracesInspector$.inspectStackTrace(StacktracesInspector.scala:28)
[error]         at org.virtuslab.stacktraces.core.Stacktraces$.convertToPrettyStackTrace(Stacktraces.scala:26)
[error]         at org.virtuslab.stacktraces.TestExecutor$package$.convertToPrettyStackTraceWithStdlib(TestExecutor.scala:17)
[error]         at org.virtuslab.stacktraces.TestExecutor$.executeTest(TestExecutor.scala:13)
[error]         at org.virtuslab.stacktraces.tests.BasicTests$.nestedLambdas(BasicTest.scala:37)
[error]         at org.virtuslab.stacktraces.tests.nestedLambdas.main(BasicTest.scala:27)
[error] Nonzero exit code returned from runner: 1

The trees that were accessed in the traverser callback that cause failure

Failing trees
[info] TypeTree[TypeRef(TermRef(ThisType(TypeRef(NoPrefix,module class <root>)),object scala),Nothing)]
[info] TypeTree[TypeRef(TermRef(ThisType(TypeRef(NoPrefix,module class <root>)),object scala),Any)]
[info] TypeTree[TypeRef(TermRef(ThisType(TypeRef(NoPrefix,module class <root>)),object scala),Nothing)]
[info] TypeTree[TypeRef(TermRef(ThisType(TypeRef(NoPrefix,module class <root>)),object scala),Any)]
[info] TypeTree[TypeRef(TermRef(ThisType(TypeRef(NoPrefix,module class <root>)),object scala),Nothing)]
[info] TypeTree[TypeRef(TermRef(ThisType(TypeRef(NoPrefix,module class <root>)),object scala),Any)]
[info] TypeTree[TypeRef(TermRef(ThisType(TypeRef(NoPrefix,module class <root>)),object scala),Nothing)]
[info] TypeTree[TypeRef(TermRef(ThisType(TypeRef(NoPrefix,module class <root>)),object scala),Any)]
[info] TypeTree[TypeRef(TermRef(ThisType(TypeRef(NoPrefix,module class <root>)),object scala),Nothing)]
[info] TypeTree[HKTypeLambda(List(_$1), List(TypeBounds(TypeRef(TermRef(ThisType(TypeRef(NoPrefix,module class <root>)),object scala),Nothing),TypeRef(TermRef(ThisType(TypeRef(NoPrefix,module class <root>)),object scala),Any))), TypeRef(TermRef(ThisType(TypeRef(NoPrefix,module class <root>)),object scala),Any), List())]
[info] TypeTree[TypeRef(TermRef(ThisType(TypeRef(NoPrefix,module class <root>)),object scala),Nothing)]
[info] TypeTree[TypeRef(TermRef(ThisType(TypeRef(NoPrefix,module class <root>)),object scala),Any)]
[info] TypeTree[TypeRef(TermRef(ThisType(TypeRef(NoPrefix,module class <root>)),object scala),Nothing)]
[info] TypeTree[TypeRef(TermRef(ThisType(TypeRef(NoPrefix,module class <root>)),object scala),Any)]
[info] TypeTree[TypeRef(TermRef(ThisType(TypeRef(NoPrefix,module class <root>)),object scala),Nothing)]
[info] TypeTree[HKTypeLambda(List(_$1), List(TypeBounds(TypeRef(TermRef(ThisType(TypeRef(NoPrefix,module class <root>)),object scala),Nothing),TypeRef(TermRef(ThisType(TypeRef(NoPrefix,module class <root>)),object scala),Any))), TypeRef(TermRef(ThisType(TypeRef(NoPrefix,module class <root>)),object scala),Any), List())]
[info] TypeTree[TypeRef(TermRef(ThisType(TypeRef(NoPrefix,module class <root>)),object scala),Nothing)]
[info] TypeTree[TypeRef(TermRef(ThisType(TypeRef(NoPrefix,module class <root>)),object scala),Any)]

There used to be the exists function in Position to check whether the Span exists but IIRC was removed because accessing pos should be safe now. I can provide a sample repo if necessary.

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions