From d0f4631192d3a088ade18c3da57dca2ff799cb78 Mon Sep 17 00:00:00 2001 From: Denis Zharkov Date: Thu, 23 Apr 2020 15:22:04 +0300 Subject: [PATCH] Resolve ambiguity between kotlin.Throws and kotlin.native.Throws KT-35468 --- .../org/jetbrains/kotlin/resolve/AnnotationUtil.kt | 2 ++ .../kotlin/resolve/lazy/LazyImportScope.kt | 14 +++++++++++++- 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/compiler/frontend/src/org/jetbrains/kotlin/resolve/AnnotationUtil.kt b/compiler/frontend/src/org/jetbrains/kotlin/resolve/AnnotationUtil.kt index df0924d2ab5..d2d9fc0337c 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/resolve/AnnotationUtil.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/resolve/AnnotationUtil.kt @@ -49,3 +49,5 @@ val JVM_FIELD_ANNOTATION_FQ_NAME = FqName("kotlin.jvm.JvmField") val JVM_THROWS_ANNOTATION_FQ_NAME = FqName("kotlin.jvm.Throws") val KOTLIN_THROWS_ANNOTATION_FQ_NAME = FqName("kotlin.Throws") + +val KOTLIN_NATIVE_THROWS_ANNOTATION_FQ_NAME = FqName("kotlin.native.Throws") diff --git a/compiler/frontend/src/org/jetbrains/kotlin/resolve/lazy/LazyImportScope.kt b/compiler/frontend/src/org/jetbrains/kotlin/resolve/lazy/LazyImportScope.kt index 0f750bc49ea..54344da77e5 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/resolve/lazy/LazyImportScope.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/resolve/lazy/LazyImportScope.kt @@ -33,6 +33,7 @@ import org.jetbrains.kotlin.psi.KtImportInfo import org.jetbrains.kotlin.psi.KtPsiUtil import org.jetbrains.kotlin.resolve.* import org.jetbrains.kotlin.resolve.annotations.JVM_THROWS_ANNOTATION_FQ_NAME +import org.jetbrains.kotlin.resolve.annotations.KOTLIN_NATIVE_THROWS_ANNOTATION_FQ_NAME import org.jetbrains.kotlin.resolve.annotations.KOTLIN_THROWS_ANNOTATION_FQ_NAME import org.jetbrains.kotlin.resolve.deprecation.DeprecationResolver import org.jetbrains.kotlin.resolve.descriptorUtil.fqNameOrNull @@ -246,7 +247,7 @@ class LazyImportScope( if (descriptor !is ClassDescriptor && descriptor !is TypeAliasDescriptor || !isClassifierVisible(descriptor)) continue /* type parameters can't be imported */ if (target != null && target != descriptor) { - if (target.isKotlinOrJvmThrows() && descriptor.isKotlinOrJvmThrows()) { + if (isKotlinOrJvmThrowsAmbiguity(descriptor, target) || isKotlinOrNativeThrowsAmbiguity(descriptor, target)) { if (descriptor.isKotlinThrows()) { target = descriptor } @@ -261,12 +262,23 @@ class LazyImportScope( target } + private fun isKotlinOrJvmThrowsAmbiguity(c1: ClassifierDescriptor, c2: ClassifierDescriptor) = + c1.isKotlinOrJvmThrows() && c2.isKotlinOrJvmThrows() + + private fun isKotlinOrNativeThrowsAmbiguity(c1: ClassifierDescriptor, c2: ClassifierDescriptor) = + c1.isKotlinOrNativeThrows() && c2.isKotlinOrNativeThrows() + private fun ClassifierDescriptor.isKotlinThrows() = fqNameOrNull() == KOTLIN_THROWS_ANNOTATION_FQ_NAME private fun ClassifierDescriptor.isKotlinOrJvmThrows(): Boolean { if (name != JVM_THROWS_ANNOTATION_FQ_NAME.shortName()) return false return isKotlinThrows() || fqNameOrNull() == JVM_THROWS_ANNOTATION_FQ_NAME } + private fun ClassifierDescriptor.isKotlinOrNativeThrows(): Boolean { + if (name != KOTLIN_THROWS_ANNOTATION_FQ_NAME.shortName()) return false + return isKotlinThrows() || fqNameOrNull() == KOTLIN_NATIVE_THROWS_ANNOTATION_FQ_NAME + } + override fun getContributedPackage(name: Name): PackageViewDescriptor? = null override fun getContributedVariables(name: Name, location: LookupLocation): Collection {