Load module annotations for JVM and JS modules in compiler

#KT-22759 In Progress
This commit is contained in:
Alexander Udalov
2018-01-23 13:33:47 +01:00
parent 396a5ab352
commit 890374a42a
21 changed files with 478 additions and 211 deletions
@@ -19,6 +19,7 @@ package org.jetbrains.kotlin.load.kotlin.incremental
import org.jetbrains.kotlin.descriptors.PackagePartProvider
import org.jetbrains.kotlin.load.kotlin.ModuleMapping
import org.jetbrains.kotlin.load.kotlin.incremental.components.IncrementalCache
import org.jetbrains.kotlin.name.ClassId
import org.jetbrains.kotlin.serialization.deserialization.DeserializationConfiguration
import org.jetbrains.kotlin.storage.StorageManager
@@ -42,4 +43,8 @@ class IncrementalPackagePartProvider(
// TODO
override fun findMetadataPackageParts(packageFqName: String): List<String> = TODO()
override fun getAnnotationsOnBinaryModule(moduleName: String): List<ClassId> {
return parent.getAnnotationsOnBinaryModule(moduleName)
}
}
@@ -0,0 +1,42 @@
/*
* Copyright 2000-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license
* that can be found in the license/LICENSE.txt file.
*/
package org.jetbrains.kotlin.load.kotlin
import org.jetbrains.kotlin.descriptors.ClassOrPackageFragmentDescriptor
import org.jetbrains.kotlin.descriptors.DeclarationDescriptor
import org.jetbrains.kotlin.load.java.JvmAbi
import org.jetbrains.kotlin.resolve.DescriptorUtils
import org.jetbrains.kotlin.serialization.deserialization.descriptors.DeserializedClassDescriptor
import org.jetbrains.kotlin.serialization.deserialization.descriptors.DeserializedMemberDescriptor
import org.jetbrains.kotlin.serialization.jvm.JvmProtoBuf
fun getJvmModuleNameForDeserializedDescriptor(descriptor: DeclarationDescriptor): String? {
val parent = DescriptorUtils.getParentOfType(descriptor, ClassOrPackageFragmentDescriptor::class.java, false)
when {
parent is DeserializedClassDescriptor -> {
val classProto = parent.classProto
val nameResolver = parent.c.nameResolver
return classProto.getExtension(JvmProtoBuf.classModuleName)
?.takeIf { classProto.hasExtension(JvmProtoBuf.classModuleName) }
?.let(nameResolver::getString)
?: JvmAbi.DEFAULT_MODULE_NAME
}
descriptor is DeserializedMemberDescriptor -> {
val source = descriptor.containerSource
if (source is JvmPackagePartSource) {
val packageProto = source.packageProto
val nameResolver = source.nameResolver
return packageProto.getExtension(JvmProtoBuf.packageModuleName)
?.takeIf { packageProto.hasExtension(JvmProtoBuf.packageModuleName) }
?.let(nameResolver::getString)
?: JvmAbi.DEFAULT_MODULE_NAME
}
}
}
return null
}