[low level api] consider property type parameters when matching FIR and PSI declarations

This commit is contained in:
Ilya Kirillov
2022-05-09 14:15:30 +02:00
committed by teamcity
parent 875da1ea1e
commit 7395f8e019
@@ -34,10 +34,8 @@ object KtDeclarationAndFirDeclarationEqualityChecker {
fun representsTheSameDeclaration(psi: KtCallableDeclaration, fir: FirCallableDeclaration): Boolean {
if (!receiverTypeMatch(psi, fir)) return false
if (!returnTypesMatch(psi, fir)) return false
if (fir is FirFunction) {
if (!typeParametersMatch(fir, psi) || !valueParametersMatch(fir, psi)) return false
}
if (!typeParametersMatch(psi, fir)) return false
if (fir is FirFunction && !valueParametersMatch(psi, fir)) return false
return true
}
@@ -54,7 +52,7 @@ object KtDeclarationAndFirDeclarationEqualityChecker {
return isTheSameTypes(psi.typeReference!!, fir.returnTypeRef, isVararg = false)
}
private fun typeParametersMatch(firFunction: FirCallableDeclaration, psiFunction: KtCallableDeclaration): Boolean {
private fun typeParametersMatch(psiFunction: KtCallableDeclaration, firFunction: FirCallableDeclaration): Boolean {
if (firFunction.typeParameters.size != psiFunction.typeParameters.size) return false
val boundsByName = psiFunction.typeConstraints.groupBy { it.subjectTypeParameterName?.getReferencedName() }
firFunction.typeParameters.zip(psiFunction.typeParameters) { expectedTypeParameter, candidateTypeParameter ->
@@ -80,7 +78,7 @@ object KtDeclarationAndFirDeclarationEqualityChecker {
return true
}
private fun valueParametersMatch(firFunction: FirFunction, psiFunction: KtCallableDeclaration): Boolean {
private fun valueParametersMatch(psiFunction: KtCallableDeclaration, firFunction: FirFunction): Boolean {
if (firFunction.valueParameters.size != psiFunction.valueParameters.size) return false
firFunction.valueParameters.zip(psiFunction.valueParameters) { expectedParameter, candidateParameter ->
if (expectedParameter.name.toString() != candidateParameter.name) return false
@@ -246,7 +244,11 @@ object KtDeclarationAndFirDeclarationEqualityChecker {
shouldNotBeCalled()
}
override fun getNestedClassifierScope(klass: FirClass, useSiteSession: FirSession, scopeSession: ScopeSession): FirContainingNamesAwareScope? {
override fun getNestedClassifierScope(
klass: FirClass,
useSiteSession: FirSession,
scopeSession: ScopeSession
): FirContainingNamesAwareScope? {
shouldNotBeCalled()
}