diff --git a/js/js.inliner/src/org/jetbrains/kotlin/js/inline/FunctionReader.kt b/js/js.inliner/src/org/jetbrains/kotlin/js/inline/FunctionReader.kt index aa86e3a9faa..1ec97d72f01 100644 --- a/js/js.inliner/src/org/jetbrains/kotlin/js/inline/FunctionReader.kt +++ b/js/js.inliner/src/org/jetbrains/kotlin/js/inline/FunctionReader.kt @@ -46,7 +46,7 @@ import java.io.File private val JS_IDENTIFIER_START = "\\p{Lu}\\p{Ll}\\p{Lt}\\p{Lm}\\p{Lo}\\p{Nl}\\\$_" private val JS_IDENTIFIER_PART = "$JS_IDENTIFIER_START\\p{Pc}\\p{Mc}\\p{Mn}\\d" private val JS_IDENTIFIER="[$JS_IDENTIFIER_START][$JS_IDENTIFIER_PART]*" -private val DEFINE_MODULE_PATTERN = ("($JS_IDENTIFIER)\\.defineModule\\(\\s*(['\"])(\\w+)\\2\\s*,\\s*(\\w+)\\s*\\)").toRegex().toPattern() +private val DEFINE_MODULE_PATTERN = ("($JS_IDENTIFIER)\\.defineModule\\(\\s*(['\"])([^'\"]+)\\2\\s*,\\s*(\\w+)\\s*\\)").toRegex().toPattern() private val DEFINE_MODULE_FIND_PATTERN = ".defineModule(" class FunctionReader(private val context: TranslationContext) { @@ -87,7 +87,7 @@ class FunctionReader(private val context: TranslationContext) { val moduleName = preciseMatcher.group(3) val moduleVariable = preciseMatcher.group(4) val kotlinVariable = preciseMatcher.group(1) - assert(moduleName !in moduleJsDefinition) { "Module is defined in more, than one file" } + assert(moduleName !in moduleJsDefinition) { "Module \"$moduleName\" is defined in more, than one file" } moduleJsDefinition[moduleName] = fileContent moduleRootVariable[moduleName] = moduleVariable moduleKotlinVariable[moduleName] = kotlinVariable 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 68375a364ee..5eef7b80a43 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 @@ -5485,6 +5485,12 @@ public class BoxJsTestGenerated extends AbstractBoxJsTest { KotlinTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("js/js.translator/testData/box/multiModuleWrappers/common_js"), Pattern.compile("^([^_](.+))\\.kt$"), TargetBackend.JS, true); } + @TestMetadata("inlineFromModuleWithNonIdentifierName.kt") + public void testInlineFromModuleWithNonIdentifierName() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("js/js.translator/testData/box/multiModuleWrappers/common_js/inlineFromModuleWithNonIdentifierName.kt"); + doTest(fileName); + } + @TestMetadata("moduleWithNonIdentifierName.kt") public void testModuleWithNonIdentifierName() throws Exception { String fileName = KotlinTestUtils.navigationMetadata("js/js.translator/testData/box/multiModuleWrappers/common_js/moduleWithNonIdentifierName.kt"); @@ -5506,6 +5512,12 @@ public class BoxJsTestGenerated extends AbstractBoxJsTest { KotlinTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("js/js.translator/testData/box/multiModuleWrappers/plain"), Pattern.compile("^([^_](.+))\\.kt$"), TargetBackend.JS, true); } + @TestMetadata("inlineFromModuleWithNonIdentifierName.kt") + public void testInlineFromModuleWithNonIdentifierName() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("js/js.translator/testData/box/multiModuleWrappers/plain/inlineFromModuleWithNonIdentifierName.kt"); + doTest(fileName); + } + @TestMetadata("moduleWithNonIdentifierName.kt") public void testModuleWithNonIdentifierName() throws Exception { String fileName = KotlinTestUtils.navigationMetadata("js/js.translator/testData/box/multiModuleWrappers/plain/moduleWithNonIdentifierName.kt"); diff --git a/js/js.translator/testData/box/multiModuleWrappers/common_js/inlineFromModuleWithNonIdentifierName.kt b/js/js.translator/testData/box/multiModuleWrappers/common_js/inlineFromModuleWithNonIdentifierName.kt new file mode 100644 index 00000000000..c2c71691eea --- /dev/null +++ b/js/js.translator/testData/box/multiModuleWrappers/common_js/inlineFromModuleWithNonIdentifierName.kt @@ -0,0 +1,23 @@ +// MODULE: #my-libr@ry +// FILE: bar.kt +// MODULE_KIND: COMMON_JS +// PROPERTY_NOT_WRITTEN_TO: baz +// PROPERTY_NOT_WRITTEN_TO: boo_287e2$ +@file:Suppress("INVISIBLE_REFERENCE", "INVISIBLE_MEMBER") + +inline fun foo() = "foo" +@kotlin.internal.InlineOnly +inline fun baz() = "baz" +inline fun boo() = "boo" + +// MODULE: main(#my-libr@ry) +// FILE: box.kt +// MODULE_KIND: COMMON_JS +// CHECK_CONTAINS_NO_CALLS: box except=assertEquals + +fun box(): String { + assertEquals("foo", foo()) + assertEquals("baz", baz()) + assertEquals("boo", boo()) + return "OK" +} diff --git a/js/js.translator/testData/box/multiModuleWrappers/plain/inlineFromModuleWithNonIdentifierName.kt b/js/js.translator/testData/box/multiModuleWrappers/plain/inlineFromModuleWithNonIdentifierName.kt new file mode 100644 index 00000000000..47539b90a39 --- /dev/null +++ b/js/js.translator/testData/box/multiModuleWrappers/plain/inlineFromModuleWithNonIdentifierName.kt @@ -0,0 +1,23 @@ +// MODULE: #my-libr@ry +// FILE: bar.kt +// MODULE_KIND: PLAIN +// PROPERTY_NOT_WRITTEN_TO: baz +// PROPERTY_NOT_WRITTEN_TO: boo_287e2$ +@file:Suppress("INVISIBLE_REFERENCE", "INVISIBLE_MEMBER") + +inline fun foo() = "foo" +@kotlin.internal.InlineOnly +inline fun baz() = "baz" +inline fun boo() = "boo" + +// MODULE: main(#my-libr@ry) +// FILE: box.kt +// MODULE_KIND: PLAIN +// CHECK_CONTAINS_NO_CALLS: box except=assertEquals + +fun box(): String { + assertEquals("foo", foo()) + assertEquals("baz", baz()) + assertEquals("boo", boo()) + return "OK" +}