From 5ce158f29711e9fa3dbfdea0cd2dc366956db2c5 Mon Sep 17 00:00:00 2001 From: Alexey Andreev Date: Mon, 30 May 2016 14:26:24 +0300 Subject: [PATCH] KT-2752: add basic tests for JsName --- .../name/jsNameAndOverridden.kt | 9 ++++ .../name/jsNameAndOverridden.txt | 21 +++++++++ .../name/jsNameAndPrivateDontClash.kt | 5 +++ .../name/jsNameAndPrivateDontClash.txt | 6 +++ .../testsWithJsStdLib/name/jsNameClash.kt | 5 +++ .../testsWithJsStdLib/name/jsNameClash.txt | 6 +++ .../name/jsNameClashWithDefault.kt | 5 +++ .../name/jsNameClashWithDefault.txt | 6 +++ .../name/privateJsNameClash.kt | 5 +++ .../name/privateJsNameClash.txt | 6 +++ .../topLevelMethodAndJsNameConstructor.kt | 7 +++ .../topLevelMethodAndJsNameConstructor.txt | 14 ++++++ .../DiagnosticsTestWithJsStdLibGenerated.java | 36 +++++++++++++++ .../kotlin/js/naming/FQNGenerator.kt | 2 +- .../js/resolve/diagnostics/JsNameChecker.kt | 3 +- .../js/test/semantics/BoxJsTestGenerated.java | 45 +++++++++++++++++++ .../abstractClassesForGeneratedTests.kt | 2 +- .../js/translate/context/StaticContext.java | 10 ----- .../testData/box/inlineMultiFile/trait.kt | 2 +- .../anotherModuleValInClosure.kt | 2 +- .../inlineMultiModule/callableReference.kt | 2 +- .../box/inlineMultiModule/calledByFqName.kt | 2 +- .../box/inlineMultiModule/extensionLambda.kt | 2 +- .../testData/box/inlineMultiModule/lambda.kt | 2 +- .../inlineMultiModule/lambdaWithClosure.kt | 2 +- .../box/inlineMultiModule/localNameClash.kt | 2 +- .../testData/box/inlineMultiModule/method.kt | 2 +- .../testData/box/inlineMultiModule/simple.kt | 2 +- .../testData/box/jsName/avoidNameClash.kt | 18 ++++++++ .../testData/box/jsName/overriddenMethod.kt | 20 +++++++++ .../box/jsName/overridenFromInterface.kt | 20 +++++++++ .../testData/box/jsName/privateMethod.kt | 15 +++++++ .../box/jsName/secondaryConstructor.kt | 15 +++++++ .../testData/box/jsName/simpleJsName.kt | 22 +++++++++ .../inlineMultiFile/cases/trait/trait.1.kt | 30 ------------- .../anotherModuleValInClosure/main/main.kt | 12 ----- .../cases/callableReference/main/main.kt | 13 ------ .../cases/calledByFqName/main/main.kt | 10 ----- .../cases/extensionLambda/main/main.kt | 13 ------ .../cases/lambda/main/main.kt | 11 ----- .../cases/lambdaWithClosure/main/main.kt | 11 ----- .../cases/localNameClash/main/main.kt | 11 ----- .../cases/method/main/main.kt | 11 ----- .../cases/simple/main/main.kt | 12 ----- 44 files changed, 300 insertions(+), 157 deletions(-) create mode 100644 compiler/testData/diagnostics/testsWithJsStdLib/name/jsNameAndOverridden.kt create mode 100644 compiler/testData/diagnostics/testsWithJsStdLib/name/jsNameAndOverridden.txt create mode 100644 compiler/testData/diagnostics/testsWithJsStdLib/name/jsNameAndPrivateDontClash.kt create mode 100644 compiler/testData/diagnostics/testsWithJsStdLib/name/jsNameAndPrivateDontClash.txt create mode 100644 compiler/testData/diagnostics/testsWithJsStdLib/name/jsNameClash.kt create mode 100644 compiler/testData/diagnostics/testsWithJsStdLib/name/jsNameClash.txt create mode 100644 compiler/testData/diagnostics/testsWithJsStdLib/name/jsNameClashWithDefault.kt create mode 100644 compiler/testData/diagnostics/testsWithJsStdLib/name/jsNameClashWithDefault.txt create mode 100644 compiler/testData/diagnostics/testsWithJsStdLib/name/privateJsNameClash.kt create mode 100644 compiler/testData/diagnostics/testsWithJsStdLib/name/privateJsNameClash.txt create mode 100644 compiler/testData/diagnostics/testsWithJsStdLib/name/topLevelMethodAndJsNameConstructor.kt create mode 100644 compiler/testData/diagnostics/testsWithJsStdLib/name/topLevelMethodAndJsNameConstructor.txt create mode 100644 js/js.translator/testData/box/jsName/avoidNameClash.kt create mode 100644 js/js.translator/testData/box/jsName/overriddenMethod.kt create mode 100644 js/js.translator/testData/box/jsName/overridenFromInterface.kt create mode 100644 js/js.translator/testData/box/jsName/privateMethod.kt create mode 100644 js/js.translator/testData/box/jsName/secondaryConstructor.kt create mode 100644 js/js.translator/testData/box/jsName/simpleJsName.kt delete mode 100644 js/js.translator/testData/inlineMultiFile/cases/trait/trait.1.kt delete mode 100644 js/js.translator/testData/inlineMultiModule/cases/anotherModuleValInClosure/main/main.kt delete mode 100644 js/js.translator/testData/inlineMultiModule/cases/callableReference/main/main.kt delete mode 100644 js/js.translator/testData/inlineMultiModule/cases/calledByFqName/main/main.kt delete mode 100644 js/js.translator/testData/inlineMultiModule/cases/extensionLambda/main/main.kt delete mode 100644 js/js.translator/testData/inlineMultiModule/cases/lambda/main/main.kt delete mode 100644 js/js.translator/testData/inlineMultiModule/cases/lambdaWithClosure/main/main.kt delete mode 100644 js/js.translator/testData/inlineMultiModule/cases/localNameClash/main/main.kt delete mode 100644 js/js.translator/testData/inlineMultiModule/cases/method/main/main.kt delete mode 100644 js/js.translator/testData/inlineMultiModule/cases/simple/main/main.kt diff --git a/compiler/testData/diagnostics/testsWithJsStdLib/name/jsNameAndOverridden.kt b/compiler/testData/diagnostics/testsWithJsStdLib/name/jsNameAndOverridden.kt new file mode 100644 index 00000000000..71bc8b9a3e9 --- /dev/null +++ b/compiler/testData/diagnostics/testsWithJsStdLib/name/jsNameAndOverridden.kt @@ -0,0 +1,9 @@ +package foo + +open class Super { + fun foo() = 23 +} + +class Sub : Super() { + @JsName("foo") fun bar() = 42 +} \ No newline at end of file diff --git a/compiler/testData/diagnostics/testsWithJsStdLib/name/jsNameAndOverridden.txt b/compiler/testData/diagnostics/testsWithJsStdLib/name/jsNameAndOverridden.txt new file mode 100644 index 00000000000..b9e83e118cc --- /dev/null +++ b/compiler/testData/diagnostics/testsWithJsStdLib/name/jsNameAndOverridden.txt @@ -0,0 +1,21 @@ +package + +package foo { + + public final class Sub : foo.Super { + public constructor Sub() + @kotlin.js.JsName(name = "foo") public final fun bar(): kotlin.Int + public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + public final override /*1*/ /*fake_override*/ 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 open class Super { + public constructor Super() + 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 + } +} diff --git a/compiler/testData/diagnostics/testsWithJsStdLib/name/jsNameAndPrivateDontClash.kt b/compiler/testData/diagnostics/testsWithJsStdLib/name/jsNameAndPrivateDontClash.kt new file mode 100644 index 00000000000..211ec56a648 --- /dev/null +++ b/compiler/testData/diagnostics/testsWithJsStdLib/name/jsNameAndPrivateDontClash.kt @@ -0,0 +1,5 @@ +package foo + +@JsName("bar") fun foo(x: Int) = x + +private fun bar() = 42 \ No newline at end of file diff --git a/compiler/testData/diagnostics/testsWithJsStdLib/name/jsNameAndPrivateDontClash.txt b/compiler/testData/diagnostics/testsWithJsStdLib/name/jsNameAndPrivateDontClash.txt new file mode 100644 index 00000000000..7198e8d83fa --- /dev/null +++ b/compiler/testData/diagnostics/testsWithJsStdLib/name/jsNameAndPrivateDontClash.txt @@ -0,0 +1,6 @@ +package + +package foo { + private fun bar(): kotlin.Int + @kotlin.js.JsName(name = "bar") public fun foo(/*0*/ x: kotlin.Int): kotlin.Int +} diff --git a/compiler/testData/diagnostics/testsWithJsStdLib/name/jsNameClash.kt b/compiler/testData/diagnostics/testsWithJsStdLib/name/jsNameClash.kt new file mode 100644 index 00000000000..2a860137cd7 --- /dev/null +++ b/compiler/testData/diagnostics/testsWithJsStdLib/name/jsNameClash.kt @@ -0,0 +1,5 @@ +package foo + +@JsName("x") fun foo(x: Int) = x + +@JsName("x") fun bar() = 42 \ No newline at end of file diff --git a/compiler/testData/diagnostics/testsWithJsStdLib/name/jsNameClash.txt b/compiler/testData/diagnostics/testsWithJsStdLib/name/jsNameClash.txt new file mode 100644 index 00000000000..cd1e64a9688 --- /dev/null +++ b/compiler/testData/diagnostics/testsWithJsStdLib/name/jsNameClash.txt @@ -0,0 +1,6 @@ +package + +package foo { + @kotlin.js.JsName(name = "x") public fun bar(): kotlin.Int + @kotlin.js.JsName(name = "x") public fun foo(/*0*/ x: kotlin.Int): kotlin.Int +} diff --git a/compiler/testData/diagnostics/testsWithJsStdLib/name/jsNameClashWithDefault.kt b/compiler/testData/diagnostics/testsWithJsStdLib/name/jsNameClashWithDefault.kt new file mode 100644 index 00000000000..cc084d752a2 --- /dev/null +++ b/compiler/testData/diagnostics/testsWithJsStdLib/name/jsNameClashWithDefault.kt @@ -0,0 +1,5 @@ +package foo + +@JsName("bar") fun foo(x: Int) = x + +fun bar() = 42 \ No newline at end of file diff --git a/compiler/testData/diagnostics/testsWithJsStdLib/name/jsNameClashWithDefault.txt b/compiler/testData/diagnostics/testsWithJsStdLib/name/jsNameClashWithDefault.txt new file mode 100644 index 00000000000..0bb862a6b22 --- /dev/null +++ b/compiler/testData/diagnostics/testsWithJsStdLib/name/jsNameClashWithDefault.txt @@ -0,0 +1,6 @@ +package + +package foo { + public fun bar(): kotlin.Int + @kotlin.js.JsName(name = "bar") public fun foo(/*0*/ x: kotlin.Int): kotlin.Int +} diff --git a/compiler/testData/diagnostics/testsWithJsStdLib/name/privateJsNameClash.kt b/compiler/testData/diagnostics/testsWithJsStdLib/name/privateJsNameClash.kt new file mode 100644 index 00000000000..ec4f86cbde1 --- /dev/null +++ b/compiler/testData/diagnostics/testsWithJsStdLib/name/privateJsNameClash.kt @@ -0,0 +1,5 @@ +package foo + +@JsName("bar") private fun foo(x: Int) = x + +fun bar() = 42 \ No newline at end of file diff --git a/compiler/testData/diagnostics/testsWithJsStdLib/name/privateJsNameClash.txt b/compiler/testData/diagnostics/testsWithJsStdLib/name/privateJsNameClash.txt new file mode 100644 index 00000000000..92a5a7bfd2a --- /dev/null +++ b/compiler/testData/diagnostics/testsWithJsStdLib/name/privateJsNameClash.txt @@ -0,0 +1,6 @@ +package + +package foo { + public fun bar(): kotlin.Int + @kotlin.js.JsName(name = "bar") private fun foo(/*0*/ x: kotlin.Int): kotlin.Int +} diff --git a/compiler/testData/diagnostics/testsWithJsStdLib/name/topLevelMethodAndJsNameConstructor.kt b/compiler/testData/diagnostics/testsWithJsStdLib/name/topLevelMethodAndJsNameConstructor.kt new file mode 100644 index 00000000000..1e12d8bd1af --- /dev/null +++ b/compiler/testData/diagnostics/testsWithJsStdLib/name/topLevelMethodAndJsNameConstructor.kt @@ -0,0 +1,7 @@ +package foo + +class A(val x: String) { + @JsName("aa") constructor(x: Int) : this("int $x") +} + +fun aa() {} \ No newline at end of file diff --git a/compiler/testData/diagnostics/testsWithJsStdLib/name/topLevelMethodAndJsNameConstructor.txt b/compiler/testData/diagnostics/testsWithJsStdLib/name/topLevelMethodAndJsNameConstructor.txt new file mode 100644 index 00000000000..8534f505189 --- /dev/null +++ b/compiler/testData/diagnostics/testsWithJsStdLib/name/topLevelMethodAndJsNameConstructor.txt @@ -0,0 +1,14 @@ +package + +package foo { + public fun aa(): kotlin.Unit + + public final class A { + @kotlin.js.JsName(name = "aa") public constructor A(/*0*/ x: kotlin.Int) + public constructor A(/*0*/ x: kotlin.String) + public final val x: kotlin.String + 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 + } +} diff --git a/compiler/tests/org/jetbrains/kotlin/checkers/DiagnosticsTestWithJsStdLibGenerated.java b/compiler/tests/org/jetbrains/kotlin/checkers/DiagnosticsTestWithJsStdLibGenerated.java index 082e3f1d0ea..41000c75beb 100644 --- a/compiler/tests/org/jetbrains/kotlin/checkers/DiagnosticsTestWithJsStdLibGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/checkers/DiagnosticsTestWithJsStdLibGenerated.java @@ -319,6 +319,30 @@ public class DiagnosticsTestWithJsStdLibGenerated extends AbstractDiagnosticsTes doTest(fileName); } + @TestMetadata("jsNameAndOverridden.kt") + public void testJsNameAndOverridden() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/diagnostics/testsWithJsStdLib/name/jsNameAndOverridden.kt"); + doTest(fileName); + } + + @TestMetadata("jsNameAndPrivateDontClash.kt") + public void testJsNameAndPrivateDontClash() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/diagnostics/testsWithJsStdLib/name/jsNameAndPrivateDontClash.kt"); + doTest(fileName); + } + + @TestMetadata("jsNameClash.kt") + public void testJsNameClash() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/diagnostics/testsWithJsStdLib/name/jsNameClash.kt"); + doTest(fileName); + } + + @TestMetadata("jsNameClashWithDefault.kt") + public void testJsNameClashWithDefault() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/diagnostics/testsWithJsStdLib/name/jsNameClashWithDefault.kt"); + doTest(fileName); + } + @TestMetadata("methodAndMethod.kt") public void testMethodAndMethod() throws Exception { String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/diagnostics/testsWithJsStdLib/name/methodAndMethod.kt"); @@ -355,6 +379,12 @@ public class DiagnosticsTestWithJsStdLibGenerated extends AbstractDiagnosticsTes doTest(fileName); } + @TestMetadata("privateJsNameClash.kt") + public void testPrivateJsNameClash() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/diagnostics/testsWithJsStdLib/name/privateJsNameClash.kt"); + doTest(fileName); + } + @TestMetadata("propertyAndMethodInSubclass.kt") public void testPropertyAndMethodInSubclass() throws Exception { String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/diagnostics/testsWithJsStdLib/name/propertyAndMethodInSubclass.kt"); @@ -367,6 +397,12 @@ public class DiagnosticsTestWithJsStdLibGenerated extends AbstractDiagnosticsTes doTest(fileName); } + @TestMetadata("topLevelMethodAndJsNameConstructor.kt") + public void testTopLevelMethodAndJsNameConstructor() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/diagnostics/testsWithJsStdLib/name/topLevelMethodAndJsNameConstructor.kt"); + doTest(fileName); + } + @TestMetadata("topLevelMethodAndProperty.kt") public void testTopLevelMethodAndProperty() throws Exception { String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/diagnostics/testsWithJsStdLib/name/topLevelMethodAndProperty.kt"); diff --git a/js/js.frontend/src/org/jetbrains/kotlin/js/naming/FQNGenerator.kt b/js/js.frontend/src/org/jetbrains/kotlin/js/naming/FQNGenerator.kt index c52814ff75b..ec758073c75 100644 --- a/js/js.frontend/src/org/jetbrains/kotlin/js/naming/FQNGenerator.kt +++ b/js/js.frontend/src/org/jetbrains/kotlin/js/naming/FQNGenerator.kt @@ -135,7 +135,7 @@ class FQNGenerator { } } - val explicitName = getJsName(descriptor) + val explicitName = getJsName(resolvedDescriptor) return when { explicitName != null -> Pair(explicitName, true) needsStableMangling(resolvedDescriptor) -> diff --git a/js/js.frontend/src/org/jetbrains/kotlin/js/resolve/diagnostics/JsNameChecker.kt b/js/js.frontend/src/org/jetbrains/kotlin/js/resolve/diagnostics/JsNameChecker.kt index 853bdef1baf..ba125d2e2f9 100644 --- a/js/js.frontend/src/org/jetbrains/kotlin/js/resolve/diagnostics/JsNameChecker.kt +++ b/js/js.frontend/src/org/jetbrains/kotlin/js/resolve/diagnostics/JsNameChecker.kt @@ -26,11 +26,12 @@ import org.jetbrains.kotlin.psi.KtProperty import org.jetbrains.kotlin.resolve.BindingContext import org.jetbrains.kotlin.resolve.DeclarationChecker import org.jetbrains.kotlin.resolve.DescriptorUtils +import org.jetbrains.kotlin.resolve.SimpleDeclarationChecker import org.jetbrains.kotlin.resolve.descriptorUtil.isExtension import org.jetbrains.kotlin.resolve.scopes.MemberScope import org.jetbrains.kotlin.resolve.source.getPsi -class JsNameChecker : DeclarationChecker { +class JsNameChecker : SimpleDeclarationChecker { private val fqnGenerator = FQNGenerator() private val scopes = mutableMapOf>() private val clashedDescriptors = mutableSetOf() diff --git a/js/js.tests/test/org/jetbrains/kotlin/js/test/semantics/BoxJsTestGenerated.java b/js/js.tests/test/org/jetbrains/kotlin/js/test/semantics/BoxJsTestGenerated.java index 939d95bb2a3..9ad80220f36 100644 --- a/js/js.tests/test/org/jetbrains/kotlin/js/test/semantics/BoxJsTestGenerated.java +++ b/js/js.tests/test/org/jetbrains/kotlin/js/test/semantics/BoxJsTestGenerated.java @@ -4775,6 +4775,51 @@ public class BoxJsTestGenerated extends AbstractBoxJsTest { } } + @TestMetadata("js/js.translator/testData/box/jsName") + @TestDataPath("$PROJECT_ROOT") + @RunWith(JUnit3RunnerWithInners.class) + public static class JsName extends AbstractBoxJsTest { + public void testAllFilesPresentInJsName() throws Exception { + KotlinTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("js/js.translator/testData/box/jsName"), Pattern.compile("^([^_](.+))\\.kt$"), true); + } + + @TestMetadata("avoidNameClash.kt") + public void testAvoidNameClash() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("js/js.translator/testData/box/jsName/avoidNameClash.kt"); + doTest(fileName); + } + + @TestMetadata("overriddenMethod.kt") + public void testOverriddenMethod() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("js/js.translator/testData/box/jsName/overriddenMethod.kt"); + doTest(fileName); + } + + @TestMetadata("overridenFromInterface.kt") + public void testOverridenFromInterface() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("js/js.translator/testData/box/jsName/overridenFromInterface.kt"); + doTest(fileName); + } + + @TestMetadata("privateMethod.kt") + public void testPrivateMethod() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("js/js.translator/testData/box/jsName/privateMethod.kt"); + doTest(fileName); + } + + @TestMetadata("secondaryConstructor.kt") + public void testSecondaryConstructor() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("js/js.translator/testData/box/jsName/secondaryConstructor.kt"); + doTest(fileName); + } + + @TestMetadata("simpleJsName.kt") + public void testSimpleJsName() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("js/js.translator/testData/box/jsName/simpleJsName.kt"); + doTest(fileName); + } + } + @TestMetadata("js/js.translator/testData/box/labels") @TestDataPath("$PROJECT_ROOT") @RunWith(JUnit3RunnerWithInners.class) diff --git a/js/js.tests/test/org/jetbrains/kotlin/js/test/semantics/abstractClassesForGeneratedTests.kt b/js/js.tests/test/org/jetbrains/kotlin/js/test/semantics/abstractClassesForGeneratedTests.kt index 38e5addbe49..fbb49524248 100644 --- a/js/js.tests/test/org/jetbrains/kotlin/js/test/semantics/abstractClassesForGeneratedTests.kt +++ b/js/js.tests/test/org/jetbrains/kotlin/js/test/semantics/abstractClassesForGeneratedTests.kt @@ -59,4 +59,4 @@ abstract class AbstractLocalClassesTest : BorrowedTest("localClasses/") abstract class AbstractNonLocalReturnsTest : BorrowedInlineTest("nonLocalReturns/") -abstract class AbstractTypeAliasesTests : BorrowedTest("typealias/") \ No newline at end of file +abstract class AbstractTypeAliasesTests : BorrowedTest("typealias/") diff --git a/js/js.translator/src/org/jetbrains/kotlin/js/translate/context/StaticContext.java b/js/js.translator/src/org/jetbrains/kotlin/js/translate/context/StaticContext.java index 25a91588441..9576990e509 100644 --- a/js/js.translator/src/org/jetbrains/kotlin/js/translate/context/StaticContext.java +++ b/js/js.translator/src/org/jetbrains/kotlin/js/translate/context/StaticContext.java @@ -27,7 +27,6 @@ import com.intellij.util.containers.ContainerUtil; import com.intellij.util.containers.hash.LinkedHashMap; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -import org.jetbrains.kotlin.builtins.ReflectionTypes; import org.jetbrains.kotlin.descriptors.*; import org.jetbrains.kotlin.js.config.JsConfig; import org.jetbrains.kotlin.js.naming.FQNGenerator; @@ -82,9 +81,6 @@ public final class StaticContext { @NotNull private final StandardClasses standardClasses; - @NotNull - private final ReflectionTypes reflectionTypes; - @NotNull private final JsScope rootScope; @@ -142,7 +138,6 @@ public final class StaticContext { this.rootScope = rootScope; this.standardClasses = standardClasses; this.config = config; - this.reflectionTypes = new ReflectionTypes(moduleDescriptor); currentModule = moduleDescriptor; } @@ -171,11 +166,6 @@ public final class StaticContext { return namer; } - @NotNull - public ReflectionTypes getReflectionTypes() { - return reflectionTypes; - } - @NotNull private JsScope getRootScope() { return rootScope; diff --git a/js/js.translator/testData/box/inlineMultiFile/trait.kt b/js/js.translator/testData/box/inlineMultiFile/trait.kt index 836ccf4d648..3828e71e56b 100644 --- a/js/js.translator/testData/box/inlineMultiFile/trait.kt +++ b/js/js.translator/testData/box/inlineMultiFile/trait.kt @@ -8,7 +8,7 @@ package foo import test.* -// CHECK_CONTAINS_NO_CALLS: testClassObject +// CHECK_CONTAINS_NO_CALLS: testClassObject_0 internal fun testFinalInline(): String { return Z().finalInline({"final"}) diff --git a/js/js.translator/testData/box/inlineMultiModule/anotherModuleValInClosure.kt b/js/js.translator/testData/box/inlineMultiModule/anotherModuleValInClosure.kt index 4fc0ae3da3d..4cfa5e0fb09 100644 --- a/js/js.translator/testData/box/inlineMultiModule/anotherModuleValInClosure.kt +++ b/js/js.translator/testData/box/inlineMultiModule/anotherModuleValInClosure.kt @@ -17,7 +17,7 @@ public fun log(s: String): String { import utils.* -// CHECK_CONTAINS_NO_CALLS: test +// CHECK_CONTAINS_NO_CALLS: test_0 internal fun test(s: String): String = log(s + ";") diff --git a/js/js.translator/testData/box/inlineMultiModule/callableReference.kt b/js/js.translator/testData/box/inlineMultiModule/callableReference.kt index 6711b832bd4..daa25a75a47 100644 --- a/js/js.translator/testData/box/inlineMultiModule/callableReference.kt +++ b/js/js.translator/testData/box/inlineMultiModule/callableReference.kt @@ -12,7 +12,7 @@ public fun apply(x: T, fn: (T)->R): R = import utils.* -// CHECK_CONTAINS_NO_CALLS: test +// CHECK_CONTAINS_NO_CALLS: test_0 internal fun multiplyBy2(x: Int): Int = x * 2 diff --git a/js/js.translator/testData/box/inlineMultiModule/calledByFqName.kt b/js/js.translator/testData/box/inlineMultiModule/calledByFqName.kt index fff86e5d1d1..8e2d3613866 100644 --- a/js/js.translator/testData/box/inlineMultiModule/calledByFqName.kt +++ b/js/js.translator/testData/box/inlineMultiModule/calledByFqName.kt @@ -9,7 +9,7 @@ public fun sum(x: Int, y: Int): Int = // MODULE: main(lib) // FILE: main.kt -// CHECK_CONTAINS_NO_CALLS: test +// CHECK_CONTAINS_NO_CALLS: test_0 internal fun test(x: Int, y: Int): Int = utils.sum(x, y) diff --git a/js/js.translator/testData/box/inlineMultiModule/extensionLambda.kt b/js/js.translator/testData/box/inlineMultiModule/extensionLambda.kt index 9784f87ab94..de488cd5344 100644 --- a/js/js.translator/testData/box/inlineMultiModule/extensionLambda.kt +++ b/js/js.translator/testData/box/inlineMultiModule/extensionLambda.kt @@ -13,7 +13,7 @@ public fun apply(x: T, fn: T.()->R): R = import utils.* -// CHECK_CONTAINS_NO_CALLS: test +// CHECK_CONTAINS_NO_CALLS: test_0 internal class A(val n: Int) diff --git a/js/js.translator/testData/box/inlineMultiModule/lambda.kt b/js/js.translator/testData/box/inlineMultiModule/lambda.kt index 3891bd75af8..20095ee1f08 100644 --- a/js/js.translator/testData/box/inlineMultiModule/lambda.kt +++ b/js/js.translator/testData/box/inlineMultiModule/lambda.kt @@ -13,7 +13,7 @@ public fun apply(x: T, fn: (T)->R): R = import utils.* -// CHECK_CONTAINS_NO_CALLS: test +// CHECK_CONTAINS_NO_CALLS: test_0 internal fun test(x: Int): Int = apply(x) { it * 2 } diff --git a/js/js.translator/testData/box/inlineMultiModule/lambdaWithClosure.kt b/js/js.translator/testData/box/inlineMultiModule/lambdaWithClosure.kt index c95dafc1119..ee93ba322ed 100644 --- a/js/js.translator/testData/box/inlineMultiModule/lambdaWithClosure.kt +++ b/js/js.translator/testData/box/inlineMultiModule/lambdaWithClosure.kt @@ -13,7 +13,7 @@ public fun apply(x: T, fn: (T)->R): R = import utils.* -// CHECK_CONTAINS_NO_CALLS: test +// CHECK_CONTAINS_NO_CALLS: test_0 internal fun test(x: Int, y: Int): Int = apply(x) { it + y } diff --git a/js/js.translator/testData/box/inlineMultiModule/localNameClash.kt b/js/js.translator/testData/box/inlineMultiModule/localNameClash.kt index 024c8985275..7792b410e57 100644 --- a/js/js.translator/testData/box/inlineMultiModule/localNameClash.kt +++ b/js/js.translator/testData/box/inlineMultiModule/localNameClash.kt @@ -15,7 +15,7 @@ public fun apply(x: T, fn: (T)->R): R { import utils.* -// CHECK_CONTAINS_NO_CALLS: test +// CHECK_CONTAINS_NO_CALLS: test_0 internal fun test(x: Int, y: Int): Int = apply(x) { it + 1 } * y diff --git a/js/js.translator/testData/box/inlineMultiModule/method.kt b/js/js.translator/testData/box/inlineMultiModule/method.kt index b154ad2f222..213cf992788 100644 --- a/js/js.translator/testData/box/inlineMultiModule/method.kt +++ b/js/js.translator/testData/box/inlineMultiModule/method.kt @@ -14,7 +14,7 @@ public class A(public val x: Int) { import utils.* -// CHECK_CONTAINS_NO_CALLS: test +// CHECK_CONTAINS_NO_CALLS: test_0 internal fun test(a: A, y: Int): Int = a.plus(y) diff --git a/js/js.translator/testData/box/inlineMultiModule/simple.kt b/js/js.translator/testData/box/inlineMultiModule/simple.kt index 69154c95589..fb1140f5b65 100644 --- a/js/js.translator/testData/box/inlineMultiModule/simple.kt +++ b/js/js.translator/testData/box/inlineMultiModule/simple.kt @@ -13,7 +13,7 @@ public fun sum(x: Int, y: Int): Int = import utils.* -// CHECK_CONTAINS_NO_CALLS: test +// CHECK_CONTAINS_NO_CALLS: test_0 internal fun test(x: Int, y: Int): Int = sum(x, y) diff --git a/js/js.translator/testData/box/jsName/avoidNameClash.kt b/js/js.translator/testData/box/jsName/avoidNameClash.kt new file mode 100644 index 00000000000..fdec988e604 --- /dev/null +++ b/js/js.translator/testData/box/jsName/avoidNameClash.kt @@ -0,0 +1,18 @@ +package foo + +object A { + @JsName("js_method") fun f() = "method" + + @JsName("js_property") val f: String get() = "property" +} + +fun test() = js(""" +var a = Kotlin.modules.JS_TESTS.foo.A; +return a.js_method() + ";" + a.js_property; +""") + +fun box(): String { + val result = test() + assertEquals("method;property", result); + return "OK" +} \ No newline at end of file diff --git a/js/js.translator/testData/box/jsName/overriddenMethod.kt b/js/js.translator/testData/box/jsName/overriddenMethod.kt new file mode 100644 index 00000000000..55d5e634bc4 --- /dev/null +++ b/js/js.translator/testData/box/jsName/overriddenMethod.kt @@ -0,0 +1,20 @@ +package foo + +open class A { + @JsName("js_f") open fun f(x: Int) = "A.f($x)" +} + +class B : A() { + override fun f(x: Int) = "B.f($x)" +} + +fun test() = js(""" +var module = Kotlin.modules.JS_TESTS.foo; +return new (module.A)().js_f(23) + ";" + new (module.B)().js_f(42); +""") + +fun box(): String { + val result = test() + assertEquals("A.f(23);B.f(42)", result); + return "OK" +} \ No newline at end of file diff --git a/js/js.translator/testData/box/jsName/overridenFromInterface.kt b/js/js.translator/testData/box/jsName/overridenFromInterface.kt new file mode 100644 index 00000000000..482977f9def --- /dev/null +++ b/js/js.translator/testData/box/jsName/overridenFromInterface.kt @@ -0,0 +1,20 @@ +package foo + +interface A { + @JsName("js_f") fun f(x: Int): String +} + +class B : A { + override fun f(x: Int) = "B.f($x)" +} + +fun test() = js(""" +var module = Kotlin.modules.JS_TESTS.foo; +return new (module.B)().js_f(23); +""") + +fun box(): String { + val result = test() + assertEquals("B.f(23)", result); + return "OK" +} \ No newline at end of file diff --git a/js/js.translator/testData/box/jsName/privateMethod.kt b/js/js.translator/testData/box/jsName/privateMethod.kt new file mode 100644 index 00000000000..b64197c5f99 --- /dev/null +++ b/js/js.translator/testData/box/jsName/privateMethod.kt @@ -0,0 +1,15 @@ +package foo + +object A { + @JsName("js_f") private fun f(x: Int) = "f($x)" +} + +fun test() = js(""" +return Kotlin.modules.JS_TESTS.foo.A.js_f(23); +""") + +fun box(): String { + val result = test() + assertEquals("f(23)", result); + return "OK" +} \ No newline at end of file diff --git a/js/js.translator/testData/box/jsName/secondaryConstructor.kt b/js/js.translator/testData/box/jsName/secondaryConstructor.kt new file mode 100644 index 00000000000..38c1230bb4f --- /dev/null +++ b/js/js.translator/testData/box/jsName/secondaryConstructor.kt @@ -0,0 +1,15 @@ +package foo + +class A(val x: String) { + @JsName("A_int") constructor(x: Int) : this("int $x") +} + +fun test() = js(""" +return Kotlin.modules.JS_TESTS.foo.A_int(23).x; +""") + +fun box(): String { + val result = test() + assertEquals("int 23", result); + return "OK" +} \ No newline at end of file diff --git a/js/js.translator/testData/box/jsName/simpleJsName.kt b/js/js.translator/testData/box/jsName/simpleJsName.kt new file mode 100644 index 00000000000..57ad4eac342 --- /dev/null +++ b/js/js.translator/testData/box/jsName/simpleJsName.kt @@ -0,0 +1,22 @@ +package foo + +object A { + @JsName("js_f") fun f(x: Int) = "f($x)" + + @JsName("js_g") fun g(x: Int) = "g($x)" + + @JsName("js_p") val p = "p" + + @JsName("js_q") val q: String get() = "q" +} + +fun test() = js(""" +var a = Kotlin.modules.JS_TESTS.foo.A; +return a.js_f(23) + ";" + a.js_g(42) + ";" + a.js_p + ";" + a.js_q; +""") + +fun box(): String { + val result = test() + assertEquals("f(23);g(42);p;q", result); + return "OK" +} \ No newline at end of file diff --git a/js/js.translator/testData/inlineMultiFile/cases/trait/trait.1.kt b/js/js.translator/testData/inlineMultiFile/cases/trait/trait.1.kt deleted file mode 100644 index 1049d4de9cb..00000000000 --- a/js/js.translator/testData/inlineMultiFile/cases/trait/trait.1.kt +++ /dev/null @@ -1,30 +0,0 @@ -/* - * Copy of JVM-backend test - * Found at: compiler/testData/codegen/boxInline/trait/trait.1.kt - */ - -package foo - -import test.* - -// CHECK_CONTAINS_NO_CALLS: testClassObject_0 - -internal fun testFinalInline(): String { - return Z().finalInline({"final"}) -} - -internal fun testFinalInline2(instance: InlineTrait): String { - return instance.finalInline({"final2"}) -} - -internal fun testClassObject(): String { - return InlineTrait.finalInline({"classobject"}) -} - -fun box(): String { - if (testFinalInline() != "final") return "test1: ${testFinalInline()}" - if (testFinalInline2(Z()) != "final2") return "test2: ${testFinalInline2(Z())}" - if (testClassObject() != "classobject") return "test3: ${testClassObject()}" - - return "OK" -} \ No newline at end of file diff --git a/js/js.translator/testData/inlineMultiModule/cases/anotherModuleValInClosure/main/main.kt b/js/js.translator/testData/inlineMultiModule/cases/anotherModuleValInClosure/main/main.kt deleted file mode 100644 index 7818b696394..00000000000 --- a/js/js.translator/testData/inlineMultiModule/cases/anotherModuleValInClosure/main/main.kt +++ /dev/null @@ -1,12 +0,0 @@ -import utils.* - -// CHECK_CONTAINS_NO_CALLS: test_0 - -internal fun test(s: String): String = log(s + ";") - -fun box(): String { - assertEquals("a;", test("a")) - assertEquals("a;b;", test("b")) - - return "OK" -} \ No newline at end of file diff --git a/js/js.translator/testData/inlineMultiModule/cases/callableReference/main/main.kt b/js/js.translator/testData/inlineMultiModule/cases/callableReference/main/main.kt deleted file mode 100644 index e267976c9fc..00000000000 --- a/js/js.translator/testData/inlineMultiModule/cases/callableReference/main/main.kt +++ /dev/null @@ -1,13 +0,0 @@ -import utils.* - -// CHECK_CONTAINS_NO_CALLS: test_0 - -internal fun multiplyBy2(x: Int): Int = x * 2 - -internal fun test(x: Int): Int = apply(x, ::multiplyBy2) - -fun box(): String { - assertEquals(6, test(3)) - - return "OK" -} \ No newline at end of file diff --git a/js/js.translator/testData/inlineMultiModule/cases/calledByFqName/main/main.kt b/js/js.translator/testData/inlineMultiModule/cases/calledByFqName/main/main.kt deleted file mode 100644 index 964a2082624..00000000000 --- a/js/js.translator/testData/inlineMultiModule/cases/calledByFqName/main/main.kt +++ /dev/null @@ -1,10 +0,0 @@ -// CHECK_CONTAINS_NO_CALLS: test_0 - -internal fun test(x: Int, y: Int): Int = utils.sum(x, y) - -fun box(): String { - assertEquals(3, test(1, 2)) - assertEquals(5, test(2, 3)) - - return "OK" -} \ No newline at end of file diff --git a/js/js.translator/testData/inlineMultiModule/cases/extensionLambda/main/main.kt b/js/js.translator/testData/inlineMultiModule/cases/extensionLambda/main/main.kt deleted file mode 100644 index e5fa60a1023..00000000000 --- a/js/js.translator/testData/inlineMultiModule/cases/extensionLambda/main/main.kt +++ /dev/null @@ -1,13 +0,0 @@ -import utils.* - -// CHECK_CONTAINS_NO_CALLS: test_0 - -internal class A(val n: Int) - -internal fun test(a: A, m: Int): Int = apply(a) { n * m } - -fun box(): String { - assertEquals(6, test(A(2), 3)) - - return "OK" -} \ No newline at end of file diff --git a/js/js.translator/testData/inlineMultiModule/cases/lambda/main/main.kt b/js/js.translator/testData/inlineMultiModule/cases/lambda/main/main.kt deleted file mode 100644 index 78d4be50c53..00000000000 --- a/js/js.translator/testData/inlineMultiModule/cases/lambda/main/main.kt +++ /dev/null @@ -1,11 +0,0 @@ -import utils.* - -// CHECK_CONTAINS_NO_CALLS: test_0 - -internal fun test(x: Int): Int = apply(x) { it * 2 } - -fun box(): String { - assertEquals(6, test(3)) - - return "OK" -} \ No newline at end of file diff --git a/js/js.translator/testData/inlineMultiModule/cases/lambdaWithClosure/main/main.kt b/js/js.translator/testData/inlineMultiModule/cases/lambdaWithClosure/main/main.kt deleted file mode 100644 index b9aa5d2f0f5..00000000000 --- a/js/js.translator/testData/inlineMultiModule/cases/lambdaWithClosure/main/main.kt +++ /dev/null @@ -1,11 +0,0 @@ -import utils.* - -// CHECK_CONTAINS_NO_CALLS: test_0 - -internal fun test(x: Int, y: Int): Int = apply(x) { it + y } - -fun box(): String { - assertEquals(3, test(1, 2)) - - return "OK" -} \ No newline at end of file diff --git a/js/js.translator/testData/inlineMultiModule/cases/localNameClash/main/main.kt b/js/js.translator/testData/inlineMultiModule/cases/localNameClash/main/main.kt deleted file mode 100644 index 8d0b503c093..00000000000 --- a/js/js.translator/testData/inlineMultiModule/cases/localNameClash/main/main.kt +++ /dev/null @@ -1,11 +0,0 @@ -import utils.* - -// CHECK_CONTAINS_NO_CALLS: test_0 - -internal fun test(x: Int, y: Int): Int = apply(x) { it + 1 } * y - -fun box(): String { - assertEquals(6, test(1, 3)) - - return "OK" -} \ No newline at end of file diff --git a/js/js.translator/testData/inlineMultiModule/cases/method/main/main.kt b/js/js.translator/testData/inlineMultiModule/cases/method/main/main.kt deleted file mode 100644 index acb7639c6f4..00000000000 --- a/js/js.translator/testData/inlineMultiModule/cases/method/main/main.kt +++ /dev/null @@ -1,11 +0,0 @@ -import utils.* - -// CHECK_CONTAINS_NO_CALLS: test_0 - -internal fun test(a: A, y: Int): Int = a.plus(y) - -fun box(): String { - assertEquals(5, test(A(2), 3)) - - return "OK" -} \ No newline at end of file diff --git a/js/js.translator/testData/inlineMultiModule/cases/simple/main/main.kt b/js/js.translator/testData/inlineMultiModule/cases/simple/main/main.kt deleted file mode 100644 index 885f12f511d..00000000000 --- a/js/js.translator/testData/inlineMultiModule/cases/simple/main/main.kt +++ /dev/null @@ -1,12 +0,0 @@ -import utils.* - -// CHECK_CONTAINS_NO_CALLS: test_0 - -internal fun test(x: Int, y: Int): Int = sum(x, y) - -fun box(): String { - assertEquals(3, test(1, 2)) - assertEquals(5, test(2, 3)) - - return "OK" -} \ No newline at end of file