Remove obsolete code in IncrementalPackageFragmentProvider

This commit is contained in:
Alexander Udalov
2015-12-18 23:24:48 +03:00
parent f7969621d6
commit 51cdb981f4
5 changed files with 29 additions and 81 deletions
@@ -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)))
@@ -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 }
}
} }
} }
} }
@@ -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) }
@@ -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>
@@ -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>> {