From a4cc67d0a0e70f050a687d0bf7872c94cdd6b0f1 Mon Sep 17 00:00:00 2001 From: Denis Zharkov Date: Thu, 1 Nov 2018 14:46:37 +0300 Subject: [PATCH] Refine isInlineOnly check in KtUltraLightClass --- .../kotlin/asJava/classes/ultraLightPsi.kt | 13 ++++++++++++- .../testData/asJava/ultraLightClasses/inlineOnly.kt | 4 ++++ .../UltraLightClassLoadingTestGenerated.java | 5 +++++ 3 files changed, 21 insertions(+), 1 deletion(-) create mode 100644 compiler/testData/asJava/ultraLightClasses/inlineOnly.kt diff --git a/compiler/light-classes/src/org/jetbrains/kotlin/asJava/classes/ultraLightPsi.kt b/compiler/light-classes/src/org/jetbrains/kotlin/asJava/classes/ultraLightPsi.kt index ae2bd42f42f..a03b11b59ce 100644 --- a/compiler/light-classes/src/org/jetbrains/kotlin/asJava/classes/ultraLightPsi.kt +++ b/compiler/light-classes/src/org/jetbrains/kotlin/asJava/classes/ultraLightPsi.kt @@ -40,6 +40,7 @@ import org.jetbrains.kotlin.resolve.annotations.argumentValue import org.jetbrains.kotlin.resolve.constants.EnumValue import org.jetbrains.kotlin.resolve.descriptorUtil.fqNameSafe import org.jetbrains.kotlin.resolve.descriptorUtil.isPublishedApi +import org.jetbrains.kotlin.resolve.inline.isInlineOnly import org.jetbrains.kotlin.resolve.jvm.annotations.STRICTFP_ANNOTATION_FQ_NAME import org.jetbrains.kotlin.resolve.jvm.annotations.SYNCHRONIZED_ANNOTATION_FQ_NAME import org.jetbrains.kotlin.resolve.jvm.annotations.TRANSIENT_ANNOTATION_FQ_NAME @@ -385,7 +386,17 @@ class KtUltraLightClass(classOrObject: KtClassOrObject, private val support: Ult fun KtDeclaration.isPrivate() = hasModifier(PRIVATE_KEYWORD) || this is KtConstructor<*> && classOrObject.hasModifier(SEALED_KEYWORD) || - this is KtFunction && typeParameters.any { it.hasModifier(REIFIED_KEYWORD) } + isInlineOnly() + + private fun KtDeclaration.isInlineOnly(): Boolean { + if (this !is KtCallableDeclaration || !hasModifier(INLINE_KEYWORD)) return false + if (typeParameters.any { it.hasModifier(REIFIED_KEYWORD) }) return true + if (annotationEntries.isEmpty()) return false + + val descriptor = resolve() as? CallableMemberDescriptor ?: return false + + return descriptor.isInlineOnly() + } } ).setConstructor(declaration is KtConstructor<*>) } diff --git a/compiler/testData/asJava/ultraLightClasses/inlineOnly.kt b/compiler/testData/asJava/ultraLightClasses/inlineOnly.kt new file mode 100644 index 00000000000..e10179c4c6d --- /dev/null +++ b/compiler/testData/asJava/ultraLightClasses/inlineOnly.kt @@ -0,0 +1,4 @@ +class A { + @kotlin.internal.InlineOnly + inline fun foo() {} +} diff --git a/idea/tests/org/jetbrains/kotlin/asJava/classes/UltraLightClassLoadingTestGenerated.java b/idea/tests/org/jetbrains/kotlin/asJava/classes/UltraLightClassLoadingTestGenerated.java index a214c3c90ea..2607b732a9f 100644 --- a/idea/tests/org/jetbrains/kotlin/asJava/classes/UltraLightClassLoadingTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/asJava/classes/UltraLightClassLoadingTestGenerated.java @@ -94,6 +94,11 @@ public class UltraLightClassLoadingTestGenerated extends AbstractUltraLightClass runTest("compiler/testData/asJava/ultraLightClasses/inlineClasses.kt"); } + @TestMetadata("inlineOnly.kt") + public void testInlineOnly() throws Exception { + runTest("compiler/testData/asJava/ultraLightClasses/inlineOnly.kt"); + } + @TestMetadata("jvmName.kt") public void testJvmName() throws Exception { runTest("compiler/testData/asJava/ultraLightClasses/jvmName.kt");