Skip to content

Broken signatures: scala.meta.internal.classpath.MissingSymbolException: missing symbol #1123

Open
@liancheng

Description

@liancheng

TL;DR

Hit scalafix.internal.v1.FileException while testing a snapshot release (0.3.0+9-86c91c86-SNAPSHOT) of the OrganizeImports rule against Metals master.

How to reproduce

  1. Checkout scalameta/metals@7b88c09

  2. Apply the following diff:

    diff --git a/.scalafix.conf b/.scalafix.conf
    index 6d486e27..7edcce92 100644
    --- a/.scalafix.conf
    +++ b/.scalafix.conf
    @@ -1,6 +1,11 @@
     rules = [
    -  RemoveUnused,
    +  OrganizeImports,
       ExplicitResultTypes,
     ]
     
     ExplicitResultTypes.rewriteStructuralTypesToNamedSubclass = false
    +
    +OrganizeImports {
    +  expandRelative = true
    +  groups = ["re:javax?\\.", "scala.", "scala.meta.", "*"]
    +}
    diff --git a/build.sbt b/build.sbt
    index e405fe98..0fea2ea1 100644
    --- a/build.sbt
    +++ b/build.sbt
    @@ -31,6 +31,7 @@ val MUnitFramework = new TestFramework("munit.Framework")
     
     inThisBuild(
       List(
    +    scalafixDependencies += "com.github.liancheng" %% "organize-imports" % "0.3.0+9-86c91c86-SNAPSHOT",
         version ~= { dynVer =>
           if (isCI) dynVer
           else localSnapshotVersion // only for local publishing
  3. Running sbt scalafix produces the following exception on two source files:

    scalafix.internal.v1.FileException: unexpected error processing file <file-path>
    Caused by: scala.meta.internal.classpath.MissingSymbolException: missing symbol: snailgun
            at scala.meta.internal.scalacp.SymbolOps$XtensionSymbolSSpec.descriptor(SymbolOps.scala:119)
            at scala.meta.internal.scalacp.SymbolOps$XtensionSymbolSSymbol.uncached$1(SymbolOps.scala:18)
            at scala.meta.internal.scalacp.SymbolOps$XtensionSymbolSSymbol.toSemantic(SymbolOps.scala:25)
            at scala.meta.internal.scalacp.SymbolOps$XtensionSymbol.ssym(SymbolOps.scala:185)
            at scala.meta.internal.scalacp.SymbolOps$XtensionSymbolSSpec.owner(SymbolOps.scala:58)
            at scala.meta.internal.scalacp.SymbolOps$XtensionSymbolSSymbol.uncached$1(SymbolOps.scala:18)
            at scala.meta.internal.scalacp.SymbolOps$XtensionSymbolSSymbol.toSemantic(SymbolOps.scala:25)
            at scala.meta.internal.scalacp.SymbolOps$XtensionSymbol.ssym(SymbolOps.scala:185)
            at scala.meta.internal.scalacp.SymbolOps$XtensionSymbolSSpec.owner(SymbolOps.scala:58)
            at scala.meta.internal.scalacp.SymbolOps$XtensionSymbolSSymbol.uncached$1(SymbolOps.scala:18)
            at scala.meta.internal.scalacp.SymbolOps$XtensionSymbolSSymbol.toSemantic(SymbolOps.scala:25)
            at scala.meta.internal.scalacp.SymbolOps$XtensionSymbol.ssym(SymbolOps.scala:185)
            at scala.meta.internal.scalacp.TypeOps$XtensionTypeSType.loop$1(TypeOps.scala:22)
            at scala.meta.internal.scalacp.TypeOps$XtensionTypeSType.toSemanticTpe(TypeOps.scala:94)
            at scala.meta.internal.scalacp.TypeOps$XtensionTypeSType.loop$2(TypeOps.scala:136)
            at scala.meta.internal.scalacp.TypeOps$XtensionTypeSType.toSemanticSig(TypeOps.scala:139)
            at scala.meta.internal.scalacp.SymbolInformationOps$XtensionGSymbolSSymbolInformation.sig(SymbolInformationOps.scala:164)
            at scala.meta.internal.scalacp.SymbolInformationOps$XtensionGSymbolSSymbolInformation.toSymbolInformation(SymbolInformationOps.scala:251)
            at scala.meta.internal.scalacp.Scalacp.sinfos(Scalacp.scala:32)
            at scala.meta.internal.scalacp.Scalacp.$anonfun$parse$1(Scalacp.scala:20)
            at scala.collection.immutable.List.flatMap(List.scala:338)
            at scala.meta.internal.scalacp.Scalacp.parse(Scalacp.scala:19)
            at scala.meta.internal.scalacp.Scalacp$.parse(Scalacp.scala:50)
            at scala.meta.internal.metacp.ClassfileInfos$.fromClassNode(ClassfileInfos.scala:47)
            at scala.meta.internal.symtab.GlobalSymbolTable.loadSymbol(GlobalSymbolTable.scala:38)
            at scala.meta.internal.symtab.GlobalSymbolTable.info(GlobalSymbolTable.scala:67)
            at scalafix.internal.v1.InternalSemanticDoc.info(InternalSemanticDoc.scala:71)
            at scalafix.v1.SemanticDocument.info(SemanticDocument.scala:38)
            at scalafix.v1.Symbol.info(Symbol.scala:21)
            at fix.OrganizeImports.$anonfun$partitionImplicits$3(OrganizeImports.scala:196)
            at fix.OrganizeImports.$anonfun$partitionImplicits$3$adapted(OrganizeImports.scala:196)
            at scala.collection.TraversableLike.noneIn$1(TraversableLike.scala:306)
            at scala.collection.TraversableLike.filterImpl(TraversableLike.scala:372)
            at scala.collection.TraversableLike.filterImpl$(TraversableLike.scala:284)
            at scala.collection.AbstractTraversable.filterImpl(Traversable.scala:108)
            at scala.collection.TraversableLike.filter(TraversableLike.scala:382)
            at scala.collection.TraversableLike.filter$(TraversableLike.scala:382)
            at scala.collection.AbstractTraversable.filter(Traversable.scala:108)
            at fix.OrganizeImports.$anonfun$partitionImplicits$1(OrganizeImports.scala:196)
            at scala.collection.TraversableLike.$anonfun$flatMap$1(TraversableLike.scala:280)
            at scala.collection.immutable.List.foreach(List.scala:392)
            at scala.collection.TraversableLike.flatMap(TraversableLike.scala:280)
            at scala.collection.TraversableLike.flatMap$(TraversableLike.scala:277)
            at scala.collection.immutable.List.flatMap(List.scala:355)
            at fix.OrganizeImports.partitionImplicits(OrganizeImports.scala:192)
            at fix.OrganizeImports.organizeGlobalImports(OrganizeImports.scala:90)
            at fix.OrganizeImports.fix(OrganizeImports.scala:77)
            at scalafix.internal.v1.Rules.$anonfun$semanticPatch$1(Rules.scala:75)
            at scala.collection.immutable.List.map(List.scala:286)
            at scalafix.internal.v1.Rules.semanticPatch(Rules.scala:73)
            at scalafix.internal.v1.MainOps$.unsafeHandleFile(MainOps.scala:234)
    

    The problematic source files are:

    metals/src/main/scala/scala/meta/internal/metals/BloopServers.scala
    metals/src/main/scala/scala/meta/internal/pantsbuild/commands/SharedCommand.scala
    

    This exception is triggered by a Symbol#info call in this line.

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