From 1bdec829eadd0cd05c85efbc1d0a3a9488682619 Mon Sep 17 00:00:00 2001 From: Alexander Udalov Date: Wed, 10 Jan 2018 18:57:12 +0100 Subject: [PATCH] Treat constructors as actual only if the 'actual' modifier is present Exactly as this is done for functions in FunctionDescriptorResolver.initializeFunctionDescriptorAndExplicitReturnType #KT-21906 Fixed --- .../kotlin/resolve/FunctionDescriptorResolver.kt | 8 ++------ .../actualClassWithDifferentConstructors.kt | 9 +++++++-- .../actualClassWithDifferentConstructors.txt | 14 ++++++++++++++ .../tests/multiplatform/modifierApplicability.kt | 2 +- 4 files changed, 24 insertions(+), 9 deletions(-) diff --git a/compiler/frontend/src/org/jetbrains/kotlin/resolve/FunctionDescriptorResolver.kt b/compiler/frontend/src/org/jetbrains/kotlin/resolve/FunctionDescriptorResolver.kt index a5ab964ee97..2512ba3d520 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/resolve/FunctionDescriptorResolver.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/resolve/FunctionDescriptorResolver.kt @@ -347,12 +347,8 @@ class FunctionDescriptorResolver( isPrimary, declarationToTrace.toSourceElement() ) - if (classDescriptor.isExpect) { - constructorDescriptor.isExpect = true - } - if (classDescriptor.isActual) { - constructorDescriptor.isActual = true - } + constructorDescriptor.isExpect = classDescriptor.isExpect + constructorDescriptor.isActual = modifierList?.hasActualModifier() == true if (declarationToTrace is PsiElement) trace.record(BindingContext.CONSTRUCTOR, declarationToTrace, constructorDescriptor) val parameterScope = LexicalWritableScope( diff --git a/compiler/testData/diagnostics/tests/multiplatform/headerClass/actualClassWithDifferentConstructors.kt b/compiler/testData/diagnostics/tests/multiplatform/headerClass/actualClassWithDifferentConstructors.kt index c31d2916922..cf84fd90c45 100644 --- a/compiler/testData/diagnostics/tests/multiplatform/headerClass/actualClassWithDifferentConstructors.kt +++ b/compiler/testData/diagnostics/tests/multiplatform/headerClass/actualClassWithDifferentConstructors.kt @@ -11,6 +11,7 @@ expect class Bar2() expect class Bar3() expect class Bar4() expect class Bar5() +expect class Bar6() // MODULE: m2-jvm(m1-common) @@ -41,5 +42,9 @@ actual class Bar4(val s: String) { actual class Bar5 { actual constructor() - constructor(s: String) -} \ No newline at end of file + constructor(s: String) +} + +class Bar6 { + actual constructor() +} diff --git a/compiler/testData/diagnostics/tests/multiplatform/headerClass/actualClassWithDifferentConstructors.txt b/compiler/testData/diagnostics/tests/multiplatform/headerClass/actualClassWithDifferentConstructors.txt index 700f73846ac..debe340ab84 100644 --- a/compiler/testData/diagnostics/tests/multiplatform/headerClass/actualClassWithDifferentConstructors.txt +++ b/compiler/testData/diagnostics/tests/multiplatform/headerClass/actualClassWithDifferentConstructors.txt @@ -36,6 +36,13 @@ public final expect class Bar5 { public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String } +public final expect class Bar6 { + public constructor Bar6() + 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 open override /*1*/ /*fake_override*/ fun toString(): kotlin.String +} + public final expect class Foo1 { public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int @@ -91,6 +98,13 @@ public final actual class Bar5 { public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String } +public final class Bar6 { + public constructor Bar6() + 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 open override /*1*/ /*fake_override*/ fun toString(): kotlin.String +} + public final actual class Foo1 { public constructor Foo1(/*0*/ s: kotlin.String) public final val s: kotlin.String diff --git a/compiler/testData/diagnostics/tests/multiplatform/modifierApplicability.kt b/compiler/testData/diagnostics/tests/multiplatform/modifierApplicability.kt index bc455140291..28d5e9b7552 100644 --- a/compiler/testData/diagnostics/tests/multiplatform/modifierApplicability.kt +++ b/compiler/testData/diagnostics/tests/multiplatform/modifierApplicability.kt @@ -22,7 +22,7 @@ fun foo() { // MODULE: m2-jvm // FILE: jvm.kt -class Outer actual constructor() { +class Outer actual constructor() { actual class Nested actual init {}