From 22425de5cb11ddb13aa7969b92d3a88973e513ad Mon Sep 17 00:00:00 2001 From: Denis Zharkov Date: Thu, 12 Mar 2015 20:14:49 +0300 Subject: [PATCH] Setup spacing rules for secondary constructors #KT-6968 Fixed --- .../idea/formatter/kotlinSpacingRules.kt | 10 ++- .../formatter/SecondaryConstructors.after.kt | 63 +++++++++++++++++++ .../formatter/SecondaryConstructors.kt | 31 +++++++++ ...oundExtendColonInSecondaryCtr.after.inv.kt | 16 +++++ ...ceAroundExtendColonInSecondaryCtr.after.kt | 16 +++++ .../SpaceAroundExtendColonInSecondaryCtr.kt | 9 +++ .../secondaryCtorLineBreak.after.inv.kt | 25 ++++++++ .../formatter/secondaryCtorLineBreak.after.kt | 30 +++++++++ .../formatter/secondaryCtorLineBreak.kt | 25 ++++++++ .../formatter/JetFormatterTestGenerated.java | 30 +++++++++ j2k/testData/fileOrElement/class/kt-639.kt | 1 + 11 files changed, 254 insertions(+), 2 deletions(-) create mode 100644 idea/testData/formatter/SecondaryConstructors.after.kt create mode 100644 idea/testData/formatter/SecondaryConstructors.kt create mode 100644 idea/testData/formatter/SpaceAroundExtendColonInSecondaryCtr.after.inv.kt create mode 100644 idea/testData/formatter/SpaceAroundExtendColonInSecondaryCtr.after.kt create mode 100644 idea/testData/formatter/SpaceAroundExtendColonInSecondaryCtr.kt create mode 100644 idea/testData/formatter/secondaryCtorLineBreak.after.inv.kt create mode 100644 idea/testData/formatter/secondaryCtorLineBreak.after.kt create mode 100644 idea/testData/formatter/secondaryCtorLineBreak.kt diff --git a/idea/src/org/jetbrains/kotlin/idea/formatter/kotlinSpacingRules.kt b/idea/src/org/jetbrains/kotlin/idea/formatter/kotlinSpacingRules.kt index d674a026c9b..b63ea4b7c31 100644 --- a/idea/src/org/jetbrains/kotlin/idea/formatter/kotlinSpacingRules.kt +++ b/idea/src/org/jetbrains/kotlin/idea/formatter/kotlinSpacingRules.kt @@ -46,7 +46,7 @@ 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) + val DECLARATIONS = TokenSet.create(PROPERTY, FUN, CLASS, OBJECT_DECLARATION, ENUM_ENTRY, SECONDARY_CONSTRUCTOR) custom { inPosition(left = CLASS, right = CLASS).emptyLinesIfLineBreakInLeft(1) @@ -91,6 +91,7 @@ fun createSpacingBuilder(settings: CodeStyleSettings): KotlinSpacingBuilder { between(PROPERTY, DECLARATIONS).blankLines(1) between(OBJECT_DECLARATION, DECLARATIONS).blankLines(1) + between(SECONDARY_CONSTRUCTOR, DECLARATIONS).blankLines(1) // ENUM_ENTRY - ENUM_ENTRY is exception between(ENUM_ENTRY, DECLARATIONS).blankLines(1) @@ -139,6 +140,9 @@ fun createSpacingBuilder(settings: CodeStyleSettings): KotlinSpacingBuilder { betweenInside(DOT, IDENTIFIER, FUN).spacing(0, 0, 0, false, 0) afterInside(IDENTIFIER, FUN).spacing(0, 0, 0, false, 0) + // before LPAR in constructor(): this() {} + after(CONSTRUCTOR_DELEGATION_REFERENCE).spacing(0, 0, 0, false, 0) + aroundInside(DOT, DOT_QUALIFIED_EXPRESSION).spaces(0) aroundInside(SAFE_ACCESS, SAFE_ACCESS_EXPRESSION).spaces(0) @@ -166,7 +170,8 @@ fun createSpacingBuilder(settings: CodeStyleSettings): KotlinSpacingBuilder { beforeInside(COLON, TYPE_COLON_ELEMENTS) { spaceIf(jetSettings.SPACE_BEFORE_TYPE_COLON) } afterInside(COLON, TYPE_COLON_ELEMENTS) { spaceIf(jetSettings.SPACE_AFTER_TYPE_COLON) } - val EXTEND_COLON_ELEMENTS = TokenSet.create(TYPE_CONSTRAINT, CLASS, OBJECT_DECLARATION, TYPE_PARAMETER, ENUM_ENTRY) + val EXTEND_COLON_ELEMENTS = + TokenSet.create(TYPE_CONSTRAINT, CLASS, OBJECT_DECLARATION, TYPE_PARAMETER, ENUM_ENTRY, SECONDARY_CONSTRUCTOR) beforeInside(COLON, EXTEND_COLON_ELEMENTS) { spaceIf(jetSettings.SPACE_BEFORE_EXTEND_COLON) } afterInside(COLON, EXTEND_COLON_ELEMENTS) { spaceIf(jetSettings.SPACE_AFTER_EXTEND_COLON) } @@ -254,6 +259,7 @@ fun createSpacingBuilder(settings: CodeStyleSettings): KotlinSpacingBuilder { inPosition(parent = FINALLY, right = BLOCK).customRule(leftBraceRule()) inPosition(parent = FUN, right = BLOCK).customRule(leftBraceRule()) + inPosition(parent = SECONDARY_CONSTRUCTOR, 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/SecondaryConstructors.after.kt b/idea/testData/formatter/SecondaryConstructors.after.kt new file mode 100644 index 00000000000..50d18ecce1b --- /dev/null +++ b/idea/testData/formatter/SecondaryConstructors.after.kt @@ -0,0 +1,63 @@ +class A { + constructor() { + } + + constructor() { + } + + fun foo() { + } + + constructor() { + } + + fun foo() { + } + + constructor() { + } + + val x = 1 + + constructor() { + } + + fun foo() { + } + + val x = 1 + + constructor() { + } + + val x = 1 + val x = 1 + + constructor() { + } + + constructor() { + + x = 1 + } + + fun foo() = 1 + + constructor() { + } + + fun foo() = 1 + + + constructor() : this() { + } + + constructor() : this() { + } + + constructor() : this() { + } + + constructor() : super() { + } +} \ No newline at end of file diff --git a/idea/testData/formatter/SecondaryConstructors.kt b/idea/testData/formatter/SecondaryConstructors.kt new file mode 100644 index 00000000000..9949dc578c2 --- /dev/null +++ b/idea/testData/formatter/SecondaryConstructors.kt @@ -0,0 +1,31 @@ +class A { + constructor() {} + constructor() {} + fun foo() {} + constructor() {} + fun foo() {} + constructor() {} + val x = 1 + constructor() {} + fun foo() {} + val x = 1 + constructor() {} + val x = 1 + val x = 1 +constructor() {} + constructor() { + + x = 1 + } + fun foo() = 1 + constructor() {} + fun foo() = 1 + + + + constructor() : this() {} +constructor():this() {} + + constructor(): this () {} + constructor(): super(){} +} \ No newline at end of file diff --git a/idea/testData/formatter/SpaceAroundExtendColonInSecondaryCtr.after.inv.kt b/idea/testData/formatter/SpaceAroundExtendColonInSecondaryCtr.after.inv.kt new file mode 100644 index 00000000000..2a6b0f7e7ed --- /dev/null +++ b/idea/testData/formatter/SpaceAroundExtendColonInSecondaryCtr.after.inv.kt @@ -0,0 +1,16 @@ +class A { + constructor() { + } + + constructor(): this() { + } + + constructor(): super() { + } + + constructor(): super() { + } +} + +// SET_TRUE: SPACE_BEFORE_EXTEND_COLON +// SET_FALSE: SPACE_AFTER_EXTEND_COLON diff --git a/idea/testData/formatter/SpaceAroundExtendColonInSecondaryCtr.after.kt b/idea/testData/formatter/SpaceAroundExtendColonInSecondaryCtr.after.kt new file mode 100644 index 00000000000..1914b65f476 --- /dev/null +++ b/idea/testData/formatter/SpaceAroundExtendColonInSecondaryCtr.after.kt @@ -0,0 +1,16 @@ +class A { + constructor() { + } + + constructor() :this() { + } + + constructor() :super() { + } + + constructor() :super() { + } +} + +// SET_TRUE: SPACE_BEFORE_EXTEND_COLON +// SET_FALSE: SPACE_AFTER_EXTEND_COLON diff --git a/idea/testData/formatter/SpaceAroundExtendColonInSecondaryCtr.kt b/idea/testData/formatter/SpaceAroundExtendColonInSecondaryCtr.kt new file mode 100644 index 00000000000..e260c748bcd --- /dev/null +++ b/idea/testData/formatter/SpaceAroundExtendColonInSecondaryCtr.kt @@ -0,0 +1,9 @@ +class A { + constructor() {} + constructor() : this() {} + constructor(): super() {} + constructor():super() {} +} + +// SET_TRUE: SPACE_BEFORE_EXTEND_COLON +// SET_FALSE: SPACE_AFTER_EXTEND_COLON diff --git a/idea/testData/formatter/secondaryCtorLineBreak.after.inv.kt b/idea/testData/formatter/secondaryCtorLineBreak.after.inv.kt new file mode 100644 index 00000000000..62f31f0a543 --- /dev/null +++ b/idea/testData/formatter/secondaryCtorLineBreak.after.inv.kt @@ -0,0 +1,25 @@ +class A { + constructor() { + } + + constructor() : this() { + } + + constructor() { + + } + + constructor() //eol comment + { + + } + + constructor() : super(1, 2, 3) //eol comment + { + } + + constructor() { + } +} + +// SET_TRUE: LBRACE_ON_NEXT_LINE diff --git a/idea/testData/formatter/secondaryCtorLineBreak.after.kt b/idea/testData/formatter/secondaryCtorLineBreak.after.kt new file mode 100644 index 00000000000..9e7b9a77a57 --- /dev/null +++ b/idea/testData/formatter/secondaryCtorLineBreak.after.kt @@ -0,0 +1,30 @@ +class A +{ + constructor() + { + } + + constructor() : this() + { + } + + constructor() + { + + } + + constructor() //eol comment + { + + } + + constructor() : super(1, 2, 3) //eol comment + { + } + + constructor() + { + } +} + +// SET_TRUE: LBRACE_ON_NEXT_LINE diff --git a/idea/testData/formatter/secondaryCtorLineBreak.kt b/idea/testData/formatter/secondaryCtorLineBreak.kt new file mode 100644 index 00000000000..85d6fdb42af --- /dev/null +++ b/idea/testData/formatter/secondaryCtorLineBreak.kt @@ -0,0 +1,25 @@ +class A { + constructor() {} + constructor() : this() + + {} + + constructor() + { + + } + + constructor() //eol comment + { + + } + + constructor():super(1,2,3) //eol comment + + {} + + constructor() { + } +} + +// 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 c0cd65f4ed1..bf2bc65f08f 100644 --- a/idea/tests/org/jetbrains/kotlin/formatter/JetFormatterTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/formatter/JetFormatterTestGenerated.java @@ -400,6 +400,18 @@ public class JetFormatterTestGenerated extends AbstractJetFormatterTest { doTest(fileName); } + @TestMetadata("SecondaryConstructors.after.kt") + public void testSecondaryConstructors() throws Exception { + String fileName = JetTestUtils.navigationMetadata("idea/testData/formatter/SecondaryConstructors.after.kt"); + doTest(fileName); + } + + @TestMetadata("secondaryCtorLineBreak.after.kt") + public void testSecondaryCtorLineBreak() throws Exception { + String fileName = JetTestUtils.navigationMetadata("idea/testData/formatter/secondaryCtorLineBreak.after.kt"); + doTest(fileName); + } + @TestMetadata("SingleLineFunctionLiteral.after.kt") public void testSingleLineFunctionLiteral() throws Exception { String fileName = JetTestUtils.navigationMetadata("idea/testData/formatter/SingleLineFunctionLiteral.after.kt"); @@ -424,6 +436,12 @@ public class JetFormatterTestGenerated extends AbstractJetFormatterTest { doTest(fileName); } + @TestMetadata("SpaceAroundExtendColonInSecondaryCtr.after.kt") + public void testSpaceAroundExtendColonInSecondaryCtr() throws Exception { + String fileName = JetTestUtils.navigationMetadata("idea/testData/formatter/SpaceAroundExtendColonInSecondaryCtr.after.kt"); + doTest(fileName); + } + @TestMetadata("SpaceBeforeFunctionLiteral.after.kt") public void testSpaceBeforeFunctionLiteral() throws Exception { String fileName = JetTestUtils.navigationMetadata("idea/testData/formatter/SpaceBeforeFunctionLiteral.after.kt"); @@ -801,6 +819,12 @@ public class JetFormatterTestGenerated extends AbstractJetFormatterTest { doTestInverted(fileName); } + @TestMetadata("secondaryCtorLineBreak.after.inv.kt") + public void testSecondaryCtorLineBreak() throws Exception { + String fileName = JetTestUtils.navigationMetadata("idea/testData/formatter/secondaryCtorLineBreak.after.inv.kt"); + doTestInverted(fileName); + } + @TestMetadata("SingleLineFunctionLiteral.after.inv.kt") public void testSingleLineFunctionLiteral() throws Exception { String fileName = JetTestUtils.navigationMetadata("idea/testData/formatter/SingleLineFunctionLiteral.after.inv.kt"); @@ -825,6 +849,12 @@ public class JetFormatterTestGenerated extends AbstractJetFormatterTest { doTestInverted(fileName); } + @TestMetadata("SpaceAroundExtendColonInSecondaryCtr.after.inv.kt") + public void testSpaceAroundExtendColonInSecondaryCtr() throws Exception { + String fileName = JetTestUtils.navigationMetadata("idea/testData/formatter/SpaceAroundExtendColonInSecondaryCtr.after.inv.kt"); + doTestInverted(fileName); + } + @TestMetadata("SpacesAroundOperations.after.inv.kt") public void testSpacesAroundOperations() throws Exception { String fileName = JetTestUtils.navigationMetadata("idea/testData/formatter/SpacesAroundOperations.after.inv.kt"); diff --git a/j2k/testData/fileOrElement/class/kt-639.kt b/j2k/testData/fileOrElement/class/kt-639.kt index 55e79163231..b3be9543e98 100644 --- a/j2k/testData/fileOrElement/class/kt-639.kt +++ b/j2k/testData/fileOrElement/class/kt-639.kt @@ -7,6 +7,7 @@ import java.util.HashMap class Test { constructor() { } + constructor(s: String) { } }