Render header/impl on properties in tests and diagnostic messages

As a side effect, header/impl and some other modifiers on functions are now
rendered in a different, more natural, order
This commit is contained in:
Alexander Udalov
2016-12-21 12:38:47 +03:00
parent 5556c59fc9
commit e4e50017d0
13 changed files with 59 additions and 55 deletions
@@ -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
@@ -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
@@ -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
@@ -10,7 +10,7 @@ public final header class Bar {
public final header class Baz {
public constructor Baz(/*0*/ w: kotlin.collections.List<kotlin.String>)
public final val w: kotlin.collections.List<kotlin.String>
public header final val w: kotlin.collections.List<kotlin.String>
public final operator header fun component1(): kotlin.collections.List<kotlin.String>
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<kotlin.String>)
public final val w: kotlin.collections.List<kotlin.String>
public impl final val w: kotlin.collections.List<kotlin.String>
public final operator /*synthesized*/ fun component1(): kotlin.collections.List<kotlin.String>
public final /*synthesized*/ fun copy(/*0*/ w: kotlin.collections.List<kotlin.String> = ...): 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
@@ -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
@@ -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
@@ -1,7 +1,7 @@
// -- Module: <m1-common> --
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: <m3-js> --
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
@@ -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 </*0*/ T> 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 </*0*/ T> T.genericExtensionVar: T
public fun test(): kotlin.String
public object Delegate {
@@ -1,16 +1,16 @@
// -- Module: <m1-common> --
package
public var foo: kotlin.String
public header var foo: kotlin.String
// -- Module: <m2-jvm> --
package
public var foo: kotlin.String
public impl var foo: kotlin.String
// -- Module: <m3-js> --
package
public var foo: kotlin.String
public impl var foo: kotlin.String
@@ -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 {
@@ -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 <reified X> f14(): Unit
public impl inline fun <reified X> f14(): Unit
header inline fun <X> 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 <Y> f15(): Unit
public impl inline fun <Y> f15(): Unit
header inline fun <reified Y> f15()
^
@@ -103,25 +103,25 @@ header fun f18(s: Array<out String>)
^
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)
^
@@ -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
^
@@ -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 */