From 0458a22f7833d05a00895ac7217925070d3cedf9 Mon Sep 17 00:00:00 2001 From: Dmitry Gridin Date: Thu, 22 Aug 2019 12:20:38 +0700 Subject: [PATCH] TypeAccessibilityChecker: fix case with unresolved type params --- .../TypeAccessibilityCheckerImpl.kt | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/idea/src/org/jetbrains/kotlin/idea/quickfix/expectactual/TypeAccessibilityCheckerImpl.kt b/idea/src/org/jetbrains/kotlin/idea/quickfix/expectactual/TypeAccessibilityCheckerImpl.kt index 87f2527b1d4..ab1c5d3c38f 100644 --- a/idea/src/org/jetbrains/kotlin/idea/quickfix/expectactual/TypeAccessibilityCheckerImpl.kt +++ b/idea/src/org/jetbrains/kotlin/idea/quickfix/expectactual/TypeAccessibilityCheckerImpl.kt @@ -16,11 +16,15 @@ import org.jetbrains.kotlin.idea.search.usagesSearch.descriptor import org.jetbrains.kotlin.idea.stubindex.KotlinFullClassNameIndex import org.jetbrains.kotlin.idea.util.hasPrivateModifier import org.jetbrains.kotlin.incremental.components.NoLookupLocation +import org.jetbrains.kotlin.js.resolve.diagnostics.findPsi import org.jetbrains.kotlin.name.FqName import org.jetbrains.kotlin.psi.KtNamedDeclaration +import org.jetbrains.kotlin.psi.KtTypeParameter import org.jetbrains.kotlin.resolve.descriptorUtil.fqNameOrNull import org.jetbrains.kotlin.types.KotlinType import org.jetbrains.kotlin.types.TypeProjection +import org.jetbrains.kotlin.types.typeUtil.isNullableAny +import org.jetbrains.kotlin.utils.addToStdlib.safeAs class TypeAccessibilityCheckerImpl( override val project: Project, @@ -101,8 +105,17 @@ private fun DeclarationDescriptor.collectAllTypes(): Sequence { } is TypeParameterDescriptor -> { val upperBounds = upperBounds - if (upperBounds.isEmpty()) sequenceOf(fqNameOrNull()) - else upperBounds.asSequence().flatMap(KotlinType::collectAllTypes) + val singleUpperBound = upperBounds.singleOrNull() + when { + // case for unresolved type + singleUpperBound?.isNullableAny() == true -> { + val extendBoundText = findPsi()?.safeAs()?.extendsBound?.text + if (extendBoundText == null || extendBoundText == "Any?") sequenceOf(singleUpperBound.fqName) + else sequenceOf(null) + } + upperBounds.isEmpty() -> sequenceOf(fqNameOrNull()) + else -> upperBounds.asSequence().flatMap(KotlinType::collectAllTypes) + } } else -> emptySequence() }