AA: use appropriate type mapping mode in eq checker
This commit is contained in:
committed by
Ilya Kirillov
parent
3c74751f73
commit
a77933ca9a
+20
-4
@@ -12,6 +12,7 @@ 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.types.KtType
|
import org.jetbrains.kotlin.analysis.api.types.KtType
|
||||||
|
import org.jetbrains.kotlin.analysis.api.types.KtTypeMappingMode
|
||||||
|
|
||||||
// TODO replace with structural type comparison?
|
// TODO replace with structural type comparison?
|
||||||
internal object PsiDeclarationAndKtSymbolEqualityChecker {
|
internal object PsiDeclarationAndKtSymbolEqualityChecker {
|
||||||
@@ -25,8 +26,15 @@ internal object PsiDeclarationAndKtSymbolEqualityChecker {
|
|||||||
|
|
||||||
private fun KtAnalysisSession.returnTypesMatch(psi: PsiMethod, symbol: KtCallableSymbol): Boolean {
|
private fun KtAnalysisSession.returnTypesMatch(psi: PsiMethod, symbol: KtCallableSymbol): Boolean {
|
||||||
if (symbol is KtConstructorSymbol) return true
|
if (symbol is KtConstructorSymbol) return true
|
||||||
return psi.returnType?.let { isTheSameTypes(psi, it, symbol.returnType, isVararg = false) }
|
return psi.returnType?.let {
|
||||||
?: false
|
isTheSameTypes(
|
||||||
|
psi,
|
||||||
|
it,
|
||||||
|
symbol.returnType,
|
||||||
|
KtTypeMappingMode.RETURN_TYPE,
|
||||||
|
isVararg = false
|
||||||
|
)
|
||||||
|
} ?: false
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun typeParametersMatch(psi: PsiMethod, symbol: KtCallableSymbol): Boolean {
|
private fun typeParametersMatch(psi: PsiMethod, symbol: KtCallableSymbol): Boolean {
|
||||||
@@ -50,7 +58,14 @@ internal object PsiDeclarationAndKtSymbolEqualityChecker {
|
|||||||
val psiParameter = psi.parameterList.parameters[index + offset]
|
val psiParameter = psi.parameterList.parameters[index + offset]
|
||||||
if (valueParameterSymbol.name.asString() != psiParameter.name) return false
|
if (valueParameterSymbol.name.asString() != psiParameter.name) return false
|
||||||
if (valueParameterSymbol.isVararg != psiParameter.isVarArgs) return false
|
if (valueParameterSymbol.isVararg != psiParameter.isVarArgs) return false
|
||||||
if (!isTheSameTypes(psi, psiParameter.type, valueParameterSymbol.returnType, valueParameterSymbol.isVararg)) return false
|
if (!isTheSameTypes(
|
||||||
|
psi,
|
||||||
|
psiParameter.type,
|
||||||
|
valueParameterSymbol.returnType,
|
||||||
|
KtTypeMappingMode.VALUE_PARAMETER,
|
||||||
|
valueParameterSymbol.isVararg
|
||||||
|
)
|
||||||
|
) return false
|
||||||
}
|
}
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
@@ -59,11 +74,12 @@ internal object PsiDeclarationAndKtSymbolEqualityChecker {
|
|||||||
context: PsiMethod,
|
context: PsiMethod,
|
||||||
psi: PsiType,
|
psi: PsiType,
|
||||||
ktType: KtType,
|
ktType: KtType,
|
||||||
|
mode: KtTypeMappingMode = KtTypeMappingMode.DEFAULT,
|
||||||
isVararg: Boolean = false
|
isVararg: Boolean = false
|
||||||
): Boolean {
|
): Boolean {
|
||||||
// Shortcut: primitive void == Unit as a function return type
|
// Shortcut: primitive void == Unit as a function return type
|
||||||
if (psi == PsiType.VOID && ktType.isUnit) return true
|
if (psi == PsiType.VOID && ktType.isUnit) return true
|
||||||
val ktTypeRendered = ktType.asPsiType(context) ?: return false
|
val ktTypeRendered = ktType.asPsiType(context, mode) ?: return false
|
||||||
val rendered = if (isVararg) ktTypeRendered.createArrayType() else ktTypeRendered
|
val rendered = if (isVararg) ktTypeRendered.createArrayType() else ktTypeRendered
|
||||||
return rendered == psi
|
return rendered == psi
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user