Add UL support for classes
This commit is contained in:
+59
@@ -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<KtLightMethod> 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<KtLightField> = emptyList()
|
||||
|
||||
override fun getOwnMethods() = _ownMethods
|
||||
|
||||
override fun getVisibleSignatures(): MutableCollection<HierarchicalMethodSignature> = PsiSuperMethodImplUtil.getVisibleSignatures(this)
|
||||
|
||||
override fun copy(): KtUltraLightInlineClass =
|
||||
KtUltraLightInlineClass(classOrObject, support)
|
||||
}
|
||||
-1
@@ -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
|
||||
|
||||
+5
-5
@@ -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 {
|
||||
|
||||
Reference in New Issue
Block a user