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