From e0d25876b05bcc631085579d4e3fa4ad5f516088 Mon Sep 17 00:00:00 2001 From: Mikhail Glukhikh Date: Mon, 27 Jul 2020 12:59:08 +0300 Subject: [PATCH] [FIR] Don't report simple diagnostics on fake sources --- .../components/ErrorNodeDiagnosticCollectorComponent.kt | 7 ++++++- .../tests/dataClasses/errorTypesInDataClasses.fir.kt | 4 ++-- .../diagnostics/testsWithStdLib/regression/kt37727.fir.kt | 2 +- 3 files changed, 9 insertions(+), 4 deletions(-) diff --git a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/collectors/components/ErrorNodeDiagnosticCollectorComponent.kt b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/collectors/components/ErrorNodeDiagnosticCollectorComponent.kt index 2240ec7b4f6..b268e873211 100644 --- a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/collectors/components/ErrorNodeDiagnosticCollectorComponent.kt +++ b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/collectors/components/ErrorNodeDiagnosticCollectorComponent.kt @@ -5,6 +5,7 @@ package org.jetbrains.kotlin.fir.analysis.collectors.components +import org.jetbrains.kotlin.fir.FirFakeSourceElementKind import org.jetbrains.kotlin.fir.FirSourceElement import org.jetbrains.kotlin.fir.analysis.checkers.context.CheckerContext import org.jetbrains.kotlin.fir.analysis.collectors.AbstractDiagnosticCollector @@ -64,7 +65,11 @@ class ErrorNodeDiagnosticCollectorComponent(collector: AbstractDiagnosticCollect is ConeVariableExpectedError -> FirErrors.VARIABLE_EXPECTED.on(source) is ConeTypeMismatchError -> FirErrors.TYPE_MISMATCH.on(source, diagnostic.expectedType, diagnostic.actualType) is ConeUnexpectedTypeArgumentsError -> FirErrors.TYPE_ARGUMENTS_NOT_ALLOWED.on(diagnostic.source.safeAs() ?: source) - is ConeSimpleDiagnostic -> diagnostic.getFactory().on(source) + is ConeSimpleDiagnostic -> if (source.kind is FirFakeSourceElementKind) { + null + } else { + diagnostic.getFactory().on(source) + } is ConeStubDiagnostic -> null is ConeIntermediateDiagnostic -> null else -> throw IllegalArgumentException("Unsupported diagnostic type: ${diagnostic.javaClass}") diff --git a/compiler/testData/diagnostics/tests/dataClasses/errorTypesInDataClasses.fir.kt b/compiler/testData/diagnostics/tests/dataClasses/errorTypesInDataClasses.fir.kt index 736df5ef737..4ebb861764b 100644 --- a/compiler/testData/diagnostics/tests/dataClasses/errorTypesInDataClasses.fir.kt +++ b/compiler/testData/diagnostics/tests/dataClasses/errorTypesInDataClasses.fir.kt @@ -1,6 +1,6 @@ // !DIAGNOSTICS: -UNUSED_VARIABLE -data class A(val i: Int, val j: G) -data class B(val i: G, val j: G) +data class A(val i: Int, val j: G) +data class B(val i: G, val j: G) fun fa(a: A) { diff --git a/compiler/testData/diagnostics/testsWithStdLib/regression/kt37727.fir.kt b/compiler/testData/diagnostics/testsWithStdLib/regression/kt37727.fir.kt index 4dec0aed824..5b05fba3a02 100644 --- a/compiler/testData/diagnostics/testsWithStdLib/regression/kt37727.fir.kt +++ b/compiler/testData/diagnostics/testsWithStdLib/regression/kt37727.fir.kt @@ -1,4 +1,4 @@ -data class A(val x: Set = setOf()) { +data class A(val x: Set = setOf()) { fun with(x: Set? = null) { A(x ?: this.x) }