fix(KT-38262): add ability to create classes with methods that have reserved keyword as an identifier.

This commit is contained in:
Artem Kobzar
2022-04-14 16:39:24 +02:00
committed by teamcity
parent 9d0c7a55b1
commit 315ff0beeb
5 changed files with 19 additions and 1 deletions
@@ -588,7 +588,7 @@ class ExportModelGenerator(
val name = function.getExportedIdentifier()
// TODO: Use [] syntax instead of prohibiting
if (name in allReservedWords)
if (parentClass == null && name in allReservedWords)
return Exportability.Prohibited("Name is a reserved word")
return Exportability.Allowed
@@ -162,5 +162,10 @@ declare namespace JS_TESTS {
get ordinal(): 0 | 1;
}
}
class KT38262 {
constructor();
then(): number;
catch(): number;
}
}
}
@@ -213,4 +213,10 @@ class OuterClass {
A,
B
}
}
@JsExport
class KT38262 {
fun then(): Int = 42
fun catch(): Int = 24
}
@@ -30,6 +30,7 @@ var TestEnumClass = JS_TESTS.foo.TestEnumClass;
var TestInterfaceImpl = JS_TESTS.foo.TestInterfaceImpl;
var processInterface = JS_TESTS.foo.processInterface;
var OuterClass = JS_TESTS.foo.OuterClass;
var KT38262 = JS_TESTS.foo.KT38262;
function assert(condition) {
if (!condition) {
throw "Assertion failed";
@@ -126,5 +127,7 @@ function box() {
assert(OuterClass.NestedEnum.B.name === "B");
assert(OuterClass.NestedEnum.A.ordinal === 0);
assert(OuterClass.NestedEnum.B.ordinal === 1);
assert(new KT38262().then() == 42);
assert(new KT38262().catch() == 24);
return "OK";
}
@@ -30,6 +30,7 @@ import TestEnumClass = JS_TESTS.foo.TestEnumClass;
import TestInterfaceImpl = JS_TESTS.foo.TestInterfaceImpl;
import processInterface = JS_TESTS.foo.processInterface;
import OuterClass = JS_TESTS.foo.OuterClass;
import KT38262 = JS_TESTS.foo.KT38262;
function assert(condition: boolean) {
if (!condition) {
@@ -152,5 +153,8 @@ function box(): string {
assert(OuterClass.NestedEnum.A.ordinal === 0)
assert(OuterClass.NestedEnum.B.ordinal === 1)
assert(new KT38262().then() == 42)
assert(new KT38262().catch() == 24)
return "OK";
}