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