Support super expressions with type qualifier
Summary: Ouch, this crashed Ktfmt. Adding support for it.
Reviewed By: cgrushko
Differential Revision: D21627282
fbshipit-source-id: 51c60b5c33d80020664a3267876e1c8a940165e2
diff --git a/core/src/main/java/com/facebook/ktfmt/KotlinInputAstVisitor.kt b/core/src/main/java/com/facebook/ktfmt/KotlinInputAstVisitor.kt
index 7221d83..508f65d 100644
--- a/core/src/main/java/com/facebook/ktfmt/KotlinInputAstVisitor.kt
+++ b/core/src/main/java/com/facebook/ktfmt/KotlinInputAstVisitor.kt
@@ -85,6 +85,7 @@
import org.jetbrains.kotlin.psi.KtSecondaryConstructor
import org.jetbrains.kotlin.psi.KtSimpleNameExpression
import org.jetbrains.kotlin.psi.KtStringTemplateExpression
+import org.jetbrains.kotlin.psi.KtSuperExpression
import org.jetbrains.kotlin.psi.KtSuperTypeCallEntry
import org.jetbrains.kotlin.psi.KtSuperTypeList
import org.jetbrains.kotlin.psi.KtThisExpression
@@ -1341,6 +1342,17 @@
builder.token(replaceTrailingWhitespaceWithTombstone(expression.text))
}
+ /** Example `super` in `super.doIt(5)` or `super<Foo>` in `super<Foo>.doIt(5)` */
+ override fun visitSuperExpression(expression: KtSuperExpression) {
+ builder.token("super")
+ val superTypeQualifier = expression.superTypeQualifier
+ if (superTypeQualifier != null) {
+ builder.token("<")
+ superTypeQualifier.accept(this)
+ builder.token(">")
+ }
+ }
+
/** Example `<T, S>` */
override fun visitTypeParameterList(list: KtTypeParameterList) {
builder.sync(list)
diff --git a/core/src/test/java/com/facebook/ktfmt/FormatterKtTest.kt b/core/src/test/java/com/facebook/ktfmt/FormatterKtTest.kt
index 8688da2..974be22 100644
--- a/core/src/test/java/com/facebook/ktfmt/FormatterKtTest.kt
+++ b/core/src/test/java/com/facebook/ktfmt/FormatterKtTest.kt
@@ -1256,6 +1256,17 @@
|""".trimMargin())
@Test
+ fun `handle super statement with with type argument`() =
+ assertFormatted(
+ """
+ |class Foo : Bar(), FooBar {
+ | override fun doIt() {
+ | super<FooBar>.doIt()
+ | }
+ |}
+ |""".trimMargin())
+
+ @Test
fun `primary constructor without parameters with a KDoc`() =
assertFormatted(
"""