Resolve ambiguity between kotlin.Throws and kotlin.native.Throws
KT-35468
This commit is contained in:
committed by
Ilya Gorbunov
parent
d3f541a715
commit
d0f4631192
@@ -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")
|
||||
|
||||
@@ -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<VariableDescriptor> {
|
||||
|
||||
Reference in New Issue
Block a user