diff --git a/compiler/testData/diagnostics/tests/multiplatform/headerClass/classKinds.txt b/compiler/testData/diagnostics/tests/multiplatform/headerClass/classKinds.txt index cbd776d1e3c..3f6873cca72 100644 --- a/compiler/testData/diagnostics/tests/multiplatform/headerClass/classKinds.txt +++ b/compiler/testData/diagnostics/tests/multiplatform/headerClass/classKinds.txt @@ -3,7 +3,7 @@ package public final header annotation class Anno : kotlin.Annotation { public constructor Anno(/*0*/ prop: kotlin.String) - public final val prop: kotlin.String + public header final val prop: kotlin.String 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 @@ -50,7 +50,7 @@ package public final impl annotation class Anno : kotlin.Annotation { public constructor Anno(/*0*/ prop: kotlin.String) - public final val prop: kotlin.String + public impl final val prop: kotlin.String 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 diff --git a/compiler/testData/diagnostics/tests/multiplatform/headerClass/headerClassMember.txt b/compiler/testData/diagnostics/tests/multiplatform/headerClass/headerClassMember.txt index b1148750a54..0579b60b6db 100644 --- a/compiler/testData/diagnostics/tests/multiplatform/headerClass/headerClassMember.txt +++ b/compiler/testData/diagnostics/tests/multiplatform/headerClass/headerClassMember.txt @@ -3,7 +3,7 @@ package public final header class Foo { public constructor Foo() - public final val foo: kotlin.String + public header final val foo: kotlin.String public final header fun bar(/*0*/ x: kotlin.Int): kotlin.Int public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int @@ -16,7 +16,7 @@ package public final impl class Foo { public constructor Foo() - public final val foo: kotlin.String = "JVM" + public impl final val foo: kotlin.String = "JVM" public final impl fun bar(/*0*/ x: kotlin.Int): kotlin.Int public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int @@ -29,7 +29,7 @@ package public final impl class Foo { public constructor Foo() - public final val foo: kotlin.String = "JS" + public impl final val foo: kotlin.String = "JS" public final impl fun bar(/*0*/ x: kotlin.Int): kotlin.Int public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int diff --git a/compiler/testData/diagnostics/tests/multiplatform/headerClass/headerClassWithFunctionBody.txt b/compiler/testData/diagnostics/tests/multiplatform/headerClass/headerClassWithFunctionBody.txt index b55dea3ec1c..4d71d652972 100644 --- a/compiler/testData/diagnostics/tests/multiplatform/headerClass/headerClassWithFunctionBody.txt +++ b/compiler/testData/diagnostics/tests/multiplatform/headerClass/headerClassWithFunctionBody.txt @@ -4,9 +4,9 @@ public final header class Foo { public constructor Foo() public constructor Foo(/*0*/ s: kotlin.String) public constructor Foo(/*0*/ constructorProperty: kotlin.String, /*1*/ constructorParameter: kotlin.String) - public final val constructorProperty: kotlin.String - public final var getSet: kotlin.String - public final val prop: kotlin.String = "no" + public header final val constructorProperty: kotlin.String + public header final var getSet: kotlin.String + public header final val prop: kotlin.String = "no" public final header fun defaultArg(/*0*/ value: kotlin.String = ...): kotlin.Unit public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean public final header fun functionWithBody(/*0*/ x: kotlin.Int): kotlin.Int diff --git a/compiler/testData/diagnostics/tests/multiplatform/headerClass/implDataClass.txt b/compiler/testData/diagnostics/tests/multiplatform/headerClass/implDataClass.txt index 132215c41b7..d6281db0dd6 100644 --- a/compiler/testData/diagnostics/tests/multiplatform/headerClass/implDataClass.txt +++ b/compiler/testData/diagnostics/tests/multiplatform/headerClass/implDataClass.txt @@ -10,7 +10,7 @@ public final header class Bar { public final header class Baz { public constructor Baz(/*0*/ w: kotlin.collections.List) - public final val w: kotlin.collections.List + public header final val w: kotlin.collections.List public final operator header fun component1(): kotlin.collections.List public open header override /*1*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean public open header override /*1*/ fun hashCode(): kotlin.Int @@ -19,8 +19,8 @@ public final header class Baz { public final header class Foo { public constructor Foo(/*0*/ x: kotlin.Int, /*1*/ y: kotlin.String) - public final val x: kotlin.Int - public final val y: kotlin.String + public header final val x: kotlin.Int + public header final val y: kotlin.String 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 @@ -42,7 +42,7 @@ public final impl data class Bar { public final impl data class Baz { public constructor Baz(/*0*/ w: kotlin.collections.List) - public final val w: kotlin.collections.List + public impl final val w: kotlin.collections.List public final operator /*synthesized*/ fun component1(): kotlin.collections.List public final /*synthesized*/ fun copy(/*0*/ w: kotlin.collections.List = ...): Baz public open override /*1*/ /*synthesized*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean @@ -52,8 +52,8 @@ public final impl data class Baz { public final impl data class Foo { public constructor Foo(/*0*/ x: kotlin.Int, /*1*/ y: kotlin.String) - public final val x: kotlin.Int - public final val y: kotlin.String + public impl final val x: kotlin.Int + public impl final val y: kotlin.String public final operator /*synthesized*/ fun component1(): kotlin.Int public final operator /*synthesized*/ fun component2(): kotlin.String public final /*synthesized*/ fun copy(/*0*/ x: kotlin.Int = ..., /*1*/ y: kotlin.String = ...): Foo diff --git a/compiler/testData/diagnostics/tests/multiplatform/modifierApplicability.txt b/compiler/testData/diagnostics/tests/multiplatform/modifierApplicability.txt index 4e18ad2da3f..d7db811a784 100644 --- a/compiler/testData/diagnostics/tests/multiplatform/modifierApplicability.txt +++ b/compiler/testData/diagnostics/tests/multiplatform/modifierApplicability.txt @@ -5,7 +5,7 @@ public fun foo(): kotlin.Unit public final class Outer { public constructor Outer() - public final val bar: kotlin.Int + public header final val bar: kotlin.Int public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean public final header fun foo(): kotlin.Unit public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int diff --git a/compiler/testData/diagnostics/tests/multiplatform/topLevelFun/functionModifiers.txt b/compiler/testData/diagnostics/tests/multiplatform/topLevelFun/functionModifiers.txt index 7f51343aa68..1839e1dcd80 100644 --- a/compiler/testData/diagnostics/tests/multiplatform/topLevelFun/functionModifiers.txt +++ b/compiler/testData/diagnostics/tests/multiplatform/topLevelFun/functionModifiers.txt @@ -12,7 +12,7 @@ public header fun kotlin.String.unaryMinus(): kotlin.String package public external impl fun external(): kotlin.Unit -public inline impl fun inline(): kotlin.Unit -public tailrec impl fun tailrec(): kotlin.Unit +public impl inline fun inline(): kotlin.Unit +public impl tailrec fun tailrec(): kotlin.Unit public infix impl fun kotlin.String.and(/*0*/ other: kotlin.String): kotlin.String public operator impl fun kotlin.String.unaryMinus(): kotlin.String diff --git a/compiler/testData/diagnostics/tests/multiplatform/topLevelFun/inlineFun.txt b/compiler/testData/diagnostics/tests/multiplatform/topLevelFun/inlineFun.txt index b0d4b9c2171..a83df8f10a3 100644 --- a/compiler/testData/diagnostics/tests/multiplatform/topLevelFun/inlineFun.txt +++ b/compiler/testData/diagnostics/tests/multiplatform/topLevelFun/inlineFun.txt @@ -1,7 +1,7 @@ // -- Module: -- package -public inline header fun inlineFun(): kotlin.Unit +public header inline fun inlineFun(): kotlin.Unit public header fun nonInlineFun(): kotlin.Unit @@ -15,5 +15,5 @@ public impl fun nonInlineFun(): kotlin.Unit // -- Module: -- package -public inline impl fun inlineFun(): kotlin.Unit -public inline impl fun nonInlineFun(): kotlin.Unit +public impl inline fun inlineFun(): kotlin.Unit +public impl inline fun nonInlineFun(): kotlin.Unit diff --git a/compiler/testData/diagnostics/tests/multiplatform/topLevelProperty/differentKindsOfProperties.txt b/compiler/testData/diagnostics/tests/multiplatform/topLevelProperty/differentKindsOfProperties.txt index 5bf85aff46c..a4b11c7be2f 100644 --- a/compiler/testData/diagnostics/tests/multiplatform/topLevelProperty/differentKindsOfProperties.txt +++ b/compiler/testData/diagnostics/tests/multiplatform/topLevelProperty/differentKindsOfProperties.txt @@ -1,19 +1,19 @@ package -public val backingFieldVal: kotlin.String = "no" -public var backingFieldVar: kotlin.String -public const val constVal: kotlin.Int -public val customAccessorVal: kotlin.String -public var customAccessorVar: kotlin.String -public val delegated: kotlin.String -public val justVal: kotlin.String -public var justVar: kotlin.String -public lateinit var lateinitVar: kotlin.String -public val valWithGet: kotlin.String -public var varWithGetSet: kotlin.String -public var varWithPlatformGetSet: kotlin.String -public val kotlin.String.extensionVal: kotlin.Unit -public var T.genericExtensionVar: T +public header val backingFieldVal: kotlin.String = "no" +public header var backingFieldVar: kotlin.String +public const header val constVal: kotlin.Int +public header val customAccessorVal: kotlin.String +public header var customAccessorVar: kotlin.String +public header val delegated: kotlin.String +public header val justVal: kotlin.String +public header var justVar: kotlin.String +public header lateinit var lateinitVar: kotlin.String +public header val valWithGet: kotlin.String +public header var varWithGetSet: kotlin.String +public header var varWithPlatformGetSet: kotlin.String +public header val kotlin.String.extensionVal: kotlin.Unit +public header var T.genericExtensionVar: T public fun test(): kotlin.String public object Delegate { diff --git a/compiler/testData/diagnostics/tests/multiplatform/topLevelProperty/simpleHeaderVar.txt b/compiler/testData/diagnostics/tests/multiplatform/topLevelProperty/simpleHeaderVar.txt index af6c3cb5e79..5b6876f1611 100644 --- a/compiler/testData/diagnostics/tests/multiplatform/topLevelProperty/simpleHeaderVar.txt +++ b/compiler/testData/diagnostics/tests/multiplatform/topLevelProperty/simpleHeaderVar.txt @@ -1,16 +1,16 @@ // -- Module: -- package -public var foo: kotlin.String +public header var foo: kotlin.String // -- Module: -- package -public var foo: kotlin.String +public impl var foo: kotlin.String // -- Module: -- package -public var foo: kotlin.String +public impl var foo: kotlin.String diff --git a/compiler/testData/diagnostics/tests/sourceCompatibility/noMultiplatformProjects.txt b/compiler/testData/diagnostics/tests/sourceCompatibility/noMultiplatformProjects.txt index d8334abbb0d..d4c08aabe52 100644 --- a/compiler/testData/diagnostics/tests/sourceCompatibility/noMultiplatformProjects.txt +++ b/compiler/testData/diagnostics/tests/sourceCompatibility/noMultiplatformProjects.txt @@ -1,6 +1,6 @@ package -public val bar2: kotlin.Int +public impl val bar2: kotlin.Int public impl fun foo2(): kotlin.Int public impl interface Baz2 { diff --git a/compiler/testData/multiplatform/incompatibleCallables/output.txt b/compiler/testData/multiplatform/incompatibleCallables/output.txt index ce21dc881d2..d0389c6959f 100644 --- a/compiler/testData/multiplatform/incompatibleCallables/output.txt +++ b/compiler/testData/multiplatform/incompatibleCallables/output.txt @@ -73,13 +73,13 @@ public header fun f10() ^ compiler/testData/multiplatform/incompatibleCallables/common.kt:26:1: error: header declaration 'f14' has no implementation in module The following declaration is incompatible because some type parameter is reified in one declaration and non-reified in the other: - public inline impl fun f14(): Unit + public impl inline fun f14(): Unit header inline fun f14() ^ compiler/testData/multiplatform/incompatibleCallables/common.kt:27:1: error: header declaration 'f15' has no implementation in module The following declaration is incompatible because some type parameter is reified in one declaration and non-reified in the other: - public inline impl fun f15(): Unit + public impl inline fun f15(): Unit header inline fun f15() ^ @@ -103,25 +103,25 @@ header fun f18(s: Array) ^ compiler/testData/multiplatform/incompatibleCallables/common.kt:33:1: error: header declaration 'f19' has no implementation in module The following declaration is incompatible because parameter modifiers are different (vararg, coroutine, crossinline, noinline): - public inline impl fun f19(s: () -> Unit): Unit + public impl inline fun f19(s: () -> Unit): Unit header inline fun f19(crossinline s: () -> Unit) ^ compiler/testData/multiplatform/incompatibleCallables/common.kt:34:1: error: header declaration 'f20' has no implementation in module The following declaration is incompatible because parameter modifiers are different (vararg, coroutine, crossinline, noinline): - public inline impl fun f20(crossinline s: () -> Unit): Unit + public impl inline fun f20(crossinline s: () -> Unit): Unit header inline fun f20(s: () -> Unit) ^ compiler/testData/multiplatform/incompatibleCallables/common.kt:35:1: error: header declaration 'f21' has no implementation in module The following declaration is incompatible because parameter modifiers are different (vararg, coroutine, crossinline, noinline): - public inline impl fun f21(s: () -> Unit): Unit + public impl inline fun f21(s: () -> Unit): Unit header inline fun f21(noinline s: () -> Unit) ^ compiler/testData/multiplatform/incompatibleCallables/common.kt:36:1: error: header declaration 'f22' has no implementation in module The following declaration is incompatible because parameter modifiers are different (vararg, coroutine, crossinline, noinline): - public inline impl fun f22(noinline s: () -> Unit): Unit + public impl inline fun f22(noinline s: () -> Unit): Unit header inline fun f22(s: () -> Unit) ^ diff --git a/compiler/testData/multiplatform/incompatibleProperties/output.txt b/compiler/testData/multiplatform/incompatibleProperties/output.txt index 2fa38f3b7dd..500baef7845 100644 --- a/compiler/testData/multiplatform/incompatibleProperties/output.txt +++ b/compiler/testData/multiplatform/incompatibleProperties/output.txt @@ -7,13 +7,13 @@ Exit code: COMPILATION_ERROR Output: compiler/testData/multiplatform/incompatibleProperties/common.kt:1:1: error: header declaration 'pval' has no implementation in module The following declaration is incompatible because property kinds are different (val vs var): - public var pval: String + public impl var pval: String header val pval: String ^ compiler/testData/multiplatform/incompatibleProperties/common.kt:2:1: error: header declaration 'pvar' has no implementation in module The following declaration is incompatible because property kinds are different (val vs var): - public val pvar: String + public impl val pvar: String header var pvar: String ^ diff --git a/core/descriptors/src/org/jetbrains/kotlin/renderer/DescriptorRendererImpl.kt b/core/descriptors/src/org/jetbrains/kotlin/renderer/DescriptorRendererImpl.kt index ea89948906e..4325dd34bc1 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/renderer/DescriptorRendererImpl.kt +++ b/core/descriptors/src/org/jetbrains/kotlin/renderer/DescriptorRendererImpl.kt @@ -522,6 +522,16 @@ internal class DescriptorRendererImpl( } } + private fun renderCallableModifiers(descriptor: CallableMemberDescriptor, builder: StringBuilder) { + renderExternal(descriptor, builder) + if (descriptor.isHeader) { + builder.append("header ") + } + if (descriptor.isImpl) { + builder.append("impl ") + } + } + private fun renderExternal(memberDescriptor: MemberDescriptor, builder: StringBuilder) { if (memberDescriptor.isExternal) { builder.append("external ") @@ -541,7 +551,7 @@ internal class DescriptorRendererImpl( if (functionDescriptor.isInfix && (functionDescriptor.overriddenDescriptors.none { it.isInfix } || alwaysRenderModifiers)) { builder.append("infix ") } - renderExternal(functionDescriptor, builder) + renderCallableModifiers(functionDescriptor, builder) if (functionDescriptor.isInline) { builder.append("inline ") } @@ -551,12 +561,6 @@ internal class DescriptorRendererImpl( if (functionDescriptor.isSuspend) { builder.append("suspend ") } - if (functionDescriptor.isHeader) { - builder.append("header ") - } - if (functionDescriptor.isImpl) { - builder.append("impl ") - } } override fun render(declarationDescriptor: DeclarationDescriptor): String { @@ -849,7 +853,7 @@ internal class DescriptorRendererImpl( builder.append("const ") } - renderExternal(property, builder) + renderCallableModifiers(property, builder) renderModalityForCallable(property, builder) renderOverride(property, builder) renderLateInit(property, builder) @@ -997,7 +1001,7 @@ internal class DescriptorRendererImpl( } private fun renderAccessorModifiers(descriptor: PropertyAccessorDescriptor, builder: StringBuilder) { - renderExternal(descriptor, builder) + renderCallableModifiers(descriptor, builder) } /* STUPID DISPATCH-ONLY VISITOR */