[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) { ): ProtoBuf.ValueParameter.Builder = whileAnalysing(session, parameter) {
val builder = ProtoBuf.ValueParameter.newBuilder() val builder = ProtoBuf.ValueParameter.newBuilder()
val declaresDefaultValue = parameter.defaultValue != null || val declaresDefaultValue = function.itOrExpectHasDefaultParameterValue(index)
function.symbol.getSingleExpectForActualOrNull().containsDefaultValue(index)
val flags = Flags.getValueParameterFlags( val flags = Flags.getValueParameterFlags(
additionalAnnotations.isNotEmpty() additionalAnnotations.isNotEmpty()
@@ -116,7 +116,7 @@ inline val FirBasedSymbol<*>.isJavaOrEnhancement: Boolean
get() = origin.isJavaOrEnhancement || get() = origin.isJavaOrEnhancement ||
(fir as? FirCallableDeclaration)?.importedFromObjectOrStaticData?.original?.isJavaOrEnhancement == true (fir as? FirCallableDeclaration)?.importedFromObjectOrStaticData?.original?.isJavaOrEnhancement == true
fun FirFunctionSymbol<*>?.containsDefaultValue(index: Int): Boolean { private fun FirFunction.containsDefaultValue(index: Int): Boolean = valueParameters[index].defaultValue != null
if (this == null) return false
return this.fir.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( fun declaresDefaultValue(
session: FirSession, session: FirSession,
scopeSession: ScopeSession, scopeSession: ScopeSession,
valueParameter: FirValueParameter,
function: FirFunction, function: FirFunction,
originScope: FirScope?, originScope: FirScope?,
index: Int, index: Int,
): Boolean { ): Boolean {
if (valueParameter.defaultValue != null || function.symbol.getSingleExpectForActualOrNull().containsDefaultValue(index)) { if (function.itOrExpectHasDefaultParameterValue(index)) return true
return true
}
if (function !is FirSimpleFunction) return false if (function !is FirSimpleFunction) return false
val symbol = function.symbol val symbol = function.symbol
val typeScope = when (originScope) { val typeScope = when (originScope) {
@@ -44,9 +41,7 @@ class FirDefaultParametersResolver : FirSessionComponent {
var result = false var result = false
typeScope.processOverriddenFunctions(symbol) { overridden -> typeScope.processOverriddenFunctions(symbol) { overridden ->
if (overridden.containsDefaultValue(index) || if (overridden.fir.itOrExpectHasDefaultParameterValue(index)) {
overridden.getSingleExpectForActualOrNull().containsDefaultValue(index)
) {
result = true result = true
return@processOverriddenFunctions ProcessorAction.STOP return@processOverriddenFunctions ProcessorAction.STOP
} }
@@ -304,7 +304,7 @@ private class FirCallArgumentsProcessor(
if (!result.containsKey(parameter)) { if (!result.containsKey(parameter)) {
when { when {
bodyResolveComponents.session.defaultParameterResolver.declaresDefaultValue( bodyResolveComponents.session.defaultParameterResolver.declaresDefaultValue(
useSiteSession, bodyResolveComponents.scopeSession, parameter, function, originScope, index useSiteSession, bodyResolveComponents.scopeSession, function, originScope, index
) -> ) ->
result[parameter] = ResolvedCallArgument.DefaultArgument result[parameter] = ResolvedCallArgument.DefaultArgument
parameter.isVararg -> parameter.isVararg ->