diff --git a/idea/src/org/jetbrains/kotlin/idea/formatter/kotlinSpacingRules.kt b/idea/src/org/jetbrains/kotlin/idea/formatter/kotlinSpacingRules.kt index b63ea4b7c31..9e33571ad82 100644 --- a/idea/src/org/jetbrains/kotlin/idea/formatter/kotlinSpacingRules.kt +++ b/idea/src/org/jetbrains/kotlin/idea/formatter/kotlinSpacingRules.kt @@ -46,7 +46,8 @@ fun createSpacingBuilder(settings: CodeStyleSettings): KotlinSpacingBuilder { val jetCommonSettings = settings.getCommonSettings(JetLanguage.INSTANCE)!! return rules(settings) { - val DECLARATIONS = TokenSet.create(PROPERTY, FUN, CLASS, OBJECT_DECLARATION, ENUM_ENTRY, SECONDARY_CONSTRUCTOR) + val DECLARATIONS = + TokenSet.create(PROPERTY, FUN, CLASS, OBJECT_DECLARATION, ENUM_ENTRY, SECONDARY_CONSTRUCTOR, ANONYMOUS_INITIALIZER) custom { inPosition(left = CLASS, right = CLASS).emptyLinesIfLineBreakInLeft(1) @@ -92,6 +93,7 @@ fun createSpacingBuilder(settings: CodeStyleSettings): KotlinSpacingBuilder { between(OBJECT_DECLARATION, DECLARATIONS).blankLines(1) between(SECONDARY_CONSTRUCTOR, DECLARATIONS).blankLines(1) + between(ANONYMOUS_INITIALIZER, DECLARATIONS).blankLines(1) // ENUM_ENTRY - ENUM_ENTRY is exception between(ENUM_ENTRY, DECLARATIONS).blankLines(1) @@ -260,6 +262,7 @@ fun createSpacingBuilder(settings: CodeStyleSettings): KotlinSpacingBuilder { inPosition(parent = FUN, right = BLOCK).customRule(leftBraceRule()) inPosition(parent = SECONDARY_CONSTRUCTOR, right = BLOCK).customRule(leftBraceRule()) + inPosition(parent = ANONYMOUS_INITIALIZER, right = BLOCK).customRule(leftBraceRule()) inPosition(parent = PROPERTY_ACCESSOR, right = BLOCK).customRule(leftBraceRule()) inPosition(right = CLASS_BODY).customRule(leftBraceRule(blockType = CLASS_BODY)) diff --git a/idea/testData/formatter/AnonymousInitializers.after.kt b/idea/testData/formatter/AnonymousInitializers.after.kt new file mode 100644 index 00000000000..68581757fd8 --- /dev/null +++ b/idea/testData/formatter/AnonymousInitializers.after.kt @@ -0,0 +1,58 @@ +annotation class Ann +class A { + { + } + + { + } + + { + } + + fun foo1() { + + } + + val x: Int = 1 + + init { + } + + fun foo2() { + + } + + Ann init { + } + + Ann init { + } + + + fun foo3() { + + } + + + { + } + + constructor() { + + } + + + /* abcde */init { + + } + + fun foo4() { + + } + + val a3 = foo4() // el + + /* abc */ init { + + } +} diff --git a/idea/testData/formatter/AnonymousInitializers.kt b/idea/testData/formatter/AnonymousInitializers.kt new file mode 100644 index 00000000000..2af48201c0a --- /dev/null +++ b/idea/testData/formatter/AnonymousInitializers.kt @@ -0,0 +1,41 @@ +annotation class Ann +class A { + {}{}{} + fun foo1() { + + } + val x: Int = 1 + init{} + fun foo2() { + + } + Ann init {} + Ann init {} + + + fun foo3() { + + } + + + {} + + constructor() { + + } + + + + /* abcde */init { + + } + + fun foo4() { + + } + + val a3 = foo4() // el + /* abc */ init { + + } +} \ No newline at end of file diff --git a/idea/testData/formatter/AnonymousInitializersLineBreak.after.inv.kt b/idea/testData/formatter/AnonymousInitializersLineBreak.after.inv.kt new file mode 100644 index 00000000000..111f4d75ebb --- /dev/null +++ b/idea/testData/formatter/AnonymousInitializersLineBreak.after.inv.kt @@ -0,0 +1,30 @@ +annotation class Ann +class A { + { + } + + { + } + + init { + } + + init { + } + + init { + } + + { + } + + /* abcde */init { + + } + + /* abc */ init // eol-comment + { + + } +} +// SET_TRUE: LBRACE_ON_NEXT_LINE diff --git a/idea/testData/formatter/AnonymousInitializersLineBreak.after.kt b/idea/testData/formatter/AnonymousInitializersLineBreak.after.kt new file mode 100644 index 00000000000..2096a3b583a --- /dev/null +++ b/idea/testData/formatter/AnonymousInitializersLineBreak.after.kt @@ -0,0 +1,35 @@ +annotation class Ann +class A +{ + { + } + + { + } + + init + { + } + + init + { + } + + init + { + } + + { + } + + /* abcde */init + { + + } + + /* abc */ init // eol-comment + { + + } +} +// SET_TRUE: LBRACE_ON_NEXT_LINE diff --git a/idea/testData/formatter/AnonymousInitializersLineBreak.kt b/idea/testData/formatter/AnonymousInitializersLineBreak.kt new file mode 100644 index 00000000000..cb26df35dc7 --- /dev/null +++ b/idea/testData/formatter/AnonymousInitializersLineBreak.kt @@ -0,0 +1,22 @@ +annotation class Ann +class A { + {}{} + + init{} + + init {} + + init {} + + {} + + /* abcde */init { + + } + + /* abc */ init // eol-comment + { + + } +} +// SET_TRUE: LBRACE_ON_NEXT_LINE diff --git a/idea/tests/org/jetbrains/kotlin/formatter/JetFormatterTestGenerated.java b/idea/tests/org/jetbrains/kotlin/formatter/JetFormatterTestGenerated.java index bf2bc65f08f..b35d12a9360 100644 --- a/idea/tests/org/jetbrains/kotlin/formatter/JetFormatterTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/formatter/JetFormatterTestGenerated.java @@ -46,6 +46,18 @@ public class JetFormatterTestGenerated extends AbstractJetFormatterTest { JetTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("idea/testData/formatter"), Pattern.compile("^([^\\.]+)\\.after\\.kt.*$"), true); } + @TestMetadata("AnonymousInitializers.after.kt") + public void testAnonymousInitializers() throws Exception { + String fileName = JetTestUtils.navigationMetadata("idea/testData/formatter/AnonymousInitializers.after.kt"); + doTest(fileName); + } + + @TestMetadata("AnonymousInitializersLineBreak.after.kt") + public void testAnonymousInitializersLineBreak() throws Exception { + String fileName = JetTestUtils.navigationMetadata("idea/testData/formatter/AnonymousInitializersLineBreak.after.kt"); + doTest(fileName); + } + @TestMetadata("ArrayAccess.after.kt") public void testArrayAccess() throws Exception { String fileName = JetTestUtils.navigationMetadata("idea/testData/formatter/ArrayAccess.after.kt"); @@ -705,6 +717,12 @@ public class JetFormatterTestGenerated extends AbstractJetFormatterTest { JetTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("idea/testData/formatter"), Pattern.compile("^([^\\.]+)\\.after\\.inv\\.kt.*$"), true); } + @TestMetadata("AnonymousInitializersLineBreak.after.inv.kt") + public void testAnonymousInitializersLineBreak() throws Exception { + String fileName = JetTestUtils.navigationMetadata("idea/testData/formatter/AnonymousInitializersLineBreak.after.inv.kt"); + doTestInverted(fileName); + } + @TestMetadata("BinaryExpressions.after.inv.kt") public void testBinaryExpressions() throws Exception { String fileName = JetTestUtils.navigationMetadata("idea/testData/formatter/BinaryExpressions.after.inv.kt"); diff --git a/j2k/testData/fileOrElement/anonymousBlock/oneAnonBlock.kt b/j2k/testData/fileOrElement/anonymousBlock/oneAnonBlock.kt index e8ceb4740b6..e951e1d01ce 100644 --- a/j2k/testData/fileOrElement/anonymousBlock/oneAnonBlock.kt +++ b/j2k/testData/fileOrElement/anonymousBlock/oneAnonBlock.kt @@ -1,5 +1,6 @@ class Test { var str: String + { str = "Ola" } diff --git a/j2k/testData/fileOrElement/anonymousBlock/oneStaticAnonBlock.kt b/j2k/testData/fileOrElement/anonymousBlock/oneStaticAnonBlock.kt index 45d7cf30bfb..e57e183e974 100644 --- a/j2k/testData/fileOrElement/anonymousBlock/oneStaticAnonBlock.kt +++ b/j2k/testData/fileOrElement/anonymousBlock/oneStaticAnonBlock.kt @@ -1,6 +1,7 @@ class Test { companion object { var str: String + { str = "Ola" } diff --git a/j2k/testData/fileOrElement/issues/kt-963.kt b/j2k/testData/fileOrElement/issues/kt-963.kt index 15dc3e83172..722879d209a 100644 --- a/j2k/testData/fileOrElement/issues/kt-963.kt +++ b/j2k/testData/fileOrElement/issues/kt-963.kt @@ -5,5 +5,6 @@ class C(a: Int) { { abc = a * 2 } + var abc = 0 } \ No newline at end of file