From ab34f8c7381690ea05e6af18da3d103959f47c57 Mon Sep 17 00:00:00 2001 From: Toshiaki Kameyama Date: Thu, 31 Oct 2019 11:51:14 +0900 Subject: [PATCH] Add indent before accessor for extension property (KT-33131) #KT-33131 Fixed --- .../kotlin/idea/formatter/KotlinCommonBlock.kt | 9 +++++++-- .../PerformanceTypingIndentationTestGenerated.java | 10 ++++++++++ .../AfterExtensionPropertyGetter.after.kt | 5 +++++ .../AfterExtensionPropertyGetter.kt | 4 ++++ .../AfterExtensionPropertySetter.after.kt | 5 +++++ .../AfterExtensionPropertySetter.kt | 4 ++++ .../formatter/TypingIndentationTestBaseGenerated.java | 10 ++++++++++ 7 files changed, 45 insertions(+), 2 deletions(-) create mode 100644 idea/testData/indentationOnNewline/AfterExtensionPropertyGetter.after.kt create mode 100644 idea/testData/indentationOnNewline/AfterExtensionPropertyGetter.kt create mode 100644 idea/testData/indentationOnNewline/AfterExtensionPropertySetter.after.kt create mode 100644 idea/testData/indentationOnNewline/AfterExtensionPropertySetter.kt diff --git a/idea/formatter/src/org/jetbrains/kotlin/idea/formatter/KotlinCommonBlock.kt b/idea/formatter/src/org/jetbrains/kotlin/idea/formatter/KotlinCommonBlock.kt index 73839daded1..360d8d97fe0 100644 --- a/idea/formatter/src/org/jetbrains/kotlin/idea/formatter/KotlinCommonBlock.kt +++ b/idea/formatter/src/org/jetbrains/kotlin/idea/formatter/KotlinCommonBlock.kt @@ -328,10 +328,15 @@ abstract class KotlinCommonBlock( } if (newChildIndex > 0) { - val prevBlock = mySubBlocks?.get(newChildIndex - 1) - if (prevBlock?.node?.elementType == MODIFIER_LIST) { + val prevNode = mySubBlocks?.get(newChildIndex - 1)?.node + if (prevNode?.elementType == MODIFIER_LIST) { return ChildAttributes(Indent.getNoneIndent(), null) } + val property = prevNode?.psi as? KtProperty + if (property?.receiverTypeReference != null && property.accessors.isNotEmpty()) { + val indent = if (type in CODE_BLOCKS) Indent.getContinuationIndent() else Indent.getNormalIndent() + return ChildAttributes(indent, null) + } } return when (type) { diff --git a/idea/performanceTests/test/org/jetbrains/kotlin/idea/perf/PerformanceTypingIndentationTestGenerated.java b/idea/performanceTests/test/org/jetbrains/kotlin/idea/perf/PerformanceTypingIndentationTestGenerated.java index 3291fdd4e0a..b6030d6c485 100644 --- a/idea/performanceTests/test/org/jetbrains/kotlin/idea/perf/PerformanceTypingIndentationTestGenerated.java +++ b/idea/performanceTests/test/org/jetbrains/kotlin/idea/perf/PerformanceTypingIndentationTestGenerated.java @@ -34,6 +34,16 @@ public class PerformanceTypingIndentationTestGenerated extends AbstractPerforman runTest("idea/testData/indentationOnNewline/AfterClassNameBeforeFun.kt"); } + @TestMetadata("AfterExtensionPropertyGetter.kt") + public void testAfterExtensionPropertyGetter() throws Exception { + runTest("idea/testData/indentationOnNewline/AfterExtensionPropertyGetter.kt"); + } + + @TestMetadata("AfterExtensionPropertySetter.kt") + public void testAfterExtensionPropertySetter() throws Exception { + runTest("idea/testData/indentationOnNewline/AfterExtensionPropertySetter.kt"); + } + @TestMetadata("AfterFinally.kt") public void testAfterFinally() throws Exception { runTest("idea/testData/indentationOnNewline/AfterFinally.kt"); diff --git a/idea/testData/indentationOnNewline/AfterExtensionPropertyGetter.after.kt b/idea/testData/indentationOnNewline/AfterExtensionPropertyGetter.after.kt new file mode 100644 index 00000000000..31dbf30b9c2 --- /dev/null +++ b/idea/testData/indentationOnNewline/AfterExtensionPropertyGetter.after.kt @@ -0,0 +1,5 @@ +var String.foo: Int + get() = length + + +// WITHOUT_CUSTOM_LINE_INDENT_PROVIDER \ No newline at end of file diff --git a/idea/testData/indentationOnNewline/AfterExtensionPropertyGetter.kt b/idea/testData/indentationOnNewline/AfterExtensionPropertyGetter.kt new file mode 100644 index 00000000000..189e5e6c3c1 --- /dev/null +++ b/idea/testData/indentationOnNewline/AfterExtensionPropertyGetter.kt @@ -0,0 +1,4 @@ +var String.foo: Int + get() = length + +// WITHOUT_CUSTOM_LINE_INDENT_PROVIDER \ No newline at end of file diff --git a/idea/testData/indentationOnNewline/AfterExtensionPropertySetter.after.kt b/idea/testData/indentationOnNewline/AfterExtensionPropertySetter.after.kt new file mode 100644 index 00000000000..a9529bc6136 --- /dev/null +++ b/idea/testData/indentationOnNewline/AfterExtensionPropertySetter.after.kt @@ -0,0 +1,5 @@ +var String.foo: Int + set(value) {} + + +// WITHOUT_CUSTOM_LINE_INDENT_PROVIDER \ No newline at end of file diff --git a/idea/testData/indentationOnNewline/AfterExtensionPropertySetter.kt b/idea/testData/indentationOnNewline/AfterExtensionPropertySetter.kt new file mode 100644 index 00000000000..0958c27dc2c --- /dev/null +++ b/idea/testData/indentationOnNewline/AfterExtensionPropertySetter.kt @@ -0,0 +1,4 @@ +var String.foo: Int + set(value) {} + +// WITHOUT_CUSTOM_LINE_INDENT_PROVIDER \ No newline at end of file diff --git a/idea/tests/org/jetbrains/kotlin/formatter/TypingIndentationTestBaseGenerated.java b/idea/tests/org/jetbrains/kotlin/formatter/TypingIndentationTestBaseGenerated.java index d48f88365d1..24810cff074 100644 --- a/idea/tests/org/jetbrains/kotlin/formatter/TypingIndentationTestBaseGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/formatter/TypingIndentationTestBaseGenerated.java @@ -36,6 +36,16 @@ public class TypingIndentationTestBaseGenerated extends AbstractTypingIndentatio runTest("idea/testData/indentationOnNewline/AfterClassNameBeforeFun.after.kt"); } + @TestMetadata("AfterExtensionPropertyGetter.after.kt") + public void testAfterExtensionPropertyGetter() throws Exception { + runTest("idea/testData/indentationOnNewline/AfterExtensionPropertyGetter.after.kt"); + } + + @TestMetadata("AfterExtensionPropertySetter.after.kt") + public void testAfterExtensionPropertySetter() throws Exception { + runTest("idea/testData/indentationOnNewline/AfterExtensionPropertySetter.after.kt"); + } + @TestMetadata("AfterFinally.after.kt") public void testAfterFinally() throws Exception { runTest("idea/testData/indentationOnNewline/AfterFinally.after.kt");