FIR LC: populate continuation parameter for suspend function
This commit is contained in:
committed by
Ilya Kirillov
parent
98791000bf
commit
5ed9cac0cc
-2
@@ -16,8 +16,6 @@ import org.jetbrains.kotlin.analysis.api.symbols.KtPropertyAccessorSymbol
|
||||
import org.jetbrains.kotlin.analysis.api.symbols.KtPropertyGetterSymbol
|
||||
import org.jetbrains.kotlin.analysis.api.symbols.KtPropertySetterSymbol
|
||||
import org.jetbrains.kotlin.analysis.api.symbols.KtPropertySymbol
|
||||
import org.jetbrains.kotlin.light.classes.symbol.parameters.FirLightParameterList
|
||||
import org.jetbrains.kotlin.light.classes.symbol.parameters.FirLightSetterParameterForSymbol
|
||||
import org.jetbrains.kotlin.load.java.JvmAbi.getterName
|
||||
import org.jetbrains.kotlin.load.java.JvmAbi.setterName
|
||||
import org.jetbrains.kotlin.psi.KtDeclaration
|
||||
|
||||
+9
-1
@@ -11,7 +11,7 @@ import org.jetbrains.kotlin.asJava.builder.LightMemberOrigin
|
||||
import org.jetbrains.kotlin.asJava.classes.lazyPub
|
||||
import org.jetbrains.kotlin.analysis.api.isValid
|
||||
import org.jetbrains.kotlin.analysis.api.symbols.KtFunctionLikeSymbol
|
||||
import org.jetbrains.kotlin.light.classes.symbol.parameters.FirLightParameterList
|
||||
import org.jetbrains.kotlin.analysis.api.symbols.KtFunctionSymbol
|
||||
import org.jetbrains.kotlin.psi.KtDeclaration
|
||||
import java.util.*
|
||||
|
||||
@@ -43,6 +43,14 @@ internal abstract class FirLightMethodForSymbol(
|
||||
)
|
||||
}
|
||||
}
|
||||
if ((functionSymbol as? KtFunctionSymbol)?.isSuspend == true) {
|
||||
builder.addParameter(
|
||||
FirLightSuspendContinuationParameter(
|
||||
functionSymbol = functionSymbol,
|
||||
containingMethod = this@FirLightMethodForSymbol
|
||||
)
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+1
-4
@@ -3,7 +3,7 @@
|
||||
* 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.light.classes.symbol.parameters
|
||||
package org.jetbrains.kotlin.light.classes.symbol
|
||||
|
||||
import com.intellij.psi.PsiParameter
|
||||
import com.intellij.psi.PsiParameterList
|
||||
@@ -12,9 +12,6 @@ import org.jetbrains.kotlin.asJava.classes.lazyPub
|
||||
import org.jetbrains.kotlin.asJava.elements.KtLightElement
|
||||
import org.jetbrains.kotlin.asJava.elements.KtLightElementBase
|
||||
import org.jetbrains.kotlin.analysis.api.symbols.KtCallableSymbol
|
||||
import org.jetbrains.kotlin.light.classes.symbol.FirLightMethod
|
||||
import org.jetbrains.kotlin.light.classes.symbol.FirLightParameterForReceiver
|
||||
import org.jetbrains.kotlin.light.classes.symbol.FirLightParameterForSymbol
|
||||
import org.jetbrains.kotlin.psi.KtFunction
|
||||
import org.jetbrains.kotlin.psi.KtParameterList
|
||||
|
||||
|
||||
+1
-2
@@ -3,7 +3,7 @@
|
||||
* 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.light.classes.symbol.parameters
|
||||
package org.jetbrains.kotlin.light.classes.symbol
|
||||
|
||||
import com.intellij.psi.PsiAnnotation
|
||||
import com.intellij.psi.PsiModifierList
|
||||
@@ -12,7 +12,6 @@ import org.jetbrains.kotlin.descriptors.annotations.AnnotationUseSiteTarget
|
||||
import org.jetbrains.kotlin.analysis.api.isValid
|
||||
import org.jetbrains.kotlin.analysis.api.symbols.KtPropertySymbol
|
||||
import org.jetbrains.kotlin.analysis.api.symbols.KtValueParameterSymbol
|
||||
import org.jetbrains.kotlin.light.classes.symbol.*
|
||||
|
||||
internal class FirLightSetterParameterForSymbol(
|
||||
private val containingPropertySymbol: KtPropertySymbol,
|
||||
|
||||
+67
@@ -0,0 +1,67 @@
|
||||
/*
|
||||
* Copyright 2010-2021 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.light.classes.symbol
|
||||
|
||||
import com.intellij.psi.PsiIdentifier
|
||||
import com.intellij.psi.PsiModifierList
|
||||
import com.intellij.psi.PsiType
|
||||
import org.jetbrains.annotations.NotNull
|
||||
import org.jetbrains.kotlin.analysis.api.components.buildClassType
|
||||
import org.jetbrains.kotlin.analysis.api.isValid
|
||||
import org.jetbrains.kotlin.analysis.api.symbols.KtFunctionSymbol
|
||||
import org.jetbrains.kotlin.analysis.api.symbols.markers.isPrivateOrPrivateToThis
|
||||
import org.jetbrains.kotlin.asJava.classes.lazyPub
|
||||
import org.jetbrains.kotlin.codegen.coroutines.SUSPEND_FUNCTION_COMPLETION_PARAMETER_NAME
|
||||
import org.jetbrains.kotlin.name.StandardClassIds
|
||||
import org.jetbrains.kotlin.psi.KtParameter
|
||||
|
||||
internal class FirLightSuspendContinuationParameter(
|
||||
private val functionSymbol: KtFunctionSymbol,
|
||||
private val containingMethod: FirLightMethod,
|
||||
) : FirLightParameter(containingMethod) {
|
||||
override fun getName(): String = SUSPEND_FUNCTION_COMPLETION_PARAMETER_NAME
|
||||
|
||||
override fun getNameIdentifier(): PsiIdentifier = _identifier
|
||||
|
||||
private val _identifier: PsiIdentifier by lazyPub {
|
||||
FirLightIdentifier(this, functionSymbol)
|
||||
}
|
||||
|
||||
override fun getType(): PsiType = _type
|
||||
|
||||
private val _type by lazyPub {
|
||||
analyzeWithSymbolAsContext(functionSymbol) {
|
||||
buildClassType(StandardClassIds.Continuation) {
|
||||
argument(functionSymbol.annotatedType.type)
|
||||
}.asPsiType(this@FirLightSuspendContinuationParameter)
|
||||
} ?: nonExistentType()
|
||||
}
|
||||
|
||||
override fun isVarArgs(): Boolean = false
|
||||
|
||||
override fun getModifierList(): PsiModifierList = _modifierList
|
||||
|
||||
private val _modifierList: PsiModifierList by lazyPub {
|
||||
val annotations =
|
||||
if (functionSymbol.visibility.isPrivateOrPrivateToThis()) emptyList() else
|
||||
listOf(
|
||||
FirLightSimpleAnnotation(NotNull::class.java.name, this@FirLightSuspendContinuationParameter)
|
||||
)
|
||||
FirLightClassModifierList(this, emptySet(), annotations)
|
||||
}
|
||||
|
||||
override fun hasModifierProperty(p0: String): Boolean = false
|
||||
|
||||
override val kotlinOrigin: KtParameter? = null
|
||||
|
||||
override fun equals(other: Any?): Boolean =
|
||||
this === other ||
|
||||
(other is FirLightSuspendContinuationParameter && functionSymbol == other.functionSymbol)
|
||||
|
||||
override fun hashCode(): Int = functionSymbol.hashCode() * 31 + containingMethod.hashCode()
|
||||
|
||||
override fun isValid(): Boolean = super.isValid() && functionSymbol.isValid()
|
||||
}
|
||||
Reference in New Issue
Block a user