Skip to content

Commit 227c2ef

Browse files
committed
Create one Resolver per top-level Java class.
Rather than a global one for the whole context.
1 parent 3d79b98 commit 227c2ef

File tree

1 file changed

+15
-6
lines changed

1 file changed

+15
-6
lines changed

tasty-query/shared/src/main/scala/tastyquery/reader/Loaders.scala

Lines changed: 15 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -15,14 +15,15 @@ import tastyquery.Utils.*
1515
import tastyquery.reader.ReaderContext.rctx
1616
import tastyquery.reader.classfiles.{ClassfileParser, ClassfileReader}
1717
import tastyquery.reader.classfiles.ClassfileParser.{ClassKind, InnerClassDecl, Resolver}
18+
import tastyquery.reader.classfiles.ClassfileReader.Structure
1819
import tastyquery.reader.tasties.TastyUnpickler
1920

2021
private[tastyquery] object Loaders {
2122

2223
private[tastyquery] final class PackageLoadingInfo private[Loaders] (
2324
pkg: PackageSymbol,
2425
initPackageData: List[PackageData]
25-
)(using Resolver):
26+
):
2627
private lazy val dataByBinaryName =
2728
val localRoots = mutable.HashMap.empty[String, ClassData]
2829
for packageData <- initPackageData do
@@ -124,8 +125,7 @@ private[tastyquery] object Loaders {
124125
ClassfileParser.loadScala2Class(structure)
125126
true
126127
case ClassKind.Java =>
127-
val innerDecls = ClassfileParser.loadJavaClass(pkg, termName(classData.binaryName), structure)
128-
doLoadJavaInnerClasses(innerDecls, loadedFiles)
128+
doLoadJavaTopLevelClass(classData, structure, loadedFiles)
129129
true
130130
case ClassKind.TASTy =>
131131
throw TastyFormatException(s"Missing TASTy file for class ${classData.binaryName} in package $pkg")
@@ -137,8 +137,19 @@ private[tastyquery] object Loaders {
137137
false
138138
end doLoadClassFile
139139

140-
private def doLoadJavaInnerClasses(explore: List[InnerClassDecl], loadedFiles: LoadedFiles)(
140+
private def doLoadJavaTopLevelClass(classData: ClassData, structure: Structure, loadedFiles: LoadedFiles)(
141141
using ReaderContext
142+
): Unit =
143+
// The resolver for this top-level class and all its inner classes
144+
given Resolver = Resolver()
145+
146+
val innerDecls = ClassfileParser.loadJavaClass(pkg, termName(classData.binaryName), structure)
147+
doLoadJavaInnerClasses(innerDecls, loadedFiles)
148+
end doLoadJavaTopLevelClass
149+
150+
private def doLoadJavaInnerClasses(explore: List[InnerClassDecl], loadedFiles: LoadedFiles)(
151+
using ReaderContext,
152+
Resolver
142153
): Unit =
143154
explore match
144155
case inner :: rest =>
@@ -174,8 +185,6 @@ private[tastyquery] object Loaders {
174185
end PackageLoadingInfo
175186

176187
class Loader(val classpath: Classpath) {
177-
given Resolver = Resolver()
178-
179188
private type ByEntryMap = Map[ClasspathEntry, IArray[(PackageSymbol, IArray[String])]]
180189

181190
private var initialized = false

0 commit comments

Comments
 (0)