Allow impl class to be data class, allow impl constructor properties

This commit is contained in:
Alexander Udalov
2016-12-13 20:47:45 +03:00
parent 3e97c9fff9
commit 7deaf8cc41
10 changed files with 110 additions and 28 deletions
@@ -12,9 +12,6 @@ open header class OpenClass
abstract header class AbstractClass
final header class FinalClass
// header data class DataClass(val x: Int)
header class NonDataClass(x: Int)
header class C1<A>
header class C2<B>
header class C3<D, E : D>
@@ -12,9 +12,6 @@ final impl class OpenClass
open impl class AbstractClass
abstract impl class FinalClass
// impl class DataClass(val x: Int)
impl data class NonDataClass(val x: Int)
impl class C1<A, Extra>
impl class C2<out B>
impl class C3<D, E : D?>
@@ -71,25 +71,19 @@ The following declaration is incompatible because modality is different:
final header class FinalClass
^
compiler/testData/multiplatform/incompatibleClasses/common.kt:16:14: error: header declaration 'NonDataClass' has no implementation in module
The following declaration is incompatible because modifiers are different (data):
public final impl data class NonDataClass
header class NonDataClass(x: Int)
^
compiler/testData/multiplatform/incompatibleClasses/common.kt:18:14: error: header declaration 'C1' has no implementation in module
compiler/testData/multiplatform/incompatibleClasses/common.kt:15:14: error: header declaration 'C1' has no implementation in module
The following declaration is incompatible because number of type parameters is different:
public final impl class C1<A, Extra>
header class C1<A>
^
compiler/testData/multiplatform/incompatibleClasses/common.kt:19:14: error: header declaration 'C2' has no implementation in module
compiler/testData/multiplatform/incompatibleClasses/common.kt:16:14: error: header declaration 'C2' has no implementation in module
The following declaration is incompatible because declaration-site variances of type parameters are different:
public final impl class C2<out B>
header class C2<B>
^
compiler/testData/multiplatform/incompatibleClasses/common.kt:25:23: error: header declaration 'ExtendsNumber' has no implementation in module
compiler/testData/multiplatform/incompatibleClasses/common.kt:22:23: error: header declaration 'ExtendsNumber' has no implementation in module
The following declaration is incompatible because some supertypes are missing in the implementation:
public abstract impl class ExtendsNumber
@@ -128,16 +122,13 @@ open impl class AbstractClass
compiler/testData/multiplatform/incompatibleClasses/jvm.kt:13:10: error: modifier 'impl' is only applicable to members that are initially declared in platform-independent code
abstract impl class FinalClass
^
compiler/testData/multiplatform/incompatibleClasses/jvm.kt:16:1: error: modifier 'impl' is only applicable to members that are initially declared in platform-independent code
impl data class NonDataClass(val x: Int)
^
compiler/testData/multiplatform/incompatibleClasses/jvm.kt:18:1: error: modifier 'impl' is only applicable to members that are initially declared in platform-independent code
compiler/testData/multiplatform/incompatibleClasses/jvm.kt:15:1: error: modifier 'impl' is only applicable to members that are initially declared in platform-independent code
impl class C1<A, Extra>
^
compiler/testData/multiplatform/incompatibleClasses/jvm.kt:19:1: error: modifier 'impl' is only applicable to members that are initially declared in platform-independent code
compiler/testData/multiplatform/incompatibleClasses/jvm.kt:16:1: error: modifier 'impl' is only applicable to members that are initially declared in platform-independent code
impl class C2<out B>
^
compiler/testData/multiplatform/incompatibleClasses/jvm.kt:25:1: error: modifier 'impl' is only applicable to members that are initially declared in platform-independent code
compiler/testData/multiplatform/incompatibleClasses/jvm.kt:22:1: error: modifier 'impl' is only applicable to members that are initially declared in platform-independent code
impl abstract class ExtendsNumber : Any()
^