From 82a049b3196a84f94fcaa3674ab0081a915d3d02 Mon Sep 17 00:00:00 2001 From: Zalim Bashorov Date: Sat, 20 Feb 2016 21:20:42 +0300 Subject: [PATCH] JS: fix definition nested classes inside interfaces --- .../js/test/semantics/NestedTypesTest.java | 4 +++ js/js.translator/testData/kotlin_lib_ecma5.js | 2 +- .../nestedTypes/cases/nestedInInterface.kt | 33 +++++++++++++++++++ 3 files changed, 38 insertions(+), 1 deletion(-) create mode 100644 js/js.translator/testData/nestedTypes/cases/nestedInInterface.kt diff --git a/js/js.tests/test/org/jetbrains/kotlin/js/test/semantics/NestedTypesTest.java b/js/js.tests/test/org/jetbrains/kotlin/js/test/semantics/NestedTypesTest.java index cebc9c38468..60f4a0b5d0f 100644 --- a/js/js.tests/test/org/jetbrains/kotlin/js/test/semantics/NestedTypesTest.java +++ b/js/js.tests/test/org/jetbrains/kotlin/js/test/semantics/NestedTypesTest.java @@ -34,6 +34,10 @@ public class NestedTypesTest extends SingleFileTranslationTest { checkFooBoxIsOk(); } + public void testNestedInInterface() throws Exception { + checkFooBoxIsOk(); + } + public void testInner() throws Exception { checkFooBoxIsOk(); } diff --git a/js/js.translator/testData/kotlin_lib_ecma5.js b/js/js.translator/testData/kotlin_lib_ecma5.js index 2b8ad3aad47..58a7913835d 100644 --- a/js/js.translator/testData/kotlin_lib_ecma5.js +++ b/js/js.translator/testData/kotlin_lib_ecma5.js @@ -224,7 +224,7 @@ var Kotlin = {}; copyProperties(obj.prototype, obj.$metadata$.functions); Object.defineProperty(obj, "object", {get: class_object, configurable: true}); - defineNestedTypes(constructor, obj.$metadata$.types); + defineNestedTypes(obj, obj.$metadata$.types); return obj; }; diff --git a/js/js.translator/testData/nestedTypes/cases/nestedInInterface.kt b/js/js.translator/testData/nestedTypes/cases/nestedInInterface.kt new file mode 100644 index 00000000000..7b9afbf14a8 --- /dev/null +++ b/js/js.translator/testData/nestedTypes/cases/nestedInInterface.kt @@ -0,0 +1,33 @@ +package foo + +interface A { + fun foo(): String + fun bar() = "A.bar;" + + class B { + fun foo() = "A.B.foo;" + fun bar() = "A.B.bar;" + } + + class C : A { + override fun foo() = "A.C.foo;" + } + + class D : A { + override fun foo() = "A.D.foo;" + override fun bar() = "A.D.bar;" + } +} + +fun box(): String { + assertEquals("A.B.foo;", A.B().foo()) + assertEquals("A.B.bar;", A.B().bar()) + + assertEquals("A.C.foo;", A.C().foo()) + assertEquals("A.bar;", A.C().bar()) + + assertEquals("A.D.foo;", A.D().foo()) + assertEquals("A.D.bar;", A.D().bar()) + + return "OK" +}