Support SinceKotlinInfo for deserialized classes

This commit is contained in:
Alexander Udalov
2016-12-14 19:18:59 +03:00
parent 6393ac5871
commit ede60efda5
2 changed files with 13 additions and 9 deletions
@@ -31,6 +31,7 @@ import org.jetbrains.kotlin.name.FqName
import org.jetbrains.kotlin.resolve.DeprecationLevelValue.* import org.jetbrains.kotlin.resolve.DeprecationLevelValue.*
import org.jetbrains.kotlin.resolve.annotations.argumentValue import org.jetbrains.kotlin.resolve.annotations.argumentValue
import org.jetbrains.kotlin.resolve.descriptorUtil.fqNameSafe import org.jetbrains.kotlin.resolve.descriptorUtil.fqNameSafe
import org.jetbrains.kotlin.serialization.deserialization.descriptors.DeserializedClassDescriptor
import org.jetbrains.kotlin.serialization.deserialization.descriptors.DeserializedMemberDescriptor import org.jetbrains.kotlin.serialization.deserialization.descriptors.DeserializedMemberDescriptor
import org.jetbrains.kotlin.serialization.deserialization.descriptors.SinceKotlinInfo import org.jetbrains.kotlin.serialization.deserialization.descriptors.SinceKotlinInfo
import org.jetbrains.kotlin.utils.SmartList import org.jetbrains.kotlin.utils.SmartList
@@ -189,15 +190,15 @@ private fun DeclarationDescriptor.getOwnDeprecations(languageVersionSettings: La
result.add(DeprecatedByAnnotation(annotation, target)) result.add(DeprecatedByAnnotation(annotation, target))
} }
if (target is DeserializedMemberDescriptor) { val sinceKotlinInfo =
val sinceKotlinInfo = target.sinceKotlinInfo (target as? DeserializedMemberDescriptor)?.sinceKotlinInfo
if (sinceKotlinInfo != null) { ?: (target as? DeserializedClassDescriptor)?.sinceKotlinInfo
// We're using ApiVersion because it's convenient to compare versions, "-api-version" is not involved in any way if (sinceKotlinInfo != null) {
// TODO: usage of ApiVersion is confusing here, refactor // We're using ApiVersion because it's convenient to compare versions, "-api-version" is not involved in any way
if (ApiVersion.createBySinceKotlinInfo(sinceKotlinInfo) > // TODO: usage of ApiVersion is confusing here, refactor
ApiVersion.createByLanguageVersion(languageVersionSettings.languageVersion)) { if (ApiVersion.createBySinceKotlinInfo(sinceKotlinInfo) >
result.add(DeprecatedBySinceKotlinInfo(sinceKotlinInfo, target)) ApiVersion.createByLanguageVersion(languageVersionSettings.languageVersion)) {
} result.add(DeprecatedBySinceKotlinInfo(sinceKotlinInfo, target))
} }
} }
} }
@@ -73,6 +73,9 @@ class DeserializedClassDescriptor(
(containingDeclaration as? DeserializedClassDescriptor)?.thisAsProtoContainer (containingDeclaration as? DeserializedClassDescriptor)?.thisAsProtoContainer
) )
val sinceKotlinInfo: SinceKotlinInfo?
get() = SinceKotlinInfo.create(classProto, c.nameResolver, c.sinceKotlinInfoTable)
override val annotations = override val annotations =
if (!Flags.HAS_ANNOTATIONS.get(classProto.flags)) { if (!Flags.HAS_ANNOTATIONS.get(classProto.flags)) {
Annotations.EMPTY Annotations.EMPTY