diff --git a/compiler/testData/codegen/bytecodeListing/inline/simpleNamed.kt b/compiler/testData/codegen/bytecodeListing/inline/simpleNamed.kt index d67bd824b90..f4226f1356e 100644 --- a/compiler/testData/codegen/bytecodeListing/inline/simpleNamed.kt +++ b/compiler/testData/codegen/bytecodeListing/inline/simpleNamed.kt @@ -18,6 +18,8 @@ suspend inline fun shouldNotHaveSuffix() {} suspend inline fun acceptsCrossinline(crossinline c: () -> Unit) {} +private suspend inline fun privateInline() {} + class Foo { suspend inline fun simple() {} @@ -36,4 +38,6 @@ class Foo { suspend inline fun shouldNotHaveSuffix() {} suspend inline fun acceptsCrossinline(crossinline c: () -> Unit) {} + + private suspend inline fun privateInline() {} } \ No newline at end of file diff --git a/compiler/testData/codegen/bytecodeListing/inline/simpleNamed.txt b/compiler/testData/codegen/bytecodeListing/inline/simpleNamed.txt index 94d4812e130..2fe33969789 100644 --- a/compiler/testData/codegen/bytecodeListing/inline/simpleNamed.txt +++ b/compiler/testData/codegen/bytecodeListing/inline/simpleNamed.txt @@ -8,6 +8,7 @@ public final class Foo { public final @org.jetbrains.annotations.Nullable method generic(p0: java.lang.Object, @org.jetbrains.annotations.NotNull p1: kotlin.coroutines.experimental.Continuation): java.lang.Object private final method genericWithReified(p0: java.lang.Object, p1: kotlin.coroutines.experimental.Continuation): java.lang.Object private final method genericWithReified(p0: kotlin.coroutines.experimental.Continuation): java.lang.Object + private synthetic final method privateInline(p0: kotlin.coroutines.experimental.Continuation): java.lang.Object private final @kotlin.internal.InlineOnly method shouldNotHaveSuffix(p0: kotlin.coroutines.experimental.Continuation): java.lang.Object private final @org.jetbrains.annotations.Nullable method simple$$forInline(@org.jetbrains.annotations.NotNull p0: kotlin.Unit, @org.jetbrains.annotations.NotNull p1: kotlin.coroutines.experimental.Continuation): java.lang.Object private final @org.jetbrains.annotations.Nullable method simple$$forInline(@org.jetbrains.annotations.NotNull p0: kotlin.coroutines.experimental.Continuation): java.lang.Object @@ -24,6 +25,7 @@ public final class SimpleNamedKt { public final static @org.jetbrains.annotations.Nullable method generic(p0: java.lang.Object, @org.jetbrains.annotations.NotNull p1: kotlin.coroutines.experimental.Continuation): java.lang.Object private final static method genericWithReified(p0: java.lang.Object, p1: kotlin.coroutines.experimental.Continuation): java.lang.Object private final static method genericWithReified(p0: kotlin.coroutines.experimental.Continuation): java.lang.Object + private synthetic final static method privateInline(p0: kotlin.coroutines.experimental.Continuation): java.lang.Object private final static @kotlin.internal.InlineOnly method shouldNotHaveSuffix(p0: kotlin.coroutines.experimental.Continuation): java.lang.Object private final static @org.jetbrains.annotations.Nullable method simple$$forInline(@org.jetbrains.annotations.NotNull p0: kotlin.Unit, @org.jetbrains.annotations.NotNull p1: kotlin.coroutines.experimental.Continuation): java.lang.Object private final static @org.jetbrains.annotations.Nullable method simple$$forInline(@org.jetbrains.annotations.NotNull p0: kotlin.coroutines.experimental.Continuation): java.lang.Object diff --git a/core/descriptors/src/org/jetbrains/kotlin/descriptors/annotations/annotationUtil.kt b/core/descriptors/src/org/jetbrains/kotlin/descriptors/annotations/annotationUtil.kt index b9daccd2e8e..0cbe33166ab 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/descriptors/annotations/annotationUtil.kt +++ b/core/descriptors/src/org/jetbrains/kotlin/descriptors/annotations/annotationUtil.kt @@ -20,6 +20,7 @@ import org.jetbrains.kotlin.builtins.KotlinBuiltIns import org.jetbrains.kotlin.descriptors.CallableMemberDescriptor import org.jetbrains.kotlin.descriptors.FunctionDescriptor import org.jetbrains.kotlin.descriptors.MemberDescriptor +import org.jetbrains.kotlin.descriptors.Visibilities import org.jetbrains.kotlin.name.ClassId import org.jetbrains.kotlin.name.FqName import org.jetbrains.kotlin.name.Name @@ -73,7 +74,8 @@ fun MemberDescriptor.isInlineOnlyOrReifiable(): Boolean = this is CallableMemberDescriptor && (isReifiable() || DescriptorUtils.getDirectMember(this).isReifiable() || isInlineOnly()) fun MemberDescriptor.isEffectivelyInlineOnly(): Boolean = - isInlineOnlyOrReifiable() || (this is FunctionDescriptor && this.isSuspend && this.valueParameters.any { it.isCrossinline }) + isInlineOnlyOrReifiable() || (this is FunctionDescriptor && isSuspend && isInline && + (valueParameters.any { it.isCrossinline } || visibility == Visibilities.PRIVATE)) fun MemberDescriptor.isInlineOnly(): Boolean { if (this !is FunctionDescriptor ||