From 3349739d1e40b4f405cafef2666171e55f91dc7b Mon Sep 17 00:00:00 2001 From: vldf Date: Mon, 3 Aug 2020 11:08:56 +0300 Subject: [PATCH] [FIR] Fixes for RedundantReturnUnitType checker --- .../RedundantReturnUnitTypeChecker.kt | 8 +++++++ .../RedundantReturnUnitTypeChecker.txt | 21 +++++++++++++++++++ .../RedundantReturnUnitTypeChecker.kt | 7 ++++++- .../AbstractDiagnosticCollectorComponent.kt | 2 +- 4 files changed, 36 insertions(+), 2 deletions(-) diff --git a/compiler/fir/analysis-tests/testData/extendedCheckers/RedundantReturnUnitTypeChecker.kt b/compiler/fir/analysis-tests/testData/extendedCheckers/RedundantReturnUnitTypeChecker.kt index d11be9bd86c..693d9c8b95a 100644 --- a/compiler/fir/analysis-tests/testData/extendedCheckers/RedundantReturnUnitTypeChecker.kt +++ b/compiler/fir/analysis-tests/testData/extendedCheckers/RedundantReturnUnitTypeChecker.kt @@ -1,4 +1,12 @@ +data class My(val x: Unit) + +interface I { + val x: Unit +} + class A { + fun too(): @Annotation Unit {} + fun foo(): Unit { } diff --git a/compiler/fir/analysis-tests/testData/extendedCheckers/RedundantReturnUnitTypeChecker.txt b/compiler/fir/analysis-tests/testData/extendedCheckers/RedundantReturnUnitTypeChecker.txt index 884456a2152..76e0afb580e 100644 --- a/compiler/fir/analysis-tests/testData/extendedCheckers/RedundantReturnUnitTypeChecker.txt +++ b/compiler/fir/analysis-tests/testData/extendedCheckers/RedundantReturnUnitTypeChecker.txt @@ -1,9 +1,30 @@ FILE: RedundantReturnUnitTypeChecker.kt + public final data class My : R|kotlin/Any| { + public constructor(x: R|kotlin/Unit|): R|My| { + super() + } + + public final val x: R|kotlin/Unit| = R|/x| + public get(): R|kotlin/Unit| + + public final fun component1(): R|kotlin/Unit| + + public final fun copy(x: R|kotlin/Unit| = this@R|/My|.R|/My.x|): R|My| + + } + public abstract interface I : R|kotlin/Any| { + public abstract val x: R|kotlin/Unit| + public get(): R|kotlin/Unit| + + } public final class A : R|kotlin/Any| { public constructor(): R|A| { super() } + public final fun too(): @R|kotlin/Annotation|() R|kotlin/Unit| { + } + public final fun foo(): R|kotlin/Unit| { } diff --git a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/extended/RedundantReturnUnitTypeChecker.kt b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/extended/RedundantReturnUnitTypeChecker.kt index 6a28ca227af..e7e504c7a40 100644 --- a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/extended/RedundantReturnUnitTypeChecker.kt +++ b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/extended/RedundantReturnUnitTypeChecker.kt @@ -5,6 +5,7 @@ package org.jetbrains.kotlin.fir.analysis.checkers.extended +import org.jetbrains.kotlin.fir.FirFakeSourceElement import org.jetbrains.kotlin.fir.analysis.checkers.context.CheckerContext import org.jetbrains.kotlin.fir.analysis.checkers.declaration.FirBasicDeclarationChecker import org.jetbrains.kotlin.fir.analysis.diagnostics.DiagnosticReporter @@ -19,8 +20,12 @@ object RedundantReturnUnitType : FirBasicDeclarationChecker() { if (declaration !is FirSimpleFunction) return if (declaration.body is FirSingleExpressionBlock) return if (declaration.returnTypeRef.source == null) return + if (declaration.source is FirFakeSourceElement<*>) return - if (declaration.returnTypeRef.isUnit) { + val returnType = declaration.returnTypeRef + if (returnType.annotations.isNotEmpty()) return + + if (returnType.isUnit) { reporter.report(declaration.returnTypeRef.source, FirErrors.REDUNDANT_RETURN_UNIT_TYPE) } } diff --git a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/collectors/components/AbstractDiagnosticCollectorComponent.kt b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/collectors/components/AbstractDiagnosticCollectorComponent.kt index 413fe4f7068..5d1f251d766 100644 --- a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/collectors/components/AbstractDiagnosticCollectorComponent.kt +++ b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/collectors/components/AbstractDiagnosticCollectorComponent.kt @@ -20,4 +20,4 @@ abstract class AbstractDiagnosticCollectorComponent(private val collector: Abstr protected fun runCheck(block: (DiagnosticReporter) -> Unit) { collector.runCheck(block) } -} +} \ No newline at end of file