KT-12877: add diagnostics on JsModule/JsNonModule:

1) for all cases of misusing of JsModule report on JsNonModule as well
2) report about non-top-level declarations with JsModule/JsNonModule
3) report about JsModule/JsNonModule declarations inside file marked with JsModule/JsNonModule
4) report about usages of declarations not marked with both JsModule and JsNonModule from UMD module
This commit is contained in:
Alexey Andreev
2016-07-04 16:24:07 +03:00
committed by Alexey Andreev
parent 08a7f9c298
commit 31a1d6ca66
15 changed files with 188 additions and 13 deletions
@@ -0,0 +1,27 @@
// MODULE: m1
// FILE: a.kt
package foo
import kotlin.js.*
@JsModule("A") @native object A {
fun f(): Int
val g: Int
}
@JsNonModule @native open class B {
fun foo(): Int
}
// MODULE: m2(m1)
// MODULE_KIND: UMD
// FILE: c.kt
package bar
import foo.*
fun box() {
A.<!CALL_FROM_UMD_MUST_BE_JS_MODULE_AND_JS_NON_MODULE!>f<!>()+A.<!CALL_FROM_UMD_MUST_BE_JS_MODULE_AND_JS_NON_MODULE!>g<!>
<!CALL_FROM_UMD_MUST_BE_JS_MODULE_AND_JS_NON_MODULE!>B<!>()
}
@@ -0,0 +1,25 @@
package
package bar {
public fun box(): kotlin.Unit
}
package foo {
@kotlin.js.JsModule(import = "A") @kotlin.js.native public object A {
private constructor A()
public final val g: kotlin.Int
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public final fun f(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
@kotlin.js.JsNonModule @kotlin.js.native public open class B {
public constructor B()
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public final fun foo(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
}
@@ -1,3 +1,5 @@
package foo
<!JS_MODULE_PROHIBITED_ON_VAR!>@JsModule("bar") @native var baz: Int<!> = noImpl
<!JS_MODULE_PROHIBITED_ON_VAR!>@JsModule("bar") @native var bar: Int<!> = noImpl
<!JS_MODULE_PROHIBITED_ON_VAR!>@JsNonModule @native var baz: Int<!> = noImpl
@@ -1,5 +1,6 @@
package
package foo {
@kotlin.js.JsModule(import = "bar") @kotlin.js.native public var baz: kotlin.Int
@kotlin.js.JsModule(import = "bar") @kotlin.js.native public var bar: kotlin.Int
@kotlin.js.JsNonModule @kotlin.js.native public var baz: kotlin.Int
}
@@ -0,0 +1,12 @@
@file:JsModule("foo")
package foo
@JsModule("A") @native class <!NESTED_JS_MODULE_PROHIBITED!>A<!>
@JsModule("B") @native <!NESTED_JS_MODULE_PROHIBITED!>object B<!>
<!NESTED_JS_MODULE_PROHIBITED!>@JsModule("foo") @native fun foo()<!> = 23
<!NESTED_JS_MODULE_PROHIBITED!>@JsModule("bar") @native val bar<!> = 42
<!NESTED_JS_MODULE_PROHIBITED!>@JsNonModule @native val baz<!> = 99
@@ -0,0 +1,21 @@
package
package foo {
@kotlin.js.JsModule(import = "bar") @kotlin.js.native public val bar: kotlin.Int = 42
@kotlin.js.JsNonModule @kotlin.js.native public val baz: kotlin.Int = 99
@kotlin.js.JsModule(import = "foo") @kotlin.js.native public fun foo(): kotlin.Int
@kotlin.js.JsModule(import = "A") @kotlin.js.native public final class A {
public constructor A()
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
}
@kotlin.js.JsModule(import = "B") @kotlin.js.native public object B {
private constructor B()
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
}
}
@@ -0,0 +1,15 @@
package foo
class A {
<!JS_MODULE_PROHIBITED_ON_NON_TOPLEVEL!>@JsModule("foo") @native fun foo(): Int<!>
}
object B {
<!JS_MODULE_PROHIBITED_ON_NON_TOPLEVEL!>@JsModule("foo") @native fun bar(): Int<!>
}
fun baz() {
<!JS_MODULE_PROHIBITED_ON_NON_TOPLEVEL!>@JsModule("bzz") @native fun bzz(): Int<!>
@JsModule("bzz") @native class <!JS_MODULE_PROHIBITED_ON_NON_TOPLEVEL!>C<!>
}
@@ -0,0 +1,21 @@
package
package foo {
public fun baz(): kotlin.Unit
public final class A {
public constructor A()
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
@kotlin.js.JsModule(import = "foo") @kotlin.js.native public final fun foo(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
public object B {
private constructor B()
@kotlin.js.JsModule(import = "foo") @kotlin.js.native public final fun bar(): 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
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
}
@@ -6,4 +6,6 @@ package foo
<!JS_MODULE_PROHIBITED_ON_NON_NATIVE!>@JsModule("foo") fun foo()<!> = 23
<!JS_MODULE_PROHIBITED_ON_NON_NATIVE!>@JsModule("bar") val bar<!> = 42
<!JS_MODULE_PROHIBITED_ON_NON_NATIVE!>@JsModule("bar") val bar<!> = 42
<!JS_MODULE_PROHIBITED_ON_NON_NATIVE!>@JsNonModule val baz<!> = 99
@@ -2,6 +2,7 @@ package
package foo {
@kotlin.js.JsModule(import = "bar") public val bar: kotlin.Int = 42
@kotlin.js.JsNonModule public val baz: kotlin.Int = 99
@kotlin.js.JsModule(import = "foo") public fun foo(): kotlin.Int
@kotlin.js.JsModule(import = "A") public final class A {