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.containingClass
|
||||||
import org.jetbrains.kotlin.fir.declarations.*
|
import org.jetbrains.kotlin.fir.declarations.*
|
||||||
import org.jetbrains.kotlin.fir.psi
|
import org.jetbrains.kotlin.fir.psi
|
||||||
|
import org.jetbrains.kotlin.fir.realPsi
|
||||||
import org.jetbrains.kotlin.fir.resolve.toSymbol
|
import org.jetbrains.kotlin.fir.resolve.toSymbol
|
||||||
import org.jetbrains.kotlin.fir.symbols.AbstractFirBasedSymbol
|
import org.jetbrains.kotlin.fir.symbols.AbstractFirBasedSymbol
|
||||||
import org.jetbrains.kotlin.fir.symbols.impl.FirFunctionSymbol
|
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.file.builder.ModuleFileCache
|
||||||
import org.jetbrains.kotlin.idea.fir.low.level.api.lazy.resolve.FirLazyDeclarationResolver
|
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.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.ktDeclaration
|
||||||
import org.jetbrains.kotlin.idea.fir.low.level.api.util.replaceFirst
|
import org.jetbrains.kotlin.idea.fir.low.level.api.util.replaceFirst
|
||||||
import org.jetbrains.kotlin.psi.*
|
import org.jetbrains.kotlin.psi.*
|
||||||
@@ -138,6 +140,7 @@ internal class NonReanalyzableDeclarationStructureElement(
|
|||||||
firFile,
|
firFile,
|
||||||
onDeclarationEnter = { firDeclaration ->
|
onDeclarationEnter = { firDeclaration ->
|
||||||
when {
|
when {
|
||||||
|
firDeclaration.isGeneratedDeclaration -> DiagnosticCollectorDeclarationAction.SKIP
|
||||||
firDeclaration is FirFile -> DiagnosticCollectorDeclarationAction.CHECK_CURRENT_DECLARATION_AND_CHECK_NESTED
|
firDeclaration is FirFile -> DiagnosticCollectorDeclarationAction.CHECK_CURRENT_DECLARATION_AND_CHECK_NESTED
|
||||||
firDeclaration == fir -> {
|
firDeclaration == fir -> {
|
||||||
inCurrentDeclaration = true
|
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.psi
|
||||||
import org.jetbrains.kotlin.fir.render
|
import org.jetbrains.kotlin.fir.render
|
||||||
import org.jetbrains.kotlin.idea.caches.project.IdeaModuleInfo
|
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.KtFile
|
||||||
|
import org.jetbrains.kotlin.psi.KtDeclaration
|
||||||
|
import org.jetbrains.kotlin.psi.KtElement
|
||||||
import java.util.concurrent.TimeUnit
|
import java.util.concurrent.TimeUnit
|
||||||
import java.util.concurrent.locks.Lock
|
import java.util.concurrent.locks.Lock
|
||||||
|
|
||||||
@@ -61,7 +63,15 @@ internal val FirDeclaration.ktDeclaration: KtDeclaration
|
|||||||
get() {
|
get() {
|
||||||
val psi = psi
|
val psi = psi
|
||||||
?: error("PSI element was not found for${render()}")
|
?: 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?
|
internal val FirDeclaration.containingKtFileIfAny: KtFile?
|
||||||
|
|||||||
Reference in New Issue
Block a user