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