diff --git a/compiler/light-classes/src/org/jetbrains/kotlin/asJava/classes/KtUltraInlineLightClass.kt b/compiler/light-classes/src/org/jetbrains/kotlin/asJava/classes/KtUltraInlineLightClass.kt new file mode 100644 index 00000000000..7a6c3522add --- /dev/null +++ b/compiler/light-classes/src/org/jetbrains/kotlin/asJava/classes/KtUltraInlineLightClass.kt @@ -0,0 +1,59 @@ +/* + * Copyright 2010-2019 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. + */ + +package org.jetbrains.kotlin.asJava.classes + +import com.intellij.psi.HierarchicalMethodSignature +import com.intellij.psi.PsiClass +import com.intellij.psi.PsiElement +import com.intellij.psi.impl.PsiSuperMethodImplUtil +import org.jetbrains.kotlin.asJava.elements.KtLightField +import org.jetbrains.kotlin.asJava.elements.KtLightMethod +import org.jetbrains.kotlin.psi.KtClassOrObject + +class KtUltraLightInlineClass( + classOrObject: KtClassOrObject, + support: KtUltraLightSupport +) : KtUltraLightClass(classOrObject, support) { + + override fun getDelegate(): PsiClass = + throw IllegalStateException("Cls delegate shouldn't be loaded for not too complex ultra-light classes! Qualified name: $qualifiedName") + + override fun getScope(): PsiElement? = parent + + private val _ownMethods: List by lazyPub { + + val inlineClassParameter = classOrObject + .primaryConstructor + ?.valueParameters + ?.firstOrNull() + ?: return@lazyPub emptyList() + + + UltraLightMembersCreator( + containingClass = this, + containingClassIsNamedObject = false, + containingClassIsSealed = false, + mangleInternalFunctions = false, + support = support + ).run { + propertyAccessors( + inlineClassParameter, + mutable = false, + forceStatic = false, + onlyJvmStatic = false + ) + } + } + + override fun getOwnFields(): List = emptyList() + + override fun getOwnMethods() = _ownMethods + + override fun getVisibleSignatures(): MutableCollection = PsiSuperMethodImplUtil.getVisibleSignatures(this) + + override fun copy(): KtUltraLightInlineClass = + KtUltraLightInlineClass(classOrObject, support) +} \ No newline at end of file diff --git a/compiler/light-classes/src/org/jetbrains/kotlin/asJava/classes/ultraLightMembersCreator.kt b/compiler/light-classes/src/org/jetbrains/kotlin/asJava/classes/ultraLightMembersCreator.kt index 25b329c05ce..db9535afaf7 100644 --- a/compiler/light-classes/src/org/jetbrains/kotlin/asJava/classes/ultraLightMembersCreator.kt +++ b/compiler/light-classes/src/org/jetbrains/kotlin/asJava/classes/ultraLightMembersCreator.kt @@ -27,7 +27,6 @@ import org.jetbrains.kotlin.psi.psiUtil.hasSuspendModifier import org.jetbrains.kotlin.resolve.BindingContext import org.jetbrains.kotlin.resolve.DescriptorUtils import org.jetbrains.kotlin.resolve.descriptorUtil.isPublishedApi -import org.jetbrains.kotlin.resolve.descriptorUtil.module import org.jetbrains.kotlin.resolve.inline.isInlineOnly import org.jetbrains.kotlin.resolve.jvm.annotations.JVM_OVERLOADS_FQ_NAME import org.jetbrains.kotlin.resolve.jvm.annotations.JVM_SYNTHETIC_ANNOTATION_FQ_NAME diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/resolve/IDELightClassGenerationSupport.kt b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/resolve/IDELightClassGenerationSupport.kt index 0ddd6ba8a40..85c275e1e08 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/resolve/IDELightClassGenerationSupport.kt +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/resolve/IDELightClassGenerationSupport.kt @@ -147,10 +147,7 @@ class IDELightClassGenerationSupport(private val project: Project) : LightClassG } private fun findTooComplexDeclaration(declaration: KtDeclaration): PsiElement? { - if (declaration.hasExpectModifier() || - declaration.hasModifier(KtTokens.ANNOTATION_KEYWORD) || - declaration.hasModifier(KtTokens.INLINE_KEYWORD) && declaration is KtClassOrObject - ) { + if (declaration.hasExpectModifier() || declaration.hasModifier(KtTokens.ANNOTATION_KEYWORD)) { return declaration } @@ -213,7 +210,10 @@ class IDELightClassGenerationSupport(private val project: Project) : LightClassG val module = ModuleUtilCore.findModuleForPsiElement(element) ?: return null - return KtUltraLightClass(element, KtUltraLightSupportImpl(element, module)) + return KtUltraLightSupportImpl(element, module).let { + if (element.hasModifier(KtTokens.INLINE_KEYWORD)) KtUltraLightInlineClass(element, it) + else KtUltraLightClass(element, it) + } } private fun implementsKotlinCollection(classOrObject: KtClassOrObject): Boolean {