KtLightParameter introduced as interface

This commit is contained in:
Nicolay Mitropolsky
2019-07-22 17:20:25 +03:00
parent 50158e508a
commit 5f9660cd33
4 changed files with 18 additions and 19 deletions
@@ -9,10 +9,7 @@ import com.intellij.psi.*
import com.intellij.psi.search.LocalSearchScope
import com.intellij.psi.search.SearchScope
import org.jetbrains.annotations.NonNls
import org.jetbrains.kotlin.asJava.elements.KtLightAbstractAnnotation
import org.jetbrains.kotlin.asJava.elements.KtLightMethod
import org.jetbrains.kotlin.asJava.elements.KtLightSimpleModifierList
import org.jetbrains.kotlin.asJava.elements.LightParameter
import org.jetbrains.kotlin.asJava.elements.*
import org.jetbrains.kotlin.builtins.KotlinBuiltIns
import org.jetbrains.kotlin.builtins.isSuspendFunctionType
import org.jetbrains.kotlin.codegen.coroutines.SUSPEND_FUNCTION_COMPLETION_PARAMETER_NAME
@@ -26,11 +23,12 @@ internal class KtUltraLightSuspendContinuationParameter(
private val support: KtUltraLightSupport,
method: KtLightMethod
) : LightParameter(SUSPEND_FUNCTION_COMPLETION_PARAMETER_NAME, PsiType.NULL, method, method.language),
KtUltraLightElementWithNullabilityAnnotation<KtDeclaration, PsiParameter> {
KtLightParameter,
KtUltraLightElementWithNullabilityAnnotation<KtParameter, PsiParameter> {
override val kotlinTypeForNullabilityAnnotation: KotlinType? get() = ktType
override val psiTypeForNullabilityAnnotation: PsiType? get() = psiType
override val kotlinOrigin: KtDeclaration? = null
override val kotlinOrigin: KtParameter? = null
override val clsDelegate: PsiParameter
get() = throw IllegalStateException("Cls delegate shouldn't be loaded for ultra-light PSI!")
@@ -68,7 +66,7 @@ internal class KtUltraLightSuspendContinuationParameter(
internal abstract class KtUltraLightParameter(
name: String,
override val kotlinOrigin: KtDeclaration?,
override val kotlinOrigin: KtParameter?,
protected val support: KtUltraLightSupport,
method: KtLightMethod
) : org.jetbrains.kotlin.asJava.elements.LightParameter(
@@ -76,7 +74,7 @@ internal abstract class KtUltraLightParameter(
PsiType.NULL,
method,
method.language
), KtUltraLightElementWithNullabilityAnnotation<KtDeclaration, PsiParameter> {
), KtUltraLightElementWithNullabilityAnnotation<KtParameter, PsiParameter>, KtLightParameter {
override fun isEquivalentTo(another: PsiElement?): Boolean = kotlinOrigin == another
@@ -137,7 +135,7 @@ internal abstract class KtUltraLightParameter(
internal abstract class KtAbstractUltraLightParameterForDeclaration(
name: String,
kotlinOrigin: KtDeclaration?,
kotlinOrigin: KtParameter?,
support: KtUltraLightSupport,
method: KtLightMethod,
protected val containingDeclaration: KtCallableDeclaration
@@ -192,12 +190,11 @@ internal class KtUltraLightReceiverParameter(
internal class KtUltraLightParameterForDescriptor(
private val descriptor: ParameterDescriptor,
kotlinOrigin: KtDeclaration?,
support: KtUltraLightSupport,
method: KtLightMethod
) : KtUltraLightParameter(
if (descriptor.name.isSpecial) "\$self" else descriptor.name.identifier,
kotlinOrigin, support, method
null, support, method
) {
override val kotlinType: KotlinType?
get() = descriptor.type
@@ -223,11 +223,11 @@ fun KtUltraLightClass.createGeneratedMethodFromDescriptor(
val wrapper = KtUltraLightMethodForDescriptor(descriptor, lightMethod, lightMemberOrigin, support, this)
descriptor.extensionReceiverParameter?.let { receiver ->
lightMethod.addParameter(KtUltraLightParameterForDescriptor(receiver, kotlinOrigin, support, wrapper))
lightMethod.addParameter(KtUltraLightParameterForDescriptor(receiver, support, wrapper))
}
for (valueParameter in descriptor.valueParameters) {
lightMethod.addParameter(KtUltraLightParameterForDescriptor(valueParameter, kotlinOrigin, support, wrapper))
lightMethod.addParameter(KtUltraLightParameterForDescriptor(valueParameter, support, wrapper))
}
lightMethod.setMethodReturnType {
@@ -22,6 +22,7 @@ import org.jetbrains.kotlin.asJava.builder.LightMemberOrigin
import org.jetbrains.kotlin.asJava.classes.KtLightClass
import org.jetbrains.kotlin.psi.KtDeclaration
import org.jetbrains.kotlin.psi.KtElement
import org.jetbrains.kotlin.psi.KtParameter
import org.jetbrains.kotlin.resolve.jvm.diagnostics.JvmDeclarationOriginKind
interface KtLightElement<out T : KtElement, out D : PsiElement> : PsiElement {
@@ -48,6 +49,10 @@ interface KtLightMember<out D : PsiMember> : PsiMember, KtLightDeclaration<KtDec
interface KtLightField : PsiField, KtLightMember<PsiField>, PsiVariableEx
interface KtLightParameter : PsiParameter, KtLightDeclaration<KtParameter, PsiParameter> {
val method: KtLightMethod
}
interface KtLightFieldForSourceDeclarationSupport : PsiField {
val kotlinOrigin: KtDeclaration?
}
@@ -16,19 +16,16 @@ import com.intellij.util.IncorrectOperationException
import org.jetbrains.annotations.NonNls
import org.jetbrains.kotlin.asJava.classes.lazyPub
import org.jetbrains.kotlin.idea.KotlinLanguage
import org.jetbrains.kotlin.psi.KtFunction
import org.jetbrains.kotlin.psi.KtParameter
import org.jetbrains.kotlin.psi.KtProperty
import org.jetbrains.kotlin.psi.KtPropertyAccessor
import org.jetbrains.kotlin.psi.*
import org.jetbrains.kotlin.psi.psiUtil.isExtensionDeclaration
class KtLightParameterImpl(
internal class KtLightParameterImpl(
private val dummyDelegate: PsiParameter,
private val clsDelegateProvider: () -> PsiParameter?,
private val index: Int,
method: KtLightMethod
) : LightParameter(dummyDelegate.name ?: "p$index", dummyDelegate.type, method, KotlinLanguage.INSTANCE),
KtLightDeclaration<KtParameter, PsiParameter> {
KtLightDeclaration<KtParameter, PsiParameter>, KtLightParameter {
private val lazyDelegate by lazyPub { clsDelegateProvider() ?: dummyDelegate }