Use known jvm binary class for package part if possible
This commit is contained in:
+3
-1
@@ -50,6 +50,7 @@ import org.jetbrains.kotlin.load.java.lazy.ModuleClassResolver
|
|||||||
import org.jetbrains.kotlin.load.java.structure.JavaClass
|
import org.jetbrains.kotlin.load.java.structure.JavaClass
|
||||||
import org.jetbrains.kotlin.load.java.structure.impl.VirtualFileBoundJavaClass
|
import org.jetbrains.kotlin.load.java.structure.impl.VirtualFileBoundJavaClass
|
||||||
import org.jetbrains.kotlin.load.kotlin.DeserializationComponentsForJava
|
import org.jetbrains.kotlin.load.kotlin.DeserializationComponentsForJava
|
||||||
|
import org.jetbrains.kotlin.load.kotlin.KotlinClassFinder
|
||||||
import org.jetbrains.kotlin.load.kotlin.incremental.IncrementalPackageFragmentProvider
|
import org.jetbrains.kotlin.load.kotlin.incremental.IncrementalPackageFragmentProvider
|
||||||
import org.jetbrains.kotlin.load.kotlin.incremental.IncrementalPackagePartProvider
|
import org.jetbrains.kotlin.load.kotlin.incremental.IncrementalPackagePartProvider
|
||||||
import org.jetbrains.kotlin.modules.TargetId
|
import org.jetbrains.kotlin.modules.TargetId
|
||||||
@@ -212,7 +213,8 @@ object TopDownAnalyzerFacadeForJVM {
|
|||||||
targetIds?.mapTo(additionalProviders) { targetId ->
|
targetIds?.mapTo(additionalProviders) { targetId ->
|
||||||
IncrementalPackageFragmentProvider(
|
IncrementalPackageFragmentProvider(
|
||||||
files, module, storageManager, container.get<DeserializationComponentsForJava>().components,
|
files, module, storageManager, container.get<DeserializationComponentsForJava>().components,
|
||||||
incrementalComponents.getIncrementalCache(targetId), targetId
|
incrementalComponents.getIncrementalCache(targetId), targetId,
|
||||||
|
container.get<KotlinClassFinder>()
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+11
-2
@@ -21,9 +21,11 @@ import org.jetbrains.kotlin.descriptors.PackageFragmentDescriptor
|
|||||||
import org.jetbrains.kotlin.descriptors.PackageFragmentProvider
|
import org.jetbrains.kotlin.descriptors.PackageFragmentProvider
|
||||||
import org.jetbrains.kotlin.descriptors.impl.PackageFragmentDescriptorImpl
|
import org.jetbrains.kotlin.descriptors.impl.PackageFragmentDescriptorImpl
|
||||||
import org.jetbrains.kotlin.load.kotlin.JvmPackagePartSource
|
import org.jetbrains.kotlin.load.kotlin.JvmPackagePartSource
|
||||||
|
import org.jetbrains.kotlin.load.kotlin.KotlinClassFinder
|
||||||
import org.jetbrains.kotlin.load.kotlin.PackagePartClassUtils
|
import org.jetbrains.kotlin.load.kotlin.PackagePartClassUtils
|
||||||
import org.jetbrains.kotlin.load.kotlin.incremental.components.IncrementalCache
|
import org.jetbrains.kotlin.load.kotlin.incremental.components.IncrementalCache
|
||||||
import org.jetbrains.kotlin.modules.TargetId
|
import org.jetbrains.kotlin.modules.TargetId
|
||||||
|
import org.jetbrains.kotlin.name.ClassId
|
||||||
import org.jetbrains.kotlin.name.FqName
|
import org.jetbrains.kotlin.name.FqName
|
||||||
import org.jetbrains.kotlin.name.Name
|
import org.jetbrains.kotlin.name.Name
|
||||||
import org.jetbrains.kotlin.psi.KtFile
|
import org.jetbrains.kotlin.psi.KtFile
|
||||||
@@ -42,7 +44,8 @@ class IncrementalPackageFragmentProvider(
|
|||||||
val storageManager: StorageManager,
|
val storageManager: StorageManager,
|
||||||
val deserializationComponents: DeserializationComponents,
|
val deserializationComponents: DeserializationComponents,
|
||||||
val incrementalCache: IncrementalCache,
|
val incrementalCache: IncrementalCache,
|
||||||
val target: TargetId
|
val target: TargetId,
|
||||||
|
private val kotlinClassFinder: KotlinClassFinder
|
||||||
) : PackageFragmentProvider {
|
) : PackageFragmentProvider {
|
||||||
val fqNameToPackageFragment =
|
val fqNameToPackageFragment =
|
||||||
PackagePartClassUtils.getFilesWithCallables(sourceFiles)
|
PackagePartClassUtils.getFilesWithCallables(sourceFiles)
|
||||||
@@ -79,11 +82,17 @@ class IncrementalPackageFragmentProvider(
|
|||||||
partsInternalNames.mapNotNull { internalName ->
|
partsInternalNames.mapNotNull { internalName ->
|
||||||
incrementalCache.getPackagePartData(internalName)?.let { (data, strings) ->
|
incrementalCache.getPackagePartData(internalName)?.let { (data, strings) ->
|
||||||
val (nameResolver, packageProto) = JvmProtoBufUtil.readPackageDataFrom(data, strings)
|
val (nameResolver, packageProto) = JvmProtoBufUtil.readPackageDataFrom(data, strings)
|
||||||
|
|
||||||
|
val jvmBinaryClass = kotlinClassFinder.findKotlinClass(
|
||||||
|
ClassId.topLevel(FqName(internalName.replace('/', '.')))
|
||||||
|
)
|
||||||
|
|
||||||
DeserializedPackageMemberScope(
|
DeserializedPackageMemberScope(
|
||||||
this, packageProto, nameResolver,
|
this, packageProto, nameResolver,
|
||||||
JvmPackagePartSource(
|
JvmPackagePartSource(
|
||||||
JvmClassName.byInternalName(internalName),
|
JvmClassName.byInternalName(internalName),
|
||||||
JvmClassName.byFqNameWithoutInnerClasses(multifileClassFqName.asString())
|
JvmClassName.byFqNameWithoutInnerClasses(multifileClassFqName.asString()),
|
||||||
|
knownJvmBinaryClass = jvmBinaryClass
|
||||||
),
|
),
|
||||||
deserializationComponents, classNames = { emptyList() }
|
deserializationComponents, classNames = { emptyList() }
|
||||||
)
|
)
|
||||||
|
|||||||
+4
-1
@@ -242,7 +242,10 @@ abstract class AbstractBinaryClassAnnotationAndConstantLoader<A : Any, C : Any,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (container is ProtoContainer.Package && container.source is JvmPackagePartSource) {
|
if (container is ProtoContainer.Package && container.source is JvmPackagePartSource) {
|
||||||
return kotlinClassFinder.findKotlinClass((container.source as JvmPackagePartSource).classId)
|
val jvmPackagePartSource = container.source as JvmPackagePartSource
|
||||||
|
|
||||||
|
return jvmPackagePartSource.knownJvmBinaryClass
|
||||||
|
?: kotlinClassFinder.findKotlinClass(jvmPackagePartSource.classId)
|
||||||
}
|
}
|
||||||
return null
|
return null
|
||||||
}
|
}
|
||||||
|
|||||||
+4
-2
@@ -27,7 +27,8 @@ class JvmPackagePartSource(
|
|||||||
val className: JvmClassName,
|
val className: JvmClassName,
|
||||||
val facadeClassName: JvmClassName?,
|
val facadeClassName: JvmClassName?,
|
||||||
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
|
||||||
) : DeserializedContainerSource {
|
) : DeserializedContainerSource {
|
||||||
constructor(
|
constructor(
|
||||||
kotlinClass: KotlinJvmBinaryClass,
|
kotlinClass: KotlinJvmBinaryClass,
|
||||||
@@ -39,7 +40,8 @@ class JvmPackagePartSource(
|
|||||||
if (it.isNotEmpty()) JvmClassName.byInternalName(it) else null
|
if (it.isNotEmpty()) JvmClassName.byInternalName(it) else null
|
||||||
},
|
},
|
||||||
incompatibility,
|
incompatibility,
|
||||||
isPreReleaseInvisible
|
isPreReleaseInvisible,
|
||||||
|
kotlinClass
|
||||||
)
|
)
|
||||||
|
|
||||||
override val presentableString: String
|
override val presentableString: String
|
||||||
|
|||||||
Reference in New Issue
Block a user