From b06b3ab4c46c509216c1f17505d4245b644aa640 Mon Sep 17 00:00:00 2001 From: Nikolay Krasko Date: Fri, 10 Oct 2014 17:50:37 +0400 Subject: [PATCH] Insert empty lines after functions and properties (KT-4002) #KT-4002 Fixed --- .../com/intellij/formatting/annotations.xml | 234 +++++++++--------- .../plugin/formatter/kotlinSpacingRules.kt | 52 +++- .../complexMultiOverride.kt.after | 4 + .../delegatedMembers.kt.after | 4 + .../overrideImplement/generateMulti.kt.after | 2 + .../inheritVisibilities.kt.after | 5 + .../overrideImplement/multiOverride.kt.after | 4 + .../overrideFromClassName.kt.after | 6 +- .../overrideFromFunctionPosition.kt.after | 7 +- .../overrideFromLBrace.kt.after | 6 +- .../overrideRespectCaretPosition.kt.after | 3 + .../respectCaretPosition.kt.after | 1 + .../order/valAndClass.kt.after | 1 + .../EmptyLineBetweeAbstractFunctions.after.kt | 9 + .../EmptyLineBetweeAbstractFunctions.kt | 9 + .../EmptyLineBetweenClassAndFunction.after.kt | 48 ++++ .../EmptyLineBetweenClassAndFunction.kt | 38 +++ .../EmptyLineBetweenClasses.after.kt | 25 ++ .../formatter/EmptyLineBetweenClasses.kt | 19 ++ .../EmptyLineBetweenFunAndProperty.after.kt | 76 ++++++ .../EmptyLineBetweenFunAndProperty.kt | 64 +++++ .../EmptyLineBetweenFunctions.after.kt | 66 +++++ .../formatter/EmptyLineBetweenFunctions.kt | 53 ++++ .../EmptyLineBetweenProperties.after.kt | 42 ++++ .../formatter/EmptyLineBetweenProperties.kt | 36 +++ .../get/afterCreateGetFromUsage11.kt | 1 + .../get/afterCreateGetFromUsage12.kt | 1 + .../invoke/afterInvokeOnUserType.kt | 1 + .../afterInvokeOnUserTypeWithTypeParams.kt | 1 + .../iterator/afterCreateIteratorFromUsage1.kt | 1 + .../iterator/afterCreateIteratorFromUsage2.kt | 1 + .../formatter/JetFormatterTestGenerated.java | 36 +++ .../codeInsight/smartEnter/SmartEnterTest.kt | 2 + .../testData/ast/class/abstractClassShape.kt | 2 + .../ast/class/classWithEmptyMethods.kt | 2 + j2k/tests/testData/ast/class/kt-639.kt | 1 + .../testData/ast/class/twoStaticMethod.kt | 1 + .../ast/constructors/customerBuilder.kt | 1 + .../constructors/methodCallInFactoryFun.kt | 1 + .../ast/formatting/nonStaticMembers.kt | 1 + .../nonStaticMembersWithComments.kt | 1 + .../staticAndNonStaticMembersWithComments.kt | 1 + .../formatting/staticMembersWithComments.kt | 1 + j2k/tests/testData/ast/function/override.kt | 1 + j2k/tests/testData/ast/issues/kt-1048.kt | 1 + .../testData/ast/issues/kt-809-string.kt | 1 + j2k/tests/testData/ast/issues/kt-809.kt | 1 + j2k/tests/testData/ast/issues/kt-836.kt | 2 + .../testData/ast/settings/openByDefault.kt | 4 +- .../ast/staticMembers/PrivateStaticMembers.kt | 1 + .../staticMembers/PrivateStaticMethods1.kt | 1 + .../staticMembers/PrivateStaticMethods2.kt | 1 + .../staticMembers/PrivateStaticMethods3.kt | 1 + .../staticMembers/PrivateStaticMethods4.kt | 1 + 54 files changed, 764 insertions(+), 121 deletions(-) create mode 100644 idea/testData/formatter/EmptyLineBetweeAbstractFunctions.after.kt create mode 100644 idea/testData/formatter/EmptyLineBetweeAbstractFunctions.kt create mode 100644 idea/testData/formatter/EmptyLineBetweenClassAndFunction.after.kt create mode 100644 idea/testData/formatter/EmptyLineBetweenClassAndFunction.kt create mode 100644 idea/testData/formatter/EmptyLineBetweenClasses.after.kt create mode 100644 idea/testData/formatter/EmptyLineBetweenClasses.kt create mode 100644 idea/testData/formatter/EmptyLineBetweenFunAndProperty.after.kt create mode 100644 idea/testData/formatter/EmptyLineBetweenFunAndProperty.kt create mode 100644 idea/testData/formatter/EmptyLineBetweenFunctions.after.kt create mode 100644 idea/testData/formatter/EmptyLineBetweenFunctions.kt create mode 100644 idea/testData/formatter/EmptyLineBetweenProperties.after.kt create mode 100644 idea/testData/formatter/EmptyLineBetweenProperties.kt diff --git a/annotations/com/intellij/formatting/annotations.xml b/annotations/com/intellij/formatting/annotations.xml index 1cfb7a382a8..c5841613c11 100644 --- a/annotations/com/intellij/formatting/annotations.xml +++ b/annotations/com/intellij/formatting/annotations.xml @@ -1,117 +1,121 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/idea/src/org/jetbrains/jet/plugin/formatter/kotlinSpacingRules.kt b/idea/src/org/jetbrains/jet/plugin/formatter/kotlinSpacingRules.kt index a66998b7a63..d151a04572e 100644 --- a/idea/src/org/jetbrains/jet/plugin/formatter/kotlinSpacingRules.kt +++ b/idea/src/org/jetbrains/jet/plugin/formatter/kotlinSpacingRules.kt @@ -29,6 +29,11 @@ import com.intellij.formatting.ASTBlock import org.jetbrains.jet.plugin.formatter.KotlinSpacingBuilder.CustomSpacingBuilder import com.intellij.formatting.SpacingBuilder import com.intellij.formatting.SpacingBuilder.RuleBuilder +import com.intellij.formatting.DependentSpacingRule +import com.intellij.formatting.DependentSpacingRule.Trigger +import com.intellij.formatting.DependentSpacingRule.Anchor +import com.intellij.openapi.util.TextRange +import com.intellij.formatting.DependantSpacingImpl val MODIFIERS_LIST_ENTRIES = TokenSet.orSet(TokenSet.create(ANNOTATION_ENTRY, ANNOTATION), MODIFIER_KEYWORDS) @@ -43,7 +48,31 @@ fun SpacingBuilder.afterInside(element: IElementType, tokenSet: TokenSet, spacin fun createSpacingBuilder(settings: CodeStyleSettings): KotlinSpacingBuilder { val jetSettings = settings.getCustomSettings(javaClass())!! val jetCommonSettings = settings.getCommonSettings(JetLanguage.INSTANCE)!! + return rules(settings) { + custom { + val emptyLineIfLeftMultiline = { (parent: ASTBlock, left: ASTBlock, right: ASTBlock) -> + val multilineLF = 2 + val singleLineLF = 1 + + val dependentSpacingRule = DependentSpacingRule(Trigger.HAS_LINE_FEEDS).registerData(Anchor.MIN_LINE_FEEDS, multilineLF) + LineFeedDependantSpacing( + 0, 0, + minimumLineFeeds = singleLineLF, + keepLineBreaks = settings.KEEP_LINE_BREAKS, + keepBlankLines = settings.KEEP_BLANK_LINES_IN_DECLARATIONS, + dependency = left.getTextRange(), rule = dependentSpacingRule) + } + + inPosition(left = CLASS, right = CLASS).customRule(emptyLineIfLeftMultiline) + inPosition(left = FUN, right = FUN).customRule(emptyLineIfLeftMultiline) + inPosition(left = PROPERTY, right = FUN).customRule(emptyLineIfLeftMultiline) + inPosition(left = FUN, right = PROPERTY).customRule(emptyLineIfLeftMultiline) + + // Case left for alternative constructors + inPosition(left = FUN, right = CLASS).customRule(emptyLineIfLeftMultiline) + } + simple { // ============ Line breaks ============== after(PACKAGE_DIRECTIVE).blankLines(1) @@ -51,10 +80,15 @@ fun createSpacingBuilder(settings: CodeStyleSettings): KotlinSpacingBuilder { after(IMPORT_LIST).blankLines(1) before(DOC_COMMENT).lineBreakInCode() + between(PROPERTY, PROPERTY).lineBreakInCode() + + between(CLASS, FUN).blankLines(1) + between(CLASS, PROPERTY).blankLines(1) + between(PROPERTY, CLASS).blankLines(1) + before(FUN).lineBreakInCode() before(PROPERTY).lineBreakInCode() - between(FUN, FUN).blankLines(1) - between(FUN, PROPERTY).blankLines(1) + // =============== Spacing ================ betweenInside(LBRACE, RBRACE, CLASS_BODY).spaces(0) @@ -269,3 +303,17 @@ fun createSpacingBuilder(settings: CodeStyleSettings): KotlinSpacingBuilder { } } } + +public class LineFeedDependantSpacing( + minSpaces: Int, + maxSpaces: Int, + val minimumLineFeeds: Int, + keepLineBreaks: Boolean, + keepBlankLines: Int, + dependency: TextRange, + rule: DependentSpacingRule) : DependantSpacingImpl(minSpaces, maxSpaces, dependency, keepLineBreaks, keepBlankLines, rule) { + override fun getMinLineFeeds(): Int { + val superMin = super.getMinLineFeeds() + return if (superMin == 0) minimumLineFeeds else superMin + } +} \ No newline at end of file diff --git a/idea/testData/codeInsight/overrideImplement/complexMultiOverride.kt.after b/idea/testData/codeInsight/overrideImplement/complexMultiOverride.kt.after index 115324684f2..726f3a081b0 100644 --- a/idea/testData/codeInsight/overrideImplement/complexMultiOverride.kt.after +++ b/idea/testData/codeInsight/overrideImplement/complexMultiOverride.kt.after @@ -8,15 +8,19 @@ class C : Base() { override fun bar(value: () -> Unit): (String) -> Unit { return super.bar(value) } + override fun equals(other: Any?): Boolean { return super.equals(other) } + override fun foo(value: C): C { return super.foo(value) } + override fun hashCode(): Int { return super.hashCode() } + override val method: (String?) -> String = ? override fun toString(): String { return super.toString() diff --git a/idea/testData/codeInsight/overrideImplement/delegatedMembers.kt.after b/idea/testData/codeInsight/overrideImplement/delegatedMembers.kt.after index a840aa39221..5102f8c454f 100644 --- a/idea/testData/codeInsight/overrideImplement/delegatedMembers.kt.after +++ b/idea/testData/codeInsight/overrideImplement/delegatedMembers.kt.after @@ -7,15 +7,19 @@ class C(t :T) : T by t { override fun bar() { throw UnsupportedOperationException() } + override fun equals(other: Any?): Boolean { return super.equals(other) } + override fun foo() { throw UnsupportedOperationException() } + override fun hashCode(): Int { return super.hashCode() } + override fun toString(): String { return super.toString() } diff --git a/idea/testData/codeInsight/overrideImplement/generateMulti.kt.after b/idea/testData/codeInsight/overrideImplement/generateMulti.kt.after index 1a26be78483..ca9b68f025f 100644 --- a/idea/testData/codeInsight/overrideImplement/generateMulti.kt.after +++ b/idea/testData/codeInsight/overrideImplement/generateMulti.kt.after @@ -10,9 +10,11 @@ class SomeOther : Some { override fun someFoo() { throw UnsupportedOperationException() } + override fun someGenericFoo(): S { throw UnsupportedOperationException() } + override fun someOtherFoo(): Int { throw UnsupportedOperationException() } diff --git a/idea/testData/codeInsight/overrideImplement/inheritVisibilities.kt.after b/idea/testData/codeInsight/overrideImplement/inheritVisibilities.kt.after index 9efbadc58d9..5c410c270ba 100644 --- a/idea/testData/codeInsight/overrideImplement/inheritVisibilities.kt.after +++ b/idea/testData/codeInsight/overrideImplement/inheritVisibilities.kt.after @@ -14,20 +14,25 @@ class C : A(), B { override fun equals(other: Any?): Boolean { return super.equals(other) } + override fun hashCode(): Int { return super.hashCode() } + override fun internalFun() { super.internalFun() } + override val internalProperty: Int = 0 override fun protectedFun() { super.protectedFun() } + override val protectedProperty: Int = 0 override fun publicFun() { super.publicFun() } + override val publicProperty: Int = 0 override fun toString(): String { return super.toString() diff --git a/idea/testData/codeInsight/overrideImplement/multiOverride.kt.after b/idea/testData/codeInsight/overrideImplement/multiOverride.kt.after index c7cd2e5e918..587d30415c7 100644 --- a/idea/testData/codeInsight/overrideImplement/multiOverride.kt.after +++ b/idea/testData/codeInsight/overrideImplement/multiOverride.kt.after @@ -7,15 +7,19 @@ class C : A { override fun bar(): String { return super.bar() } + override fun equals(other: Any?): Boolean { return super.equals(other) } + override fun foo(value: String): Int { return super.foo(value) } + override fun hashCode(): Int { return super.hashCode() } + override fun toString(): String { return super.toString() } diff --git a/idea/testData/codeInsight/overrideImplement/overrideFromClassName.kt.after b/idea/testData/codeInsight/overrideImplement/overrideFromClassName.kt.after index 8389bb2e908..d0d7cbd6e2d 100644 --- a/idea/testData/codeInsight/overrideImplement/overrideFromClassName.kt.after +++ b/idea/testData/codeInsight/overrideImplement/overrideFromClassName.kt.after @@ -6,16 +6,20 @@ class Other { override fun equals(other: Any?): Boolean { return super.equals(other) } + override fun hashCode(): Int { return super.hashCode() } + override fun toString(): String { return super.toString() } + fun test() { val a = 1 } fun otherTest() { } -} \ No newline at end of file +} + diff --git a/idea/testData/codeInsight/overrideImplement/overrideFromFunctionPosition.kt.after b/idea/testData/codeInsight/overrideImplement/overrideFromFunctionPosition.kt.after index 61a5231a05a..0fe55f404c7 100644 --- a/idea/testData/codeInsight/overrideImplement/overrideFromFunctionPosition.kt.after +++ b/idea/testData/codeInsight/overrideImplement/overrideFromFunctionPosition.kt.after @@ -6,16 +6,21 @@ class Other { fun test() { val a = 1 } + override fun equals(other: Any?): Boolean { return super.equals(other) } + override fun hashCode(): Int { return super.hashCode() } + override fun toString(): String { return super.toString() } + fun otherTest() { } -} \ No newline at end of file +} + diff --git a/idea/testData/codeInsight/overrideImplement/overrideFromLBrace.kt.after b/idea/testData/codeInsight/overrideImplement/overrideFromLBrace.kt.after index 8389bb2e908..d0d7cbd6e2d 100644 --- a/idea/testData/codeInsight/overrideImplement/overrideFromLBrace.kt.after +++ b/idea/testData/codeInsight/overrideImplement/overrideFromLBrace.kt.after @@ -6,16 +6,20 @@ class Other { override fun equals(other: Any?): Boolean { return super.equals(other) } + override fun hashCode(): Int { return super.hashCode() } + override fun toString(): String { return super.toString() } + fun test() { val a = 1 } fun otherTest() { } -} \ No newline at end of file +} + diff --git a/idea/testData/codeInsight/overrideImplement/overrideRespectCaretPosition.kt.after b/idea/testData/codeInsight/overrideImplement/overrideRespectCaretPosition.kt.after index 73bc5134be9..efd21fbaa41 100644 --- a/idea/testData/codeInsight/overrideImplement/overrideRespectCaretPosition.kt.after +++ b/idea/testData/codeInsight/overrideImplement/overrideRespectCaretPosition.kt.after @@ -10,12 +10,15 @@ class C : A() { override fun equals(other: Any?): Boolean { return super.equals(other) } + override fun foo(value: Int) { super.foo(value) } + override fun hashCode(): Int { return super.hashCode() } + override fun toString(): String { return super.toString() } diff --git a/idea/testData/codeInsight/overrideImplement/respectCaretPosition.kt.after b/idea/testData/codeInsight/overrideImplement/respectCaretPosition.kt.after index 2538fd2f44d..673b3f47cd2 100644 --- a/idea/testData/codeInsight/overrideImplement/respectCaretPosition.kt.after +++ b/idea/testData/codeInsight/overrideImplement/respectCaretPosition.kt.after @@ -8,6 +8,7 @@ class SomeTest : Test { override fun test() { throw UnsupportedOperationException() } + override val testProp: Int = 0 /** * test diff --git a/idea/testData/codeInsight/surroundWith/if/moveDeclarationsOut/order/valAndClass.kt.after b/idea/testData/codeInsight/surroundWith/if/moveDeclarationsOut/order/valAndClass.kt.after index 10a8ef79e67..75cb35e6969 100644 --- a/idea/testData/codeInsight/surroundWith/if/moveDeclarationsOut/order/valAndClass.kt.after +++ b/idea/testData/codeInsight/surroundWith/if/moveDeclarationsOut/order/valAndClass.kt.after @@ -2,6 +2,7 @@ fun foo() { class A { fun test() {} } + val d: A if () { d = A() diff --git a/idea/testData/formatter/EmptyLineBetweeAbstractFunctions.after.kt b/idea/testData/formatter/EmptyLineBetweeAbstractFunctions.after.kt new file mode 100644 index 00000000000..6efafe6d761 --- /dev/null +++ b/idea/testData/formatter/EmptyLineBetweeAbstractFunctions.after.kt @@ -0,0 +1,9 @@ +trait Some { + fun f1() + fun f2() +} + +abstract class Abstract() { + abstract fun f1() + abstract fun f2() +} \ No newline at end of file diff --git a/idea/testData/formatter/EmptyLineBetweeAbstractFunctions.kt b/idea/testData/formatter/EmptyLineBetweeAbstractFunctions.kt new file mode 100644 index 00000000000..6efafe6d761 --- /dev/null +++ b/idea/testData/formatter/EmptyLineBetweeAbstractFunctions.kt @@ -0,0 +1,9 @@ +trait Some { + fun f1() + fun f2() +} + +abstract class Abstract() { + abstract fun f1() + abstract fun f2() +} \ No newline at end of file diff --git a/idea/testData/formatter/EmptyLineBetweenClassAndFunction.after.kt b/idea/testData/formatter/EmptyLineBetweenClassAndFunction.after.kt new file mode 100644 index 00000000000..9ee7accb185 --- /dev/null +++ b/idea/testData/formatter/EmptyLineBetweenClassAndFunction.after.kt @@ -0,0 +1,48 @@ +fun f1() { +} + +class C1 {} + +// ----- + +fun f2() { +} + +class C2 + +// ----- + +fun f3 = 1 +class C3 {} + +// ----- + +fun f4 = 2 +class C4 + +// ----- + +class C5 {} + +fun f5() { +} + +// ----- + +class C6 + +fun f6() { +} + +// ----- + +class C7 {} + +fun f7 = 1 + +// ----- + +class C8 + +fun f8 = 1 + diff --git a/idea/testData/formatter/EmptyLineBetweenClassAndFunction.kt b/idea/testData/formatter/EmptyLineBetweenClassAndFunction.kt new file mode 100644 index 00000000000..08c70b44c91 --- /dev/null +++ b/idea/testData/formatter/EmptyLineBetweenClassAndFunction.kt @@ -0,0 +1,38 @@ +fun f1() {} +class C1 {} + +// ----- + +fun f2() {} +class C2 + +// ----- + +fun f3 = 1 +class C3 {} + +// ----- + +fun f4 = 2 +class C4 + +// ----- + +class C5 {} +fun f5() {} + +// ----- + +class C6 +fun f6() {} + +// ----- + +class C7 {} +fun f7 = 1 + +// ----- + +class C8 +fun f8 = 1 + diff --git a/idea/testData/formatter/EmptyLineBetweenClasses.after.kt b/idea/testData/formatter/EmptyLineBetweenClasses.after.kt new file mode 100644 index 00000000000..64010ce04af --- /dev/null +++ b/idea/testData/formatter/EmptyLineBetweenClasses.after.kt @@ -0,0 +1,25 @@ +class A +class B +class C { + +} + +class D { + +} + +class E +: Some + +class F + +fun some() = 1 +class G + +fun some() = 1 + +val a = 1 + +class H + +val b = 1 \ No newline at end of file diff --git a/idea/testData/formatter/EmptyLineBetweenClasses.kt b/idea/testData/formatter/EmptyLineBetweenClasses.kt new file mode 100644 index 00000000000..a6b4c6ded49 --- /dev/null +++ b/idea/testData/formatter/EmptyLineBetweenClasses.kt @@ -0,0 +1,19 @@ +class A +class B +class C { + +} +class D { + +} +class E + : Some +class F + +fun some() = 1 +class G +fun some() = 1 + +val a = 1 +class H +val b = 1 \ No newline at end of file diff --git a/idea/testData/formatter/EmptyLineBetweenFunAndProperty.after.kt b/idea/testData/formatter/EmptyLineBetweenFunAndProperty.after.kt new file mode 100644 index 00000000000..25894e48add --- /dev/null +++ b/idea/testData/formatter/EmptyLineBetweenFunAndProperty.after.kt @@ -0,0 +1,76 @@ +// No lines +fun f1() { +} + +val p1 = 1 +fun f2() { +} + +fun f3() = 1 +val p2 = 1 +fun f4() = 1 + +fun f4() { +} + +val p3: Int + get() = 1 + +fun f5() = 1 + +class OneLine { + fun f1() { + } + + val p1 = 1 + + fun f2() { + } + + fun f3() = 1 + + val p2 = 1 + + fun f4() = 1 + + fun f4() { + } + + val p3: Int + get() = 1 + + fun f5() = 1 +} + +class TwoLines { + fun f1() { + } + + + val p1 = 1 + + + fun f2() { + } + + + fun f3() = 1 + + + val p2 = 1 + + + fun f4() = 1 + + + fun f4() { + } + + + val p3: Int + get() = 1 + + + fun f5() = 1 +} + diff --git a/idea/testData/formatter/EmptyLineBetweenFunAndProperty.kt b/idea/testData/formatter/EmptyLineBetweenFunAndProperty.kt new file mode 100644 index 00000000000..adb19ece3f0 --- /dev/null +++ b/idea/testData/formatter/EmptyLineBetweenFunAndProperty.kt @@ -0,0 +1,64 @@ +// No lines +fun f1() {} +val p1 = 1 +fun f2() {} + +fun f3() = 1 +val p2 = 1 +fun f4() = 1 + +fun f4() {} +val p3: Int + get() = 1 +fun f5() = 1 + +class OneLine { + fun f1() {} + + val p1 = 1 + + fun f2() {} + + fun f3() = 1 + + val p2 = 1 + + fun f4() = 1 + + fun f4() {} + + val p3: Int + get() = 1 + + fun f5() = 1 +} + +class TwoLines { + fun f1() {} + + + val p1 = 1 + + + fun f2() {} + + + fun f3() = 1 + + + val p2 = 1 + + + fun f4() = 1 + + + fun f4() {} + + + val p3: Int + get() = 1 + + + fun f5() = 1 +} + diff --git a/idea/testData/formatter/EmptyLineBetweenFunctions.after.kt b/idea/testData/formatter/EmptyLineBetweenFunctions.after.kt new file mode 100644 index 00000000000..11e8c66a227 --- /dev/null +++ b/idea/testData/formatter/EmptyLineBetweenFunctions.after.kt @@ -0,0 +1,66 @@ +// No lines between + +fun f2() { +} + +fun f1() { +} + +fun f3() = 1 +fun f4() { +} + +fun f5() { +} + +fun f6() = 1 +fun f7() = 8 + +// One line + +fun f2() { +} + +fun f1() { +} + +fun f3() = 1 + +fun f4() { +} + +fun f5() { +} + +fun f6() = 1 + +fun f7() = 8 + +// Two lines between +fun l1() { +} + + +fun l2() { +} + + +fun l3() = 1 + + +fun l4() { +} + + +fun l5() { +} + + +fun l6() = 1 + + +fun l7() = 8 + + + + diff --git a/idea/testData/formatter/EmptyLineBetweenFunctions.kt b/idea/testData/formatter/EmptyLineBetweenFunctions.kt new file mode 100644 index 00000000000..5eefbc3028e --- /dev/null +++ b/idea/testData/formatter/EmptyLineBetweenFunctions.kt @@ -0,0 +1,53 @@ +// No lines between + +fun f2() {} +fun f1() {} +fun f3() = 1 +fun f4() {} +fun f5() { +} +fun f6() = 1 +fun f7() = 8 + +// One line + +fun f2() {} + +fun f1() {} + +fun f3() = 1 + +fun f4() {} + +fun f5() { +} + +fun f6() = 1 + +fun f7() = 8 + +// Two lines between +fun l1() {} + + +fun l2() {} + + +fun l3() = 1 + + +fun l4() {} + + +fun l5() { +} + + +fun l6() = 1 + + +fun l7() = 8 + + + + diff --git a/idea/testData/formatter/EmptyLineBetweenProperties.after.kt b/idea/testData/formatter/EmptyLineBetweenProperties.after.kt new file mode 100644 index 00000000000..d19b714d537 --- /dev/null +++ b/idea/testData/formatter/EmptyLineBetweenProperties.after.kt @@ -0,0 +1,42 @@ +val p1 by Some +val p2 = 1 +val p3: Int get() = 3 +val p4: Int + get() { + return 1 + } +val p5: Int + +class OneLine { + val p1 by Some + + val p2 = 1 + + val p3: Int get() = 3 + + val p4: Int + get() { + return 1 + } + + val p5: Int +} + +class TwoLines { + val p1 by Some + + + val p2 = 1 + + + val p3: Int get() = 3 + + + val p4: Int + get() { + return 1 + } + + + val p5: Int +} \ No newline at end of file diff --git a/idea/testData/formatter/EmptyLineBetweenProperties.kt b/idea/testData/formatter/EmptyLineBetweenProperties.kt new file mode 100644 index 00000000000..64a4087f71a --- /dev/null +++ b/idea/testData/formatter/EmptyLineBetweenProperties.kt @@ -0,0 +1,36 @@ +val p1 by Some +val p2 = 1 +val p3: Int get() = 3 +val p4: Int + get() { return 1 } +val p5: Int + +class OneLine { + val p1 by Some + + val p2 = 1 + + val p3: Int get() = 3 + + val p4: Int + get() { return 1 } + + val p5: Int +} + +class TwoLines { + val p1 by Some + + + val p2 = 1 + + + val p3: Int get() = 3 + + + val p4: Int + get() { return 1 } + + + val p5: Int +} \ No newline at end of file diff --git a/idea/testData/quickfix/createFromUsage/createFunction/get/afterCreateGetFromUsage11.kt b/idea/testData/quickfix/createFromUsage/createFunction/get/afterCreateGetFromUsage11.kt index 6c30fb1b38e..bd8f64aae70 100644 --- a/idea/testData/quickfix/createFromUsage/createFunction/get/afterCreateGetFromUsage11.kt +++ b/idea/testData/quickfix/createFromUsage/createFunction/get/afterCreateGetFromUsage11.kt @@ -4,6 +4,7 @@ class Foo { throw UnsupportedOperationException("not implemented") //To change body of created functions use File | Settings | File Templates. } } + fun x (y: Foo>, w: java.util.ArrayList) { val z: Iterable = y["", w] } diff --git a/idea/testData/quickfix/createFromUsage/createFunction/get/afterCreateGetFromUsage12.kt b/idea/testData/quickfix/createFromUsage/createFunction/get/afterCreateGetFromUsage12.kt index 7045315ec0a..a1cde985768 100644 --- a/idea/testData/quickfix/createFromUsage/createFunction/get/afterCreateGetFromUsage12.kt +++ b/idea/testData/quickfix/createFromUsage/createFunction/get/afterCreateGetFromUsage12.kt @@ -4,6 +4,7 @@ class Foo { throw UnsupportedOperationException("not implemented") //To change body of created functions use File | Settings | File Templates. } } + fun x (y: Foo>, w: java.util.ArrayList) { val z = y["", w] } diff --git a/idea/testData/quickfix/createFromUsage/createFunction/invoke/afterInvokeOnUserType.kt b/idea/testData/quickfix/createFromUsage/createFunction/invoke/afterInvokeOnUserType.kt index 03ba9c58357..cbea61aab79 100644 --- a/idea/testData/quickfix/createFromUsage/createFunction/invoke/afterInvokeOnUserType.kt +++ b/idea/testData/quickfix/createFromUsage/createFunction/invoke/afterInvokeOnUserType.kt @@ -5,6 +5,7 @@ class A(val n: T) { throw UnsupportedOperationException("not implemented") //To change body of created functions use File | Settings | File Templates. } } + class B(val m: T) fun test(): B { diff --git a/idea/testData/quickfix/createFromUsage/createFunction/invoke/afterInvokeOnUserTypeWithTypeParams.kt b/idea/testData/quickfix/createFromUsage/createFunction/invoke/afterInvokeOnUserTypeWithTypeParams.kt index d2a17ee832a..4be1bd591cf 100644 --- a/idea/testData/quickfix/createFromUsage/createFunction/invoke/afterInvokeOnUserTypeWithTypeParams.kt +++ b/idea/testData/quickfix/createFromUsage/createFunction/invoke/afterInvokeOnUserTypeWithTypeParams.kt @@ -5,6 +5,7 @@ class A(val n: T) { throw UnsupportedOperationException("not implemented") //To change body of created functions use File | Settings | File Templates. } } + class B(val m: T) fun test(u: U): B { diff --git a/idea/testData/quickfix/createFromUsage/createFunction/iterator/afterCreateIteratorFromUsage1.kt b/idea/testData/quickfix/createFromUsage/createFunction/iterator/afterCreateIteratorFromUsage1.kt index 56368bda717..0a9bdc04da4 100644 --- a/idea/testData/quickfix/createFromUsage/createFunction/iterator/afterCreateIteratorFromUsage1.kt +++ b/idea/testData/quickfix/createFromUsage/createFunction/iterator/afterCreateIteratorFromUsage1.kt @@ -4,6 +4,7 @@ class Foo { throw UnsupportedOperationException("not implemented") //To change body of created functions use File | Settings | File Templates. } } + fun foo() { for (i: Int in Foo()) { } } diff --git a/idea/testData/quickfix/createFromUsage/createFunction/iterator/afterCreateIteratorFromUsage2.kt b/idea/testData/quickfix/createFromUsage/createFunction/iterator/afterCreateIteratorFromUsage2.kt index 745e922b240..90c86b53915 100644 --- a/idea/testData/quickfix/createFromUsage/createFunction/iterator/afterCreateIteratorFromUsage2.kt +++ b/idea/testData/quickfix/createFromUsage/createFunction/iterator/afterCreateIteratorFromUsage2.kt @@ -4,6 +4,7 @@ class Foo { throw UnsupportedOperationException("not implemented") //To change body of created functions use File | Settings | File Templates. } } + fun foo() { for (i in Foo()) { bar(i) diff --git a/idea/tests/org/jetbrains/jet/formatter/JetFormatterTestGenerated.java b/idea/tests/org/jetbrains/jet/formatter/JetFormatterTestGenerated.java index cd76e5150bd..c82b1036d90 100644 --- a/idea/tests/org/jetbrains/jet/formatter/JetFormatterTestGenerated.java +++ b/idea/tests/org/jetbrains/jet/formatter/JetFormatterTestGenerated.java @@ -156,6 +156,42 @@ public class JetFormatterTestGenerated extends AbstractJetFormatterTest { doTest(fileName); } + @TestMetadata("EmptyLineBetweeAbstractFunctions.after.kt") + public void testEmptyLineBetweeAbstractFunctions() throws Exception { + String fileName = JetTestUtils.navigationMetadata("idea/testData/formatter/EmptyLineBetweeAbstractFunctions.after.kt"); + doTest(fileName); + } + + @TestMetadata("EmptyLineBetweenClassAndFunction.after.kt") + public void testEmptyLineBetweenClassAndFunction() throws Exception { + String fileName = JetTestUtils.navigationMetadata("idea/testData/formatter/EmptyLineBetweenClassAndFunction.after.kt"); + doTest(fileName); + } + + @TestMetadata("EmptyLineBetweenClasses.after.kt") + public void testEmptyLineBetweenClasses() throws Exception { + String fileName = JetTestUtils.navigationMetadata("idea/testData/formatter/EmptyLineBetweenClasses.after.kt"); + doTest(fileName); + } + + @TestMetadata("EmptyLineBetweenFunAndProperty.after.kt") + public void testEmptyLineBetweenFunAndProperty() throws Exception { + String fileName = JetTestUtils.navigationMetadata("idea/testData/formatter/EmptyLineBetweenFunAndProperty.after.kt"); + doTest(fileName); + } + + @TestMetadata("EmptyLineBetweenFunctions.after.kt") + public void testEmptyLineBetweenFunctions() throws Exception { + String fileName = JetTestUtils.navigationMetadata("idea/testData/formatter/EmptyLineBetweenFunctions.after.kt"); + doTest(fileName); + } + + @TestMetadata("EmptyLineBetweenProperties.after.kt") + public void testEmptyLineBetweenProperties() throws Exception { + String fileName = JetTestUtils.navigationMetadata("idea/testData/formatter/EmptyLineBetweenProperties.after.kt"); + doTest(fileName); + } + @TestMetadata("ForLineBreak.after.kt") public void testForLineBreak() throws Exception { String fileName = JetTestUtils.navigationMetadata("idea/testData/formatter/ForLineBreak.after.kt"); diff --git a/idea/tests/org/jetbrains/jet/plugin/codeInsight/smartEnter/SmartEnterTest.kt b/idea/tests/org/jetbrains/jet/plugin/codeInsight/smartEnter/SmartEnterTest.kt index 7294b8d56d0..95f052b0ea6 100644 --- a/idea/tests/org/jetbrains/jet/plugin/codeInsight/smartEnter/SmartEnterTest.kt +++ b/idea/tests/org/jetbrains/jet/plugin/codeInsight/smartEnter/SmartEnterTest.kt @@ -938,10 +938,12 @@ class SmartEnterTest : JetLightCodeInsightFixtureTestCase() { fun testFunBody7() = doFileTest( """ trait T + fun other() where U: T """, """ trait T + fun other() where U : T { } diff --git a/j2k/tests/testData/ast/class/abstractClassShape.kt b/j2k/tests/testData/ast/class/abstractClassShape.kt index 493d71845fa..2b5e09efc31 100644 --- a/j2k/tests/testData/ast/class/abstractClassShape.kt +++ b/j2k/tests/testData/ast/class/abstractClassShape.kt @@ -3,8 +3,10 @@ abstract class Shape { public fun setColor(c: String) { color = c } + public fun getColor(): String { return color } + public abstract fun area(): Double } \ No newline at end of file diff --git a/j2k/tests/testData/ast/class/classWithEmptyMethods.kt b/j2k/tests/testData/ast/class/classWithEmptyMethods.kt index 44667748eed..28e77e2b4dd 100644 --- a/j2k/tests/testData/ast/class/classWithEmptyMethods.kt +++ b/j2k/tests/testData/ast/class/classWithEmptyMethods.kt @@ -1,8 +1,10 @@ class T { fun main() { } + fun i(): Int { } + fun s(): String { } } \ No newline at end of file diff --git a/j2k/tests/testData/ast/class/kt-639.kt b/j2k/tests/testData/ast/class/kt-639.kt index c6c0e1703a3..765ecefb7af 100644 --- a/j2k/tests/testData/ast/class/kt-639.kt +++ b/j2k/tests/testData/ast/class/kt-639.kt @@ -5,6 +5,7 @@ import java.util.HashMap fun Test(): Test { return Test() } + fun Test(s: String): Test { return Test() } diff --git a/j2k/tests/testData/ast/class/twoStaticMethod.kt b/j2k/tests/testData/ast/class/twoStaticMethod.kt index 2c7ab1f8381..492b8be2c3b 100644 --- a/j2k/tests/testData/ast/class/twoStaticMethod.kt +++ b/j2k/tests/testData/ast/class/twoStaticMethod.kt @@ -3,6 +3,7 @@ class S { fun sB(): Boolean { return true } + fun sI(): Int { return 1 } diff --git a/j2k/tests/testData/ast/constructors/customerBuilder.kt b/j2k/tests/testData/ast/constructors/customerBuilder.kt index 488a640616b..df6785bdfbb 100644 --- a/j2k/tests/testData/ast/constructors/customerBuilder.kt +++ b/j2k/tests/testData/ast/constructors/customerBuilder.kt @@ -17,6 +17,7 @@ class Customer(public val _firstName: String, public val _lastName: String) { private fun doSmthBefore() { } + private fun doSmthAfter() { } } diff --git a/j2k/tests/testData/ast/constructors/methodCallInFactoryFun.kt b/j2k/tests/testData/ast/constructors/methodCallInFactoryFun.kt index 734a8b3a98e..e45d5082d1e 100644 --- a/j2k/tests/testData/ast/constructors/methodCallInFactoryFun.kt +++ b/j2k/tests/testData/ast/constructors/methodCallInFactoryFun.kt @@ -9,6 +9,7 @@ class C(private val arg1: Int, private val arg2: Int, private val arg3: Int) { fun foo(p: Int): Int { return p } + private fun staticFoo(p: Int): Int { return p } diff --git a/j2k/tests/testData/ast/formatting/nonStaticMembers.kt b/j2k/tests/testData/ast/formatting/nonStaticMembers.kt index bb370adf26b..1f539b29b1e 100644 --- a/j2k/tests/testData/ast/formatting/nonStaticMembers.kt +++ b/j2k/tests/testData/ast/formatting/nonStaticMembers.kt @@ -6,6 +6,7 @@ class F { fun f2() { } + var i: Int? = 0 fun f3() { diff --git a/j2k/tests/testData/ast/formatting/nonStaticMembersWithComments.kt b/j2k/tests/testData/ast/formatting/nonStaticMembersWithComments.kt index c7fb17bba09..c9db751a9de 100644 --- a/j2k/tests/testData/ast/formatting/nonStaticMembersWithComments.kt +++ b/j2k/tests/testData/ast/formatting/nonStaticMembersWithComments.kt @@ -17,6 +17,7 @@ class F { fun f2() { } + var i: Int? = 0 fun f3() { diff --git a/j2k/tests/testData/ast/formatting/staticAndNonStaticMembersWithComments.kt b/j2k/tests/testData/ast/formatting/staticAndNonStaticMembersWithComments.kt index 9ac75a818ae..739d7bf1a3b 100644 --- a/j2k/tests/testData/ast/formatting/staticAndNonStaticMembersWithComments.kt +++ b/j2k/tests/testData/ast/formatting/staticAndNonStaticMembersWithComments.kt @@ -25,6 +25,7 @@ class F { fun f1() { } + var i: Int? = 0 //c5 diff --git a/j2k/tests/testData/ast/formatting/staticMembersWithComments.kt b/j2k/tests/testData/ast/formatting/staticMembersWithComments.kt index b99d402172f..4ef3ba1a680 100644 --- a/j2k/tests/testData/ast/formatting/staticMembersWithComments.kt +++ b/j2k/tests/testData/ast/formatting/staticMembersWithComments.kt @@ -18,6 +18,7 @@ class F { fun f2() { } + var i: Int? = 0 fun f3() { diff --git a/j2k/tests/testData/ast/function/override.kt b/j2k/tests/testData/ast/function/override.kt index bcf037a296d..901bccfccf2 100644 --- a/j2k/tests/testData/ast/function/override.kt +++ b/j2k/tests/testData/ast/function/override.kt @@ -2,6 +2,7 @@ class A { fun a() { } } + class B : A() { override fun a() { } diff --git a/j2k/tests/testData/ast/issues/kt-1048.kt b/j2k/tests/testData/ast/issues/kt-1048.kt index 232c02f5b8f..58e07d87a98 100644 --- a/j2k/tests/testData/ast/issues/kt-1048.kt +++ b/j2k/tests/testData/ast/issues/kt-1048.kt @@ -7,6 +7,7 @@ public class Java { val m = HashMap() m.put(1, 1) } + fun test2() { val m = HashMap() val g = G("") diff --git a/j2k/tests/testData/ast/issues/kt-809-string.kt b/j2k/tests/testData/ast/issues/kt-809-string.kt index ef31265be54..6da5960b1cb 100644 --- a/j2k/tests/testData/ast/issues/kt-809-string.kt +++ b/j2k/tests/testData/ast/issues/kt-809-string.kt @@ -15,6 +15,7 @@ class StringContainer(s: String) class Test { fun putString(s: String) { } + fun test() { putString(One.myContainer.myString) StringContainer(One.myContainer.myString) diff --git a/j2k/tests/testData/ast/issues/kt-809.kt b/j2k/tests/testData/ast/issues/kt-809.kt index 726a97aa2e3..49ea14462f5 100644 --- a/j2k/tests/testData/ast/issues/kt-809.kt +++ b/j2k/tests/testData/ast/issues/kt-809.kt @@ -15,6 +15,7 @@ class IntContainer(i: Int) class Test { fun putInt(i: Int) { } + fun test() { putInt(One.myContainer.myInt) IntContainer(One.myContainer.myInt) diff --git a/j2k/tests/testData/ast/issues/kt-836.kt b/j2k/tests/testData/ast/issues/kt-836.kt index 41557143566..8db7a4cfa28 100644 --- a/j2k/tests/testData/ast/issues/kt-836.kt +++ b/j2k/tests/testData/ast/issues/kt-836.kt @@ -13,6 +13,7 @@ public class Language(protected var code: String) : Serializable { class Base { fun test() { } + override fun toString(): String { return "BASE" } @@ -21,6 +22,7 @@ class Base { class Child : Base() { override fun test() { } + override fun toString(): String { return "Child" } diff --git a/j2k/tests/testData/ast/settings/openByDefault.kt b/j2k/tests/testData/ast/settings/openByDefault.kt index e71cc2b33ce..c8fb4b47d8b 100644 --- a/j2k/tests/testData/ast/settings/openByDefault.kt +++ b/j2k/tests/testData/ast/settings/openByDefault.kt @@ -3,8 +3,10 @@ open class A { open fun foo1() { } + private fun foo2() { } + fun foo3() { } } @@ -31,4 +33,4 @@ enum class E { fun foo(): Int { return 0 } -} \ No newline at end of file +} diff --git a/j2k/tests/testData/ast/staticMembers/PrivateStaticMembers.kt b/j2k/tests/testData/ast/staticMembers/PrivateStaticMembers.kt index b7ff9131118..b7837a27d58 100644 --- a/j2k/tests/testData/ast/staticMembers/PrivateStaticMembers.kt +++ b/j2k/tests/testData/ast/staticMembers/PrivateStaticMembers.kt @@ -10,6 +10,7 @@ class A { private fun privateStatic1() { } + private fun privateStatic2() { } } diff --git a/j2k/tests/testData/ast/staticMembers/PrivateStaticMethods1.kt b/j2k/tests/testData/ast/staticMembers/PrivateStaticMethods1.kt index 011897bd66c..475ada7f9c7 100644 --- a/j2k/tests/testData/ast/staticMembers/PrivateStaticMethods1.kt +++ b/j2k/tests/testData/ast/staticMembers/PrivateStaticMethods1.kt @@ -6,6 +6,7 @@ class A { private fun privateStatic1() { } + private fun privateStatic2() { } } \ No newline at end of file diff --git a/j2k/tests/testData/ast/staticMembers/PrivateStaticMethods2.kt b/j2k/tests/testData/ast/staticMembers/PrivateStaticMethods2.kt index 9ad221c117c..7c520ce726a 100644 --- a/j2k/tests/testData/ast/staticMembers/PrivateStaticMethods2.kt +++ b/j2k/tests/testData/ast/staticMembers/PrivateStaticMethods2.kt @@ -12,6 +12,7 @@ class A { private fun privateStatic1() { } + private fun privateStatic2() { } } diff --git a/j2k/tests/testData/ast/staticMembers/PrivateStaticMethods3.kt b/j2k/tests/testData/ast/staticMembers/PrivateStaticMethods3.kt index 8a33e77b6f6..1cec928bb3b 100644 --- a/j2k/tests/testData/ast/staticMembers/PrivateStaticMethods3.kt +++ b/j2k/tests/testData/ast/staticMembers/PrivateStaticMethods3.kt @@ -13,6 +13,7 @@ class A { private fun privateStatic1() { } + private fun privateStatic2() { } } diff --git a/j2k/tests/testData/ast/staticMembers/PrivateStaticMethods4.kt b/j2k/tests/testData/ast/staticMembers/PrivateStaticMethods4.kt index bc9aee776e8..1aefdeb721e 100644 --- a/j2k/tests/testData/ast/staticMembers/PrivateStaticMethods4.kt +++ b/j2k/tests/testData/ast/staticMembers/PrivateStaticMethods4.kt @@ -11,6 +11,7 @@ class A { private fun privateStatic1() { } + private fun privateStatic2() { } } \ No newline at end of file