FirClassSubstitutionScope: extract 'configureAnnotationsAndParameters'
This commit is contained in:
+30
-37
@@ -155,7 +155,10 @@ class FirClassSubstitutionScope(
|
|||||||
if (newReturnType == null && newParameterTypes.all { it == null } && newTypeParameters === constructor.typeParameters) {
|
if (newReturnType == null && newParameterTypes.all { it == null } && newTypeParameters === constructor.typeParameters) {
|
||||||
return original
|
return original
|
||||||
}
|
}
|
||||||
return createFakeOverrideConstructor(FirConstructorSymbol(original.callableId, overriddenSymbol = original), session, constructor, null, newReturnType, newParameterTypes, newTypeParameters).symbol
|
return createFakeOverrideConstructor(
|
||||||
|
FirConstructorSymbol(original.callableId, overriddenSymbol = original),
|
||||||
|
session, constructor, newReturnType, newParameterTypes, newTypeParameters
|
||||||
|
).symbol
|
||||||
}
|
}
|
||||||
|
|
||||||
// Returns a list of type parameters, and a substitutor that should be used for all other types
|
// Returns a list of type parameters, and a substitutor that should be used for all other types
|
||||||
@@ -272,6 +275,29 @@ class FirClassSubstitutionScope(
|
|||||||
}
|
}
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
|
private fun FirFunctionBuilder.configureAnnotationsAndParameters(
|
||||||
|
baseFunction: FirFunction<*>,
|
||||||
|
newParameterTypes: List<ConeKotlinType?>?
|
||||||
|
) {
|
||||||
|
annotations += baseFunction.annotations
|
||||||
|
valueParameters += baseFunction.valueParameters.zip(
|
||||||
|
newParameterTypes ?: List(baseFunction.valueParameters.size) { null }
|
||||||
|
) { valueParameter, newType ->
|
||||||
|
buildValueParameter {
|
||||||
|
source = valueParameter.source
|
||||||
|
this.session = session
|
||||||
|
origin = FirDeclarationOrigin.FakeOverride
|
||||||
|
returnTypeRef = valueParameter.returnTypeRef.withReplacedConeType(newType)
|
||||||
|
name = valueParameter.name
|
||||||
|
symbol = FirVariableSymbol(valueParameter.symbol.callableId)
|
||||||
|
defaultValue = valueParameter.defaultValue
|
||||||
|
isCrossinline = valueParameter.isCrossinline
|
||||||
|
isNoinline = valueParameter.isNoinline
|
||||||
|
isVararg = valueParameter.isVararg
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private fun createFakeOverrideFunction(
|
private fun createFakeOverrideFunction(
|
||||||
fakeOverrideSymbol: FirFunctionSymbol<FirSimpleFunction>,
|
fakeOverrideSymbol: FirFunctionSymbol<FirSimpleFunction>,
|
||||||
session: FirSession,
|
session: FirSession,
|
||||||
@@ -292,24 +318,8 @@ class FirClassSubstitutionScope(
|
|||||||
name = baseFunction.name
|
name = baseFunction.name
|
||||||
status = baseFunction.status
|
status = baseFunction.status
|
||||||
symbol = fakeOverrideSymbol
|
symbol = fakeOverrideSymbol
|
||||||
annotations += baseFunction.annotations
|
|
||||||
resolvePhase = baseFunction.resolvePhase
|
resolvePhase = baseFunction.resolvePhase
|
||||||
valueParameters += baseFunction.valueParameters.zip(
|
configureAnnotationsAndParameters(baseFunction, newParameterTypes)
|
||||||
newParameterTypes ?: List(baseFunction.valueParameters.size) { null }
|
|
||||||
) { valueParameter, newType ->
|
|
||||||
buildValueParameter {
|
|
||||||
source = valueParameter.source
|
|
||||||
this.session = session
|
|
||||||
origin = FirDeclarationOrigin.FakeOverride
|
|
||||||
returnTypeRef = valueParameter.returnTypeRef.withReplacedConeType(newType)
|
|
||||||
name = valueParameter.name
|
|
||||||
symbol = FirVariableSymbol(valueParameter.symbol.callableId)
|
|
||||||
defaultValue = valueParameter.defaultValue
|
|
||||||
isCrossinline = valueParameter.isCrossinline
|
|
||||||
isNoinline = valueParameter.isNoinline
|
|
||||||
isVararg = valueParameter.isVararg
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// TODO: Fix the hack for org.jetbrains.kotlin.fir.backend.Fir2IrVisitor.addFakeOverrides
|
// TODO: Fix the hack for org.jetbrains.kotlin.fir.backend.Fir2IrVisitor.addFakeOverrides
|
||||||
// We might have added baseFunction.typeParameters in case new ones are null
|
// We might have added baseFunction.typeParameters in case new ones are null
|
||||||
@@ -423,7 +433,6 @@ class FirClassSubstitutionScope(
|
|||||||
fakeOverrideSymbol: FirConstructorSymbol,
|
fakeOverrideSymbol: FirConstructorSymbol,
|
||||||
session: FirSession,
|
session: FirSession,
|
||||||
baseConstructor: FirConstructor,
|
baseConstructor: FirConstructor,
|
||||||
newReceiverType: ConeKotlinType? = null,
|
|
||||||
newReturnType: ConeKotlinType? = null,
|
newReturnType: ConeKotlinType? = null,
|
||||||
newParameterTypes: List<ConeKotlinType?>? = null,
|
newParameterTypes: List<ConeKotlinType?>? = null,
|
||||||
newTypeParameters: List<FirTypeParameterRef>? = null
|
newTypeParameters: List<FirTypeParameterRef>? = null
|
||||||
@@ -435,27 +444,11 @@ class FirClassSubstitutionScope(
|
|||||||
this.session = session
|
this.session = session
|
||||||
origin = FirDeclarationOrigin.FakeOverride
|
origin = FirDeclarationOrigin.FakeOverride
|
||||||
returnTypeRef = baseConstructor.returnTypeRef.withReplacedReturnType(newReturnType)
|
returnTypeRef = baseConstructor.returnTypeRef.withReplacedReturnType(newReturnType)
|
||||||
receiverTypeRef = baseConstructor.receiverTypeRef?.withReplacedConeType(newReceiverType)
|
receiverTypeRef = baseConstructor.receiverTypeRef?.withReplacedConeType(null)
|
||||||
status = baseConstructor.status
|
status = baseConstructor.status
|
||||||
symbol = fakeOverrideSymbol
|
symbol = fakeOverrideSymbol
|
||||||
annotations += baseConstructor.annotations
|
|
||||||
resolvePhase = baseConstructor.resolvePhase
|
resolvePhase = baseConstructor.resolvePhase
|
||||||
valueParameters += baseConstructor.valueParameters.zip(
|
configureAnnotationsAndParameters(baseConstructor, newParameterTypes)
|
||||||
newParameterTypes ?: List(baseConstructor.valueParameters.size) { null }
|
|
||||||
) { valueParameter, newType ->
|
|
||||||
buildValueParameter {
|
|
||||||
source = valueParameter.source
|
|
||||||
this.session = session
|
|
||||||
origin = FirDeclarationOrigin.FakeOverride
|
|
||||||
returnTypeRef = valueParameter.returnTypeRef.withReplacedConeType(newType)
|
|
||||||
name = valueParameter.name
|
|
||||||
symbol = FirVariableSymbol(valueParameter.symbol.callableId)
|
|
||||||
defaultValue = valueParameter.defaultValue
|
|
||||||
isCrossinline = valueParameter.isCrossinline
|
|
||||||
isNoinline = valueParameter.isNoinline
|
|
||||||
isVararg = valueParameter.isVararg
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// TODO: Fix the hack for org.jetbrains.kotlin.fir.backend.Fir2IrVisitor.addFakeOverrides
|
// TODO: Fix the hack for org.jetbrains.kotlin.fir.backend.Fir2IrVisitor.addFakeOverrides
|
||||||
// We might have added baseFunction.typeParameters in case new ones are null
|
// We might have added baseFunction.typeParameters in case new ones are null
|
||||||
|
|||||||
Reference in New Issue
Block a user