[FIR] Extract common helper for checking of (expect) default value

This commit is contained in:
Kirill Rakhman
2023-07-03 17:22:27 +02:00
committed by Space Team
parent 1d3a127f52
commit 988dbfc5c8
4 changed files with 8 additions and 14 deletions
@@ -701,8 +701,7 @@ class FirElementSerializer private constructor(
): ProtoBuf.ValueParameter.Builder = whileAnalysing(session, parameter) {
val builder = ProtoBuf.ValueParameter.newBuilder()
val declaresDefaultValue = parameter.defaultValue != null ||
function.symbol.getSingleExpectForActualOrNull().containsDefaultValue(index)
val declaresDefaultValue = function.itOrExpectHasDefaultParameterValue(index)
val flags = Flags.getValueParameterFlags(
additionalAnnotations.isNotEmpty()
@@ -116,7 +116,7 @@ inline val FirBasedSymbol<*>.isJavaOrEnhancement: Boolean
get() = origin.isJavaOrEnhancement ||
(fir as? FirCallableDeclaration)?.importedFromObjectOrStaticData?.original?.isJavaOrEnhancement == true
fun FirFunctionSymbol<*>?.containsDefaultValue(index: Int): Boolean {
if (this == null) return false
return this.fir.valueParameters[index].defaultValue != null
}
private fun FirFunction.containsDefaultValue(index: Int): Boolean = valueParameters[index].defaultValue != null
fun FirFunction.itOrExpectHasDefaultParameterValue(index: Int): Boolean =
containsDefaultValue(index) || symbol.getSingleExpectForActualOrNull()?.fir?.containsDefaultValue(index) == true
@@ -16,14 +16,11 @@ class FirDefaultParametersResolver : FirSessionComponent {
fun declaresDefaultValue(
session: FirSession,
scopeSession: ScopeSession,
valueParameter: FirValueParameter,
function: FirFunction,
originScope: FirScope?,
index: Int,
): Boolean {
if (valueParameter.defaultValue != null || function.symbol.getSingleExpectForActualOrNull().containsDefaultValue(index)) {
return true
}
if (function.itOrExpectHasDefaultParameterValue(index)) return true
if (function !is FirSimpleFunction) return false
val symbol = function.symbol
val typeScope = when (originScope) {
@@ -44,9 +41,7 @@ class FirDefaultParametersResolver : FirSessionComponent {
var result = false
typeScope.processOverriddenFunctions(symbol) { overridden ->
if (overridden.containsDefaultValue(index) ||
overridden.getSingleExpectForActualOrNull().containsDefaultValue(index)
) {
if (overridden.fir.itOrExpectHasDefaultParameterValue(index)) {
result = true
return@processOverriddenFunctions ProcessorAction.STOP
}
@@ -304,7 +304,7 @@ private class FirCallArgumentsProcessor(
if (!result.containsKey(parameter)) {
when {
bodyResolveComponents.session.defaultParameterResolver.declaresDefaultValue(
useSiteSession, bodyResolveComponents.scopeSession, parameter, function, originScope, index
useSiteSession, bodyResolveComponents.scopeSession, function, originScope, index
) ->
result[parameter] = ResolvedCallArgument.DefaultArgument
parameter.isVararg ->