JS frontend: additional check for nativeSetter -- check that the return type is either Unit or a supertype of the second parameter's type.
This commit is contained in:
+12
-3
@@ -5,10 +5,19 @@ fun foo() {
|
|||||||
fun Int.set(a: String, v: Int) {}
|
fun Int.set(a: String, v: Int) {}
|
||||||
|
|
||||||
[nativeSetter]
|
[nativeSetter]
|
||||||
fun Int.set2(a: Number, v: String?) = "OK"
|
fun Int.set2(a: Number, v: String?): Any? = null
|
||||||
|
|
||||||
[nativeSetter]
|
[nativeSetter]
|
||||||
fun Int.set3(a: Double, v: String?) = "OK"
|
fun Int.set3(a: Double, v: String) = "OK"
|
||||||
|
|
||||||
|
[nativeSetter]
|
||||||
|
fun Int.set4(a: Double, v: String): Any = 1
|
||||||
|
|
||||||
|
[nativeSetter]
|
||||||
|
fun Int.set5(a: Double, v: String): CharSequence = "OK"
|
||||||
|
|
||||||
|
[nativeSetter]
|
||||||
|
fun Int.set6(a: Double, v: String): <!NATIVE_SETTER_WRONG_RETURN_TYPE!>Number<!> = 1
|
||||||
|
|
||||||
<!NATIVE_INDEXER_WRONG_PARAMETER_COUNT!>[nativeSetter]
|
<!NATIVE_INDEXER_WRONG_PARAMETER_COUNT!>[nativeSetter]
|
||||||
fun Int.set(<!NATIVE_INDEXER_KEY_SHOULD_BE_STRING_OR_NUMBER!>a: Any<!>): Int?<!> = 1
|
fun Int.set(<!NATIVE_INDEXER_KEY_SHOULD_BE_STRING_OR_NUMBER!>a: Any<!>): Int?<!> = 1
|
||||||
@@ -20,5 +29,5 @@ fun foo() {
|
|||||||
fun Int.set3(<!NATIVE_INDEXER_KEY_SHOULD_BE_STRING_OR_NUMBER!>a: Any<!>, b: Int, c: Any?)<!> {}
|
fun Int.set3(<!NATIVE_INDEXER_KEY_SHOULD_BE_STRING_OR_NUMBER!>a: Any<!>, b: Int, c: Any?)<!> {}
|
||||||
|
|
||||||
[nativeSetter]
|
[nativeSetter]
|
||||||
fun Any.foo(<!NATIVE_INDEXER_CAN_NOT_HAVE_DEFAULT_ARGUMENTS!>a: Double = 0.0<!>, <!NATIVE_INDEXER_CAN_NOT_HAVE_DEFAULT_ARGUMENTS!>v: String? = null<!>) = "OK"
|
fun Any.<!NATIVE_SETTER_WRONG_RETURN_TYPE!>foo<!>(<!NATIVE_INDEXER_CAN_NOT_HAVE_DEFAULT_ARGUMENTS!>a: Double = 0.0<!>, <!NATIVE_INDEXER_CAN_NOT_HAVE_DEFAULT_ARGUMENTS!>v: String? = null<!>) = "OK"
|
||||||
}
|
}
|
||||||
+11
-2
@@ -11,6 +11,12 @@ fun foo() {
|
|||||||
|
|
||||||
nativeSetter
|
nativeSetter
|
||||||
fun foo(a: Int, v: String) {}
|
fun foo(a: Int, v: String) {}
|
||||||
|
|
||||||
|
nativeSetter
|
||||||
|
fun set4(a: Double, v: String): Any = 1
|
||||||
|
|
||||||
|
nativeSetter
|
||||||
|
fun set5(a: Double, v: String): CharSequence = "OK"
|
||||||
}
|
}
|
||||||
|
|
||||||
[native]
|
[native]
|
||||||
@@ -25,10 +31,13 @@ fun foo() {
|
|||||||
fun Int.set(a: String, v: Int)<!> {}
|
fun Int.set(a: String, v: Int)<!> {}
|
||||||
|
|
||||||
<!NATIVE_ANNOTATIONS_ALLOWED_ONLY_ON_MEMBER_OR_EXTENSION_FUN!>nativeSetter
|
<!NATIVE_ANNOTATIONS_ALLOWED_ONLY_ON_MEMBER_OR_EXTENSION_FUN!>nativeSetter
|
||||||
fun Int.set2(a: Number, v: String?)<!> = "OK"
|
fun Int.<!NATIVE_SETTER_WRONG_RETURN_TYPE!>set2<!>(a: Number, v: String?)<!> = "OK"
|
||||||
|
|
||||||
<!NATIVE_ANNOTATIONS_ALLOWED_ONLY_ON_MEMBER_OR_EXTENSION_FUN!>nativeSetter
|
<!NATIVE_ANNOTATIONS_ALLOWED_ONLY_ON_MEMBER_OR_EXTENSION_FUN!>nativeSetter
|
||||||
fun Int.set3(a: Double, v: String?)<!> = "OK"
|
fun Int.<!NATIVE_SETTER_WRONG_RETURN_TYPE!>set3<!>(a: Double, v: String?)<!> = "OK"
|
||||||
|
|
||||||
|
nativeSetter
|
||||||
|
fun set6(a: Double, v: String): <!NATIVE_SETTER_WRONG_RETURN_TYPE!>Number<!> = 1
|
||||||
|
|
||||||
<!NATIVE_INDEXER_WRONG_PARAMETER_COUNT!>nativeSetter
|
<!NATIVE_INDEXER_WRONG_PARAMETER_COUNT!>nativeSetter
|
||||||
fun set(): Any?<!> = null
|
fun set(): Any?<!> = null
|
||||||
|
|||||||
+2
-2
@@ -22,10 +22,10 @@ fun foo() {
|
|||||||
fun Int.set(a: String, v: Int)<!> {}
|
fun Int.set(a: String, v: Int)<!> {}
|
||||||
|
|
||||||
<!NATIVE_ANNOTATIONS_ALLOWED_ONLY_ON_MEMBER_OR_EXTENSION_FUN!>nativeSetter
|
<!NATIVE_ANNOTATIONS_ALLOWED_ONLY_ON_MEMBER_OR_EXTENSION_FUN!>nativeSetter
|
||||||
fun Int.set2(a: Number, v: String?)<!> = "OK"
|
fun Int.<!NATIVE_SETTER_WRONG_RETURN_TYPE!>set2<!>(a: Number, v: String?)<!> = "OK"
|
||||||
|
|
||||||
<!NATIVE_ANNOTATIONS_ALLOWED_ONLY_ON_MEMBER_OR_EXTENSION_FUN!>nativeSetter
|
<!NATIVE_ANNOTATIONS_ALLOWED_ONLY_ON_MEMBER_OR_EXTENSION_FUN!>nativeSetter
|
||||||
fun Int.set3(a: Double, v: String?)<!> = "OK"
|
fun Int.<!NATIVE_SETTER_WRONG_RETURN_TYPE!>set3<!>(a: Double, v: String?)<!> = "OK"
|
||||||
|
|
||||||
<!NATIVE_ANNOTATIONS_ALLOWED_ONLY_ON_MEMBER_OR_EXTENSION_FUN, NATIVE_INDEXER_WRONG_PARAMETER_COUNT!>nativeSetter
|
<!NATIVE_ANNOTATIONS_ALLOWED_ONLY_ON_MEMBER_OR_EXTENSION_FUN, NATIVE_INDEXER_WRONG_PARAMETER_COUNT!>nativeSetter
|
||||||
fun set(): Any?<!> = null
|
fun set(): Any?<!> = null
|
||||||
|
|||||||
+17
-2
@@ -11,6 +11,12 @@ class A {
|
|||||||
nativeSetter
|
nativeSetter
|
||||||
fun foo(a: Int, v: String) {}
|
fun foo(a: Int, v: String) {}
|
||||||
|
|
||||||
|
nativeSetter
|
||||||
|
fun set4(a: Double, v: String): Any = 1
|
||||||
|
|
||||||
|
nativeSetter
|
||||||
|
fun set5(a: Double, v: String): CharSequence = "OK"
|
||||||
|
|
||||||
class object {
|
class object {
|
||||||
nativeSetter
|
nativeSetter
|
||||||
fun set(a: String, v: Any?): Any? = null
|
fun set(a: String, v: Any?): Any? = null
|
||||||
@@ -20,6 +26,12 @@ class A {
|
|||||||
|
|
||||||
nativeSetter
|
nativeSetter
|
||||||
fun foo(a: Int, v: String) {}
|
fun foo(a: Int, v: String) {}
|
||||||
|
|
||||||
|
nativeSetter
|
||||||
|
fun set4(a: Double, v: String): Any = 1
|
||||||
|
|
||||||
|
nativeSetter
|
||||||
|
fun set5(a: Double, v: String): CharSequence = "OK"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -46,10 +58,13 @@ class C {
|
|||||||
fun Int.set(a: String, v: Int)<!> {}
|
fun Int.set(a: String, v: Int)<!> {}
|
||||||
|
|
||||||
<!NATIVE_ANNOTATIONS_ALLOWED_ONLY_ON_MEMBER_OR_EXTENSION_FUN!>nativeSetter
|
<!NATIVE_ANNOTATIONS_ALLOWED_ONLY_ON_MEMBER_OR_EXTENSION_FUN!>nativeSetter
|
||||||
fun Int.set2(a: Number, v: String?)<!> = "OK"
|
fun Int.<!NATIVE_SETTER_WRONG_RETURN_TYPE!>set2<!>(a: Number, v: String?)<!> = "OK"
|
||||||
|
|
||||||
<!NATIVE_ANNOTATIONS_ALLOWED_ONLY_ON_MEMBER_OR_EXTENSION_FUN!>nativeSetter
|
<!NATIVE_ANNOTATIONS_ALLOWED_ONLY_ON_MEMBER_OR_EXTENSION_FUN!>nativeSetter
|
||||||
fun Int.set3(a: Double, v: String?)<!> = "OK"
|
fun Int.<!NATIVE_SETTER_WRONG_RETURN_TYPE!>set3<!>(a: Double, v: String?)<!> = "OK"
|
||||||
|
|
||||||
|
nativeSetter
|
||||||
|
fun set6(a: Double, v: String): <!NATIVE_SETTER_WRONG_RETURN_TYPE!>Number<!> = 1
|
||||||
|
|
||||||
<!NATIVE_INDEXER_WRONG_PARAMETER_COUNT!>nativeSetter
|
<!NATIVE_INDEXER_WRONG_PARAMETER_COUNT!>nativeSetter
|
||||||
fun set(): Any?<!> = null
|
fun set(): Any?<!> = null
|
||||||
|
|||||||
+5
@@ -7,6 +7,8 @@ kotlin.js.native() internal final class A {
|
|||||||
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
|
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
|
||||||
kotlin.js.nativeSetter() internal final fun put(/*0*/ a: kotlin.Number, /*1*/ v: kotlin.String): kotlin.Unit
|
kotlin.js.nativeSetter() internal final fun put(/*0*/ a: kotlin.Number, /*1*/ v: kotlin.String): kotlin.Unit
|
||||||
kotlin.js.nativeSetter() internal final fun set(/*0*/ a: kotlin.String, /*1*/ v: kotlin.Any?): kotlin.Any?
|
kotlin.js.nativeSetter() internal final fun set(/*0*/ a: kotlin.String, /*1*/ v: kotlin.Any?): kotlin.Any?
|
||||||
|
kotlin.js.nativeSetter() internal final fun set4(/*0*/ a: kotlin.Double, /*1*/ v: kotlin.String): kotlin.Any
|
||||||
|
kotlin.js.nativeSetter() internal final fun set5(/*0*/ a: kotlin.Double, /*1*/ v: kotlin.String): kotlin.CharSequence
|
||||||
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
||||||
|
|
||||||
internal class object <class-object-for-A> {
|
internal class object <class-object-for-A> {
|
||||||
@@ -16,6 +18,8 @@ kotlin.js.native() internal final class A {
|
|||||||
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
|
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
|
||||||
kotlin.js.nativeSetter() internal final fun put(/*0*/ a: kotlin.Number, /*1*/ v: kotlin.String): kotlin.Unit
|
kotlin.js.nativeSetter() internal final fun put(/*0*/ a: kotlin.Number, /*1*/ v: kotlin.String): kotlin.Unit
|
||||||
kotlin.js.nativeSetter() internal final fun set(/*0*/ a: kotlin.String, /*1*/ v: kotlin.Any?): kotlin.Any?
|
kotlin.js.nativeSetter() internal final fun set(/*0*/ a: kotlin.String, /*1*/ v: kotlin.Any?): kotlin.Any?
|
||||||
|
kotlin.js.nativeSetter() internal final fun set4(/*0*/ a: kotlin.Double, /*1*/ v: kotlin.String): kotlin.Any
|
||||||
|
kotlin.js.nativeSetter() internal final fun set5(/*0*/ a: kotlin.Double, /*1*/ v: kotlin.String): kotlin.CharSequence
|
||||||
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -73,6 +77,7 @@ kotlin.js.native() internal final class C {
|
|||||||
kotlin.js.nativeSetter() internal final fun set(/*0*/ a: A): kotlin.Any?
|
kotlin.js.nativeSetter() internal final fun set(/*0*/ a: A): kotlin.Any?
|
||||||
kotlin.js.nativeSetter() internal final fun set(/*0*/ a: A, /*1*/ v: kotlin.Any?): kotlin.Unit
|
kotlin.js.nativeSetter() internal final fun set(/*0*/ a: A, /*1*/ v: kotlin.Any?): kotlin.Unit
|
||||||
kotlin.js.nativeSetter() internal final fun set(/*0*/ a: kotlin.String, /*1*/ v: kotlin.Any, /*2*/ v2: kotlin.Any): kotlin.Unit
|
kotlin.js.nativeSetter() internal final fun set(/*0*/ a: kotlin.String, /*1*/ v: kotlin.Any, /*2*/ v2: kotlin.Any): kotlin.Unit
|
||||||
|
kotlin.js.nativeSetter() internal final fun set6(/*0*/ a: kotlin.Double, /*1*/ v: kotlin.String): kotlin.Number
|
||||||
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
||||||
kotlin.js.nativeSetter() internal final fun kotlin.Int.set(/*0*/ a: kotlin.String, /*1*/ v: kotlin.Int): kotlin.Unit
|
kotlin.js.nativeSetter() internal final fun kotlin.Int.set(/*0*/ a: kotlin.String, /*1*/ v: kotlin.Int): kotlin.Unit
|
||||||
kotlin.js.nativeSetter() internal final fun kotlin.Int.set2(/*0*/ a: kotlin.Number, /*1*/ v: kotlin.String?): kotlin.String
|
kotlin.js.nativeSetter() internal final fun kotlin.Int.set2(/*0*/ a: kotlin.Number, /*1*/ v: kotlin.String?): kotlin.String
|
||||||
|
|||||||
+21
-6
@@ -13,6 +13,12 @@ class A {
|
|||||||
nativeSetter
|
nativeSetter
|
||||||
fun foo(a: Int, v: String) {}
|
fun foo(a: Int, v: String) {}
|
||||||
|
|
||||||
|
nativeSetter
|
||||||
|
fun set4(a: Double, v: String): Any = 1
|
||||||
|
|
||||||
|
nativeSetter
|
||||||
|
fun set5(a: Double, v: String): CharSequence = "OK"
|
||||||
|
|
||||||
class object {
|
class object {
|
||||||
nativeSetter
|
nativeSetter
|
||||||
fun set(a: String, v: Any?): Any? = null
|
fun set(a: String, v: Any?): Any? = null
|
||||||
@@ -22,6 +28,12 @@ class A {
|
|||||||
|
|
||||||
nativeSetter
|
nativeSetter
|
||||||
fun foo(a: Int, v: String) {}
|
fun foo(a: Int, v: String) {}
|
||||||
|
|
||||||
|
nativeSetter
|
||||||
|
fun set4(a: Double, v: String): Any = 1
|
||||||
|
|
||||||
|
nativeSetter
|
||||||
|
fun set5(a: Double, v: String): CharSequence = "OK"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -46,10 +58,13 @@ class A {
|
|||||||
fun Int.set(a: String, v: Int)<!> {}
|
fun Int.set(a: String, v: Int)<!> {}
|
||||||
|
|
||||||
<!NATIVE_ANNOTATIONS_ALLOWED_ONLY_ON_MEMBER_OR_EXTENSION_FUN!>nativeSetter
|
<!NATIVE_ANNOTATIONS_ALLOWED_ONLY_ON_MEMBER_OR_EXTENSION_FUN!>nativeSetter
|
||||||
fun Int.set2(a: Number, v: String?)<!> = "OK"
|
fun Int.<!NATIVE_SETTER_WRONG_RETURN_TYPE!>set2<!>(a: Number, v: String?)<!> = "OK"
|
||||||
|
|
||||||
<!NATIVE_ANNOTATIONS_ALLOWED_ONLY_ON_MEMBER_OR_EXTENSION_FUN!>nativeSetter
|
<!NATIVE_ANNOTATIONS_ALLOWED_ONLY_ON_MEMBER_OR_EXTENSION_FUN!>nativeSetter
|
||||||
fun Int.set3(a: Double, v: String?)<!> = "OK"
|
fun Int.<!NATIVE_SETTER_WRONG_RETURN_TYPE!>set3<!>(a: Double, v: String?)<!> = "OK"
|
||||||
|
|
||||||
|
nativeSetter
|
||||||
|
fun set6(a: Double, v: String): <!NATIVE_SETTER_WRONG_RETURN_TYPE!>Number<!> = 1
|
||||||
|
|
||||||
<!NATIVE_INDEXER_WRONG_PARAMETER_COUNT!>nativeSetter
|
<!NATIVE_INDEXER_WRONG_PARAMETER_COUNT!>nativeSetter
|
||||||
fun set(): Any?<!> = null
|
fun set(): Any?<!> = null
|
||||||
@@ -72,10 +87,10 @@ class A {
|
|||||||
fun Int.set(a: String, v: Int)<!> {}
|
fun Int.set(a: String, v: Int)<!> {}
|
||||||
|
|
||||||
<!NATIVE_ANNOTATIONS_ALLOWED_ONLY_ON_MEMBER_OR_EXTENSION_FUN!>nativeSetter
|
<!NATIVE_ANNOTATIONS_ALLOWED_ONLY_ON_MEMBER_OR_EXTENSION_FUN!>nativeSetter
|
||||||
fun Int.set2(a: Number, v: String?)<!> = "OK"
|
fun Int.<!NATIVE_SETTER_WRONG_RETURN_TYPE!>set2<!>(a: Number, v: String?)<!> = "OK"
|
||||||
|
|
||||||
<!NATIVE_ANNOTATIONS_ALLOWED_ONLY_ON_MEMBER_OR_EXTENSION_FUN!>nativeSetter
|
<!NATIVE_ANNOTATIONS_ALLOWED_ONLY_ON_MEMBER_OR_EXTENSION_FUN!>nativeSetter
|
||||||
fun Int.set3(a: Double, v: String?)<!> = "OK"
|
fun Int.<!NATIVE_SETTER_WRONG_RETURN_TYPE!>set3<!>(a: Double, v: String?)<!> = "OK"
|
||||||
|
|
||||||
<!NATIVE_INDEXER_WRONG_PARAMETER_COUNT!>nativeSetter
|
<!NATIVE_INDEXER_WRONG_PARAMETER_COUNT!>nativeSetter
|
||||||
fun set(): Any?<!> = null
|
fun set(): Any?<!> = null
|
||||||
@@ -98,10 +113,10 @@ class A {
|
|||||||
fun Int.set(a: String, v: Int)<!> {}
|
fun Int.set(a: String, v: Int)<!> {}
|
||||||
|
|
||||||
<!NATIVE_ANNOTATIONS_ALLOWED_ONLY_ON_MEMBER_OR_EXTENSION_FUN!>nativeSetter
|
<!NATIVE_ANNOTATIONS_ALLOWED_ONLY_ON_MEMBER_OR_EXTENSION_FUN!>nativeSetter
|
||||||
fun Int.set2(a: Number, v: String?)<!> = "OK"
|
fun Int.<!NATIVE_SETTER_WRONG_RETURN_TYPE!>set2<!>(a: Number, v: String?)<!> = "OK"
|
||||||
|
|
||||||
<!NATIVE_ANNOTATIONS_ALLOWED_ONLY_ON_MEMBER_OR_EXTENSION_FUN!>nativeSetter
|
<!NATIVE_ANNOTATIONS_ALLOWED_ONLY_ON_MEMBER_OR_EXTENSION_FUN!>nativeSetter
|
||||||
fun Int.set3(a: Double, v: String?)<!> = "OK"
|
fun Int.<!NATIVE_SETTER_WRONG_RETURN_TYPE!>set3<!>(a: Double, v: String?)<!> = "OK"
|
||||||
|
|
||||||
<!NATIVE_INDEXER_WRONG_PARAMETER_COUNT!>nativeSetter
|
<!NATIVE_INDEXER_WRONG_PARAMETER_COUNT!>nativeSetter
|
||||||
fun set(): Any?<!> = null
|
fun set(): Any?<!> = null
|
||||||
|
|||||||
+5
@@ -20,6 +20,8 @@ kotlin.js.native() internal final class A {
|
|||||||
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
|
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
|
||||||
kotlin.js.nativeSetter() internal final fun put(/*0*/ a: kotlin.Number, /*1*/ v: kotlin.String): kotlin.Unit
|
kotlin.js.nativeSetter() internal final fun put(/*0*/ a: kotlin.Number, /*1*/ v: kotlin.String): kotlin.Unit
|
||||||
kotlin.js.nativeSetter() internal final fun set(/*0*/ a: kotlin.String, /*1*/ v: kotlin.Any?): kotlin.Any?
|
kotlin.js.nativeSetter() internal final fun set(/*0*/ a: kotlin.String, /*1*/ v: kotlin.Any?): kotlin.Any?
|
||||||
|
kotlin.js.nativeSetter() internal final fun set4(/*0*/ a: kotlin.Double, /*1*/ v: kotlin.String): kotlin.Any
|
||||||
|
kotlin.js.nativeSetter() internal final fun set5(/*0*/ a: kotlin.Double, /*1*/ v: kotlin.String): kotlin.CharSequence
|
||||||
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
||||||
|
|
||||||
internal class object <class-object-for-A> {
|
internal class object <class-object-for-A> {
|
||||||
@@ -29,6 +31,8 @@ kotlin.js.native() internal final class A {
|
|||||||
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
|
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
|
||||||
kotlin.js.nativeSetter() internal final fun put(/*0*/ a: kotlin.Number, /*1*/ v: kotlin.String): kotlin.Unit
|
kotlin.js.nativeSetter() internal final fun put(/*0*/ a: kotlin.Number, /*1*/ v: kotlin.String): kotlin.Unit
|
||||||
kotlin.js.nativeSetter() internal final fun set(/*0*/ a: kotlin.String, /*1*/ v: kotlin.Any?): kotlin.Any?
|
kotlin.js.nativeSetter() internal final fun set(/*0*/ a: kotlin.String, /*1*/ v: kotlin.Any?): kotlin.Any?
|
||||||
|
kotlin.js.nativeSetter() internal final fun set4(/*0*/ a: kotlin.Double, /*1*/ v: kotlin.String): kotlin.Any
|
||||||
|
kotlin.js.nativeSetter() internal final fun set5(/*0*/ a: kotlin.Double, /*1*/ v: kotlin.String): kotlin.CharSequence
|
||||||
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -86,6 +90,7 @@ kotlin.js.native() internal final class A {
|
|||||||
kotlin.js.nativeSetter() internal final fun set(/*0*/ a: A.B.A): kotlin.Any?
|
kotlin.js.nativeSetter() internal final fun set(/*0*/ a: A.B.A): kotlin.Any?
|
||||||
kotlin.js.nativeSetter() internal final fun set(/*0*/ a: A.B.A, /*1*/ v: kotlin.Any?): kotlin.Unit
|
kotlin.js.nativeSetter() internal final fun set(/*0*/ a: A.B.A, /*1*/ v: kotlin.Any?): kotlin.Unit
|
||||||
kotlin.js.nativeSetter() internal final fun set(/*0*/ a: kotlin.String, /*1*/ v: kotlin.Any, /*2*/ v2: kotlin.Any): kotlin.Unit
|
kotlin.js.nativeSetter() internal final fun set(/*0*/ a: kotlin.String, /*1*/ v: kotlin.Any, /*2*/ v2: kotlin.Any): kotlin.Unit
|
||||||
|
kotlin.js.nativeSetter() internal final fun set6(/*0*/ a: kotlin.Double, /*1*/ v: kotlin.String): kotlin.Number
|
||||||
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
||||||
kotlin.js.nativeSetter() internal final fun kotlin.Int.set(/*0*/ a: kotlin.String, /*1*/ v: kotlin.Int): kotlin.Unit
|
kotlin.js.nativeSetter() internal final fun kotlin.Int.set(/*0*/ a: kotlin.String, /*1*/ v: kotlin.Int): kotlin.Unit
|
||||||
kotlin.js.nativeSetter() internal final fun kotlin.Int.set2(/*0*/ a: kotlin.Number, /*1*/ v: kotlin.String?): kotlin.String
|
kotlin.js.nativeSetter() internal final fun kotlin.Int.set2(/*0*/ a: kotlin.Number, /*1*/ v: kotlin.String?): kotlin.String
|
||||||
|
|||||||
+15
-6
@@ -12,6 +12,12 @@ class A {
|
|||||||
<!NATIVE_ANNOTATIONS_ALLOWED_ONLY_ON_MEMBER_OR_EXTENSION_FUN!>nativeSetter
|
<!NATIVE_ANNOTATIONS_ALLOWED_ONLY_ON_MEMBER_OR_EXTENSION_FUN!>nativeSetter
|
||||||
fun foo(a: Int, v: String)<!> {}
|
fun foo(a: Int, v: String)<!> {}
|
||||||
|
|
||||||
|
<!NATIVE_ANNOTATIONS_ALLOWED_ONLY_ON_MEMBER_OR_EXTENSION_FUN!>nativeSetter
|
||||||
|
fun set4(a: Double, v: String): Any<!> = 1
|
||||||
|
|
||||||
|
<!NATIVE_ANNOTATIONS_ALLOWED_ONLY_ON_MEMBER_OR_EXTENSION_FUN!>nativeSetter
|
||||||
|
fun set5(a: Double, v: String): CharSequence<!> = "OK"
|
||||||
|
|
||||||
class object {
|
class object {
|
||||||
<!NATIVE_ANNOTATIONS_ALLOWED_ONLY_ON_MEMBER_OR_EXTENSION_FUN!>nativeSetter
|
<!NATIVE_ANNOTATIONS_ALLOWED_ONLY_ON_MEMBER_OR_EXTENSION_FUN!>nativeSetter
|
||||||
fun set(a: String, v: Any?): Any?<!> = null
|
fun set(a: String, v: Any?): Any?<!> = null
|
||||||
@@ -45,10 +51,13 @@ class A {
|
|||||||
fun Int.set(a: String, v: Int)<!> {}
|
fun Int.set(a: String, v: Int)<!> {}
|
||||||
|
|
||||||
<!NATIVE_ANNOTATIONS_ALLOWED_ONLY_ON_MEMBER_OR_EXTENSION_FUN!>nativeSetter
|
<!NATIVE_ANNOTATIONS_ALLOWED_ONLY_ON_MEMBER_OR_EXTENSION_FUN!>nativeSetter
|
||||||
fun Int.set2(a: Number, v: String?)<!> = "OK"
|
fun Int.<!NATIVE_SETTER_WRONG_RETURN_TYPE!>set2<!>(a: Number, v: String?)<!> = "OK"
|
||||||
|
|
||||||
<!NATIVE_ANNOTATIONS_ALLOWED_ONLY_ON_MEMBER_OR_EXTENSION_FUN!>nativeSetter
|
<!NATIVE_ANNOTATIONS_ALLOWED_ONLY_ON_MEMBER_OR_EXTENSION_FUN!>nativeSetter
|
||||||
fun Int.set3(a: Double, v: String?)<!> = "OK"
|
fun Int.<!NATIVE_SETTER_WRONG_RETURN_TYPE!>set3<!>(a: Double, v: String?)<!> = "OK"
|
||||||
|
|
||||||
|
<!NATIVE_ANNOTATIONS_ALLOWED_ONLY_ON_MEMBER_OR_EXTENSION_FUN!>nativeSetter
|
||||||
|
fun Int.set6(a: Double, v: String): <!NATIVE_SETTER_WRONG_RETURN_TYPE!>Number<!><!> = 1
|
||||||
|
|
||||||
<!NATIVE_ANNOTATIONS_ALLOWED_ONLY_ON_MEMBER_OR_EXTENSION_FUN, NATIVE_INDEXER_WRONG_PARAMETER_COUNT!>nativeSetter
|
<!NATIVE_ANNOTATIONS_ALLOWED_ONLY_ON_MEMBER_OR_EXTENSION_FUN, NATIVE_INDEXER_WRONG_PARAMETER_COUNT!>nativeSetter
|
||||||
fun set(): Any?<!> = null
|
fun set(): Any?<!> = null
|
||||||
@@ -71,10 +80,10 @@ class A {
|
|||||||
fun Int.set(a: String, v: Int)<!> {}
|
fun Int.set(a: String, v: Int)<!> {}
|
||||||
|
|
||||||
<!NATIVE_ANNOTATIONS_ALLOWED_ONLY_ON_MEMBER_OR_EXTENSION_FUN!>nativeSetter
|
<!NATIVE_ANNOTATIONS_ALLOWED_ONLY_ON_MEMBER_OR_EXTENSION_FUN!>nativeSetter
|
||||||
fun Int.set2(a: Number, v: String?)<!> = "OK"
|
fun Int.<!NATIVE_SETTER_WRONG_RETURN_TYPE!>set2<!>(a: Number, v: String?)<!> = "OK"
|
||||||
|
|
||||||
<!NATIVE_ANNOTATIONS_ALLOWED_ONLY_ON_MEMBER_OR_EXTENSION_FUN!>nativeSetter
|
<!NATIVE_ANNOTATIONS_ALLOWED_ONLY_ON_MEMBER_OR_EXTENSION_FUN!>nativeSetter
|
||||||
fun Int.set3(a: Double, v: String?)<!> = "OK"
|
fun Int.<!NATIVE_SETTER_WRONG_RETURN_TYPE!>set3<!>(a: Double, v: String?)<!> = "OK"
|
||||||
|
|
||||||
<!NATIVE_ANNOTATIONS_ALLOWED_ONLY_ON_MEMBER_OR_EXTENSION_FUN, NATIVE_INDEXER_WRONG_PARAMETER_COUNT!>nativeSetter
|
<!NATIVE_ANNOTATIONS_ALLOWED_ONLY_ON_MEMBER_OR_EXTENSION_FUN, NATIVE_INDEXER_WRONG_PARAMETER_COUNT!>nativeSetter
|
||||||
fun set(): Any?<!> = null
|
fun set(): Any?<!> = null
|
||||||
@@ -97,10 +106,10 @@ class A {
|
|||||||
fun Int.set(a: String, v: Int)<!> {}
|
fun Int.set(a: String, v: Int)<!> {}
|
||||||
|
|
||||||
<!NATIVE_ANNOTATIONS_ALLOWED_ONLY_ON_MEMBER_OR_EXTENSION_FUN!>nativeSetter
|
<!NATIVE_ANNOTATIONS_ALLOWED_ONLY_ON_MEMBER_OR_EXTENSION_FUN!>nativeSetter
|
||||||
fun Int.set2(a: Number, v: String?)<!> = "OK"
|
fun Int.<!NATIVE_SETTER_WRONG_RETURN_TYPE!>set2<!>(a: Number, v: String?)<!> = "OK"
|
||||||
|
|
||||||
<!NATIVE_ANNOTATIONS_ALLOWED_ONLY_ON_MEMBER_OR_EXTENSION_FUN!>nativeSetter
|
<!NATIVE_ANNOTATIONS_ALLOWED_ONLY_ON_MEMBER_OR_EXTENSION_FUN!>nativeSetter
|
||||||
fun Int.set3(a: Double, v: String?)<!> = "OK"
|
fun Int.<!NATIVE_SETTER_WRONG_RETURN_TYPE!>set3<!>(a: Double, v: String?)<!> = "OK"
|
||||||
|
|
||||||
<!NATIVE_ANNOTATIONS_ALLOWED_ONLY_ON_MEMBER_OR_EXTENSION_FUN, NATIVE_INDEXER_WRONG_PARAMETER_COUNT!>nativeSetter
|
<!NATIVE_ANNOTATIONS_ALLOWED_ONLY_ON_MEMBER_OR_EXTENSION_FUN, NATIVE_INDEXER_WRONG_PARAMETER_COUNT!>nativeSetter
|
||||||
fun set(): Any?<!> = null
|
fun set(): Any?<!> = null
|
||||||
|
|||||||
+3
@@ -20,6 +20,8 @@ internal final class A {
|
|||||||
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
|
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
|
||||||
kotlin.js.nativeSetter() internal final fun put(/*0*/ a: kotlin.Number, /*1*/ v: kotlin.String): kotlin.Unit
|
kotlin.js.nativeSetter() internal final fun put(/*0*/ a: kotlin.Number, /*1*/ v: kotlin.String): kotlin.Unit
|
||||||
kotlin.js.nativeSetter() internal final fun set(/*0*/ a: kotlin.String, /*1*/ v: kotlin.Any?): kotlin.Any?
|
kotlin.js.nativeSetter() internal final fun set(/*0*/ a: kotlin.String, /*1*/ v: kotlin.Any?): kotlin.Any?
|
||||||
|
kotlin.js.nativeSetter() internal final fun set4(/*0*/ a: kotlin.Double, /*1*/ v: kotlin.String): kotlin.Any
|
||||||
|
kotlin.js.nativeSetter() internal final fun set5(/*0*/ a: kotlin.Double, /*1*/ v: kotlin.String): kotlin.CharSequence
|
||||||
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
||||||
|
|
||||||
internal class object <class-object-for-A> {
|
internal class object <class-object-for-A> {
|
||||||
@@ -90,6 +92,7 @@ internal final class A {
|
|||||||
kotlin.js.nativeSetter() internal final fun kotlin.Int.set(/*0*/ a: kotlin.String, /*1*/ v: kotlin.Int): kotlin.Unit
|
kotlin.js.nativeSetter() internal final fun kotlin.Int.set(/*0*/ a: kotlin.String, /*1*/ v: kotlin.Int): kotlin.Unit
|
||||||
kotlin.js.nativeSetter() internal final fun kotlin.Int.set2(/*0*/ a: kotlin.Number, /*1*/ v: kotlin.String?): kotlin.String
|
kotlin.js.nativeSetter() internal final fun kotlin.Int.set2(/*0*/ a: kotlin.Number, /*1*/ v: kotlin.String?): kotlin.String
|
||||||
kotlin.js.nativeSetter() internal final fun kotlin.Int.set3(/*0*/ a: kotlin.Double, /*1*/ v: kotlin.String?): kotlin.String
|
kotlin.js.nativeSetter() internal final fun kotlin.Int.set3(/*0*/ a: kotlin.Double, /*1*/ v: kotlin.String?): kotlin.String
|
||||||
|
kotlin.js.nativeSetter() internal final fun kotlin.Int.set6(/*0*/ a: kotlin.Double, /*1*/ v: kotlin.String): kotlin.Number
|
||||||
}
|
}
|
||||||
|
|
||||||
internal object obj {
|
internal object obj {
|
||||||
|
|||||||
+2
-2
@@ -43,10 +43,10 @@ class C {
|
|||||||
fun Int.set(a: String, v: Int)<!> {}
|
fun Int.set(a: String, v: Int)<!> {}
|
||||||
|
|
||||||
<!NATIVE_ANNOTATIONS_ALLOWED_ONLY_ON_MEMBER_OR_EXTENSION_FUN!>nativeSetter
|
<!NATIVE_ANNOTATIONS_ALLOWED_ONLY_ON_MEMBER_OR_EXTENSION_FUN!>nativeSetter
|
||||||
fun Int.set2(a: Number, v: String?)<!> = "OK"
|
fun Int.<!NATIVE_SETTER_WRONG_RETURN_TYPE!>set2<!>(a: Number, v: String?)<!> = "OK"
|
||||||
|
|
||||||
<!NATIVE_ANNOTATIONS_ALLOWED_ONLY_ON_MEMBER_OR_EXTENSION_FUN!>nativeSetter
|
<!NATIVE_ANNOTATIONS_ALLOWED_ONLY_ON_MEMBER_OR_EXTENSION_FUN!>nativeSetter
|
||||||
fun Int.set3(a: Double, v: String?)<!> = "OK"
|
fun Int.<!NATIVE_SETTER_WRONG_RETURN_TYPE!>set3<!>(a: Double, v: String?)<!> = "OK"
|
||||||
|
|
||||||
<!NATIVE_ANNOTATIONS_ALLOWED_ONLY_ON_MEMBER_OR_EXTENSION_FUN, NATIVE_INDEXER_WRONG_PARAMETER_COUNT!>nativeSetter
|
<!NATIVE_ANNOTATIONS_ALLOWED_ONLY_ON_MEMBER_OR_EXTENSION_FUN, NATIVE_INDEXER_WRONG_PARAMETER_COUNT!>nativeSetter
|
||||||
fun set(): Any?<!> = null
|
fun set(): Any?<!> = null
|
||||||
|
|||||||
+12
-3
@@ -4,12 +4,21 @@ nativeSetter
|
|||||||
fun Int.set(a: String, v: Int) {}
|
fun Int.set(a: String, v: Int) {}
|
||||||
|
|
||||||
nativeSetter
|
nativeSetter
|
||||||
fun Int.set2(a: Number, v: String?) = "OK"
|
fun Int.set2(a: Number, v: String?): Any? = null
|
||||||
|
|
||||||
nativeSetter
|
nativeSetter
|
||||||
fun Int.set3(a: Double, v: String?) = "OK"
|
fun Int.set3(a: Double, v: String) = "OK"
|
||||||
|
|
||||||
[nativeSetter]
|
nativeSetter
|
||||||
|
fun Int.set4(a: Double, v: String): Any = 1
|
||||||
|
|
||||||
|
nativeSetter
|
||||||
|
fun Int.set5(a: Double, v: String): CharSequence = "OK"
|
||||||
|
|
||||||
|
nativeSetter
|
||||||
|
fun Int.set6(a: Double, v: String): <!NATIVE_SETTER_WRONG_RETURN_TYPE!>Number<!> = 1
|
||||||
|
|
||||||
|
nativeSetter
|
||||||
fun Any.foo(<!NATIVE_INDEXER_CAN_NOT_HAVE_DEFAULT_ARGUMENTS!>a: String = "0.0"<!>, <!NATIVE_INDEXER_CAN_NOT_HAVE_DEFAULT_ARGUMENTS!>v: String = "str"<!>) = "OK"
|
fun Any.foo(<!NATIVE_INDEXER_CAN_NOT_HAVE_DEFAULT_ARGUMENTS!>a: String = "0.0"<!>, <!NATIVE_INDEXER_CAN_NOT_HAVE_DEFAULT_ARGUMENTS!>v: String = "str"<!>) = "OK"
|
||||||
|
|
||||||
<!NATIVE_INDEXER_WRONG_PARAMETER_COUNT!>nativeSetter
|
<!NATIVE_INDEXER_WRONG_PARAMETER_COUNT!>nativeSetter
|
||||||
|
|||||||
+5
-2
@@ -4,6 +4,9 @@ kotlin.js.nativeSetter() internal fun kotlin.Any.foo(/*0*/ a: kotlin.String = ..
|
|||||||
kotlin.js.nativeSetter() internal fun kotlin.Int.set(/*0*/ a: [ERROR : A]): kotlin.Int?
|
kotlin.js.nativeSetter() internal fun kotlin.Int.set(/*0*/ a: [ERROR : A]): kotlin.Int?
|
||||||
kotlin.js.nativeSetter() internal fun kotlin.Int.set(/*0*/ a: kotlin.String, /*1*/ v: kotlin.Int): kotlin.Unit
|
kotlin.js.nativeSetter() internal fun kotlin.Int.set(/*0*/ a: kotlin.String, /*1*/ v: kotlin.Int): kotlin.Unit
|
||||||
kotlin.js.nativeSetter() internal fun kotlin.Int.set2(): kotlin.String?
|
kotlin.js.nativeSetter() internal fun kotlin.Int.set2(): kotlin.String?
|
||||||
kotlin.js.nativeSetter() internal fun kotlin.Int.set2(/*0*/ a: kotlin.Number, /*1*/ v: kotlin.String?): kotlin.String
|
kotlin.js.nativeSetter() internal fun kotlin.Int.set2(/*0*/ a: kotlin.Number, /*1*/ v: kotlin.String?): kotlin.Any?
|
||||||
kotlin.js.nativeSetter() internal fun kotlin.Int.set3(/*0*/ a: kotlin.Any, /*1*/ b: kotlin.Int, /*2*/ c: kotlin.Any?): kotlin.Unit
|
kotlin.js.nativeSetter() internal fun kotlin.Int.set3(/*0*/ a: kotlin.Any, /*1*/ b: kotlin.Int, /*2*/ c: kotlin.Any?): kotlin.Unit
|
||||||
kotlin.js.nativeSetter() internal fun kotlin.Int.set3(/*0*/ a: kotlin.Double, /*1*/ v: kotlin.String?): kotlin.String
|
kotlin.js.nativeSetter() internal fun kotlin.Int.set3(/*0*/ a: kotlin.Double, /*1*/ v: kotlin.String): kotlin.String
|
||||||
|
kotlin.js.nativeSetter() internal fun kotlin.Int.set4(/*0*/ a: kotlin.Double, /*1*/ v: kotlin.String): kotlin.Any
|
||||||
|
kotlin.js.nativeSetter() internal fun kotlin.Int.set5(/*0*/ a: kotlin.Double, /*1*/ v: kotlin.String): kotlin.CharSequence
|
||||||
|
kotlin.js.nativeSetter() internal fun kotlin.Int.set6(/*0*/ a: kotlin.Double, /*1*/ v: kotlin.String): kotlin.Number
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ fun String.bar(n: Int, v: Any) {}
|
|||||||
native
|
native
|
||||||
class C {
|
class C {
|
||||||
nativeSetter
|
nativeSetter
|
||||||
fun foo(d: Double, v: Any): String?
|
fun foo(d: Double, v: Any): Any
|
||||||
nativeSetter
|
nativeSetter
|
||||||
fun bar(d: Double, v: Any): String? = noImpl
|
fun bar(d: Double, v: Any): Any = noImpl
|
||||||
}
|
}
|
||||||
@@ -5,9 +5,9 @@ kotlin.js.nativeSetter() internal fun kotlin.String.foo(/*0*/ n: kotlin.Int, /*1
|
|||||||
|
|
||||||
kotlin.js.native() internal final class C {
|
kotlin.js.native() internal final class C {
|
||||||
public constructor C()
|
public constructor C()
|
||||||
kotlin.js.nativeSetter() internal final fun bar(/*0*/ d: kotlin.Double, /*1*/ v: kotlin.Any): kotlin.String?
|
kotlin.js.nativeSetter() internal final fun bar(/*0*/ d: kotlin.Double, /*1*/ v: kotlin.Any): kotlin.Any
|
||||||
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
|
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
|
||||||
kotlin.js.nativeSetter() internal final fun foo(/*0*/ d: kotlin.Double, /*1*/ v: kotlin.Any): kotlin.String?
|
kotlin.js.nativeSetter() internal final fun foo(/*0*/ d: kotlin.Double, /*1*/ v: kotlin.Any): kotlin.Any
|
||||||
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
|
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
|
||||||
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
||||||
}
|
}
|
||||||
|
|||||||
+18
-2
@@ -30,6 +30,7 @@ import org.jetbrains.k2js.PredefinedAnnotation
|
|||||||
import org.jetbrains.jet.lang.resolve.DescriptorUtils
|
import org.jetbrains.jet.lang.resolve.DescriptorUtils
|
||||||
import org.jetbrains.k2js.translate.utils.AnnotationsUtils
|
import org.jetbrains.k2js.translate.utils.AnnotationsUtils
|
||||||
import org.jetbrains.jet.lang.descriptors.Visibilities
|
import org.jetbrains.jet.lang.descriptors.Visibilities
|
||||||
|
import org.jetbrains.jet.lang.types.typeUtil.isSubtypeOf
|
||||||
|
|
||||||
public object KotlinJsDeclarationCheckerProvider : AdditionalCheckerProvider {
|
public object KotlinJsDeclarationCheckerProvider : AdditionalCheckerProvider {
|
||||||
override val annotationCheckers: List<AnnotationChecker> = listOf(NativeInvokeChecker(), NativeGetterChecker(), NativeSetterChecker())
|
override val annotationCheckers: List<AnnotationChecker> = listOf(NativeInvokeChecker(), NativeGetterChecker(), NativeSetterChecker())
|
||||||
@@ -76,7 +77,7 @@ private abstract class AbstractNativeIndexerChecker(
|
|||||||
if (firstParamClassDescriptor != KotlinBuiltIns.getInstance().getString() &&
|
if (firstParamClassDescriptor != KotlinBuiltIns.getInstance().getString() &&
|
||||||
!DescriptorUtils.isSubclass(firstParamClassDescriptor, KotlinBuiltIns.getInstance().getNumber())
|
!DescriptorUtils.isSubclass(firstParamClassDescriptor, KotlinBuiltIns.getInstance().getNumber())
|
||||||
) {
|
) {
|
||||||
diagnosticHolder.report(ErrorsJs.NATIVE_INDEXER_KEY_SHOULD_BE_STRING_OR_NUMBER.on(declaration.getValueParameters().first, indexerKind))
|
diagnosticHolder.report(ErrorsJs.NATIVE_INDEXER_KEY_SHOULD_BE_STRING_OR_NUMBER.on(declaration.getValueParameters().firstOrNull(), indexerKind))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -102,4 +103,19 @@ public class NativeGetterChecker : AbstractNativeIndexerChecker(PredefinedAnnota
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public class NativeSetterChecker : AbstractNativeIndexerChecker(PredefinedAnnotation.NATIVE_SETTER, "setter", requiredParametersCount = 2)
|
public class NativeSetterChecker : AbstractNativeIndexerChecker(PredefinedAnnotation.NATIVE_SETTER, "setter", requiredParametersCount = 2) {
|
||||||
|
override fun additionalCheck(declaration: JetNamedFunction, descriptor: FunctionDescriptor, diagnosticHolder: DiagnosticSink) {
|
||||||
|
super.additionalCheck(declaration, descriptor, diagnosticHolder)
|
||||||
|
|
||||||
|
val returnType = descriptor.getReturnType()
|
||||||
|
if (KotlinBuiltIns.isUnit(returnType)) return
|
||||||
|
|
||||||
|
val parameters = descriptor.getValueParameters()
|
||||||
|
if (parameters.size() < 2) return
|
||||||
|
|
||||||
|
val secondParameterType = parameters.get(1).getType()
|
||||||
|
if (secondParameterType isSubtypeOf returnType) return
|
||||||
|
|
||||||
|
diagnosticHolder.report(ErrorsJs.NATIVE_SETTER_WRONG_RETURN_TYPE.on(declaration))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
@@ -29,6 +29,7 @@ private val DIAGNOSTIC_FACTORY_TO_RENDERER by Delegates.lazy {
|
|||||||
put(ErrorsJs.NATIVE_INDEXER_KEY_SHOULD_BE_STRING_OR_NUMBER, "Native {0}''s first parameter type should be ''kotlin.String'' or subtype of ''kotlin.Number''", Renderers.STRING)
|
put(ErrorsJs.NATIVE_INDEXER_KEY_SHOULD_BE_STRING_OR_NUMBER, "Native {0}''s first parameter type should be ''kotlin.String'' or subtype of ''kotlin.Number''", Renderers.STRING)
|
||||||
put(ErrorsJs.NATIVE_INDEXER_CAN_NOT_HAVE_DEFAULT_ARGUMENTS, "Native {0}''s parameter can not have default value", Renderers.STRING)
|
put(ErrorsJs.NATIVE_INDEXER_CAN_NOT_HAVE_DEFAULT_ARGUMENTS, "Native {0}''s parameter can not have default value", Renderers.STRING)
|
||||||
put(ErrorsJs.NATIVE_GETTER_RETURN_TYPE_SHOULD_BE_NULLABLE, "Native getter''s return type should be nullable")
|
put(ErrorsJs.NATIVE_GETTER_RETURN_TYPE_SHOULD_BE_NULLABLE, "Native getter''s return type should be nullable")
|
||||||
|
put(ErrorsJs.NATIVE_SETTER_WRONG_RETURN_TYPE, "Native setter''s return type should be ''Unit'' or a supertype of the second parameter''s type")
|
||||||
put(ErrorsJs.NATIVE_INDEXER_WRONG_PARAMETER_COUNT, "Expected {0} parameters for native {1}", Renderers.TO_STRING, Renderers.STRING)
|
put(ErrorsJs.NATIVE_INDEXER_WRONG_PARAMETER_COUNT, "Expected {0} parameters for native {1}", Renderers.TO_STRING, Renderers.STRING)
|
||||||
put(ErrorsJs.JSCODE_ERROR, "JavaScript: {0}", Renderers.TO_STRING, Renderers.TO_STRING)
|
put(ErrorsJs.JSCODE_ERROR, "JavaScript: {0}", Renderers.TO_STRING, Renderers.TO_STRING)
|
||||||
put(ErrorsJs.JSCODE_WARNING, "JavaScript: {0}", Renderers.TO_STRING, Renderers.TO_STRING)
|
put(ErrorsJs.JSCODE_WARNING, "JavaScript: {0}", Renderers.TO_STRING, Renderers.TO_STRING)
|
||||||
|
|||||||
@@ -36,6 +36,7 @@ public interface ErrorsJs {
|
|||||||
DiagnosticFactory1<JetElement, String> NATIVE_INDEXER_KEY_SHOULD_BE_STRING_OR_NUMBER = DiagnosticFactory1.create(ERROR, DECLARATION_SIGNATURE_OR_DEFAULT);
|
DiagnosticFactory1<JetElement, String> NATIVE_INDEXER_KEY_SHOULD_BE_STRING_OR_NUMBER = DiagnosticFactory1.create(ERROR, DECLARATION_SIGNATURE_OR_DEFAULT);
|
||||||
DiagnosticFactory1<JetElement, String> NATIVE_INDEXER_CAN_NOT_HAVE_DEFAULT_ARGUMENTS = DiagnosticFactory1.create(ERROR, DECLARATION_SIGNATURE_OR_DEFAULT);
|
DiagnosticFactory1<JetElement, String> NATIVE_INDEXER_CAN_NOT_HAVE_DEFAULT_ARGUMENTS = DiagnosticFactory1.create(ERROR, DECLARATION_SIGNATURE_OR_DEFAULT);
|
||||||
DiagnosticFactory0<JetDeclaration> NATIVE_GETTER_RETURN_TYPE_SHOULD_BE_NULLABLE = DiagnosticFactory0.create(ERROR, DECLARATION_RETURN_TYPE);
|
DiagnosticFactory0<JetDeclaration> NATIVE_GETTER_RETURN_TYPE_SHOULD_BE_NULLABLE = DiagnosticFactory0.create(ERROR, DECLARATION_RETURN_TYPE);
|
||||||
|
DiagnosticFactory0<JetDeclaration> NATIVE_SETTER_WRONG_RETURN_TYPE = DiagnosticFactory0.create(ERROR, DECLARATION_RETURN_TYPE);
|
||||||
DiagnosticFactory2<JetElement, Integer, String> NATIVE_INDEXER_WRONG_PARAMETER_COUNT = DiagnosticFactory2.create(ERROR, DECLARATION_SIGNATURE_OR_DEFAULT);
|
DiagnosticFactory2<JetElement, Integer, String> NATIVE_INDEXER_WRONG_PARAMETER_COUNT = DiagnosticFactory2.create(ERROR, DECLARATION_SIGNATURE_OR_DEFAULT);
|
||||||
DiagnosticFactory2<JetExpression, String, List<TextRange>> JSCODE_ERROR = DiagnosticFactory2.create(ERROR, JsCodePositioningStrategy.INSTANCE$);
|
DiagnosticFactory2<JetExpression, String, List<TextRange>> JSCODE_ERROR = DiagnosticFactory2.create(ERROR, JsCodePositioningStrategy.INSTANCE$);
|
||||||
DiagnosticFactory2<JetExpression, String, List<TextRange>> JSCODE_WARNING = DiagnosticFactory2.create(WARNING, JsCodePositioningStrategy.INSTANCE$);
|
DiagnosticFactory2<JetExpression, String, List<TextRange>> JSCODE_WARNING = DiagnosticFactory2.create(WARNING, JsCodePositioningStrategy.INSTANCE$);
|
||||||
|
|||||||
Reference in New Issue
Block a user