diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/state/KotlinTypeMapper.java b/compiler/backend/src/org/jetbrains/kotlin/codegen/state/KotlinTypeMapper.java index a17016e538d..825c020bff8 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/state/KotlinTypeMapper.java +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/state/KotlinTypeMapper.java @@ -1098,12 +1098,18 @@ public class KotlinTypeMapper { if (!(descriptor instanceof ConstructorDescriptor) && descriptor.getVisibility() == Visibilities.INTERNAL && !DescriptorUtilsKt.isPublishedApi(descriptor)) { - return InternalNameMapper.mangleInternalName(name, moduleName); + return InternalNameMapper.mangleInternalName(name, getModuleName(descriptor)); } return name; } + @NotNull + private String getModuleName(@NotNull CallableMemberDescriptor descriptor) { + String deserialized = ModuleNameKt.getJvmModuleNameForDeserializedDescriptor(descriptor); + return deserialized != null ? deserialized : moduleName; + } + @Nullable private static String getPartSimpleNameForMangling(@NotNull CallableMemberDescriptor descriptor) { KtFile containingFile = DescriptorToSourceUtils.getContainingFile(descriptor); diff --git a/compiler/testData/compileKotlinAgainstKotlin/internalWithOtherModuleName.kt b/compiler/testData/compileKotlinAgainstKotlin/internalWithOtherModuleName.kt new file mode 100644 index 00000000000..29b13fe5666 --- /dev/null +++ b/compiler/testData/compileKotlinAgainstKotlin/internalWithOtherModuleName.kt @@ -0,0 +1,14 @@ +// IGNORE_BACKEND: NATIVE +// FILE: A.kt + +package a + +class Box(val value: String) { + internal fun result(): String = value +} + +// FILE: B.kt + +fun box(): String { + return a.Box("OK").result() +} diff --git a/compiler/tests-common/tests/org/jetbrains/kotlin/codegen/AbstractCompileKotlinAgainstKotlinTest.java b/compiler/tests-common/tests/org/jetbrains/kotlin/codegen/AbstractCompileKotlinAgainstKotlinTest.java index 10533205016..6290e51ec30 100644 --- a/compiler/tests-common/tests/org/jetbrains/kotlin/codegen/AbstractCompileKotlinAgainstKotlinTest.java +++ b/compiler/tests-common/tests/org/jetbrains/kotlin/codegen/AbstractCompileKotlinAgainstKotlinTest.java @@ -16,6 +16,7 @@ import org.jetbrains.kotlin.cli.common.modules.ModuleBuilder; import org.jetbrains.kotlin.cli.jvm.compiler.EnvironmentConfigFiles; import org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment; import org.jetbrains.kotlin.codegen.forTestCompile.ForTestCompileRuntime; +import org.jetbrains.kotlin.config.CommonConfigurationKeys; import org.jetbrains.kotlin.config.CompilerConfiguration; import org.jetbrains.kotlin.load.kotlin.ModuleVisibilityManager; import org.jetbrains.kotlin.load.kotlin.PackagePartClassUtils; @@ -25,7 +26,6 @@ import org.jetbrains.kotlin.test.KotlinTestUtils; import org.jetbrains.kotlin.utils.ExceptionUtilsKt; import java.io.File; -import java.io.IOException; import java.net.URL; import java.net.URLClassLoader; import java.util.Arrays; @@ -90,12 +90,14 @@ public abstract class AbstractCompileKotlinAgainstKotlinTest extends CodegenTest } @NotNull - private ClassFileFactory compileA(@NotNull TestFile testFile, List files) throws IOException { + private ClassFileFactory compileA(@NotNull TestFile testFile, List files) { Disposable compileDisposable = createDisposable("compileA"); - CompilerConfiguration configuration = - createConfiguration(ConfigurationKind.ALL, getJdkKind(files), - Collections.singletonList(KotlinTestUtils.getAnnotationsJar()), - Collections.emptyList(), Collections.singletonList(testFile)); + CompilerConfiguration configuration = createConfiguration( + ConfigurationKind.ALL, getJdkKind(files), Collections.singletonList(KotlinTestUtils.getAnnotationsJar()), + Collections.emptyList(), Collections.singletonList(testFile) + ); + + configuration.put(CommonConfigurationKeys.MODULE_NAME, "a"); KotlinCoreEnvironment environment = KotlinCoreEnvironment.createForTests( compileDisposable, configuration, EnvironmentConfigFiles.JVM_CONFIG_FILES); @@ -110,16 +112,18 @@ public abstract class AbstractCompileKotlinAgainstKotlinTest extends CodegenTest } @NotNull - private ClassFileFactory compileB(@NotNull TestFile testFile, List files) throws IOException { + private ClassFileFactory compileB(@NotNull TestFile testFile, List files) { String commonHeader = StringsKt.substringBefore(files.get(0).content, "FILE:", ""); - CompilerConfiguration configurationWithADirInClasspath = - createConfiguration(ConfigurationKind.ALL, getJdkKind(files), - Lists.newArrayList(KotlinTestUtils.getAnnotationsJar(), aDir), - Collections.emptyList(), Lists.newArrayList(testFile, new TestFile("header", commonHeader))); + CompilerConfiguration configuration = createConfiguration( + ConfigurationKind.ALL, getJdkKind(files), Lists.newArrayList(KotlinTestUtils.getAnnotationsJar(), aDir), + Collections.emptyList(), Lists.newArrayList(testFile, new TestFile("header", commonHeader)) + ); + + configuration.put(CommonConfigurationKeys.MODULE_NAME, "b"); Disposable compileDisposable = createDisposable("compileB"); KotlinCoreEnvironment environment = KotlinCoreEnvironment.createForTests( - compileDisposable, configurationWithADirInClasspath, EnvironmentConfigFiles.JVM_CONFIG_FILES + compileDisposable, configuration, EnvironmentConfigFiles.JVM_CONFIG_FILES ); return compileKotlin(Collections.singletonList(testFile), bDir, environment, compileDisposable); diff --git a/compiler/tests/org/jetbrains/kotlin/codegen/CompileKotlinAgainstKotlinTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/codegen/CompileKotlinAgainstKotlinTestGenerated.java index 8a927e363b7..78e689b49e1 100644 --- a/compiler/tests/org/jetbrains/kotlin/codegen/CompileKotlinAgainstKotlinTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/codegen/CompileKotlinAgainstKotlinTestGenerated.java @@ -138,6 +138,11 @@ public class CompileKotlinAgainstKotlinTestGenerated extends AbstractCompileKotl runTest("compiler/testData/compileKotlinAgainstKotlin/internalSetterOverridden.kt"); } + @TestMetadata("internalWithOtherModuleName.kt") + public void testInternalWithOtherModuleName() throws Exception { + runTest("compiler/testData/compileKotlinAgainstKotlin/internalWithOtherModuleName.kt"); + } + @TestMetadata("jvmField.kt") public void testJvmField() throws Exception { runTest("compiler/testData/compileKotlinAgainstKotlin/jvmField.kt");