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 index 7a6c3522add..fc64b40dbac 100644 --- a/compiler/light-classes/src/org/jetbrains/kotlin/asJava/classes/KtUltraInlineLightClass.kt +++ b/compiler/light-classes/src/org/jetbrains/kotlin/asJava/classes/KtUltraInlineLightClass.kt @@ -11,7 +11,10 @@ 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.lexer.KtTokens import org.jetbrains.kotlin.psi.KtClassOrObject +import org.jetbrains.kotlin.psi.KtNamedFunction +import org.jetbrains.kotlin.psi.KtProperty class KtUltraLightInlineClass( classOrObject: KtClassOrObject, @@ -23,29 +26,50 @@ class KtUltraLightInlineClass( override fun getScope(): PsiElement? = parent - private val _ownMethods: List by lazyPub { - - val inlineClassParameter = classOrObject - .primaryConstructor - ?.valueParameters - ?.firstOrNull() - ?: return@lazyPub emptyList() - - + private val membersBuilder: UltraLightMembersCreator by lazyPub { UltraLightMembersCreator( containingClass = this, containingClassIsNamedObject = false, containingClassIsSealed = false, mangleInternalFunctions = false, support = support - ).run { - propertyAccessors( + ) + } + + private val _ownMethods: List by lazyPub { + + val result = arrayListOf() + + val applicableDeclarations = this.classOrObject.declarations + .filter { it.hasModifier(KtTokens.OVERRIDE_KEYWORD) } + .filterNot { it.isHiddenByDeprecation(support) } + + for (declaration in applicableDeclarations) { + when (declaration) { + is KtNamedFunction -> result.addAll(membersBuilder.createMethods(declaration, forceStatic = false)) + is KtProperty -> result.addAll( + membersBuilder.propertyAccessors(declaration, declaration.isVar, forceStatic = false, onlyJvmStatic = false) + ) + } + } + + val inlineClassParameter = classOrObject + .primaryConstructor + ?.valueParameters + ?.firstOrNull() + + if (inlineClassParameter !== null) { + membersBuilder.propertyAccessors( inlineClassParameter, mutable = false, forceStatic = false, onlyJvmStatic = false - ) + ).let { + result.addAll(it) + } } + + result; } override fun getOwnFields(): List = emptyList() diff --git a/compiler/testData/asJava/ultraLightClasses/inlineClasses.java b/compiler/testData/asJava/ultraLightClasses/inlineClasses.java index 90b9f6da3ae..e2078d4b66c 100644 --- a/compiler/testData/asJava/ultraLightClasses/inlineClasses.java +++ b/compiler/testData/asJava/ultraLightClasses/inlineClasses.java @@ -12,4 +12,13 @@ public final class InlinedDelegate /* InlinedDelegate*/ { @null() public final T getNode(); +} + +public final class InlineInheritance /* InlineInheritance*/ { + public final int getV(); + + public int getX(); + + public int y(); + } \ No newline at end of file diff --git a/compiler/testData/asJava/ultraLightClasses/inlineClasses.kt b/compiler/testData/asJava/ultraLightClasses/inlineClasses.kt index 4a81780fc3e..da3c30eb734 100644 --- a/compiler/testData/asJava/ultraLightClasses/inlineClasses.kt +++ b/compiler/testData/asJava/ultraLightClasses/inlineClasses.kt @@ -18,3 +18,11 @@ inline class InlinedDelegate(var node: T) { return node } } + +inline class InlineInheritance(val v: Int) : I { + override fun y() = 4 + + override val x get() = 5 + + fun z() = 7 +} \ No newline at end of file