[IR] KotlinLikeDumper: deduplicate code between IrDelegatingConstructorCall and IrEnumConstructorCall
This commit is contained in:
committed by
teamcityserver
parent
e56787c0b0
commit
0bf587ad4b
@@ -826,7 +826,7 @@ private class KotlinLikeDumper(val p: Printer, val options: KotlinLikeDumpOption
|
|||||||
|
|
||||||
override fun visitCall(expression: IrCall, data: IrDeclaration?) {
|
override fun visitCall(expression: IrCall, data: IrDeclaration?) {
|
||||||
// TODO process specially builtin symbols
|
// TODO process specially builtin symbols
|
||||||
expression.printIrFunctionAccessExpressionWithNoIndent(
|
expression.printFunctionAccessExpressionWithNoIndent(
|
||||||
expression.symbol.owner.name.asString(),
|
expression.symbol.owner.name.asString(),
|
||||||
superQualifierSymbol = expression.superQualifierSymbol,
|
superQualifierSymbol = expression.superQualifierSymbol,
|
||||||
omitBracesIfNoArguments = false,
|
omitBracesIfNoArguments = false,
|
||||||
@@ -837,7 +837,7 @@ private class KotlinLikeDumper(val p: Printer, val options: KotlinLikeDumpOption
|
|||||||
override fun visitConstructorCall(expression: IrConstructorCall, data: IrDeclaration?) {
|
override fun visitConstructorCall(expression: IrConstructorCall, data: IrDeclaration?) {
|
||||||
// TODO could constructors have receiver?
|
// TODO could constructors have receiver?
|
||||||
val clazz = expression.symbol.owner.parentAsClass
|
val clazz = expression.symbol.owner.parentAsClass
|
||||||
expression.printIrFunctionAccessExpressionWithNoIndent(
|
expression.printFunctionAccessExpressionWithNoIndent(
|
||||||
clazz.name.asString(),
|
clazz.name.asString(),
|
||||||
superQualifierSymbol = null,
|
superQualifierSymbol = null,
|
||||||
omitBracesIfNoArguments = clazz.isAnnotationClass,
|
omitBracesIfNoArguments = clazz.isAnnotationClass,
|
||||||
@@ -846,35 +846,34 @@ private class KotlinLikeDumper(val p: Printer, val options: KotlinLikeDumpOption
|
|||||||
}
|
}
|
||||||
|
|
||||||
override fun visitDelegatingConstructorCall(expression: IrDelegatingConstructorCall, data: IrDeclaration?) {
|
override fun visitDelegatingConstructorCall(expression: IrDelegatingConstructorCall, data: IrDeclaration?) {
|
||||||
// TODO skip Any?
|
// TODO skip call to Any?
|
||||||
// TODO flag to omit comment block?
|
expression.printConstructorCallWithNoIndent(data)
|
||||||
val delegatingClass = expression.symbol.owner.parentAsClass
|
|
||||||
val currentClass = data?.parentAsClass
|
|
||||||
val delegatingClassName = delegatingClass.name.asString()
|
|
||||||
val name = when (currentClass) {
|
|
||||||
null -> "delegating/*$delegatingClassName*/"
|
|
||||||
delegatingClass -> "this/*$delegatingClassName*/"
|
|
||||||
else -> "super/*$delegatingClassName*/"
|
|
||||||
}
|
|
||||||
expression.printIrFunctionAccessExpressionWithNoIndent(
|
|
||||||
name,
|
|
||||||
superQualifierSymbol = null,
|
|
||||||
omitBracesIfNoArguments = false,
|
|
||||||
data
|
|
||||||
)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun visitEnumConstructorCall(expression: IrEnumConstructorCall, data: IrDeclaration?) {
|
override fun visitEnumConstructorCall(expression: IrEnumConstructorCall, data: IrDeclaration?) {
|
||||||
val delegatingClass = expression.symbol.owner.parentAsClass
|
// TODO skip call to Enum?
|
||||||
|
expression.printConstructorCallWithNoIndent(data)
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun IrFunctionAccessExpression.printConstructorCallWithNoIndent(
|
||||||
|
data: IrDeclaration?
|
||||||
|
) {
|
||||||
|
// TODO flag to omit comment block?
|
||||||
|
val delegatingClass = symbol.owner.parentAsClass
|
||||||
val currentClass = data?.parentAsClass
|
val currentClass = data?.parentAsClass
|
||||||
val delegatingClassName = delegatingClass.name.asString()
|
val delegatingClassName = delegatingClass.name.asString()
|
||||||
val name = when {
|
|
||||||
data !is IrConstructor -> delegatingClassName
|
val name = if (data is IrConstructor) {
|
||||||
currentClass == null -> "delegating/*$delegatingClassName*/"
|
when (currentClass) {
|
||||||
currentClass == delegatingClass -> "this/*$delegatingClassName*/"
|
null -> "delegating/*$delegatingClassName*/"
|
||||||
else -> "super/*$delegatingClassName*/"
|
delegatingClass -> "this/*$delegatingClassName*/"
|
||||||
|
else -> "super/*$delegatingClassName*/"
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
delegatingClassName // required only for IrEnumConstructorCall
|
||||||
}
|
}
|
||||||
expression.printIrFunctionAccessExpressionWithNoIndent(
|
|
||||||
|
printFunctionAccessExpressionWithNoIndent(
|
||||||
name,
|
name,
|
||||||
superQualifierSymbol = null,
|
superQualifierSymbol = null,
|
||||||
omitBracesIfNoArguments = false,
|
omitBracesIfNoArguments = false,
|
||||||
@@ -882,7 +881,7 @@ private class KotlinLikeDumper(val p: Printer, val options: KotlinLikeDumpOption
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun IrFunctionAccessExpression.printIrFunctionAccessExpressionWithNoIndent(
|
private fun IrFunctionAccessExpression.printFunctionAccessExpressionWithNoIndent(
|
||||||
name: String,
|
name: String,
|
||||||
superQualifierSymbol: IrClassSymbol?,
|
superQualifierSymbol: IrClassSymbol?,
|
||||||
omitBracesIfNoArguments: Boolean,
|
omitBracesIfNoArguments: Boolean,
|
||||||
|
|||||||
Reference in New Issue
Block a user