diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/FunctionCodegen.java b/compiler/backend/src/org/jetbrains/kotlin/codegen/FunctionCodegen.java index 6bf97bdfbfd..a4cd0f20562 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/FunctionCodegen.java +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/FunctionCodegen.java @@ -50,6 +50,7 @@ import org.jetbrains.kotlin.psi.KtParameter; import org.jetbrains.kotlin.resolve.BindingContext; import org.jetbrains.kotlin.resolve.DescriptorToSourceUtils; import org.jetbrains.kotlin.resolve.DescriptorUtils; +import org.jetbrains.kotlin.resolve.annotations.AnnotationUtilKt; import org.jetbrains.kotlin.resolve.calls.util.UnderscoreUtilKt; import org.jetbrains.kotlin.resolve.constants.ArrayValue; import org.jetbrains.kotlin.resolve.constants.ConstantValue; @@ -847,7 +848,9 @@ public class FunctionCodegen { // $default methods are never private to be accessible from other class files (e.g. inner) without the need of synthetic accessors // $default methods are never protected to be accessible from subclass nested classes - int visibilityFlag = Visibilities.isPrivate(functionDescriptor.getVisibility()) ? AsmUtil.NO_FLAG_PACKAGE_PRIVATE : Opcodes.ACC_PUBLIC; + int visibilityFlag = Visibilities.isPrivate(functionDescriptor.getVisibility()) || + AnnotationUtilKt.isInlineOnlyOrReified(functionDescriptor) ? + AsmUtil.NO_FLAG_PACKAGE_PRIVATE : Opcodes.ACC_PUBLIC; int flags = visibilityFlag | getDeprecatedAccessFlag(functionDescriptor) | ACC_SYNTHETIC; if (!(functionDescriptor instanceof ConstructorDescriptor)) { flags |= ACC_STATIC | ACC_BRIDGE; diff --git a/compiler/testData/writeFlags/function/withDefaultArguments/inlineOnlyFunInClass.kt b/compiler/testData/writeFlags/function/withDefaultArguments/inlineOnlyFunInClass.kt new file mode 100644 index 00000000000..9d64aacab0e --- /dev/null +++ b/compiler/testData/writeFlags/function/withDefaultArguments/inlineOnlyFunInClass.kt @@ -0,0 +1,10 @@ +class MyClass() { + @Suppress("INVISIBLE_MEMBER", "INVISIBLE_REFERENCE") + @kotlin.internal.InlineOnly + inline fun test(s: String = "") { + } +} + +// TESTED_OBJECT_KIND: function +// TESTED_OBJECTS: MyClass, test$default +// FLAGS: ACC_STATIC, ACC_BRIDGE, ACC_SYNTHETIC diff --git a/compiler/testData/writeFlags/function/withDefaultArguments/reifiedFunInClass.kt b/compiler/testData/writeFlags/function/withDefaultArguments/reifiedFunInClass.kt new file mode 100644 index 00000000000..362f7424265 --- /dev/null +++ b/compiler/testData/writeFlags/function/withDefaultArguments/reifiedFunInClass.kt @@ -0,0 +1,7 @@ +class MyClass() { + inline fun test(s: String = "") {} +} + +// TESTED_OBJECT_KIND: function +// TESTED_OBJECTS: MyClass, test$default +// FLAGS: ACC_STATIC, ACC_BRIDGE, ACC_SYNTHETIC diff --git a/compiler/tests/org/jetbrains/kotlin/codegen/flags/WriteFlagsTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/codegen/flags/WriteFlagsTestGenerated.java index cfd7f30fb8c..3ae306337fe 100644 --- a/compiler/tests/org/jetbrains/kotlin/codegen/flags/WriteFlagsTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/codegen/flags/WriteFlagsTestGenerated.java @@ -555,6 +555,18 @@ public class WriteFlagsTestGenerated extends AbstractWriteFlagsTest { doTest(fileName); } + @TestMetadata("inlineOnlyFunInClass.kt") + public void testInlineOnlyFunInClass() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/writeFlags/function/withDefaultArguments/inlineOnlyFunInClass.kt"); + doTest(fileName); + } + + @TestMetadata("reifiedFunInClass.kt") + public void testReifiedFunInClass() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/writeFlags/function/withDefaultArguments/reifiedFunInClass.kt"); + doTest(fileName); + } + @TestMetadata("topLevelFun.kt") public void testTopLevelFun() throws Exception { String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/writeFlags/function/withDefaultArguments/topLevelFun.kt");