Skip to content

Commit

Permalink
[IR] KotlinLikeDumper: deduplicate code between IrDelegatingConstruct…
Browse files Browse the repository at this point in the history
…orCall and IrEnumConstructorCall
  • Loading branch information
bashor authored and teamcityserver committed Nov 25, 2020
1 parent e56787c commit 0bf587a
Showing 1 changed file with 25 additions and 26 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -826,7 +826,7 @@ private class KotlinLikeDumper(val p: Printer, val options: KotlinLikeDumpOption

override fun visitCall(expression: IrCall, data: IrDeclaration?) {
// TODO process specially builtin symbols
expression.printIrFunctionAccessExpressionWithNoIndent(
expression.printFunctionAccessExpressionWithNoIndent(
expression.symbol.owner.name.asString(),
superQualifierSymbol = expression.superQualifierSymbol,
omitBracesIfNoArguments = false,
Expand All @@ -837,7 +837,7 @@ private class KotlinLikeDumper(val p: Printer, val options: KotlinLikeDumpOption
override fun visitConstructorCall(expression: IrConstructorCall, data: IrDeclaration?) {
// TODO could constructors have receiver?
val clazz = expression.symbol.owner.parentAsClass
expression.printIrFunctionAccessExpressionWithNoIndent(
expression.printFunctionAccessExpressionWithNoIndent(
clazz.name.asString(),
superQualifierSymbol = null,
omitBracesIfNoArguments = clazz.isAnnotationClass,
Expand All @@ -846,43 +846,42 @@ private class KotlinLikeDumper(val p: Printer, val options: KotlinLikeDumpOption
}

override fun visitDelegatingConstructorCall(expression: IrDelegatingConstructorCall, data: IrDeclaration?) {
// TODO skip Any?
// TODO flag to omit comment block?
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
)
// TODO skip call to Any?
expression.printConstructorCallWithNoIndent(data)
}

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 delegatingClassName = delegatingClass.name.asString()
val name = when {
data !is IrConstructor -> delegatingClassName
currentClass == null -> "delegating/*$delegatingClassName*/"
currentClass == delegatingClass -> "this/*$delegatingClassName*/"
else -> "super/*$delegatingClassName*/"

val name = if (data is IrConstructor) {
when (currentClass) {
null -> "delegating/*$delegatingClassName*/"
delegatingClass -> "this/*$delegatingClassName*/"
else -> "super/*$delegatingClassName*/"
}
} else {
delegatingClassName // required only for IrEnumConstructorCall
}
expression.printIrFunctionAccessExpressionWithNoIndent(

printFunctionAccessExpressionWithNoIndent(
name,
superQualifierSymbol = null,
omitBracesIfNoArguments = false,
data
)
}

private fun IrFunctionAccessExpression.printIrFunctionAccessExpressionWithNoIndent(
private fun IrFunctionAccessExpression.printFunctionAccessExpressionWithNoIndent(
name: String,
superQualifierSymbol: IrClassSymbol?,
omitBracesIfNoArguments: Boolean,
Expand Down

0 comments on commit 0bf587a

Please sign in to comment.