[AA] KtCallableSymbol: introduce receiverType extension
^KT-54417
This commit is contained in:
committed by
Space Team
parent
1ebfbc0ee9
commit
d0cc88ffe0
+5
-4
@@ -12,6 +12,7 @@ import org.jetbrains.kotlin.analysis.api.signatures.KtVariableLikeSignature
|
|||||||
import org.jetbrains.kotlin.analysis.api.symbols.KtCallableSymbol
|
import org.jetbrains.kotlin.analysis.api.symbols.KtCallableSymbol
|
||||||
import org.jetbrains.kotlin.analysis.api.symbols.KtFunctionLikeSymbol
|
import org.jetbrains.kotlin.analysis.api.symbols.KtFunctionLikeSymbol
|
||||||
import org.jetbrains.kotlin.analysis.api.symbols.KtVariableLikeSymbol
|
import org.jetbrains.kotlin.analysis.api.symbols.KtVariableLikeSymbol
|
||||||
|
import org.jetbrains.kotlin.analysis.api.symbols.receiverType
|
||||||
import org.jetbrains.kotlin.analysis.api.types.KtSubstitutor
|
import org.jetbrains.kotlin.analysis.api.types.KtSubstitutor
|
||||||
import org.jetbrains.kotlin.analysis.utils.errors.unexpectedElementError
|
import org.jetbrains.kotlin.analysis.utils.errors.unexpectedElementError
|
||||||
|
|
||||||
@@ -47,7 +48,7 @@ abstract class AbstractKtSignatureSubstitutorImpl : KtSignatureSubstitutor() {
|
|||||||
return KtFunctionLikeSignature(
|
return KtFunctionLikeSignature(
|
||||||
symbol,
|
symbol,
|
||||||
substitutor.substitute(symbol.returnType),
|
substitutor.substitute(symbol.returnType),
|
||||||
symbol.receiverParameter?.type?.let { substitutor.substitute(it) },
|
symbol.receiverType?.let { substitutor.substitute(it) },
|
||||||
symbol.valueParameters.map { substitute(it, substitutor) }
|
symbol.valueParameters.map { substitute(it, substitutor) }
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
@@ -57,7 +58,7 @@ abstract class AbstractKtSignatureSubstitutorImpl : KtSignatureSubstitutor() {
|
|||||||
return KtVariableLikeSignature(
|
return KtVariableLikeSignature(
|
||||||
symbol,
|
symbol,
|
||||||
substitutor.substitute(symbol.returnType),
|
substitutor.substitute(symbol.returnType),
|
||||||
symbol.receiverParameter?.type?.let { substitutor.substitute(it) },
|
symbol.receiverType?.let { substitutor.substitute(it) },
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -70,10 +71,10 @@ abstract class AbstractKtSignatureSubstitutorImpl : KtSignatureSubstitutor() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
override fun <S : KtFunctionLikeSymbol> asSignature(symbol: S): KtFunctionLikeSignature<S> {
|
override fun <S : KtFunctionLikeSymbol> asSignature(symbol: S): KtFunctionLikeSignature<S> {
|
||||||
return KtFunctionLikeSignature(symbol, symbol.returnType, symbol.receiverParameter?.type, symbol.valueParameters.map { asSignature(it) })
|
return KtFunctionLikeSignature(symbol, symbol.returnType, symbol.receiverType, symbol.valueParameters.map { asSignature(it) })
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun <S : KtVariableLikeSymbol> asSignature(symbol: S): KtVariableLikeSignature<S> {
|
override fun <S : KtVariableLikeSymbol> asSignature(symbol: S): KtVariableLikeSignature<S> {
|
||||||
return KtVariableLikeSignature(symbol, symbol.returnType, symbol.receiverParameter?.type)
|
return KtVariableLikeSignature(symbol, symbol.returnType, symbol.receiverType)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
+2
-2
@@ -102,7 +102,7 @@ abstract class AbstractAnalysisApiSignatureContractsTest : AbstractAnalysisApiSi
|
|||||||
substitutor: KtSubstitutor,
|
substitutor: KtSubstitutor,
|
||||||
testServices: TestServices
|
testServices: TestServices
|
||||||
) {
|
) {
|
||||||
testServices.assertions.assertEquals(symbol.receiverParameter?.type?.let(substitutor::substitute), signature.receiverType)
|
testServices.assertions.assertEquals(symbol.receiverType?.let(substitutor::substitute), signature.receiverType)
|
||||||
testServices.assertions.assertEquals(symbol.returnType.let(substitutor::substitute), signature.returnType)
|
testServices.assertions.assertEquals(symbol.returnType.let(substitutor::substitute), signature.returnType)
|
||||||
|
|
||||||
testServices.assertions.assertEquals(symbol.valueParameters.size, signature.valueParameters.size)
|
testServices.assertions.assertEquals(symbol.valueParameters.size, signature.valueParameters.size)
|
||||||
@@ -118,7 +118,7 @@ abstract class AbstractAnalysisApiSignatureContractsTest : AbstractAnalysisApiSi
|
|||||||
substitutor: KtSubstitutor,
|
substitutor: KtSubstitutor,
|
||||||
testServices: TestServices
|
testServices: TestServices
|
||||||
) {
|
) {
|
||||||
testServices.assertions.assertEquals(symbol.receiverParameter?.type?.let(substitutor::substitute), signature.receiverType)
|
testServices.assertions.assertEquals(symbol.receiverType?.let(substitutor::substitute), signature.receiverType)
|
||||||
testServices.assertions.assertEquals(symbol.returnType.let(substitutor::substitute), signature.returnType)
|
testServices.assertions.assertEquals(symbol.returnType.let(substitutor::substitute), signature.returnType)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+3
@@ -23,6 +23,9 @@ public sealed class KtCallableSymbol : KtSymbolWithKind, KtPossibleMemberSymbol,
|
|||||||
abstract override fun createPointer(): KtSymbolPointer<KtCallableSymbol>
|
abstract override fun createPointer(): KtSymbolPointer<KtCallableSymbol>
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public val KtCallableSymbol.receiverType: KtType?
|
||||||
|
get() = receiverParameter?.type
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Symbol for a receiver parameter of a function or property. For example, consider code `fun String.foo() {...}`, the declaration of
|
* Symbol for a receiver parameter of a function or property. For example, consider code `fun String.foo() {...}`, the declaration of
|
||||||
* `String` receiver parameter is such a symbol.
|
* `String` receiver parameter is such a symbol.
|
||||||
|
|||||||
+2
-1
@@ -11,6 +11,7 @@ import org.jetbrains.kotlin.analysis.api.KtAnalysisSession
|
|||||||
import org.jetbrains.kotlin.analysis.api.symbols.KtCallableSymbol
|
import org.jetbrains.kotlin.analysis.api.symbols.KtCallableSymbol
|
||||||
import org.jetbrains.kotlin.analysis.api.symbols.KtConstructorSymbol
|
import org.jetbrains.kotlin.analysis.api.symbols.KtConstructorSymbol
|
||||||
import org.jetbrains.kotlin.analysis.api.symbols.KtFunctionLikeSymbol
|
import org.jetbrains.kotlin.analysis.api.symbols.KtFunctionLikeSymbol
|
||||||
|
import org.jetbrains.kotlin.analysis.api.symbols.receiverType
|
||||||
import org.jetbrains.kotlin.analysis.api.types.KtType
|
import org.jetbrains.kotlin.analysis.api.types.KtType
|
||||||
import org.jetbrains.kotlin.analysis.api.types.KtTypeMappingMode
|
import org.jetbrains.kotlin.analysis.api.types.KtTypeMappingMode
|
||||||
|
|
||||||
@@ -51,7 +52,7 @@ internal object PsiDeclarationAndKtSymbolEqualityChecker {
|
|||||||
if (psi.parameterList.parametersCount != valueParameterCount) return false
|
if (psi.parameterList.parametersCount != valueParameterCount) return false
|
||||||
if (symbol.isExtension) {
|
if (symbol.isExtension) {
|
||||||
val psiParameter = psi.parameterList.parameters[0]
|
val psiParameter = psi.parameterList.parameters[0]
|
||||||
if (symbol.receiverParameter?.type?.let { isTheSameTypes(psi, psiParameter.type, it, isVararg = false) } != true) return false
|
if (symbol.receiverType?.let { isTheSameTypes(psi, psiParameter.type, it, isVararg = false) } != true) return false
|
||||||
}
|
}
|
||||||
val offset = if (symbol.isExtension) 1 else 0
|
val offset = if (symbol.isExtension) 1 else 0
|
||||||
symbol.valueParameters.forEachIndexed { index, valueParameterSymbol ->
|
symbol.valueParameters.forEachIndexed { index, valueParameterSymbol ->
|
||||||
|
|||||||
Reference in New Issue
Block a user