From 552e640517ffa10ab60ba4c6af61e5f18d71cc35 Mon Sep 17 00:00:00 2001 From: Roman Golyshev Date: Tue, 25 Apr 2023 17:04:13 +0200 Subject: [PATCH] [Analysis API] KT-58249 Avoid calling LOG.error in `KtFe10CallResolver` Some `KtCallElement`s might never be resolved, and they won't even have any kind of diagnostic from FE10 compiler. We don't want to log such cases because it's not clear whether we can or should fix them in K1 plugin LOG.error is still enabled for K2 plugin, since for it we want to catch and fix all such problems ^KT-58249 Fixed --- .../api/fir/components/KtFirCallResolver.kt | 15 ++++++++++++++- .../analysis/api/components/KtCallResolver.kt | 18 +----------------- 2 files changed, 15 insertions(+), 18 deletions(-) diff --git a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/components/KtFirCallResolver.kt b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/components/KtFirCallResolver.kt index 1a13d99f252..7185691cb9d 100644 --- a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/components/KtFirCallResolver.kt +++ b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/components/KtFirCallResolver.kt @@ -5,6 +5,7 @@ package org.jetbrains.kotlin.analysis.api.fir.components +import com.intellij.openapi.diagnostic.Logger import org.jetbrains.kotlin.analysis.api.KtAnalysisApiInternals import org.jetbrains.kotlin.analysis.api.calls.* import org.jetbrains.kotlin.analysis.api.diagnostics.KtDiagnostic @@ -31,6 +32,7 @@ import org.jetbrains.kotlin.analysis.low.level.api.fir.resolver.AllCandidatesRes import org.jetbrains.kotlin.analysis.low.level.api.fir.util.errorWithFirSpecificEntries import org.jetbrains.kotlin.analysis.low.level.api.fir.util.withFirEntry import org.jetbrains.kotlin.analysis.utils.errors.ExceptionAttachmentBuilder +import org.jetbrains.kotlin.analysis.utils.errors.logErrorWithAttachment import org.jetbrains.kotlin.analysis.utils.errors.rethrowExceptionWithDetails import org.jetbrains.kotlin.analysis.utils.errors.withPsiEntry import org.jetbrains.kotlin.analysis.utils.printer.parentOfType @@ -74,6 +76,8 @@ import org.jetbrains.kotlin.util.OperatorNameConventions.EQUALS import org.jetbrains.kotlin.utils.addIfNotNull import org.jetbrains.kotlin.utils.addToStdlib.safeAs +private val LOG: Logger = Logger.getInstance(KtFirCallResolver::class.java) + internal class KtFirCallResolver( override val analysisSession: KtFirAnalysisSession, override val token: KtLifetimeToken, @@ -1284,7 +1288,16 @@ internal class KtFirCallResolver( } @KtAnalysisApiInternals - override fun provideAdditionalAttachmentToUnresolvedCall(psi: KtElement, builder: ExceptionAttachmentBuilder) { + override fun unresolvedKtCallError(psi: KtElement): KtErrorCallInfo { + LOG.logErrorWithAttachment("${psi::class.simpleName} should always resolve to a KtCallInfo") { + withPsiEntry("psi", psi) + provideAdditionalAttachmentToUnresolvedCall(psi, this) + } + + return super.unresolvedKtCallError(psi) + } + + private fun provideAdditionalAttachmentToUnresolvedCall(psi: KtElement, builder: ExceptionAttachmentBuilder) { psi.getOrBuildFir(firResolveSession)?.let { builder.withFirEntry("fir", it) } } diff --git a/analysis/analysis-api/src/org/jetbrains/kotlin/analysis/api/components/KtCallResolver.kt b/analysis/analysis-api/src/org/jetbrains/kotlin/analysis/api/components/KtCallResolver.kt index a288534f83c..5b906b1d3ac 100644 --- a/analysis/analysis-api/src/org/jetbrains/kotlin/analysis/api/components/KtCallResolver.kt +++ b/analysis/analysis-api/src/org/jetbrains/kotlin/analysis/api/components/KtCallResolver.kt @@ -12,9 +12,6 @@ import org.jetbrains.kotlin.analysis.api.calls.KtCallInfo import org.jetbrains.kotlin.analysis.api.calls.KtErrorCallInfo import org.jetbrains.kotlin.analysis.api.diagnostics.KtNonBoundToPsiErrorDiagnostic import org.jetbrains.kotlin.analysis.api.lifetime.withValidityAssertion -import org.jetbrains.kotlin.analysis.utils.errors.ExceptionAttachmentBuilder -import org.jetbrains.kotlin.analysis.utils.errors.logErrorWithAttachment -import org.jetbrains.kotlin.analysis.utils.errors.withPsiEntry import org.jetbrains.kotlin.psi.KtArrayAccessExpression import org.jetbrains.kotlin.psi.KtCallElement import org.jetbrains.kotlin.psi.KtElement @@ -26,26 +23,13 @@ public abstract class KtCallResolver : KtAnalysisSessionComponent() { public abstract fun collectCallCandidates(psi: KtElement): List @KtAnalysisApiInternals - public fun unresolvedKtCallError(psi: KtElement): KtErrorCallInfo { - LOG.logErrorWithAttachment("${psi::class.simpleName} should always resolve to a KtCallInfo") { - withPsiEntry("psi", psi) - provideAdditionalAttachmentToUnresolvedCall(psi, this) - } + public open fun unresolvedKtCallError(psi: KtElement): KtErrorCallInfo { return KtErrorCallInfo( _candidateCalls = emptyList(), KtNonBoundToPsiErrorDiagnostic(factoryName = null, "Unresolved call", token), token ) } - - @KtAnalysisApiInternals - protected open fun provideAdditionalAttachmentToUnresolvedCall(psi: KtElement, builder: ExceptionAttachmentBuilder) { - } - - public companion object { - @KtAnalysisApiInternals - public val LOG: Logger = Logger.getInstance(KtCallResolver::class.java) - } } @OptIn(KtAnalysisApiInternals::class)