Load new proto messages for functions and properties

This commit is contained in:
Alexander Udalov
2015-10-04 23:58:13 +03:00
parent a58a7727d1
commit 9bf0502a31
25 changed files with 365 additions and 275 deletions
@@ -24,6 +24,7 @@ import org.jetbrains.kotlin.load.kotlin.PackagePartClassUtils
import org.jetbrains.kotlin.name.FqName
import org.jetbrains.kotlin.name.Name
import org.jetbrains.kotlin.psi.*
import org.jetbrains.kotlin.serialization.ProtoBuf
import org.jetbrains.kotlin.serialization.deserialization.descriptors.DeserializedCallableMemberDescriptor
import org.jetbrains.kotlin.serialization.jvm.JvmProtoBuf
@@ -68,9 +69,13 @@ public object JvmFileClassUtil {
@JvmStatic
public fun getImplClassName(callable: DeserializedCallableMemberDescriptor): Name? =
with(callable) {
if (proto.hasExtension(JvmProtoBuf.oldImplClassName))
nameResolver.getName(proto.getExtension(JvmProtoBuf.oldImplClassName))
else null
val proto = proto
when (proto) {
is ProtoBuf.Constructor -> null
is ProtoBuf.Function -> proto.getExtension(JvmProtoBuf.methodImplClassName)
is ProtoBuf.Property -> proto.getExtension(JvmProtoBuf.propertyImplClassName)
else -> error("Unknown message: $proto")
}?.let { nameResolver.getName(it) }
}
@JvmStatic
@@ -16,6 +16,7 @@
package org.jetbrains.kotlin.load.kotlin.incremental
import com.google.protobuf.MessageLite
import com.intellij.util.containers.MultiMap
import org.apache.log4j.Logger
import org.jetbrains.kotlin.descriptors.ModuleDescriptor
@@ -166,16 +167,28 @@ public class IncrementalPackageFragmentProvider(
this@IncrementalPackageFragment, packageData.packageProto, packageData.nameResolver, deserializationComponents,
{ listOf() }
) {
override fun filteredMemberProtos(allMemberProtos: Collection<ProtoBuf.Callable>): Collection<ProtoBuf.Callable> {
fun getPackagePart(callable: ProtoBuf.Callable) =
callable.getExtension(JvmProtoBuf.oldImplClassName)?.let { packageData.nameResolver.getName(it) }
override fun filteredFunctionProtos(protos: Collection<ProtoBuf.Function>): Collection<ProtoBuf.Function> {
return filteredMemberProtos(protos) {
it.getExtension(JvmProtoBuf.methodImplClassName)?.let { packageData.nameResolver.getName(it) }
}
}
override fun filteredPropertyProtos(protos: Collection<ProtoBuf.Property>): Collection<ProtoBuf.Property> {
return filteredMemberProtos(protos) {
it.getExtension(JvmProtoBuf.propertyImplClassName)?.let { packageData.nameResolver.getName(it) }
}
}
private fun <M : MessageLite> filteredMemberProtos(
allMemberProtos: Collection<M>,
getPackagePart: (M) -> Name?
): Collection<M> {
fun shouldSkipPackagePart(name: Name) =
JvmClassName.byFqNameWithoutInnerClasses(fqName.child(name)).getInternalName() in obsoletePackageParts
JvmClassName.byFqNameWithoutInnerClasses(fqName.child(name)).internalName in obsoletePackageParts
if (LOG.isDebugEnabled()) {
if (LOG.isDebugEnabled) {
val allPackageParts = allMemberProtos
.map (::getPackagePart)
.map(getPackagePart)
.filterNotNull()
.toSet()
val skippedPackageParts = allPackageParts.filter { shouldSkipPackagePart(it) }