Remove obsolete code in IncrementalPackageFragmentProvider
This commit is contained in:
@@ -16,17 +16,14 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.fileClasses
|
package org.jetbrains.kotlin.fileClasses
|
||||||
|
|
||||||
import com.google.protobuf.MessageLite
|
|
||||||
import com.intellij.psi.util.CachedValueProvider
|
import com.intellij.psi.util.CachedValueProvider
|
||||||
import com.intellij.psi.util.CachedValuesManager
|
import com.intellij.psi.util.CachedValuesManager
|
||||||
import org.jetbrains.kotlin.descriptors.PackageFragmentDescriptor
|
import org.jetbrains.kotlin.descriptors.PackageFragmentDescriptor
|
||||||
import org.jetbrains.kotlin.load.java.descriptors.getImplClassNameForDeserialized
|
import org.jetbrains.kotlin.load.java.descriptors.getImplClassNameForDeserialized
|
||||||
import org.jetbrains.kotlin.load.java.descriptors.getImplClassNameForProto
|
|
||||||
import org.jetbrains.kotlin.load.kotlin.PackagePartClassUtils
|
import org.jetbrains.kotlin.load.kotlin.PackagePartClassUtils
|
||||||
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.*
|
import org.jetbrains.kotlin.psi.*
|
||||||
import org.jetbrains.kotlin.serialization.deserialization.NameResolver
|
|
||||||
import org.jetbrains.kotlin.serialization.deserialization.descriptors.DeserializedCallableMemberDescriptor
|
import org.jetbrains.kotlin.serialization.deserialization.descriptors.DeserializedCallableMemberDescriptor
|
||||||
|
|
||||||
public object JvmFileClassUtil {
|
public object JvmFileClassUtil {
|
||||||
@@ -70,10 +67,6 @@ public object JvmFileClassUtil {
|
|||||||
public fun getImplClassName(callable: DeserializedCallableMemberDescriptor): Name? =
|
public fun getImplClassName(callable: DeserializedCallableMemberDescriptor): Name? =
|
||||||
callable.getImplClassNameForDeserialized()
|
callable.getImplClassNameForDeserialized()
|
||||||
|
|
||||||
@JvmStatic
|
|
||||||
public fun getImplClassName(proto: MessageLite, nameResolver: NameResolver): Name? =
|
|
||||||
getImplClassNameForProto(proto, nameResolver)
|
|
||||||
|
|
||||||
@JvmStatic
|
@JvmStatic
|
||||||
public fun getHiddenPartFqName(file: KtFile, jvmFileClassAnnotations: ParsedJmvFileClassAnnotations): FqName =
|
public fun getHiddenPartFqName(file: KtFile, jvmFileClassAnnotations: ParsedJmvFileClassAnnotations): FqName =
|
||||||
file.packageFqName.child(Name.identifier(manglePartName(jvmFileClassAnnotations.name, file.name)))
|
file.packageFqName.child(Name.identifier(manglePartName(jvmFileClassAnnotations.name, file.name)))
|
||||||
|
|||||||
+9
-45
@@ -16,17 +16,15 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.load.kotlin.incremental
|
package org.jetbrains.kotlin.load.kotlin.incremental
|
||||||
|
|
||||||
import com.google.protobuf.MessageLite
|
|
||||||
import com.intellij.util.containers.MultiMap
|
import com.intellij.util.containers.MultiMap
|
||||||
import org.apache.log4j.Logger
|
|
||||||
import org.jetbrains.kotlin.descriptors.ModuleDescriptor
|
import org.jetbrains.kotlin.descriptors.ModuleDescriptor
|
||||||
import org.jetbrains.kotlin.descriptors.PackageFragmentDescriptor
|
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.fileClasses.JvmFileClassUtil
|
|
||||||
import org.jetbrains.kotlin.load.kotlin.ModuleMapping
|
import org.jetbrains.kotlin.load.kotlin.ModuleMapping
|
||||||
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.load.kotlin.incremental.components.JvmPackagePartProto
|
||||||
import org.jetbrains.kotlin.modules.TargetId
|
import org.jetbrains.kotlin.modules.TargetId
|
||||||
import org.jetbrains.kotlin.name.FqName
|
import org.jetbrains.kotlin.name.FqName
|
||||||
import org.jetbrains.kotlin.name.Name
|
import org.jetbrains.kotlin.name.Name
|
||||||
@@ -34,8 +32,6 @@ import org.jetbrains.kotlin.psi.KtFile
|
|||||||
import org.jetbrains.kotlin.resolve.jvm.JvmClassName
|
import org.jetbrains.kotlin.resolve.jvm.JvmClassName
|
||||||
import org.jetbrains.kotlin.resolve.scopes.ChainedMemberScope
|
import org.jetbrains.kotlin.resolve.scopes.ChainedMemberScope
|
||||||
import org.jetbrains.kotlin.resolve.scopes.MemberScope
|
import org.jetbrains.kotlin.resolve.scopes.MemberScope
|
||||||
import org.jetbrains.kotlin.serialization.PackageData
|
|
||||||
import org.jetbrains.kotlin.serialization.ProtoBuf
|
|
||||||
import org.jetbrains.kotlin.serialization.deserialization.DeserializationComponents
|
import org.jetbrains.kotlin.serialization.deserialization.DeserializationComponents
|
||||||
import org.jetbrains.kotlin.serialization.deserialization.descriptors.DeserializedPackageMemberScope
|
import org.jetbrains.kotlin.serialization.deserialization.descriptors.DeserializedPackageMemberScope
|
||||||
import org.jetbrains.kotlin.serialization.jvm.JvmProtoBufUtil
|
import org.jetbrains.kotlin.serialization.jvm.JvmProtoBufUtil
|
||||||
@@ -54,8 +50,6 @@ public class IncrementalPackageFragmentProvider(
|
|||||||
) : PackageFragmentProvider {
|
) : PackageFragmentProvider {
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
private val LOG = Logger.getLogger(IncrementalPackageFragmentProvider::class.java)
|
|
||||||
|
|
||||||
public fun fqNamesToLoad(obsoletePackageParts: Collection<String>, sourceFiles: Collection<KtFile>): Set<FqName> =
|
public fun fqNamesToLoad(obsoletePackageParts: Collection<String>, sourceFiles: Collection<KtFile>): Set<FqName> =
|
||||||
(obsoletePackageParts.map { JvmClassName.byInternalName(it).packageFqName }
|
(obsoletePackageParts.map { JvmClassName.byInternalName(it).packageFqName }
|
||||||
+ PackagePartClassUtils.getFilesWithCallables(sourceFiles).map { it.packageFqName }).toSet()
|
+ PackagePartClassUtils.getFilesWithCallables(sourceFiles).map { it.packageFqName }).toSet()
|
||||||
@@ -118,13 +112,7 @@ public class IncrementalPackageFragmentProvider(
|
|||||||
allParts.filterNot { it in obsoletePackageParts }
|
allParts.filterNot { it in obsoletePackageParts }
|
||||||
} ?: emptyList<String>()
|
} ?: emptyList<String>()
|
||||||
|
|
||||||
val scopes = actualPackagePartFiles
|
val scopes = actualPackagePartFiles.mapNotNull { incrementalCache.getPackagePartData(it) }.map { createPackageScope(it) }
|
||||||
.mapNotNull {
|
|
||||||
incrementalCache.getPackagePartData(it)
|
|
||||||
}
|
|
||||||
.map {
|
|
||||||
IncrementalPackageScope(JvmProtoBufUtil.readPackageDataFrom(it.data, it.strings))
|
|
||||||
}
|
|
||||||
|
|
||||||
if (scopes.isEmpty()) {
|
if (scopes.isEmpty()) {
|
||||||
MemberScope.Empty
|
MemberScope.Empty
|
||||||
@@ -152,45 +140,21 @@ public class IncrementalPackageFragmentProvider(
|
|||||||
if (partsData.isEmpty())
|
if (partsData.isEmpty())
|
||||||
MemberScope.Empty
|
MemberScope.Empty
|
||||||
else {
|
else {
|
||||||
val scopes = partsData.map { IncrementalPackageScope(JvmProtoBufUtil.readPackageDataFrom(it.data, it.strings)) }
|
|
||||||
ChainedMemberScope(
|
ChainedMemberScope(
|
||||||
"Member scope for incremental compilation: union of multifile class parts data for $multifileClassFqName",
|
"Member scope for incremental compilation: union of multifile class parts data for $multifileClassFqName",
|
||||||
scopes)
|
partsData.map { createPackageScope(it) }
|
||||||
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun getMemberScope(): MemberScope = memberScope()
|
override fun getMemberScope(): MemberScope = memberScope()
|
||||||
}
|
}
|
||||||
|
|
||||||
private inner class IncrementalPackageScope(val packageData: PackageData) : DeserializedPackageMemberScope(
|
fun createPackageScope(part: JvmPackagePartProto): DeserializedPackageMemberScope {
|
||||||
this@IncrementalPackageFragment, packageData.packageProto, packageData.nameResolver, deserializationComponents,
|
val packageData = JvmProtoBufUtil.readPackageDataFrom(part.data, part.strings)
|
||||||
{ listOf() }
|
return DeserializedPackageMemberScope(
|
||||||
) {
|
this, packageData.packageProto, packageData.nameResolver, deserializationComponents, { listOf() }
|
||||||
override fun filteredFunctionProtos(protos: Collection<ProtoBuf.Function>): Collection<ProtoBuf.Function> =
|
)
|
||||||
filteredMemberProtos(protos)
|
|
||||||
|
|
||||||
override fun filteredPropertyProtos(protos: Collection<ProtoBuf.Property>): Collection<ProtoBuf.Property> =
|
|
||||||
filteredMemberProtos(protos)
|
|
||||||
|
|
||||||
private fun <M : MessageLite> filteredMemberProtos(allMemberProtos: Collection<M>): Collection<M> {
|
|
||||||
fun getPackagePart(callable: MessageLite): Name? =
|
|
||||||
JvmFileClassUtil.getImplClassName(callable, packageData.nameResolver)
|
|
||||||
|
|
||||||
fun shouldSkipPackagePart(name: Name) =
|
|
||||||
JvmClassName.byFqNameWithoutInnerClasses(fqName.child(name)).internalName in obsoletePackageParts
|
|
||||||
|
|
||||||
if (LOG.isDebugEnabled) {
|
|
||||||
val allPackageParts = allMemberProtos
|
|
||||||
.mapNotNull(::getPackagePart)
|
|
||||||
.toSet()
|
|
||||||
val skippedPackageParts = allPackageParts.filter { shouldSkipPackagePart(it) }
|
|
||||||
|
|
||||||
LOG.debug("Loading incremental package fragment for package '$fqName'," +
|
|
||||||
" all package parts: $allPackageParts, skipped parts: $skippedPackageParts")
|
|
||||||
}
|
|
||||||
|
|
||||||
return allMemberProtos.filter { getPackagePart(it)?.let { !shouldSkipPackagePart(it) } ?: true }
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+17
-20
@@ -16,7 +16,6 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.load.java.descriptors
|
package org.jetbrains.kotlin.load.java.descriptors
|
||||||
|
|
||||||
import com.google.protobuf.MessageLite
|
|
||||||
import org.jetbrains.kotlin.descriptors.CallableDescriptor
|
import org.jetbrains.kotlin.descriptors.CallableDescriptor
|
||||||
import org.jetbrains.kotlin.descriptors.ClassDescriptor
|
import org.jetbrains.kotlin.descriptors.ClassDescriptor
|
||||||
import org.jetbrains.kotlin.descriptors.ValueParameterDescriptor
|
import org.jetbrains.kotlin.descriptors.ValueParameterDescriptor
|
||||||
@@ -26,7 +25,6 @@ import org.jetbrains.kotlin.name.Name
|
|||||||
import org.jetbrains.kotlin.resolve.descriptorUtil.getSuperClassNotAny
|
import org.jetbrains.kotlin.resolve.descriptorUtil.getSuperClassNotAny
|
||||||
import org.jetbrains.kotlin.resolve.descriptorUtil.module
|
import org.jetbrains.kotlin.resolve.descriptorUtil.module
|
||||||
import org.jetbrains.kotlin.serialization.ProtoBuf
|
import org.jetbrains.kotlin.serialization.ProtoBuf
|
||||||
import org.jetbrains.kotlin.serialization.deserialization.NameResolver
|
|
||||||
import org.jetbrains.kotlin.serialization.deserialization.descriptors.DeserializedCallableMemberDescriptor
|
import org.jetbrains.kotlin.serialization.deserialization.descriptors.DeserializedCallableMemberDescriptor
|
||||||
import org.jetbrains.kotlin.serialization.jvm.JvmProtoBuf
|
import org.jetbrains.kotlin.serialization.jvm.JvmProtoBuf
|
||||||
import org.jetbrains.kotlin.types.KotlinType
|
import org.jetbrains.kotlin.types.KotlinType
|
||||||
@@ -69,21 +67,20 @@ fun ClassDescriptor.getParentJavaStaticClassScope(): LazyJavaStaticClassScope? {
|
|||||||
return staticScope
|
return staticScope
|
||||||
}
|
}
|
||||||
|
|
||||||
fun DeserializedCallableMemberDescriptor.getImplClassNameForDeserialized(): Name? =
|
fun DeserializedCallableMemberDescriptor.getImplClassNameForDeserialized(): Name? {
|
||||||
getImplClassNameForProto(this.proto, this.nameResolver)
|
val proto = proto
|
||||||
|
return when (proto) {
|
||||||
fun getImplClassNameForProto(proto: MessageLite, nameResolver: NameResolver): Name? =
|
is ProtoBuf.Constructor ->
|
||||||
when (proto) {
|
null
|
||||||
is ProtoBuf.Constructor ->
|
is ProtoBuf.Function ->
|
||||||
null
|
if (proto.hasExtension(JvmProtoBuf.methodImplClassName))
|
||||||
is ProtoBuf.Function ->
|
proto.getExtension(JvmProtoBuf.methodImplClassName)
|
||||||
if (proto.hasExtension(JvmProtoBuf.methodImplClassName))
|
else null
|
||||||
proto.getExtension(JvmProtoBuf.methodImplClassName)
|
is ProtoBuf.Property ->
|
||||||
else null
|
if (proto.hasExtension(JvmProtoBuf.propertyImplClassName))
|
||||||
is ProtoBuf.Property ->
|
proto.getExtension(JvmProtoBuf.propertyImplClassName)
|
||||||
if (proto.hasExtension(JvmProtoBuf.propertyImplClassName))
|
else null
|
||||||
proto.getExtension(JvmProtoBuf.propertyImplClassName)
|
else ->
|
||||||
else null
|
error("Unknown message: $proto")
|
||||||
else ->
|
}?.let { nameResolver.getName(it) }
|
||||||
error("Unknown message: $proto")
|
}
|
||||||
}?.let { nameResolver.getName(it) }
|
|
||||||
|
|||||||
+1
-3
@@ -19,11 +19,9 @@ package org.jetbrains.kotlin.load.kotlin
|
|||||||
import org.jetbrains.kotlin.descriptors.SourceElement
|
import org.jetbrains.kotlin.descriptors.SourceElement
|
||||||
import org.jetbrains.kotlin.descriptors.SourceFile
|
import org.jetbrains.kotlin.descriptors.SourceFile
|
||||||
import org.jetbrains.kotlin.load.java.descriptors.getImplClassNameForDeserialized
|
import org.jetbrains.kotlin.load.java.descriptors.getImplClassNameForDeserialized
|
||||||
import org.jetbrains.kotlin.load.java.descriptors.getImplClassNameForProto
|
|
||||||
import org.jetbrains.kotlin.load.java.structure.JavaPackage
|
import org.jetbrains.kotlin.load.java.structure.JavaPackage
|
||||||
import org.jetbrains.kotlin.serialization.deserialization.descriptors.DeserializedCallableMemberDescriptor
|
import org.jetbrains.kotlin.serialization.deserialization.descriptors.DeserializedCallableMemberDescriptor
|
||||||
|
|
||||||
|
|
||||||
class KotlinJvmBinaryPackageSourceElement(
|
class KotlinJvmBinaryPackageSourceElement(
|
||||||
private val jPackage: JavaPackage,
|
private val jPackage: JavaPackage,
|
||||||
kotlinBinaryClasses: List<KotlinJvmBinaryClass>
|
kotlinBinaryClasses: List<KotlinJvmBinaryClass>
|
||||||
@@ -47,4 +45,4 @@ class KotlinJvmBinaryPackageSourceElement(
|
|||||||
val name = descriptor.getImplClassNameForDeserialized() ?: return null
|
val name = descriptor.getImplClassNameForDeserialized() ?: return null
|
||||||
return implClassNameToBinaryClass[name.asString()]
|
return implClassNameToBinaryClass[name.asString()]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+2
-6
@@ -40,11 +40,11 @@ public abstract class DeserializedMemberScope protected constructor(
|
|||||||
|
|
||||||
private val functionProtos =
|
private val functionProtos =
|
||||||
c.storageManager.createLazyValue {
|
c.storageManager.createLazyValue {
|
||||||
groupByKey(filteredFunctionProtos(functionList), { it.name }) { it.receiverType(c.typeTable) != null }
|
groupByKey(functionList, { it.name }) { it.receiverType(c.typeTable) != null }
|
||||||
}
|
}
|
||||||
private val propertyProtos =
|
private val propertyProtos =
|
||||||
c.storageManager.createLazyValue {
|
c.storageManager.createLazyValue {
|
||||||
groupByKey(filteredPropertyProtos(propertyList), { it.name }) { it.receiverType(c.typeTable) != null }
|
groupByKey(propertyList, { it.name }) { it.receiverType(c.typeTable) != null }
|
||||||
}
|
}
|
||||||
|
|
||||||
private val functions =
|
private val functions =
|
||||||
@@ -52,10 +52,6 @@ public abstract class DeserializedMemberScope protected constructor(
|
|||||||
private val properties =
|
private val properties =
|
||||||
c.storageManager.createMemoizedFunction<Name, Collection<PropertyDescriptor>> { computeProperties(it) }
|
c.storageManager.createMemoizedFunction<Name, Collection<PropertyDescriptor>> { computeProperties(it) }
|
||||||
|
|
||||||
protected open fun filteredFunctionProtos(protos: Collection<ProtoBuf.Function>): Collection<ProtoBuf.Function> = protos
|
|
||||||
|
|
||||||
protected open fun filteredPropertyProtos(protos: Collection<ProtoBuf.Property>): Collection<ProtoBuf.Property> = protos
|
|
||||||
|
|
||||||
private fun <M : MessageLite> groupByKey(
|
private fun <M : MessageLite> groupByKey(
|
||||||
protos: Collection<M>, getNameIndex: (M) -> Int, isExtension: (M) -> Boolean
|
protos: Collection<M>, getNameIndex: (M) -> Int, isExtension: (M) -> Boolean
|
||||||
): Map<ProtoKey, List<M>> {
|
): Map<ProtoKey, List<M>> {
|
||||||
|
|||||||
Reference in New Issue
Block a user