From 0ef32e58072bbfe962a296b7f4eaaa5b86ebff29 Mon Sep 17 00:00:00 2001 From: Mikhail Glukhikh Date: Mon, 4 Apr 2022 13:24:28 +0300 Subject: [PATCH] Don't create substituted copy of invoke descriptor with unchanged names #KT-34919 Fixed --- ...CompilerTestFE10TestdataTestGenerated.java | 6 ++++++ ...irOldFrontendDiagnosticsTestGenerated.java | 6 ++++++ ...DiagnosticsWithLightTreeTestGenerated.java | 6 ++++++ ...onalTypeWithParameterNameVisibility.fir.kt | 3 +++ ...nctionalTypeWithParameterNameVisibility.kt | 3 +++ ...ctionalTypeWithParameterNameVisibility.txt | 19 +++++++++++++++++++ .../test/runners/DiagnosticTestGenerated.java | 6 ++++++ .../functions/FunctionInvokeDescriptor.kt | 3 +++ 8 files changed, 52 insertions(+) create mode 100644 compiler/testData/diagnostics/tests/typealias/functionalTypeWithParameterNameVisibility.fir.kt create mode 100644 compiler/testData/diagnostics/tests/typealias/functionalTypeWithParameterNameVisibility.kt create mode 100644 compiler/testData/diagnostics/tests/typealias/functionalTypeWithParameterNameVisibility.txt diff --git a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/DiagnosisCompilerTestFE10TestdataTestGenerated.java b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/DiagnosisCompilerTestFE10TestdataTestGenerated.java index e4ad582d50e..b6aa3c1d6fb 100644 --- a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/DiagnosisCompilerTestFE10TestdataTestGenerated.java +++ b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/DiagnosisCompilerTestFE10TestdataTestGenerated.java @@ -31560,6 +31560,12 @@ public class DiagnosisCompilerTestFE10TestdataTestGenerated extends AbstractDiag runTest("compiler/testData/diagnostics/tests/typealias/functionTypeInTypeAlias.kt"); } + @Test + @TestMetadata("functionalTypeWithParameterNameVisibility.kt") + public void testFunctionalTypeWithParameterNameVisibility() throws Exception { + runTest("compiler/testData/diagnostics/tests/typealias/functionalTypeWithParameterNameVisibility.kt"); + } + @Test @TestMetadata("genericTypeAliasConstructor.kt") public void testGenericTypeAliasConstructor() throws Exception { diff --git a/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirOldFrontendDiagnosticsTestGenerated.java b/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirOldFrontendDiagnosticsTestGenerated.java index 8079063b2a4..93784480e6b 100644 --- a/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirOldFrontendDiagnosticsTestGenerated.java +++ b/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirOldFrontendDiagnosticsTestGenerated.java @@ -31560,6 +31560,12 @@ public class FirOldFrontendDiagnosticsTestGenerated extends AbstractFirDiagnosti runTest("compiler/testData/diagnostics/tests/typealias/functionTypeInTypeAlias.kt"); } + @Test + @TestMetadata("functionalTypeWithParameterNameVisibility.kt") + public void testFunctionalTypeWithParameterNameVisibility() throws Exception { + runTest("compiler/testData/diagnostics/tests/typealias/functionalTypeWithParameterNameVisibility.kt"); + } + @Test @TestMetadata("genericTypeAliasConstructor.kt") public void testGenericTypeAliasConstructor() throws Exception { diff --git a/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirOldFrontendDiagnosticsWithLightTreeTestGenerated.java b/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirOldFrontendDiagnosticsWithLightTreeTestGenerated.java index 9d5f836aeb5..72e5409f9ca 100644 --- a/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirOldFrontendDiagnosticsWithLightTreeTestGenerated.java +++ b/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirOldFrontendDiagnosticsWithLightTreeTestGenerated.java @@ -31560,6 +31560,12 @@ public class FirOldFrontendDiagnosticsWithLightTreeTestGenerated extends Abstrac runTest("compiler/testData/diagnostics/tests/typealias/functionTypeInTypeAlias.kt"); } + @Test + @TestMetadata("functionalTypeWithParameterNameVisibility.kt") + public void testFunctionalTypeWithParameterNameVisibility() throws Exception { + runTest("compiler/testData/diagnostics/tests/typealias/functionalTypeWithParameterNameVisibility.kt"); + } + @Test @TestMetadata("genericTypeAliasConstructor.kt") public void testGenericTypeAliasConstructor() throws Exception { diff --git a/compiler/testData/diagnostics/tests/typealias/functionalTypeWithParameterNameVisibility.fir.kt b/compiler/testData/diagnostics/tests/typealias/functionalTypeWithParameterNameVisibility.fir.kt new file mode 100644 index 00000000000..0fc731e0ebe --- /dev/null +++ b/compiler/testData/diagnostics/tests/typealias/functionalTypeWithParameterNameVisibility.fir.kt @@ -0,0 +1,3 @@ +typealias TA = (x: X) -> Y +abstract class Base : TA +class Impl : Base() diff --git a/compiler/testData/diagnostics/tests/typealias/functionalTypeWithParameterNameVisibility.kt b/compiler/testData/diagnostics/tests/typealias/functionalTypeWithParameterNameVisibility.kt new file mode 100644 index 00000000000..a1a0d1396e6 --- /dev/null +++ b/compiler/testData/diagnostics/tests/typealias/functionalTypeWithParameterNameVisibility.kt @@ -0,0 +1,3 @@ +typealias TA = (x: X) -> Y +abstract class Base : TA +class Impl : Base() diff --git a/compiler/testData/diagnostics/tests/typealias/functionalTypeWithParameterNameVisibility.txt b/compiler/testData/diagnostics/tests/typealias/functionalTypeWithParameterNameVisibility.txt new file mode 100644 index 00000000000..4d11734954f --- /dev/null +++ b/compiler/testData/diagnostics/tests/typealias/functionalTypeWithParameterNameVisibility.txt @@ -0,0 +1,19 @@ +package + +public abstract class Base : TA /* = (x: X) -> Y */ { + public constructor Base() + public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int + public abstract override /*1*/ /*fake_override*/ fun invoke(/*0*/ x: X): Y + public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String +} + +public final class Impl : Base { + public constructor Impl() + public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int + public abstract override /*1*/ /*fake_override*/ fun invoke(/*0*/ x: kotlin.Any): kotlin.Any + public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String +} +public typealias TA = (x: X) -> Y + 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 b009b9a0224..08598f36912 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 @@ -31650,6 +31650,12 @@ public class DiagnosticTestGenerated extends AbstractDiagnosticTest { runTest("compiler/testData/diagnostics/tests/typealias/functionTypeInTypeAlias.kt"); } + @Test + @TestMetadata("functionalTypeWithParameterNameVisibility.kt") + public void testFunctionalTypeWithParameterNameVisibility() throws Exception { + runTest("compiler/testData/diagnostics/tests/typealias/functionalTypeWithParameterNameVisibility.kt"); + } + @Test @TestMetadata("genericTypeAliasConstructor.kt") public void testGenericTypeAliasConstructor() throws Exception { diff --git a/core/descriptors/src/org/jetbrains/kotlin/builtins/functions/FunctionInvokeDescriptor.kt b/core/descriptors/src/org/jetbrains/kotlin/builtins/functions/FunctionInvokeDescriptor.kt index c6b0172eb8b..5331c1fd866 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/builtins/functions/FunctionInvokeDescriptor.kt +++ b/core/descriptors/src/org/jetbrains/kotlin/builtins/functions/FunctionInvokeDescriptor.kt @@ -85,6 +85,9 @@ class FunctionInvokeDescriptor private constructor( private fun replaceParameterNames(parameterNames: List): FunctionDescriptor { val indexShift = valueParameters.size - parameterNames.size assert(indexShift == 0 || indexShift == 1) // indexShift == 1 for extension function type + if (indexShift == 0 && parameterNames.zip(valueParameters).all { (name, parameter) -> name == parameter.name }) { + return this + } val newValueParameters = valueParameters.map { var newName = it.name