FIR IDE: do not collect diagnostics for generated declarations
This commit is contained in:
+3
@@ -11,6 +11,7 @@ import org.jetbrains.kotlin.fir.analysis.collectors.DiagnosticCollectorDeclarati
|
||||
import org.jetbrains.kotlin.fir.containingClass
|
||||
import org.jetbrains.kotlin.fir.declarations.*
|
||||
import org.jetbrains.kotlin.fir.psi
|
||||
import org.jetbrains.kotlin.fir.realPsi
|
||||
import org.jetbrains.kotlin.fir.resolve.toSymbol
|
||||
import org.jetbrains.kotlin.fir.symbols.AbstractFirBasedSymbol
|
||||
import org.jetbrains.kotlin.fir.symbols.impl.FirFunctionSymbol
|
||||
@@ -18,6 +19,7 @@ import org.jetbrains.kotlin.idea.fir.low.level.api.diagnostics.FirIdeStructureEl
|
||||
import org.jetbrains.kotlin.idea.fir.low.level.api.file.builder.ModuleFileCache
|
||||
import org.jetbrains.kotlin.idea.fir.low.level.api.lazy.resolve.FirLazyDeclarationResolver
|
||||
import org.jetbrains.kotlin.idea.fir.low.level.api.providers.FirIdeProvider
|
||||
import org.jetbrains.kotlin.idea.fir.low.level.api.util.isGeneratedDeclaration
|
||||
import org.jetbrains.kotlin.idea.fir.low.level.api.util.ktDeclaration
|
||||
import org.jetbrains.kotlin.idea.fir.low.level.api.util.replaceFirst
|
||||
import org.jetbrains.kotlin.psi.*
|
||||
@@ -138,6 +140,7 @@ internal class NonReanalyzableDeclarationStructureElement(
|
||||
firFile,
|
||||
onDeclarationEnter = { firDeclaration ->
|
||||
when {
|
||||
firDeclaration.isGeneratedDeclaration -> DiagnosticCollectorDeclarationAction.SKIP
|
||||
firDeclaration is FirFile -> DiagnosticCollectorDeclarationAction.CHECK_CURRENT_DECLARATION_AND_CHECK_NESTED
|
||||
firDeclaration == fir -> {
|
||||
inCurrentDeclaration = true
|
||||
|
||||
+2
@@ -128,3 +128,5 @@ private fun KtTypeAlias.findFir(firSymbolProvider: FirSymbolProvider): FirTypeAl
|
||||
}
|
||||
}
|
||||
|
||||
val FirDeclaration.isGeneratedDeclaration
|
||||
get() = realPsi == null
|
||||
+12
-2
@@ -13,8 +13,10 @@ import org.jetbrains.kotlin.fir.diagnostics.FirDiagnosticHolder
|
||||
import org.jetbrains.kotlin.fir.psi
|
||||
import org.jetbrains.kotlin.fir.render
|
||||
import org.jetbrains.kotlin.idea.caches.project.IdeaModuleInfo
|
||||
import org.jetbrains.kotlin.psi.KtDeclaration
|
||||
import org.jetbrains.kotlin.idea.util.getElementTextInContext
|
||||
import org.jetbrains.kotlin.psi.KtFile
|
||||
import org.jetbrains.kotlin.psi.KtDeclaration
|
||||
import org.jetbrains.kotlin.psi.KtElement
|
||||
import java.util.concurrent.TimeUnit
|
||||
import java.util.concurrent.locks.Lock
|
||||
|
||||
@@ -61,7 +63,15 @@ internal val FirDeclaration.ktDeclaration: KtDeclaration
|
||||
get() {
|
||||
val psi = psi
|
||||
?: error("PSI element was not found for${render()}")
|
||||
return psi as KtDeclaration
|
||||
return psi as? KtDeclaration
|
||||
?: error(
|
||||
"""
|
||||
FirDeclaration.psi (${this::class.simpleName}) should be KtDeclaration but was ${psi::class.simpleName}
|
||||
${(psi as? KtElement)?.getElementTextInContext() ?: psi.text}
|
||||
|
||||
${render()}
|
||||
""".trimIndent()
|
||||
)
|
||||
}
|
||||
|
||||
internal val FirDeclaration.containingKtFileIfAny: KtFile?
|
||||
|
||||
Reference in New Issue
Block a user