[FIR] Extract common helper for checking of (expect) default value
This commit is contained in:
committed by
Space Team
parent
1d3a127f52
commit
988dbfc5c8
+1
-2
@@ -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()
|
||||
|
||||
+4
-4
@@ -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
|
||||
|
||||
+2
-7
@@ -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
|
||||
}
|
||||
|
||||
+1
-1
@@ -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 ->
|
||||
|
||||
Reference in New Issue
Block a user