Support platform/impl modifiers for functions
Also add a new capability for ModuleDescriptor, which is used to obtain the platform in the multi-platform scenario in tests. Suppress the following errors for platform functions: "function has no body" and "nothing to inline". Also do not report redeclaration between platform and non-platform functions because this is the case when the common + platform-specific code are analyzed together. Note that some diagnostics reported in tests are not yet implemented in this commit, they appear in subsequent commits
This commit is contained in:
+25
@@ -0,0 +1,25 @@
|
||||
// !LANGUAGE: +MultiPlatformProjects
|
||||
// MODULE: m1-common
|
||||
// FILE: common.kt
|
||||
|
||||
platform fun foo(x: Int): Int
|
||||
|
||||
fun callFromCommonCode(x: Int) = foo(x)
|
||||
|
||||
// MODULE: m2-jvm(m1-common)
|
||||
// FILE: jvm.kt
|
||||
|
||||
impl fun foo(x: Int): Int {
|
||||
return x + 1
|
||||
}
|
||||
|
||||
fun callFromJVM(x: Int) = foo(x)
|
||||
|
||||
// MODULE: m3-js(m1-common)
|
||||
// FILE: js.kt
|
||||
|
||||
impl fun foo(x: Int): Int {
|
||||
return x - 1
|
||||
}
|
||||
|
||||
fun callFromJS(x: Int) = foo(x)
|
||||
+21
@@ -0,0 +1,21 @@
|
||||
// -- Module: <m1-common> --
|
||||
package
|
||||
|
||||
public fun callFromCommonCode(/*0*/ x: kotlin.Int): kotlin.Int
|
||||
public platform fun foo(/*0*/ x: kotlin.Int): kotlin.Int
|
||||
|
||||
|
||||
// -- Module: <m2-jvm> --
|
||||
package
|
||||
|
||||
public fun callFromCommonCode(/*0*/ x: kotlin.Int): kotlin.Int
|
||||
public fun callFromJVM(/*0*/ x: kotlin.Int): kotlin.Int
|
||||
public impl fun foo(/*0*/ x: kotlin.Int): kotlin.Int
|
||||
|
||||
|
||||
// -- Module: <m3-js> --
|
||||
package
|
||||
|
||||
public fun callFromCommonCode(/*0*/ x: kotlin.Int): kotlin.Int
|
||||
public fun callFromJS(/*0*/ x: kotlin.Int): kotlin.Int
|
||||
public impl fun foo(/*0*/ x: kotlin.Int): kotlin.Int
|
||||
Vendored
+8
@@ -0,0 +1,8 @@
|
||||
// !LANGUAGE: +MultiPlatformProjects
|
||||
// MODULE: m1-common
|
||||
// FILE: common.kt
|
||||
|
||||
<!CONFLICTING_OVERLOADS!>platform fun foo()<!>
|
||||
<!CONFLICTING_OVERLOADS!>platform fun foo()<!>
|
||||
|
||||
platform fun foo(x: Int)
|
||||
Vendored
+5
@@ -0,0 +1,5 @@
|
||||
package
|
||||
|
||||
public platform fun foo(): kotlin.Unit
|
||||
public platform fun foo(): kotlin.Unit
|
||||
public platform fun foo(/*0*/ x: kotlin.Int): kotlin.Unit
|
||||
Vendored
+17
@@ -0,0 +1,17 @@
|
||||
// !LANGUAGE: +MultiPlatformProjects
|
||||
// MODULE: m1-common
|
||||
// FILE: common.kt
|
||||
|
||||
platform fun foo()
|
||||
|
||||
// MODULE: m2-jvm(m1-common)
|
||||
// FILE: jvm.kt
|
||||
|
||||
<!CONFLICTING_OVERLOADS!>impl fun foo()<!> {}
|
||||
<!CONFLICTING_OVERLOADS!>impl fun foo()<!> {}
|
||||
|
||||
// MODULE: m3-js(m1-common)
|
||||
// FILE: js.kt
|
||||
|
||||
<!CONFLICTING_OVERLOADS!>impl fun foo()<!> {}
|
||||
<!CONFLICTING_OVERLOADS!>impl fun foo()<!> {}
|
||||
Vendored
+18
@@ -0,0 +1,18 @@
|
||||
// -- Module: <m1-common> --
|
||||
package
|
||||
|
||||
public platform fun foo(): kotlin.Unit
|
||||
|
||||
|
||||
// -- Module: <m2-jvm> --
|
||||
package
|
||||
|
||||
public impl fun foo(): kotlin.Unit
|
||||
public impl fun foo(): kotlin.Unit
|
||||
|
||||
|
||||
// -- Module: <m3-js> --
|
||||
package
|
||||
|
||||
public impl fun foo(): kotlin.Unit
|
||||
public impl fun foo(): kotlin.Unit
|
||||
+18
@@ -0,0 +1,18 @@
|
||||
// !LANGUAGE: +MultiPlatformProjects
|
||||
// MODULE: m1-common
|
||||
// FILE: common.kt
|
||||
package common
|
||||
|
||||
platform fun foo()
|
||||
|
||||
// MODULE: m2-jvm(m1-common)
|
||||
// FILE: jvm.kt
|
||||
package jvm
|
||||
|
||||
<!PLATFORM_DEFINITION_WITHOUT_DECLARATION!>impl<!> fun foo() {}
|
||||
|
||||
// MODULE: m3-js(m1-common)
|
||||
// FILE: js.kt
|
||||
package js
|
||||
|
||||
<!PLATFORM_DEFINITION_WITHOUT_DECLARATION!>impl<!> fun foo() {}
|
||||
+28
@@ -0,0 +1,28 @@
|
||||
// -- Module: <m1-common> --
|
||||
package
|
||||
|
||||
package common {
|
||||
public platform fun foo(): kotlin.Unit
|
||||
}
|
||||
|
||||
|
||||
// -- Module: <m2-jvm> --
|
||||
package
|
||||
|
||||
package common {
|
||||
}
|
||||
|
||||
package jvm {
|
||||
public impl fun foo(): kotlin.Unit
|
||||
}
|
||||
|
||||
|
||||
// -- Module: <m3-js> --
|
||||
package
|
||||
|
||||
package common {
|
||||
}
|
||||
|
||||
package js {
|
||||
public impl fun foo(): kotlin.Unit
|
||||
}
|
||||
Vendored
+5
@@ -0,0 +1,5 @@
|
||||
// !LANGUAGE: +MultiPlatformProjects
|
||||
// MODULE: m1-common
|
||||
// FILE: common.kt
|
||||
|
||||
platform fun foo()
|
||||
Vendored
+3
@@ -0,0 +1,3 @@
|
||||
package
|
||||
|
||||
public platform fun foo(): kotlin.Unit
|
||||
+5
@@ -0,0 +1,5 @@
|
||||
// !LANGUAGE: +MultiPlatformProjects
|
||||
// MODULE: m1-common
|
||||
// FILE: common.kt
|
||||
|
||||
platform fun foo(x: Int, <!PLATFORM_DECLARATION_WITH_DEFAULT_PARAMETER!>y: String = ""<!>)
|
||||
+3
@@ -0,0 +1,3 @@
|
||||
package
|
||||
|
||||
public platform fun foo(/*0*/ x: kotlin.Int, /*1*/ y: kotlin.String = ...): kotlin.Unit
|
||||
Vendored
+5
@@ -0,0 +1,5 @@
|
||||
// !LANGUAGE: +MultiPlatformProjects
|
||||
// MODULE: m1-jvm
|
||||
// FILE: jvm.kt
|
||||
|
||||
<!PLATFORM_DEFINITION_WITHOUT_DECLARATION!>impl<!> fun foo() { }
|
||||
Vendored
+3
@@ -0,0 +1,3 @@
|
||||
package
|
||||
|
||||
public impl fun foo(): kotlin.Unit
|
||||
@@ -0,0 +1,18 @@
|
||||
// !LANGUAGE: +MultiPlatformProjects
|
||||
// MODULE: m1-common
|
||||
// FILE: common.kt
|
||||
|
||||
inline platform fun inlineFun()
|
||||
platform fun nonInlineFun()
|
||||
|
||||
// MODULE: m2-jvm(m1-common)
|
||||
// FILE: jvm.kt
|
||||
|
||||
<!PLATFORM_DEFINITION_WITHOUT_DECLARATION!>impl<!> fun inlineFun() { }
|
||||
impl fun nonInlineFun() { }
|
||||
|
||||
// MODULE: m3-js(m1-common)
|
||||
// FILE: js.kt
|
||||
|
||||
impl <!NOTHING_TO_INLINE!>inline<!> fun inlineFun() { }
|
||||
<!PLATFORM_DEFINITION_WITHOUT_DECLARATION!>impl<!> <!NOTHING_TO_INLINE!>inline<!> fun nonInlineFun() { }
|
||||
@@ -0,0 +1,19 @@
|
||||
// -- Module: <m1-common> --
|
||||
package
|
||||
|
||||
public inline platform fun inlineFun(): kotlin.Unit
|
||||
public platform fun nonInlineFun(): kotlin.Unit
|
||||
|
||||
|
||||
// -- Module: <m2-jvm> --
|
||||
package
|
||||
|
||||
public impl fun inlineFun(): kotlin.Unit
|
||||
public impl fun nonInlineFun(): kotlin.Unit
|
||||
|
||||
|
||||
// -- Module: <m3-js> --
|
||||
package
|
||||
|
||||
public inline impl fun inlineFun(): kotlin.Unit
|
||||
public inline impl fun nonInlineFun(): kotlin.Unit
|
||||
Vendored
+9
@@ -0,0 +1,9 @@
|
||||
// !LANGUAGE: +MultiPlatformProjects
|
||||
// MODULE: m1-common
|
||||
// FILE: common.kt
|
||||
|
||||
<!CONFLICTING_OVERLOADS!>platform fun foo()<!>
|
||||
|
||||
<!CONFLICTING_OVERLOADS, PLATFORM_DECLARATION_WITH_BODY!>platform fun foo()<!> {}
|
||||
|
||||
<!PLATFORM_DECLARATION_WITH_BODY!>platform fun bar()<!> {}
|
||||
Vendored
+5
@@ -0,0 +1,5 @@
|
||||
package
|
||||
|
||||
public platform fun bar(): kotlin.Unit
|
||||
public platform fun foo(): kotlin.Unit
|
||||
public platform fun foo(): kotlin.Unit
|
||||
Vendored
+12
@@ -0,0 +1,12 @@
|
||||
// !LANGUAGE: +MultiPlatformProjects
|
||||
// MODULE: m1-common
|
||||
// FILE: common.kt
|
||||
|
||||
platform fun foo()
|
||||
|
||||
// MODULE: m2-jvm(m1-common)
|
||||
// FILE: jvm.kt
|
||||
|
||||
<!NON_MEMBER_FUNCTION_NO_BODY!>impl fun foo()<!>
|
||||
|
||||
<!NON_MEMBER_FUNCTION_NO_BODY!><!PLATFORM_DEFINITION_WITHOUT_DECLARATION!>impl<!> fun bar()<!>
|
||||
Vendored
+11
@@ -0,0 +1,11 @@
|
||||
// -- Module: <m1-common> --
|
||||
package
|
||||
|
||||
public platform fun foo(): kotlin.Unit
|
||||
|
||||
|
||||
// -- Module: <m2-jvm> --
|
||||
package
|
||||
|
||||
public impl fun bar(): kotlin.Unit
|
||||
public impl fun foo(): kotlin.Unit
|
||||
+12
@@ -0,0 +1,12 @@
|
||||
// !LANGUAGE: +MultiPlatformProjects
|
||||
// MODULE: m1-common
|
||||
// FILE: common.kt
|
||||
platform fun foo()
|
||||
|
||||
// MODULE: m2-jvm(m1-common)
|
||||
// FILE: jvm.kt
|
||||
impl fun foo() {}
|
||||
|
||||
// MODULE: m3-js(m1-common)
|
||||
// FILE: js.kt
|
||||
impl fun foo() {}
|
||||
+16
@@ -0,0 +1,16 @@
|
||||
// -- Module: <m1-common> --
|
||||
package
|
||||
|
||||
public platform fun foo(): kotlin.Unit
|
||||
|
||||
|
||||
// -- Module: <m2-jvm> --
|
||||
package
|
||||
|
||||
public impl fun foo(): kotlin.Unit
|
||||
|
||||
|
||||
// -- Module: <m3-js> --
|
||||
package
|
||||
|
||||
public impl fun foo(): kotlin.Unit
|
||||
Reference in New Issue
Block a user