@@ -63,10 +63,7 @@ class ScalaStepFilterBridge(
6363 .collect { case sym : TermSymbol if sym.isTerm => sym }
6464 yield term
6565
66- private def findDeclaringType (
67- fqcn : String ,
68- isExtensionMethod : Boolean
69- ): Option [DeclaringSymbol ] =
66+ private def findDeclaringType (fqcn : String , isExtensionMethod : Boolean ): Option [DeclaringSymbol ] =
7067 val javaParts = fqcn.split('.' )
7168 val isObject = fqcn.endsWith(" $" )
7269 val packageNames = javaParts.dropRight(1 ).toList.map(SimpleName .apply)
@@ -75,36 +72,30 @@ class ScalaStepFilterBridge(
7572 then ctx.findSymbolFromRoot(packageNames).asInstanceOf [PackageSymbol ]
7673 else ctx.defn.EmptyPackage
7774 val className = javaParts.last
78- def findRec (
79- owner : DeclaringSymbol ,
80- encodedName : String
81- ): Seq [DeclaringSymbol ] =
82- owner.declarations
83- .collect { case sym : DeclaringSymbol => sym }
84- .flatMap { sym =>
85- val encodedSymName = NameTransformer .encode(sym.name.toString)
86- val Symbol = s " ${Regex .quote(encodedSymName)}\\$$ ?(.*) " .r
87- encodedName match
88- case Symbol (remaining) =>
89- if remaining.isEmpty then Some (sym)
90- else findRec(sym, remaining)
91- case _ => None
92- }
93- val clsSymbols = findRec(packageSym, className)
75+ val clsSymbols = findSymbolsRecursively(packageSym, className)
9476 val obj = clsSymbols.filter(_.is(Flags .Module ))
9577 val cls = clsSymbols.filter(! _.is(Flags .Module ))
9678 assert(obj.size <= 1 && cls.size <= 1 )
9779 if isObject && ! isExtensionMethod then obj.headOption else cls.headOption
9880
99- private def matchSymbol (
100- method : jdi.Method ,
101- symbol : TermSymbol ,
102- isExtensionMethod : Boolean
103- ): Boolean =
104- matchName(method, symbol, isExtensionMethod) &&
81+ private def findSymbolsRecursively (owner : DeclaringSymbol , encodedName : String ): Seq [DeclaringSymbol ] =
82+ owner.declarations
83+ .collect { case sym : DeclaringSymbol => sym }
84+ .flatMap { sym =>
85+ val encodedSymName = NameTransformer .encode(sym.name.toString)
86+ val Symbol = s " ${Regex .quote(encodedSymName)}\\$$ ?(.*) " .r
87+ encodedName match
88+ case Symbol (remaining) =>
89+ if remaining.isEmpty then Some (sym)
90+ else findSymbolsRecursively(sym, remaining)
91+ case _ => None
92+ }
93+
94+ private def matchSymbol (method : jdi.Method , symbol : TermSymbol , isExtensionMethod : Boolean ): Boolean =
95+ matchTargetName(method, symbol, isExtensionMethod) &&
10596 matchSignature(method, symbol, isExtensionMethod)
10697
107- def matchName (
98+ def matchTargetName (
10899 method : jdi.Method ,
109100 symbol : TermSymbol ,
110101 isExtensionMethod : Boolean
@@ -114,7 +105,7 @@ class ScalaStepFilterBridge(
114105 // and prefixes its name with the full class name.
115106 // Example: method foo in class example.Inner becomes example$Inner$$foo
116107 val expectedName = method.name.stripPrefix(javaPrefix)
117- val encodedScalaName = NameTransformer .encode(symbol.name .toString)
108+ val encodedScalaName = NameTransformer .encode(symbol.targetName .toString)
118109 if isExtensionMethod then encodedScalaName == expectedName.stripSuffix(" $extension" )
119110 else encodedScalaName == expectedName
120111
0 commit comments