Check platform<->impl declaration compatibility
For each platform declaration, there must be at least one impl declaration in the module with the compatible signature; similarly, for each impl declaration, there must be at least one platform declaration with the compatible signature. Note that currently the presence of the 'impl' modifier is not checked yet. Also, the sad fact is that if you have platform and impl declarations which are not compatible, you get two errors: on the platform delcaration and on the impl declaration. This needs to be addressed as well
This commit is contained in:
@@ -0,0 +1,25 @@
|
||||
platform class PClass
|
||||
platform interface PInterface
|
||||
platform object PObject
|
||||
platform enum class PEnumClass
|
||||
platform annotation class PAnnotationClass
|
||||
|
||||
internal platform object InternalObject
|
||||
public platform object PublicObject
|
||||
private platform object PrivateObject
|
||||
|
||||
open platform class OpenClass
|
||||
abstract platform class AbstractClass
|
||||
final platform class FinalClass
|
||||
|
||||
// platform data class DataClass(val x: Int)
|
||||
platform class NonDataClass(x: Int)
|
||||
|
||||
platform class C1<A>
|
||||
platform class C2<B>
|
||||
platform class C3<D, E : D>
|
||||
|
||||
platform class C4<F>
|
||||
|
||||
|
||||
platform abstract class ExtendsNumber : Number
|
||||
@@ -0,0 +1,25 @@
|
||||
impl interface PClass
|
||||
impl object PInterface
|
||||
impl enum class PObject
|
||||
impl annotation class PEnumClass
|
||||
impl class PAnnotationClass
|
||||
|
||||
private impl object InternalObject
|
||||
internal impl object PublicObject
|
||||
public impl object PrivateObject
|
||||
|
||||
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?>
|
||||
|
||||
impl typealias C4<F> = C4Impl<F>
|
||||
class C4Impl<F : Number>
|
||||
|
||||
impl abstract class ExtendsNumber : Any()
|
||||
@@ -0,0 +1,143 @@
|
||||
-- Common --
|
||||
Exit code: OK
|
||||
Output:
|
||||
|
||||
-- JVM --
|
||||
Exit code: COMPILATION_ERROR
|
||||
Output:
|
||||
compiler/testData/multiplatform/incompatibleClasses/common.kt:1:16: error: no definition is found for platform declaration 'PClass'
|
||||
The following declaration is incompatible because class kinds are different (class, interface, object, enum, annotation):
|
||||
public impl interface PClass
|
||||
|
||||
platform class PClass
|
||||
^
|
||||
compiler/testData/multiplatform/incompatibleClasses/common.kt:2:20: error: no definition is found for platform declaration 'PInterface'
|
||||
The following declaration is incompatible because class kinds are different (class, interface, object, enum, annotation):
|
||||
public impl object PInterface
|
||||
|
||||
platform interface PInterface
|
||||
^
|
||||
compiler/testData/multiplatform/incompatibleClasses/common.kt:3:10: error: no definition is found for platform declaration 'PObject'
|
||||
The following declaration is incompatible because class kinds are different (class, interface, object, enum, annotation):
|
||||
public final impl enum class PObject : Enum<PObject>
|
||||
|
||||
platform object PObject
|
||||
^
|
||||
compiler/testData/multiplatform/incompatibleClasses/common.kt:4:21: error: no definition is found for platform declaration 'PEnumClass'
|
||||
The following declaration is incompatible because class kinds are different (class, interface, object, enum, annotation):
|
||||
public final impl annotation class PEnumClass : Annotation
|
||||
|
||||
platform enum class PEnumClass
|
||||
^
|
||||
compiler/testData/multiplatform/incompatibleClasses/common.kt:5:27: error: no definition is found for platform declaration 'PAnnotationClass'
|
||||
The following declaration is incompatible because class kinds are different (class, interface, object, enum, annotation):
|
||||
public final impl class PAnnotationClass
|
||||
|
||||
platform annotation class PAnnotationClass
|
||||
^
|
||||
compiler/testData/multiplatform/incompatibleClasses/common.kt:7:19: error: no definition is found for platform declaration 'InternalObject'
|
||||
The following declaration is incompatible because visibility is different:
|
||||
private impl object InternalObject
|
||||
|
||||
internal platform object InternalObject
|
||||
^
|
||||
compiler/testData/multiplatform/incompatibleClasses/common.kt:8:17: error: no definition is found for platform declaration 'PublicObject'
|
||||
The following declaration is incompatible because visibility is different:
|
||||
internal impl object PublicObject
|
||||
|
||||
public platform object PublicObject
|
||||
^
|
||||
compiler/testData/multiplatform/incompatibleClasses/common.kt:9:18: error: no definition is found for platform declaration 'PrivateObject'
|
||||
The following declaration is incompatible because visibility is different:
|
||||
public impl object PrivateObject
|
||||
|
||||
private platform object PrivateObject
|
||||
^
|
||||
compiler/testData/multiplatform/incompatibleClasses/common.kt:11:21: error: no definition is found for platform declaration 'OpenClass'
|
||||
The following declaration is incompatible because modality is different:
|
||||
public final impl class OpenClass
|
||||
|
||||
open platform class OpenClass
|
||||
^
|
||||
compiler/testData/multiplatform/incompatibleClasses/common.kt:12:25: error: no definition is found for platform declaration 'AbstractClass'
|
||||
The following declaration is incompatible because modality is different:
|
||||
public open impl class AbstractClass
|
||||
|
||||
abstract platform class AbstractClass
|
||||
^
|
||||
compiler/testData/multiplatform/incompatibleClasses/common.kt:13:22: error: no definition is found for platform declaration 'FinalClass'
|
||||
The following declaration is incompatible because modality is different:
|
||||
public abstract impl class FinalClass
|
||||
|
||||
final platform class FinalClass
|
||||
^
|
||||
compiler/testData/multiplatform/incompatibleClasses/common.kt:16:16: error: no definition is found for platform declaration 'NonDataClass'
|
||||
The following declaration is incompatible because modifiers are different (data):
|
||||
public final impl data class NonDataClass
|
||||
|
||||
platform class NonDataClass(x: Int)
|
||||
^
|
||||
compiler/testData/multiplatform/incompatibleClasses/common.kt:18:16: error: no definition is found for platform declaration 'C1'
|
||||
The following declaration is incompatible because number of type parameters is different:
|
||||
public final impl class C1<A, Extra>
|
||||
|
||||
platform class C1<A>
|
||||
^
|
||||
compiler/testData/multiplatform/incompatibleClasses/common.kt:19:16: error: no definition is found for platform declaration 'C2'
|
||||
The following declaration is incompatible because declaration-site variances of type parameters are different:
|
||||
public final impl class C2<out B>
|
||||
|
||||
platform class C2<B>
|
||||
^
|
||||
compiler/testData/multiplatform/incompatibleClasses/common.kt:25:25: error: no definition is found for platform declaration 'ExtendsNumber'
|
||||
The following declaration is incompatible because some supertypes are missing in the implementation:
|
||||
public abstract impl class ExtendsNumber
|
||||
|
||||
platform abstract class ExtendsNumber : Number
|
||||
^
|
||||
compiler/testData/multiplatform/incompatibleClasses/jvm.kt:1:1: error: modifier 'impl' is only applicable to members that are initially declared in platform-independent code
|
||||
impl interface PClass
|
||||
^
|
||||
compiler/testData/multiplatform/incompatibleClasses/jvm.kt:2:1: error: modifier 'impl' is only applicable to members that are initially declared in platform-independent code
|
||||
impl object PInterface
|
||||
^
|
||||
compiler/testData/multiplatform/incompatibleClasses/jvm.kt:3:1: error: modifier 'impl' is only applicable to members that are initially declared in platform-independent code
|
||||
impl enum class PObject
|
||||
^
|
||||
compiler/testData/multiplatform/incompatibleClasses/jvm.kt:4:1: error: modifier 'impl' is only applicable to members that are initially declared in platform-independent code
|
||||
impl annotation class PEnumClass
|
||||
^
|
||||
compiler/testData/multiplatform/incompatibleClasses/jvm.kt:5:1: error: modifier 'impl' is only applicable to members that are initially declared in platform-independent code
|
||||
impl class PAnnotationClass
|
||||
^
|
||||
compiler/testData/multiplatform/incompatibleClasses/jvm.kt:7:9: error: modifier 'impl' is only applicable to members that are initially declared in platform-independent code
|
||||
private impl object InternalObject
|
||||
^
|
||||
compiler/testData/multiplatform/incompatibleClasses/jvm.kt:8:10: error: modifier 'impl' is only applicable to members that are initially declared in platform-independent code
|
||||
internal impl object PublicObject
|
||||
^
|
||||
compiler/testData/multiplatform/incompatibleClasses/jvm.kt:9:8: error: modifier 'impl' is only applicable to members that are initially declared in platform-independent code
|
||||
public impl object PrivateObject
|
||||
^
|
||||
compiler/testData/multiplatform/incompatibleClasses/jvm.kt:11:7: error: modifier 'impl' is only applicable to members that are initially declared in platform-independent code
|
||||
final impl class OpenClass
|
||||
^
|
||||
compiler/testData/multiplatform/incompatibleClasses/jvm.kt:12:6: error: modifier 'impl' is only applicable to members that are initially declared in platform-independent code
|
||||
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
|
||||
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
|
||||
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
|
||||
impl abstract class ExtendsNumber : Any()
|
||||
^
|
||||
|
||||
Reference in New Issue
Block a user