Skip to content

Commit 545fdb5

Browse files
committed
Add UL-inline class overrided interface methods
1 parent 7d542ed commit 545fdb5

File tree

3 files changed

+52
-11
lines changed

3 files changed

+52
-11
lines changed

compiler/light-classes/src/org/jetbrains/kotlin/asJava/classes/KtUltraInlineLightClass.kt

Lines changed: 35 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,10 @@ import com.intellij.psi.PsiElement
1111
import com.intellij.psi.impl.PsiSuperMethodImplUtil
1212
import org.jetbrains.kotlin.asJava.elements.KtLightField
1313
import org.jetbrains.kotlin.asJava.elements.KtLightMethod
14+
import org.jetbrains.kotlin.lexer.KtTokens
1415
import org.jetbrains.kotlin.psi.KtClassOrObject
16+
import org.jetbrains.kotlin.psi.KtNamedFunction
17+
import org.jetbrains.kotlin.psi.KtProperty
1518

1619
class KtUltraLightInlineClass(
1720
classOrObject: KtClassOrObject,
@@ -23,29 +26,50 @@ class KtUltraLightInlineClass(
2326

2427
override fun getScope(): PsiElement? = parent
2528

29+
private val membersBuilder: UltraLightMembersCreator by lazyPub {
30+
UltraLightMembersCreator(
31+
containingClass = this,
32+
containingClassIsNamedObject = false,
33+
containingClassIsSealed = false,
34+
mangleInternalFunctions = false,
35+
support = support
36+
)
37+
}
38+
2639
private val _ownMethods: List<KtLightMethod> by lazyPub {
2740

41+
val result = arrayListOf<KtLightMethod>()
42+
43+
val applicableDeclarations = this.classOrObject.declarations
44+
.filter { it.hasModifier(KtTokens.OVERRIDE_KEYWORD) }
45+
.filterNot { it.isHiddenByDeprecation(support) }
46+
47+
for (declaration in applicableDeclarations) {
48+
when (declaration) {
49+
is KtNamedFunction -> result.addAll(membersBuilder.createMethods(declaration, forceStatic = false))
50+
is KtProperty -> result.addAll(
51+
membersBuilder.propertyAccessors(declaration, declaration.isVar, forceStatic = false, onlyJvmStatic = false)
52+
)
53+
}
54+
}
55+
2856
val inlineClassParameter = classOrObject
2957
.primaryConstructor
3058
?.valueParameters
3159
?.firstOrNull()
32-
?: return@lazyPub emptyList()
33-
3460

35-
UltraLightMembersCreator(
36-
containingClass = this,
37-
containingClassIsNamedObject = false,
38-
containingClassIsSealed = false,
39-
mangleInternalFunctions = false,
40-
support = support
41-
).run {
42-
propertyAccessors(
61+
if (inlineClassParameter !== null) {
62+
membersBuilder.propertyAccessors(
4363
inlineClassParameter,
4464
mutable = false,
4565
forceStatic = false,
4666
onlyJvmStatic = false
47-
)
67+
).let {
68+
result.addAll(it)
69+
}
4870
}
71+
72+
result;
4973
}
5074

5175
override fun getOwnFields(): List<KtLightField> = emptyList()

compiler/testData/asJava/ultraLightClasses/inlineClasses.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,4 +12,13 @@ public final class InlinedDelegate /* InlinedDelegate*/<T> {
1212
@null()
1313
public final T getNode();
1414

15+
}
16+
17+
public final class InlineInheritance /* InlineInheritance*/ {
18+
public final int getV();
19+
20+
public int getX();
21+
22+
public int y();
23+
1524
}

compiler/testData/asJava/ultraLightClasses/inlineClasses.kt

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,3 +18,11 @@ inline class InlinedDelegate<T>(var node: T) {
1818
return node
1919
}
2020
}
21+
22+
inline class InlineInheritance(val v: Int) : I {
23+
override fun y() = 4
24+
25+
override val x get() = 5
26+
27+
fun z() = 7
28+
}

0 commit comments

Comments
 (0)