diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/MultifileClassCodegen.kt b/compiler/backend/src/org/jetbrains/kotlin/codegen/MultifileClassCodegen.kt index 9fd7450b028..9841a1b23b4 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/MultifileClassCodegen.kt +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/MultifileClassCodegen.kt @@ -213,7 +213,8 @@ class MultifileClassCodegen( if (declaration is KtNamedFunction || declaration is KtProperty) { val descriptor = state.bindingContext.get(BindingContext.DECLARATION_TO_DESCRIPTOR, declaration) assert(descriptor is CallableMemberDescriptor) { "Expected callable member, was " + descriptor + " for " + declaration.text } - if (!Visibilities.isPrivate((descriptor as CallableMemberDescriptor).visibility)) { + if (!Visibilities.isPrivate((descriptor as CallableMemberDescriptor).visibility) + && AsmUtil.getVisibilityAccessFlag(descriptor) != Opcodes.ACC_PRIVATE) { generateCallableMemberTasks.put(descriptor, { memberCodegen.genFunctionOrProperty(declaration) }) } } diff --git a/compiler/testData/codegen/boxInline/multifileClasses/inlineFromOtherPackage.1.kt b/compiler/testData/codegen/boxInline/multifileClasses/inlineFromOtherPackage.1.kt index 8716beb0dc9..074ea8d2298 100644 --- a/compiler/testData/codegen/boxInline/multifileClasses/inlineFromOtherPackage.1.kt +++ b/compiler/testData/codegen/boxInline/multifileClasses/inlineFromOtherPackage.1.kt @@ -1,3 +1,7 @@ import a.foo +import a.inlineOnly -fun box(): String = foo { "OK" } \ No newline at end of file +fun box(): String { + if (!a.inlineOnly("OK")) return "fail 1" + return foo { "OK" } +} diff --git a/compiler/testData/codegen/boxInline/multifileClasses/inlineFromOtherPackage.2.kt b/compiler/testData/codegen/boxInline/multifileClasses/inlineFromOtherPackage.2.kt index 9b67fc98b71..df35ba2f0ec 100644 --- a/compiler/testData/codegen/boxInline/multifileClasses/inlineFromOtherPackage.2.kt +++ b/compiler/testData/codegen/boxInline/multifileClasses/inlineFromOtherPackage.2.kt @@ -3,4 +3,6 @@ package a inline fun foo(body: () -> String): String = bar(body()) -public fun bar(x: String): String = x \ No newline at end of file +public fun bar(x: String): String = x + +inline fun inlineOnly(x: Any?): Boolean = x is T \ No newline at end of file diff --git a/compiler/testData/codegen/bytecodeListing/InlineOnlyMultifile.kt b/compiler/testData/codegen/bytecodeListing/InlineOnlyMultifile.kt new file mode 100644 index 00000000000..457d7061b9e --- /dev/null +++ b/compiler/testData/codegen/bytecodeListing/InlineOnlyMultifile.kt @@ -0,0 +1,10 @@ +@file:[JvmName("Foo") JvmMultifileClass] +package test + +fun foo() { + inlineOnly() +} + +// No method should be generated in multifile facade for 'inlineOnly' +// Because 'inlineOnly' is private in file part (because it's inline-only) and can't be delegated from facade +public inline fun inlineOnly() {} diff --git a/compiler/testData/codegen/bytecodeListing/InlineOnlyMultifile.txt b/compiler/testData/codegen/bytecodeListing/InlineOnlyMultifile.txt new file mode 100644 index 00000000000..d4ab545a2a1 --- /dev/null +++ b/compiler/testData/codegen/bytecodeListing/InlineOnlyMultifile.txt @@ -0,0 +1,12 @@ +@kotlin.Metadata +@kotlin.jvm.internal.KotlinMultifileClass +public final class test/Foo { + public final static method foo(): void +} + +@kotlin.Metadata +@kotlin.jvm.internal.KotlinMultifileClassPart +synthetic final class test/Foo__InlineOnlyMultifileKt { + public final static method foo(): void + private final static method inlineOnly(): void +} diff --git a/compiler/tests/org/jetbrains/kotlin/codegen/BytecodeListingTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/codegen/BytecodeListingTestGenerated.java index b3caf30f385..0273127a4ff 100644 --- a/compiler/tests/org/jetbrains/kotlin/codegen/BytecodeListingTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/codegen/BytecodeListingTestGenerated.java @@ -47,6 +47,12 @@ public class BytecodeListingTestGenerated extends AbstractBytecodeListingTest { doTest(fileName); } + @TestMetadata("InlineOnlyMultifile.kt") + public void testInlineOnlyMultifile() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/bytecodeListing/InlineOnlyMultifile.kt"); + doTest(fileName); + } + @TestMetadata("compiler/testData/codegen/bytecodeListing/annotations") @TestDataPath("$PROJECT_ROOT") @RunWith(JUnit3RunnerWithInners.class)