[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
This commit is contained in:
Roman Golyshev
2023-04-25 17:04:13 +02:00
committed by Space Team
parent 81b591ed21
commit 552e640517
2 changed files with 15 additions and 18 deletions
@@ -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) }
}
@@ -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<KtCallCandidateInfo>
@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)