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.BindingContext
|
||||||
import org.jetbrains.kotlin.resolve.DescriptorUtils
|
import org.jetbrains.kotlin.resolve.DescriptorUtils
|
||||||
import org.jetbrains.kotlin.resolve.descriptorUtil.isPublishedApi
|
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.inline.isInlineOnly
|
||||||
import org.jetbrains.kotlin.resolve.jvm.annotations.JVM_OVERLOADS_FQ_NAME
|
import org.jetbrains.kotlin.resolve.jvm.annotations.JVM_OVERLOADS_FQ_NAME
|
||||||
import org.jetbrains.kotlin.resolve.jvm.annotations.JVM_SYNTHETIC_ANNOTATION_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? {
|
private fun findTooComplexDeclaration(declaration: KtDeclaration): PsiElement? {
|
||||||
if (declaration.hasExpectModifier() ||
|
if (declaration.hasExpectModifier() || declaration.hasModifier(KtTokens.ANNOTATION_KEYWORD)) {
|
||||||
declaration.hasModifier(KtTokens.ANNOTATION_KEYWORD) ||
|
|
||||||
declaration.hasModifier(KtTokens.INLINE_KEYWORD) && declaration is KtClassOrObject
|
|
||||||
) {
|
|
||||||
return declaration
|
return declaration
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -213,7 +210,10 @@ class IDELightClassGenerationSupport(private val project: Project) : LightClassG
|
|||||||
|
|
||||||
val module = ModuleUtilCore.findModuleForPsiElement(element) ?: return null
|
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 {
|
private fun implementsKotlinCollection(classOrObject: KtClassOrObject): Boolean {
|
||||||
|
|||||||
Reference in New Issue
Block a user