[FIR] Make default values for value parameters lazy in RawFirBuilder
Sixth step for ^KT-52615 Merge-request: KT-MR-7926 Merged-by: Egor Kulikov <Egor.Kulikov@jetbrains.com>
This commit is contained in:
+4
@@ -179,6 +179,10 @@ class FirJavaValueParameter @FirImplementationDetail constructor(
|
||||
override fun replaceControlFlowGraphReference(newControlFlowGraphReference: FirControlFlowGraphReference?) {
|
||||
}
|
||||
|
||||
override fun replaceDefaultValue(newDefaultValue: FirExpression?) {
|
||||
error("Java value parameter cannot has default value")
|
||||
}
|
||||
|
||||
override fun replaceGetter(newGetter: FirPropertyAccessor?) {
|
||||
}
|
||||
|
||||
|
||||
@@ -586,10 +586,7 @@ open class RawFirBuilder(
|
||||
this.name = name
|
||||
symbol = FirValueParameterSymbol(name)
|
||||
defaultValue = if (hasDefaultValue()) {
|
||||
disabledLazyMode {
|
||||
// TODO build lazy initializers here
|
||||
{ this@toFirValueParameter.defaultValue }.toFirExpression("Should have default value")
|
||||
}
|
||||
buildOrLazyExpression(null, { { this@toFirValueParameter.defaultValue }.toFirExpression("Should have default value") })
|
||||
} else null
|
||||
isCrossinline = hasModifier(CROSSINLINE_KEYWORD)
|
||||
isNoinline = hasModifier(NOINLINE_KEYWORD)
|
||||
|
||||
+1
-1
@@ -57,7 +57,7 @@ FILE: enums.kt
|
||||
|
||||
}
|
||||
public? final? enum class PseudoInsn : R|kotlin/Enum<PseudoInsn>| {
|
||||
private constructor(signature: String = String(()V)): R|PseudoInsn| {
|
||||
private constructor(signature: String = LAZY_EXPRESSION): R|PseudoInsn| {
|
||||
LAZY_super<R|kotlin/Enum<PseudoInsn>|>
|
||||
}
|
||||
|
||||
|
||||
+1
-1
@@ -1,3 +1,3 @@
|
||||
FILE: namedArgument.kt
|
||||
public? final? fun foo(first: String = String(), second: Boolean = Boolean(true), third: Double = Double(3.1415)): R|kotlin/Unit| { LAZY_BLOCK }
|
||||
public? final? fun foo(first: String = LAZY_EXPRESSION, second: Boolean = LAZY_EXPRESSION, third: Double = LAZY_EXPRESSION): R|kotlin/Unit| { LAZY_BLOCK }
|
||||
public? final? fun test(): R|kotlin/Unit| { LAZY_BLOCK }
|
||||
|
||||
@@ -79,6 +79,8 @@ abstract class FirValueParameter : FirVariable(), FirControlFlowGraphOwner {
|
||||
|
||||
abstract override fun replaceControlFlowGraphReference(newControlFlowGraphReference: FirControlFlowGraphReference?)
|
||||
|
||||
abstract fun replaceDefaultValue(newDefaultValue: FirExpression?)
|
||||
|
||||
abstract override fun <D> transformTypeParameters(transformer: FirTransformer<D>, data: D): FirValueParameter
|
||||
|
||||
abstract override fun <D> transformStatus(transformer: FirTransformer<D>, data: D): FirValueParameter
|
||||
|
||||
+4
@@ -195,4 +195,8 @@ internal class FirDefaultSetterValueParameter(
|
||||
override fun replaceControlFlowGraphReference(newControlFlowGraphReference: FirControlFlowGraphReference?) {
|
||||
controlFlowGraphReference = newControlFlowGraphReference
|
||||
}
|
||||
|
||||
override fun replaceDefaultValue(newDefaultValue: FirExpression?) {
|
||||
defaultValue = newDefaultValue
|
||||
}
|
||||
}
|
||||
|
||||
+4
@@ -172,4 +172,8 @@ internal class FirValueParameterImpl(
|
||||
override fun replaceControlFlowGraphReference(newControlFlowGraphReference: FirControlFlowGraphReference?) {
|
||||
controlFlowGraphReference = newControlFlowGraphReference
|
||||
}
|
||||
|
||||
override fun replaceDefaultValue(newDefaultValue: FirExpression?) {
|
||||
defaultValue = newDefaultValue
|
||||
}
|
||||
}
|
||||
|
||||
+1
-1
@@ -393,7 +393,7 @@ object NodeConfigurator : AbstractFieldConfigurator<FirTreeBuilder>(FirTreeBuild
|
||||
|
||||
valueParameter.configure {
|
||||
+symbol("FirValueParameterSymbol")
|
||||
+field("defaultValue", expression, nullable = true)
|
||||
+field("defaultValue", expression, nullable = true, withReplace = true)
|
||||
+field("containingFunctionSymbol", functionSymbolType, "*").apply {
|
||||
withBindThis = false
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user