diff --git a/idea/formatter/src/org/jetbrains/kotlin/idea/formatter/kotlinSpacingRules.kt b/idea/formatter/src/org/jetbrains/kotlin/idea/formatter/kotlinSpacingRules.kt index 975a4bc4807..ab9a10aa251 100644 --- a/idea/formatter/src/org/jetbrains/kotlin/idea/formatter/kotlinSpacingRules.kt +++ b/idea/formatter/src/org/jetbrains/kotlin/idea/formatter/kotlinSpacingRules.kt @@ -33,6 +33,7 @@ import org.jetbrains.kotlin.lexer.KtTokens import org.jetbrains.kotlin.lexer.KtTokens.* import org.jetbrains.kotlin.psi.KtClass import org.jetbrains.kotlin.psi.KtFunction +import org.jetbrains.kotlin.psi.KtPropertyAccessor val MODIFIERS_LIST_ENTRIES = TokenSet.orSet(TokenSet.create(ANNOTATION_ENTRY, ANNOTATION), MODIFIER_KEYWORDS) @@ -406,19 +407,33 @@ fun createSpacingBuilder(settings: CodeStyleSettings, builderUtil: KotlinSpacing inPosition(parent = CLASS_BODY, right = RBRACE).lineBreakIfLineBreakInParent(numSpacesOtherwise = 1) inPosition(parent = BLOCK, right = RBRACE).customRule { block, left, right -> - val funNode = block.node.treeParent.psi as? KtFunction ?: return@customRule null + val psiElement = block.node.treeParent.psi + val empty = left.node.elementType == LBRACE - if (funNode.name != null && !empty) return@customRule null + + when (psiElement) { + is KtFunction -> { + if (psiElement.name != null && !empty) return@customRule null + } + is KtPropertyAccessor -> + if (!empty) return@customRule null + else -> + return@customRule null + } val spaces = if (empty) 0 else spacesInSimpleFunction - Spacing.createDependentLFSpacing(spaces, spaces, funNode.textRange, + Spacing.createDependentLFSpacing(spaces, spaces, psiElement.textRange, codeStyleSettings.KEEP_LINE_BREAKS, codeStyleSettings.KEEP_BLANK_LINES_IN_CODE) } inPosition(parent = BLOCK, left = LBRACE).customRule { parent, left, right -> - val funNode = parent.node.treeParent.psi as? KtFunction ?: return@customRule null + val psiElement = parent.node.treeParent.psi + val funNode = psiElement as? KtFunction ?: return@customRule null + if (funNode.name != null) return@customRule null + + // Empty block is covered in above rule Spacing.createDependentLFSpacing(spacesInSimpleFunction, spacesInSimpleFunction, funNode.textRange, codeStyleSettings.KEEP_LINE_BREAKS, codeStyleSettings.KEEP_BLANK_LINES_IN_CODE) diff --git a/idea/idea-completion/testData/handlers/basic/override/ImplementVar.kt.after b/idea/idea-completion/testData/handlers/basic/override/ImplementVar.kt.after index 4ae6c9b4b7e..64dd8af9d72 100644 --- a/idea/idea-completion/testData/handlers/basic/override/ImplementVar.kt.after +++ b/idea/idea-completion/testData/handlers/basic/override/ImplementVar.kt.after @@ -5,8 +5,7 @@ interface I { class A : I { override var someVar: String get() = TODO("not implemented") //To change initializer of created properties use File | Settings | File Templates. - set(value) { - } + set(value) {} } // ELEMENT_TEXT: "override var someVar: String" diff --git a/idea/idea-completion/testData/handlers/basic/override/OverrideVar.kt.after b/idea/idea-completion/testData/handlers/basic/override/OverrideVar.kt.after index 1fab662cb47..a185471c753 100644 --- a/idea/idea-completion/testData/handlers/basic/override/OverrideVar.kt.after +++ b/idea/idea-completion/testData/handlers/basic/override/OverrideVar.kt.after @@ -5,8 +5,7 @@ open class B { class A : B { override var someVar: String get() = super.someVar - set(value) { - } + set(value) {} } // ELEMENT_TEXT: "override var someVar: String" diff --git a/idea/src/org/jetbrains/kotlin/idea/editor/fixers/KotlinPropertySetterBodyFixer.kt b/idea/src/org/jetbrains/kotlin/idea/editor/fixers/KotlinPropertySetterBodyFixer.kt index 48d7995e7e7..5972fc3a2bb 100644 --- a/idea/src/org/jetbrains/kotlin/idea/editor/fixers/KotlinPropertySetterBodyFixer.kt +++ b/idea/src/org/jetbrains/kotlin/idea/editor/fixers/KotlinPropertySetterBodyFixer.kt @@ -54,6 +54,6 @@ class KotlinPropertySetterBodyFixer : SmartEnterProcessorWithFixers.FixerTODO("not implemented") //To change initializer of created properties use File | Settings | File Templates. - set(value) { - } + set(value) {} } diff --git a/idea/testData/formatter/PropertyAccessors.after.kt b/idea/testData/formatter/PropertyAccessors.after.kt index f96d99f2785..32289cf9e2f 100644 --- a/idea/testData/formatter/PropertyAccessors.after.kt +++ b/idea/testData/formatter/PropertyAccessors.after.kt @@ -13,3 +13,11 @@ class Hi { var badNoType get() = 1 } + +class EmptyProperties { + var newline: String + get() { + return "" + } + set(value) {} +} diff --git a/idea/testData/formatter/PropertyAccessors.kt b/idea/testData/formatter/PropertyAccessors.kt index 7a7e79417f0..352ce65c8e6 100644 --- a/idea/testData/formatter/PropertyAccessors.kt +++ b/idea/testData/formatter/PropertyAccessors.kt @@ -19,3 +19,9 @@ get() = 1 var badNoType get() = 1 } + +class EmptyProperties { + var newline: String + get() { return "" } + set(value) {} +} diff --git a/idea/testData/quickfix/createFromUsage/createFunction/call/extensionByExtensionReceiver/extensionPropertySetter.kt.after b/idea/testData/quickfix/createFromUsage/createFunction/call/extensionByExtensionReceiver/extensionPropertySetter.kt.after index 8adafd4b29b..6b87f65c9cf 100644 --- a/idea/testData/quickfix/createFromUsage/createFunction/call/extensionByExtensionReceiver/extensionPropertySetter.kt.after +++ b/idea/testData/quickfix/createFromUsage/createFunction/call/extensionByExtensionReceiver/extensionPropertySetter.kt.after @@ -13,5 +13,4 @@ private var A.foo: Boolean get() { TODO("not implemented") //To change body of created functions use File | Settings | File Templates. } - set() { - } + set() {} diff --git a/idea/testData/quickfix/createFromUsage/createVariable/property/varOnLibType.kt.after b/idea/testData/quickfix/createFromUsage/createVariable/property/varOnLibType.kt.after index eda768af149..667e9058bca 100644 --- a/idea/testData/quickfix/createFromUsage/createVariable/property/varOnLibType.kt.after +++ b/idea/testData/quickfix/createFromUsage/createVariable/property/varOnLibType.kt.after @@ -11,5 +11,4 @@ private var Int.foo: A get() { TODO("not implemented") //To change body of created functions use File | Settings | File Templates. } - set() { - } + set() {} diff --git a/idea/testData/quickfix/implement/abstract.kt.after b/idea/testData/quickfix/implement/abstract.kt.after index 9b6dd54fbe9..5e50e8ad98b 100644 --- a/idea/testData/quickfix/implement/abstract.kt.after +++ b/idea/testData/quickfix/implement/abstract.kt.after @@ -11,8 +11,7 @@ private abstract class Base { private class BaseImpl : Base() { override var x: Int get() = TODO("not implemented") //To change initializer of created properties use File | Settings | File Templates. - set(value) { - } + set(value) {} override fun toInt(arg: String): Int { TODO("not implemented") //To change body of created functions use File | Settings | File Templates. diff --git a/idea/testData/quickfix/implement/nestedPrivateInterface.kt.after b/idea/testData/quickfix/implement/nestedPrivateInterface.kt.after index 709e0b9ad03..8c9f05a34b5 100644 --- a/idea/testData/quickfix/implement/nestedPrivateInterface.kt.after +++ b/idea/testData/quickfix/implement/nestedPrivateInterface.kt.after @@ -10,7 +10,6 @@ class Container { class BaseImpl : Base { override var z: Double get() = TODO("not implemented") //To change initializer of created properties use File | Settings | File Templates. - set(value) { - } + set(value) {} } } \ No newline at end of file diff --git a/idea/tests/org/jetbrains/kotlin/idea/codeInsight/smartEnter/SmartEnterTest.kt b/idea/tests/org/jetbrains/kotlin/idea/codeInsight/smartEnter/SmartEnterTest.kt index 9457056820a..83b80a5676b 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/codeInsight/smartEnter/SmartEnterTest.kt +++ b/idea/tests/org/jetbrains/kotlin/idea/codeInsight/smartEnter/SmartEnterTest.kt @@ -1111,6 +1111,19 @@ class SmartEnterTest : KotlinLightCodeInsightFixtureTestCase() { """ ) + fun testSetter7() = doFileTest( + """ + var a : Int = 0 + set(value){} + """ + , + """ + var a : Int = 0 + set(value) {} + + """ + ) + fun testSetterPrivate1() = doFileTest( """ var a : Int = 0 diff --git a/j2k/testData/fileOrElement/detectProperties/Comments.kt b/j2k/testData/fileOrElement/detectProperties/Comments.kt index 723a309323e..692957db0cb 100644 --- a/j2k/testData/fileOrElement/detectProperties/Comments.kt +++ b/j2k/testData/fileOrElement/detectProperties/Comments.kt @@ -18,7 +18,6 @@ internal class A(// comment for field2 getter // comment for setProperty var property: Int get() = 1 - set(value) { - } // end of getProperty + set(value) {} // end of getProperty // end of setProperty } \ No newline at end of file diff --git a/j2k/testData/fileOrElement/detectProperties/IsPrefix.kt b/j2k/testData/fileOrElement/detectProperties/IsPrefix.kt index eeb8cb7c277..75c4d66ce05 100644 --- a/j2k/testData/fileOrElement/detectProperties/IsPrefix.kt +++ b/j2k/testData/fileOrElement/detectProperties/IsPrefix.kt @@ -18,8 +18,7 @@ internal interface I { internal abstract class C : I { override var isSomething1: Boolean get() = true - set(b) { - } + set(b) {} override var isSomething4: Boolean get() = false @@ -27,11 +26,9 @@ internal abstract class C : I { override var isSomething5: Boolean get - set(value) { - } + set(value) {} override var something6: Boolean get - set(value) { - } + set(value) {} } \ No newline at end of file diff --git a/j2k/testData/fileOrElement/detectProperties/Overrides.kt b/j2k/testData/fileOrElement/detectProperties/Overrides.kt index 52e4b4b1032..455b8f02bfc 100644 --- a/j2k/testData/fileOrElement/detectProperties/Overrides.kt +++ b/j2k/testData/fileOrElement/detectProperties/Overrides.kt @@ -26,18 +26,15 @@ internal open class B { open var fromB2: String get() = "" - set(value) { - } + set(value) {} open var fromB3: String get() = "" - set(value) { - } + set(value) {} open var fromB4: String get() = "" - set(value) { - } + set(value) {} open fun setFromB5(value: String) {} } @@ -50,8 +47,7 @@ internal abstract class C(override val something1: Int) : B(), I { override var something3: Int get() = 0 - set(value) { - } + set(value) {} override var something4: Int get() = 0 diff --git a/j2k/testData/fileOrElement/detectProperties/OverridesOfExternalCode.kt b/j2k/testData/fileOrElement/detectProperties/OverridesOfExternalCode.kt index d547f050f33..8a36f23bfaa 100644 --- a/j2k/testData/fileOrElement/detectProperties/OverridesOfExternalCode.kt +++ b/j2k/testData/fileOrElement/detectProperties/OverridesOfExternalCode.kt @@ -90,7 +90,6 @@ internal class D : JavaClassDerivedFromKotlinClassWithProperties() { override var someVar2: String get() = super.someVar2 - set(value) { - } + set(value) {} } \ No newline at end of file diff --git a/j2k/testData/fileOrElement/function/classGenericParam.kt b/j2k/testData/fileOrElement/function/classGenericParam.kt index c4291e5a69a..dd57294db6b 100644 --- a/j2k/testData/fileOrElement/function/classGenericParam.kt +++ b/j2k/testData/fileOrElement/function/classGenericParam.kt @@ -1,3 +1,2 @@ val t: T - get() { - } \ No newline at end of file + get() {} \ No newline at end of file diff --git a/ultimate/testData/spring/core/generate/beanDependenciesByXml/setter.kt.after b/ultimate/testData/spring/core/generate/beanDependenciesByXml/setter.kt.after index 45d93fd898d..c92d93dad20 100644 --- a/ultimate/testData/spring/core/generate/beanDependenciesByXml/setter.kt.after +++ b/ultimate/testData/spring/core/generate/beanDependenciesByXml/setter.kt.after @@ -5,7 +5,6 @@ package a open class FooBean { fun setBarBean(barBean: BarBean) {} - } open class BarBean \ No newline at end of file