Skip to content

Commit 44f19e1

Browse files
committed
Add UL support for classes
1 parent b7849da commit 44f19e1

File tree

3 files changed

+64
-6
lines changed

3 files changed

+64
-6
lines changed
Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
/*
2+
* Copyright 2010-2019 JetBrains s.r.o. and Kotlin Programming Language contributors.
3+
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
4+
*/
5+
6+
package org.jetbrains.kotlin.asJava.classes
7+
8+
import com.intellij.psi.HierarchicalMethodSignature
9+
import com.intellij.psi.PsiClass
10+
import com.intellij.psi.PsiElement
11+
import com.intellij.psi.impl.PsiSuperMethodImplUtil
12+
import org.jetbrains.kotlin.asJava.elements.KtLightField
13+
import org.jetbrains.kotlin.asJava.elements.KtLightMethod
14+
import org.jetbrains.kotlin.psi.KtClassOrObject
15+
16+
class KtUltraLightInlineClass(
17+
classOrObject: KtClassOrObject,
18+
support: KtUltraLightSupport
19+
) : KtUltraLightClass(classOrObject, support) {
20+
21+
override fun getDelegate(): PsiClass =
22+
throw IllegalStateException("Cls delegate shouldn't be loaded for not too complex ultra-light classes! Qualified name: $qualifiedName")
23+
24+
override fun getScope(): PsiElement? = parent
25+
26+
private val _ownMethods: List<KtLightMethod> by lazyPub {
27+
28+
val inlineClassParameter = classOrObject
29+
.primaryConstructor
30+
?.valueParameters
31+
?.firstOrNull()
32+
?: return@lazyPub emptyList()
33+
34+
35+
UltraLightMembersCreator(
36+
containingClass = this,
37+
containingClassIsNamedObject = false,
38+
containingClassIsSealed = false,
39+
mangleInternalFunctions = false,
40+
support = support
41+
).run {
42+
propertyAccessors(
43+
inlineClassParameter,
44+
mutable = false,
45+
forceStatic = false,
46+
onlyJvmStatic = false
47+
)
48+
}
49+
}
50+
51+
override fun getOwnFields(): List<KtLightField> = emptyList()
52+
53+
override fun getOwnMethods() = _ownMethods
54+
55+
override fun getVisibleSignatures(): MutableCollection<HierarchicalMethodSignature> = PsiSuperMethodImplUtil.getVisibleSignatures(this)
56+
57+
override fun copy(): KtUltraLightInlineClass =
58+
KtUltraLightInlineClass(classOrObject, support)
59+
}

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

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,6 @@ import org.jetbrains.kotlin.psi.psiUtil.hasSuspendModifier
2727
import org.jetbrains.kotlin.resolve.BindingContext
2828
import org.jetbrains.kotlin.resolve.DescriptorUtils
2929
import org.jetbrains.kotlin.resolve.descriptorUtil.isPublishedApi
30-
import org.jetbrains.kotlin.resolve.descriptorUtil.module
3130
import org.jetbrains.kotlin.resolve.inline.isInlineOnly
3231
import org.jetbrains.kotlin.resolve.jvm.annotations.JVM_OVERLOADS_FQ_NAME
3332
import org.jetbrains.kotlin.resolve.jvm.annotations.JVM_SYNTHETIC_ANNOTATION_FQ_NAME

idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/resolve/IDELightClassGenerationSupport.kt

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -147,10 +147,7 @@ class IDELightClassGenerationSupport(private val project: Project) : LightClassG
147147
}
148148

149149
private fun findTooComplexDeclaration(declaration: KtDeclaration): PsiElement? {
150-
if (declaration.hasExpectModifier() ||
151-
declaration.hasModifier(KtTokens.ANNOTATION_KEYWORD) ||
152-
declaration.hasModifier(KtTokens.INLINE_KEYWORD) && declaration is KtClassOrObject
153-
) {
150+
if (declaration.hasExpectModifier() || declaration.hasModifier(KtTokens.ANNOTATION_KEYWORD)) {
154151
return declaration
155152
}
156153

@@ -213,7 +210,10 @@ class IDELightClassGenerationSupport(private val project: Project) : LightClassG
213210

214211
val module = ModuleUtilCore.findModuleForPsiElement(element) ?: return null
215212

216-
return KtUltraLightClass(element, KtUltraLightSupportImpl(element, module))
213+
return KtUltraLightSupportImpl(element, module).let {
214+
if (element.hasModifier(KtTokens.INLINE_KEYWORD)) KtUltraLightInlineClass(element, it)
215+
else KtUltraLightClass(element, it)
216+
}
217217
}
218218

219219
private fun implementsKotlinCollection(classOrObject: KtClassOrObject): Boolean {

0 commit comments

Comments
 (0)