[FE] Add missing 'ClassId' check in Kotlin class loading (KTIJ-23435)
'findKotlinClassOrContent()' does not really distinguish between outer class names and package path components, so it might return 'foo/bar/Baz.Boo' for 'foo/bar/Baz/Boo'. Possibly because 'findKotlinClassOrContent()' potentially returns a raw byte array, ClassId checking is supposed to be performed in 'extractClassMetadata()'. For Java, it happens inside 'FirJavaFacade.findClass()', yet for Kotlin the check was absent.
This commit is contained in:
+3
-3
@@ -108,15 +108,15 @@ class JvmClassFileBasedSymbolProvider(
|
||||
// Nested class of Kotlin class should have been a Kotlin class.
|
||||
return null
|
||||
}
|
||||
val javaClass = javaFacade.findClass(classId, (result as? KotlinClassFinder.Result.ClassFileContent)?.content)
|
||||
?: return null
|
||||
val knownContent = (result as? KotlinClassFinder.Result.ClassFileContent)?.content
|
||||
val javaClass = javaFacade.findClass(classId, knownContent) ?: return null
|
||||
return ClassMetadataFindResult.NoMetadata { symbol ->
|
||||
javaFacade.convertJavaClassToFir(symbol, classId.outerClassId?.let(::getClass), javaClass)
|
||||
}
|
||||
}
|
||||
|
||||
val kotlinClass = result.kotlinJvmBinaryClass
|
||||
if (kotlinClass.classHeader.kind != KotlinClassHeader.Kind.CLASS) return null
|
||||
if (kotlinClass.classHeader.kind != KotlinClassHeader.Kind.CLASS || kotlinClass.classId != classId) return null
|
||||
val data = kotlinClass.classHeader.data ?: return null
|
||||
val strings = kotlinClass.classHeader.strings ?: return null
|
||||
val (nameResolver, classProto) = JvmProtoBufUtil.readClassDataFrom(data, strings)
|
||||
|
||||
Reference in New Issue
Block a user