Fix searching serialized classes package contains multiple fragments
This commit is contained in:
+2
-7
@@ -55,13 +55,8 @@ class ClassDeserializer(private val components: DeserializationComponents) {
|
||||
}
|
||||
else {
|
||||
val fragments = components.packageFragmentProvider.getPackageFragments(classId.packageFqName)
|
||||
assert(fragments.size == 1) { "There should be exactly one package: $fragments, class id is $classId" }
|
||||
|
||||
val fragment = fragments.single()
|
||||
if (fragment is DeserializedPackageFragment) {
|
||||
// Similarly, verify that the containing package has information about this class
|
||||
if (!fragment.hasTopLevelClass(classId.shortClassName)) return null
|
||||
}
|
||||
val fragment = fragments.firstOrNull { it !is DeserializedPackageFragment || it.hasTopLevelClass(classId.shortClassName) }
|
||||
?: return null
|
||||
|
||||
components.createContext(
|
||||
fragment, nameResolver,
|
||||
|
||||
+7
-4
@@ -22,9 +22,12 @@ import org.jetbrains.kotlin.serialization.ClassDataWithSource
|
||||
|
||||
class DeserializedClassDataFinder(private val packageFragmentProvider: PackageFragmentProvider) : ClassDataFinder {
|
||||
override fun findClassData(classId: ClassId): ClassDataWithSource? {
|
||||
val packageFragment =
|
||||
packageFragmentProvider.getPackageFragments(classId.packageFqName).singleOrNull()
|
||||
as? DeserializedPackageFragment ?: return null
|
||||
return packageFragment.classDataFinder.findClassData(classId)
|
||||
val packageFragments = packageFragmentProvider.getPackageFragments(classId.packageFqName)
|
||||
for (fragment in packageFragments) {
|
||||
if (fragment !is DeserializedPackageFragment) continue
|
||||
|
||||
fragment.classDataFinder.findClassData(classId)?.let { return it }
|
||||
}
|
||||
return null
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user