Add packageProto/nameResolver to JvmPackagePartSource
May be useful for loading platform-specific protobuf extensions (such as package_module_name on JVM) when analyzing deserialized top level members
This commit is contained in:
+3
-1
@@ -90,7 +90,9 @@ class IncrementalPackageFragmentProvider(
|
||||
|
||||
DeserializedPackageMemberScope(
|
||||
this, packageProto, nameResolver,
|
||||
JvmPackagePartSource(partName, facadeName, knownJvmBinaryClass = jvmBinaryClass),
|
||||
JvmPackagePartSource(
|
||||
partName, facadeName, packageProto, nameResolver, knownJvmBinaryClass = jvmBinaryClass
|
||||
),
|
||||
deserializationComponents, classNames = { emptyList() }
|
||||
)
|
||||
}
|
||||
|
||||
+3
-1
@@ -61,7 +61,9 @@ class DeserializedDescriptorResolver {
|
||||
val (nameResolver, packageProto) = parseProto(kotlinClass) {
|
||||
JvmProtoBufUtil.readPackageDataFrom(data, strings)
|
||||
} ?: return null
|
||||
val source = JvmPackagePartSource(kotlinClass, kotlinClass.incompatibility, kotlinClass.isPreReleaseInvisible)
|
||||
val source = JvmPackagePartSource(
|
||||
kotlinClass, packageProto, nameResolver, kotlinClass.incompatibility, kotlinClass.isPreReleaseInvisible
|
||||
)
|
||||
return DeserializedPackageMemberScope(descriptor, packageProto, nameResolver, source, components) {
|
||||
// All classes are included into Java scope
|
||||
emptyList()
|
||||
|
||||
@@ -20,18 +20,24 @@ import org.jetbrains.kotlin.descriptors.SourceFile
|
||||
import org.jetbrains.kotlin.name.ClassId
|
||||
import org.jetbrains.kotlin.name.Name
|
||||
import org.jetbrains.kotlin.resolve.jvm.JvmClassName
|
||||
import org.jetbrains.kotlin.serialization.ProtoBuf
|
||||
import org.jetbrains.kotlin.serialization.deserialization.IncompatibleVersionErrorData
|
||||
import org.jetbrains.kotlin.serialization.deserialization.NameResolver
|
||||
import org.jetbrains.kotlin.serialization.deserialization.descriptors.DeserializedContainerSource
|
||||
|
||||
class JvmPackagePartSource(
|
||||
val className: JvmClassName,
|
||||
val facadeClassName: JvmClassName?,
|
||||
val packageProto: ProtoBuf.Package,
|
||||
val nameResolver: NameResolver,
|
||||
override val incompatibility: IncompatibleVersionErrorData<JvmMetadataVersion>? = null,
|
||||
override val isPreReleaseInvisible: Boolean = false,
|
||||
val knownJvmBinaryClass: KotlinJvmBinaryClass? = null
|
||||
) : DeserializedContainerSource {
|
||||
constructor(
|
||||
kotlinClass: KotlinJvmBinaryClass,
|
||||
packageProto: ProtoBuf.Package,
|
||||
nameResolver: NameResolver,
|
||||
incompatibility: IncompatibleVersionErrorData<JvmMetadataVersion>? = null,
|
||||
isPreReleaseInvisible: Boolean = false
|
||||
) : this(
|
||||
@@ -39,6 +45,8 @@ class JvmPackagePartSource(
|
||||
kotlinClass.classHeader.multifileClassName?.let {
|
||||
if (it.isNotEmpty()) JvmClassName.byInternalName(it) else null
|
||||
},
|
||||
packageProto,
|
||||
nameResolver,
|
||||
incompatibility,
|
||||
isPreReleaseInvisible,
|
||||
kotlinClass
|
||||
|
||||
+1
-1
@@ -92,7 +92,7 @@ class DeserializerForClassfileDecompiler(
|
||||
val (nameResolver, packageProto) = JvmProtoBufUtil.readPackageDataFrom(annotationData, strings)
|
||||
val membersScope = DeserializedPackageMemberScope(
|
||||
createDummyPackageFragment(header.packageName?.let(::FqName) ?: facadeFqName.parent()), packageProto, nameResolver,
|
||||
JvmPackagePartSource(binaryClassForPackageClass), deserializationComponents
|
||||
JvmPackagePartSource(binaryClassForPackageClass, packageProto, nameResolver), deserializationComponents
|
||||
) { emptyList() }
|
||||
return membersScope.getContributedDescriptors().toList()
|
||||
}
|
||||
|
||||
+6
-3
@@ -75,7 +75,8 @@ fun createFileFacadeStub(
|
||||
val fileStub = KotlinFileStubForIde.forFileFacadeStub(facadeFqName)
|
||||
setupFileStub(fileStub, packageFqName)
|
||||
val container = ProtoContainer.Package(
|
||||
packageFqName, c.nameResolver, c.typeTable, JvmPackagePartSource(JvmClassName.byClassId(ClassId.topLevel(facadeFqName)), null)
|
||||
packageFqName, c.nameResolver, c.typeTable,
|
||||
JvmPackagePartSource(JvmClassName.byClassId(ClassId.topLevel(facadeFqName)), null, packageProto, c.nameResolver)
|
||||
)
|
||||
createDeclarationsStubs(fileStub, c, container, packageProto)
|
||||
return fileStub
|
||||
@@ -95,8 +96,10 @@ fun createMultifileClassStub(
|
||||
val partHeader = partFile.classHeader
|
||||
val (nameResolver, packageProto) = JvmProtoBufUtil.readPackageDataFrom(partHeader.data!!, partHeader.strings!!)
|
||||
val partContext = components.createContext(nameResolver, packageFqName, TypeTable(packageProto.typeTable))
|
||||
val container = ProtoContainer.Package(packageFqName, partContext.nameResolver, partContext.typeTable,
|
||||
JvmPackagePartSource(partFile))
|
||||
val container = ProtoContainer.Package(
|
||||
packageFqName, partContext.nameResolver, partContext.typeTable,
|
||||
JvmPackagePartSource(partFile, packageProto, nameResolver)
|
||||
)
|
||||
createDeclarationsStubs(fileStub, partContext, container, packageProto)
|
||||
}
|
||||
return fileStub
|
||||
|
||||
Reference in New Issue
Block a user