diff --git a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/diagnostics/KtFirDiagnostics.kt b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/diagnostics/KtFirDiagnostics.kt index f034afeb1ec..11358f2e388 100644 --- a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/diagnostics/KtFirDiagnostics.kt +++ b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/diagnostics/KtFirDiagnostics.kt @@ -333,7 +333,7 @@ sealed interface KtFirDiagnostic : KtDiagnosticWithPsi { val reference: String } - interface DuplicateParameterNameInFunctionType : KtFirDiagnostic { + interface DuplicateParameterNameInFunctionType : KtFirDiagnostic { override val diagnosticClass get() = DuplicateParameterNameInFunctionType::class } diff --git a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/diagnostics/KtFirDiagnosticsImpl.kt b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/diagnostics/KtFirDiagnosticsImpl.kt index e3037c15386..d318d065aec 100644 --- a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/diagnostics/KtFirDiagnosticsImpl.kt +++ b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/diagnostics/KtFirDiagnosticsImpl.kt @@ -386,7 +386,7 @@ internal class UnresolvedImportImpl( internal class DuplicateParameterNameInFunctionTypeImpl( firDiagnostic: KtPsiDiagnostic, token: KtLifetimeToken, -) : KtAbstractFirDiagnostic(firDiagnostic, token), KtFirDiagnostic.DuplicateParameterNameInFunctionType +) : KtAbstractFirDiagnostic(firDiagnostic, token), KtFirDiagnostic.DuplicateParameterNameInFunctionType internal class MissingDependencyClassImpl( override val type: KtType, diff --git a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/DiagnosticCompilerTestFE10TestdataTestGenerated.java b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/DiagnosticCompilerTestFE10TestdataTestGenerated.java index 74be80e60af..1ff0fdf1ee2 100644 --- a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/DiagnosticCompilerTestFE10TestdataTestGenerated.java +++ b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/DiagnosticCompilerTestFE10TestdataTestGenerated.java @@ -357,6 +357,18 @@ public class DiagnosticCompilerTestFE10TestdataTestGenerated extends AbstractDia runTest("compiler/testData/diagnostics/tests/duplicateDirrectOverriddenCallables.kt"); } + @Test + @TestMetadata("duplicateParameterName.kt") + public void testDuplicateParameterName() throws Exception { + runTest("compiler/testData/diagnostics/tests/duplicateParameterName.kt"); + } + + @Test + @TestMetadata("duplicateParameterNameSimplified.kt") + public void testDuplicateParameterNameSimplified() throws Exception { + runTest("compiler/testData/diagnostics/tests/duplicateParameterNameSimplified.kt"); + } + @Test @TestMetadata("emptyLhsClassLiterals.kt") public void testEmptyLhsClassLiterals() throws Exception { diff --git a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/LLFirPreresolvedReversedDiagnosticCompilerFE10TestDataTestGenerated.java b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/LLFirPreresolvedReversedDiagnosticCompilerFE10TestDataTestGenerated.java index cdafa126bb7..bad83777ecc 100644 --- a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/LLFirPreresolvedReversedDiagnosticCompilerFE10TestDataTestGenerated.java +++ b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/LLFirPreresolvedReversedDiagnosticCompilerFE10TestDataTestGenerated.java @@ -357,6 +357,18 @@ public class LLFirPreresolvedReversedDiagnosticCompilerFE10TestDataTestGenerated runTest("compiler/testData/diagnostics/tests/duplicateDirrectOverriddenCallables.kt"); } + @Test + @TestMetadata("duplicateParameterName.kt") + public void testDuplicateParameterName() throws Exception { + runTest("compiler/testData/diagnostics/tests/duplicateParameterName.kt"); + } + + @Test + @TestMetadata("duplicateParameterNameSimplified.kt") + public void testDuplicateParameterNameSimplified() throws Exception { + runTest("compiler/testData/diagnostics/tests/duplicateParameterNameSimplified.kt"); + } + @Test @TestMetadata("emptyLhsClassLiterals.kt") public void testEmptyLhsClassLiterals() throws Exception { diff --git a/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirLightTreeOldFrontendDiagnosticsTestGenerated.java b/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirLightTreeOldFrontendDiagnosticsTestGenerated.java index 6744d4e9111..72b101b2fd6 100644 --- a/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirLightTreeOldFrontendDiagnosticsTestGenerated.java +++ b/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirLightTreeOldFrontendDiagnosticsTestGenerated.java @@ -357,6 +357,18 @@ public class FirLightTreeOldFrontendDiagnosticsTestGenerated extends AbstractFir runTest("compiler/testData/diagnostics/tests/duplicateDirrectOverriddenCallables.kt"); } + @Test + @TestMetadata("duplicateParameterName.kt") + public void testDuplicateParameterName() throws Exception { + runTest("compiler/testData/diagnostics/tests/duplicateParameterName.kt"); + } + + @Test + @TestMetadata("duplicateParameterNameSimplified.kt") + public void testDuplicateParameterNameSimplified() throws Exception { + runTest("compiler/testData/diagnostics/tests/duplicateParameterNameSimplified.kt"); + } + @Test @TestMetadata("emptyLhsClassLiterals.kt") public void testEmptyLhsClassLiterals() throws Exception { diff --git a/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirPsiOldFrontendDiagnosticsTestGenerated.java b/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirPsiOldFrontendDiagnosticsTestGenerated.java index 442929fb72d..1b3ba192545 100644 --- a/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirPsiOldFrontendDiagnosticsTestGenerated.java +++ b/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirPsiOldFrontendDiagnosticsTestGenerated.java @@ -357,6 +357,18 @@ public class FirPsiOldFrontendDiagnosticsTestGenerated extends AbstractFirPsiDia runTest("compiler/testData/diagnostics/tests/duplicateDirrectOverriddenCallables.kt"); } + @Test + @TestMetadata("duplicateParameterName.kt") + public void testDuplicateParameterName() throws Exception { + runTest("compiler/testData/diagnostics/tests/duplicateParameterName.kt"); + } + + @Test + @TestMetadata("duplicateParameterNameSimplified.kt") + public void testDuplicateParameterNameSimplified() throws Exception { + runTest("compiler/testData/diagnostics/tests/duplicateParameterNameSimplified.kt"); + } + @Test @TestMetadata("emptyLhsClassLiterals.kt") public void testEmptyLhsClassLiterals() throws Exception { diff --git a/compiler/fir/checkers/checkers-component-generator/src/org/jetbrains/kotlin/fir/checkers/generator/diagnostics/FirDiagnosticsList.kt b/compiler/fir/checkers/checkers-component-generator/src/org/jetbrains/kotlin/fir/checkers/generator/diagnostics/FirDiagnosticsList.kt index e15e023e68e..2763708fa00 100644 --- a/compiler/fir/checkers/checkers-component-generator/src/org/jetbrains/kotlin/fir/checkers/generator/diagnostics/FirDiagnosticsList.kt +++ b/compiler/fir/checkers/checkers-component-generator/src/org/jetbrains/kotlin/fir/checkers/generator/diagnostics/FirDiagnosticsList.kt @@ -174,7 +174,7 @@ object DIAGNOSTICS_LIST : DiagnosticList("FirErrors") { parameter("reference") } - val DUPLICATE_PARAMETER_NAME_IN_FUNCTION_TYPE by error() + val DUPLICATE_PARAMETER_NAME_IN_FUNCTION_TYPE by error() val MISSING_DEPENDENCY_CLASS by error(PositioningStrategy.REFERENCED_NAME_BY_QUALIFIED) { parameter("type") diff --git a/compiler/fir/checkers/gen/org/jetbrains/kotlin/fir/analysis/diagnostics/FirErrors.kt b/compiler/fir/checkers/gen/org/jetbrains/kotlin/fir/analysis/diagnostics/FirErrors.kt index 4b70ab5bb5b..ad1dc889893 100644 --- a/compiler/fir/checkers/gen/org/jetbrains/kotlin/fir/analysis/diagnostics/FirErrors.kt +++ b/compiler/fir/checkers/gen/org/jetbrains/kotlin/fir/analysis/diagnostics/FirErrors.kt @@ -183,7 +183,7 @@ object FirErrors { val API_NOT_AVAILABLE: KtDiagnosticFactory2 by error2(SourceElementPositioningStrategies.SELECTOR_BY_QUALIFIED) val UNRESOLVED_REFERENCE_WRONG_RECEIVER: KtDiagnosticFactory1>> by error1>>(SourceElementPositioningStrategies.REFERENCE_BY_QUALIFIED) val UNRESOLVED_IMPORT: KtDiagnosticFactory1 by error1(SourceElementPositioningStrategies.IMPORT_LAST_NAME) - val DUPLICATE_PARAMETER_NAME_IN_FUNCTION_TYPE: KtDiagnosticFactory0 by error0() + val DUPLICATE_PARAMETER_NAME_IN_FUNCTION_TYPE: KtDiagnosticFactory0 by error0() val MISSING_DEPENDENCY_CLASS: KtDiagnosticFactory1 by error1(SourceElementPositioningStrategies.REFERENCED_NAME_BY_QUALIFIED) val MISSING_DEPENDENCY_SUPERCLASS: KtDiagnosticFactory2 by error2(SourceElementPositioningStrategies.REFERENCED_NAME_BY_QUALIFIED) val MISSING_DEPENDENCY_CLASS_IN_LAMBDA_PARAMETER: KtDiagnosticFactory1 by warning1(SourceElementPositioningStrategies.REFERENCED_NAME_BY_QUALIFIED) diff --git a/compiler/testData/diagnostics/tests/duplicateParameterName.fir.kt b/compiler/testData/diagnostics/tests/duplicateParameterName.fir.kt new file mode 100644 index 00000000000..bd86bb1d8c9 --- /dev/null +++ b/compiler/testData/diagnostics/tests/duplicateParameterName.fir.kt @@ -0,0 +1,41 @@ +// ISSUE: KT-65584 +// WITH_STDLIB + +fun interface Flow { + + suspend fun collect(collector: FlowCollector) +} + +fun interface FlowCollector { + + suspend fun emit(value: T) +} + +inline fun Flow.flatMapLatest(crossinline transform: suspend (value: T) -> Flow) = Flow { collector -> + collect { it1 -> transform(it1).collect { it2 -> collector.emit(it2) } } +} + +fun flowOf(value: T): Flow = Flow { collector -> collector.emit(value) } + +inline fun Flow.map(crossinline transform: suspend (value: T) -> R): Flow = Flow { collector -> + collect { collector.emit(transform(it)) } +} + +// ------ + +class StationId +class Playable +class Entity(val stationId: StationId) +class State(val playbackEntity: Entity) + +internal suspend fun init( + queueState: State, + state: Flow +) { + state + .flatMapLatest { playable -> + flowOf(playable).map { Triple(it, playable, queueState.playbackEntity.stationId) } + } + .collect { (likeState, playable, stationId) -> + } +} diff --git a/compiler/testData/diagnostics/tests/duplicateParameterName.kt b/compiler/testData/diagnostics/tests/duplicateParameterName.kt new file mode 100644 index 00000000000..01f26095144 --- /dev/null +++ b/compiler/testData/diagnostics/tests/duplicateParameterName.kt @@ -0,0 +1,41 @@ +// ISSUE: KT-65584 +// WITH_STDLIB + +fun interface Flow { + + suspend fun collect(collector: FlowCollector) +} + +fun interface FlowCollector { + + suspend fun emit(value: T) +} + +inline fun Flow.flatMapLatest(crossinline transform: suspend (value: T) -> Flow) = Flow { collector -> + collect { it1 -> transform(it1).collect { it2 -> collector.emit(it2) } } +} + +fun flowOf(value: T): Flow = Flow { collector -> collector.emit(value) } + +inline fun Flow.map(crossinline transform: suspend (value: T) -> R): Flow = Flow { collector -> + collect { collector.emit(transform(it)) } +} + +// ------ + +class StationId +class Playable +class Entity(val stationId: StationId) +class State(val playbackEntity: Entity) + +internal suspend fun init( + queueState: State, + state: Flow +) { + state + .flatMapLatest { playable -> + flowOf(playable).map { Triple(it, playable, queueState.playbackEntity.stationId) } + } + .collect { (likeState, playable, stationId) -> + } +} diff --git a/compiler/testData/diagnostics/tests/duplicateParameterNameSimplified.fir.kt b/compiler/testData/diagnostics/tests/duplicateParameterNameSimplified.fir.kt new file mode 100644 index 00000000000..c3e3891a599 --- /dev/null +++ b/compiler/testData/diagnostics/tests/duplicateParameterNameSimplified.fir.kt @@ -0,0 +1,14 @@ +// ISSUE: KT-65584 + +fun giveItName(it: T, block: (myName: T) -> Unit) = block(it) + +fun duplicateIt(it: T, block: (T, T) -> Unit) = block + +class MyTriple(val a: T, val b: K, val c: M) + +fun test() { + giveItName(10) { + MyTriple(it, it, it).also { self -> } + (duplicateIt(it) { a, b -> }).also { function -> } + } +} diff --git a/compiler/testData/diagnostics/tests/duplicateParameterNameSimplified.kt b/compiler/testData/diagnostics/tests/duplicateParameterNameSimplified.kt new file mode 100644 index 00000000000..c7d807ad726 --- /dev/null +++ b/compiler/testData/diagnostics/tests/duplicateParameterNameSimplified.kt @@ -0,0 +1,14 @@ +// ISSUE: KT-65584 + +fun giveItName(it: T, block: (myName: T) -> Unit) = block(it) + +fun duplicateIt(it: T, block: (T, T) -> Unit) = block + +class MyTriple(val a: T, val b: K, val c: M) + +fun test() { + giveItName(10) { + MyTriple(it, it, it).also { self -> } + (duplicateIt(it) { a, b -> }).also { function -> } + } +} diff --git a/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/DiagnosticTestGenerated.java b/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/DiagnosticTestGenerated.java index 74568fd8cd9..d2b902f41d9 100644 --- a/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/DiagnosticTestGenerated.java +++ b/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/DiagnosticTestGenerated.java @@ -357,6 +357,18 @@ public class DiagnosticTestGenerated extends AbstractDiagnosticTest { runTest("compiler/testData/diagnostics/tests/duplicateDirrectOverriddenCallables.kt"); } + @Test + @TestMetadata("duplicateParameterName.kt") + public void testDuplicateParameterName() throws Exception { + runTest("compiler/testData/diagnostics/tests/duplicateParameterName.kt"); + } + + @Test + @TestMetadata("duplicateParameterNameSimplified.kt") + public void testDuplicateParameterNameSimplified() throws Exception { + runTest("compiler/testData/diagnostics/tests/duplicateParameterNameSimplified.kt"); + } + @Test @TestMetadata("emptyLhsClassLiterals.kt") public void testEmptyLhsClassLiterals() throws Exception {