From 6ca005cd7083d0eb83e5a79358d47b65c6cf0fff Mon Sep 17 00:00:00 2001 From: Tianyu Geng Date: Tue, 23 Mar 2021 17:48:58 -0700 Subject: [PATCH] FIR IDE: fix IDE exception in presence of non-top-level type alias Finding type alias doesn't work if it's not top level because the class ID doesn't match. There doesn't seem to be a easy way to make it work so this commit simply makes the IDE tolerate it. --- .../kotlin/idea/fir/low/level/api/util/declarationUtils.kt | 4 ++-- .../jetbrains/kotlin/idea/fir/low/level/api/util/utils.kt | 5 +++-- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/util/declarationUtils.kt b/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/util/declarationUtils.kt index 108dfe3f556..8be63c33373 100644 --- a/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/util/declarationUtils.kt +++ b/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/util/declarationUtils.kt @@ -124,11 +124,11 @@ private fun KtClassOrObject.findFir(firSymbolProvider: FirSymbolProvider): FirRe } } -private fun KtTypeAlias.findFir(firSymbolProvider: FirSymbolProvider): FirTypeAlias { +private fun KtTypeAlias.findFir(firSymbolProvider: FirSymbolProvider): FirTypeAlias? { val typeAlias = ClassId(containingKtFile.packageFqName, nameAsSafeName) return executeWithoutPCE { + // Finding a non-top-level type alias won't work firSymbolProvider.getClassLikeSymbolByFqName(typeAlias)?.fir as? FirTypeAlias - ?: error("Could not find type alias $typeAlias") } } diff --git a/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/util/utils.kt b/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/util/utils.kt index a01ee03a91d..ef55daacd5c 100644 --- a/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/util/utils.kt +++ b/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/util/utils.kt @@ -28,10 +28,11 @@ internal inline fun executeOrReturnDefaultValueOnPCE(defaultValue: T, action defaultValue } -internal inline fun executeWithoutPCE(crossinline action: () -> T): T { +internal inline fun executeWithoutPCE(crossinline action: () -> T): T { var result: T? = null ProgressManager.getInstance().executeNonCancelableSection { result = action() } - return result!! + @Suppress("UNCHECKED_CAST") + return result as T } internal inline fun Lock.lockWithPCECheck(lockingIntervalMs: Long, action: () -> T): T {