diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/diagnostics/collectors/AbstractDiagnosticCollector.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/diagnostics/collectors/AbstractDiagnosticCollector.kt index 3e361cf804f..f73e52d8216 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/diagnostics/collectors/AbstractDiagnosticCollector.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/diagnostics/collectors/AbstractDiagnosticCollector.kt @@ -26,7 +26,7 @@ abstract class AbstractDiagnosticCollector { protected abstract fun initializeCollector() protected abstract fun getCollectedDiagnostics(): Iterable - internal abstract fun runCheck(block: (DiagnosticReporter) -> Unit) + abstract fun runCheck(block: (DiagnosticReporter) -> Unit) private val components: MutableList = mutableListOf() private var componentsInitialized = false diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/fir/FirIdeDiagnosticsCollector.kt b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/fir/FirIdeDiagnosticsCollector.kt new file mode 100644 index 00000000000..4f8cfaf77ad --- /dev/null +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/fir/FirIdeDiagnosticsCollector.kt @@ -0,0 +1,44 @@ +/* + * Copyright 2010-2019 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. + */ + +package org.jetbrains.kotlin.idea.fir + +import org.jetbrains.kotlin.fir.psi +import org.jetbrains.kotlin.fir.resolve.diagnostics.ConeDiagnostic +import org.jetbrains.kotlin.fir.resolve.diagnostics.DiagnosticReporter +import org.jetbrains.kotlin.fir.resolve.diagnostics.collectors.AbstractDiagnosticCollector +import org.jetbrains.kotlin.fir.resolve.diagnostics.collectors.registerAllComponents +import org.jetbrains.kotlin.psi.KtElement + +class FirIdeDiagnosticsCollector(private val resolveState: FirResolveState) : AbstractDiagnosticCollector() { + + init { + registerAllComponents() + } + + private inner class Reporter : DiagnosticReporter() { + override fun report(diagnostic: ConeDiagnostic?) { + if (diagnostic == null) return + val psi = diagnostic.source.psi as? KtElement ?: return + resolveState.record(psi, diagnostic.diagnostic) + } + + } + + private lateinit var reporter: Reporter + + override fun initializeCollector() { + reporter = Reporter() + } + + override fun getCollectedDiagnostics(): Iterable { + // Not necessary in IDE + return emptyList() + } + + override fun runCheck(block: (DiagnosticReporter) -> Unit) { + block(reporter) + } +} \ No newline at end of file diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/fir/FirResolutionApi.kt b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/fir/FirResolutionApi.kt index 546000521c0..ecd83ff6652 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/fir/FirResolutionApi.kt +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/fir/FirResolutionApi.kt @@ -14,7 +14,6 @@ import org.jetbrains.kotlin.fir.references.* import org.jetbrains.kotlin.fir.render import org.jetbrains.kotlin.fir.resolve.FirProvider import org.jetbrains.kotlin.fir.resolve.ResolutionMode -import org.jetbrains.kotlin.fir.resolve.diagnostics.collectors.FirDiagnosticsCollector import org.jetbrains.kotlin.fir.resolve.transformers.body.resolve.FirDesignatedBodyResolveTransformer import org.jetbrains.kotlin.fir.resolve.transformers.runResolve import org.jetbrains.kotlin.fir.scopes.ProcessorAction @@ -145,8 +144,8 @@ fun KtFile.getOrBuildFirWithDiagnostics(state: FirResolveState): FirFile { if (state.hasDiagnosticsForFile(this)) return firFile - val coneDiagnostics = FirDiagnosticsCollector.create().collectDiagnostics(firFile) - state.setDiagnosticsForFile(this, firFile, coneDiagnostics) + FirIdeDiagnosticsCollector(state).collectDiagnostics(firFile) + state.setDiagnosticsForFile(this, firFile) return firFile } diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/fir/FirResolveState.kt b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/fir/FirResolveState.kt index 6411e0fa938..1b44929ed73 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/fir/FirResolveState.kt +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/fir/FirResolveState.kt @@ -67,7 +67,7 @@ interface FirResolveState { fun record(psi: KtElement, diagnostic: Diagnostic) - fun setDiagnosticsForFile(file: KtFile, fir: FirFile, diagnostics: Iterable) + fun setDiagnosticsForFile(file: KtFile, fir: FirFile, diagnostics: Iterable = emptyList()) } class FirResolveStateImpl(override val sessionProvider: FirSessionProvider) : FirResolveState { @@ -92,7 +92,6 @@ class FirResolveStateImpl(override val sessionProvider: FirSessionProvider) : Fi } override fun record(psi: KtElement, diagnostic: Diagnostic) { - // TODO: consider implementing custom FirIdeDiagnosticReported/Collector val list = diagnosticCache.getOrPut(psi) { mutableListOf() } list += diagnostic }