diff --git a/diktat-rules/src/main/kotlin/org/cqfn/diktat/ruleset/rules/BlockStructureBraces.kt b/diktat-rules/src/main/kotlin/org/cqfn/diktat/ruleset/rules/BlockStructureBraces.kt index b8a4b9a6e9..f84d8cb823 100644 --- a/diktat-rules/src/main/kotlin/org/cqfn/diktat/ruleset/rules/BlockStructureBraces.kt +++ b/diktat-rules/src/main/kotlin/org/cqfn/diktat/ruleset/rules/BlockStructureBraces.kt @@ -178,7 +178,7 @@ class BlockStructureBraces(private val configRules: List) : Rule("b if (braceSpace == null || braceSpace.elementType != WHITE_SPACE) { node.addChild(PsiWhiteSpaceImpl(" "), nodeBefore) } else { - (braceSpace as LeafPsiElement).replaceWithText(" ") + braceSpace.treeParent.replaceWhiteSpaceText(braceSpace, " ") } } } diff --git a/diktat-rules/src/main/kotlin/org/cqfn/diktat/ruleset/utils/AstNodeUtils.kt b/diktat-rules/src/main/kotlin/org/cqfn/diktat/ruleset/utils/AstNodeUtils.kt index fb35408a04..e2cc290bef 100644 --- a/diktat-rules/src/main/kotlin/org/cqfn/diktat/ruleset/utils/AstNodeUtils.kt +++ b/diktat-rules/src/main/kotlin/org/cqfn/diktat/ruleset/utils/AstNodeUtils.kt @@ -70,6 +70,12 @@ fun ASTNode.isCorrect(): Boolean = this.findAllNodesWithSpecificType(TokenType.E fun ASTNode.getAllChildrenWithType(elementType: IElementType): List = this.getChildren(null).filter { it.elementType == elementType } +fun ASTNode.replaceWhiteSpaceText(beforeNode: ASTNode, text: String) { + require(beforeNode.elementType == WHITE_SPACE) + this.addChild(PsiWhiteSpaceImpl(text), beforeNode) + this.removeChild(beforeNode) +} + /** * obviously returns first child that match particular element type */ diff --git a/diktat-rules/src/test/resources/test/smoke/src/main/kotlin/Example3Expected.kt b/diktat-rules/src/test/resources/test/smoke/src/main/kotlin/Example3Expected.kt index 727a87e9ba..231a5813b9 100644 --- a/diktat-rules/src/test/resources/test/smoke/src/main/kotlin/Example3Expected.kt +++ b/diktat-rules/src/test/resources/test/smoke/src/main/kotlin/Example3Expected.kt @@ -25,3 +25,23 @@ fun mains() { httpClient.doRequest() } +class Example { + fun foo() { + if (condition1) { + if (condition2) { + bar() + } + } + + if (condition3) { + if (condition4) { + foo() + } else { + bar() + } + } else { + foo() + } + } +} + diff --git a/diktat-rules/src/test/resources/test/smoke/src/main/kotlin/Example3Test.kt b/diktat-rules/src/test/resources/test/smoke/src/main/kotlin/Example3Test.kt index 56bf3cd8ae..cefa503487 100644 --- a/diktat-rules/src/test/resources/test/smoke/src/main/kotlin/Example3Test.kt +++ b/diktat-rules/src/test/resources/test/smoke/src/main/kotlin/Example3Test.kt @@ -23,4 +23,20 @@ fun mains() { timeout = 100 } httpClient.doRequest() -} \ No newline at end of file +} + +class Example { + fun foo() { + if (condition1) + if (condition2) + bar() + + if (condition3) + if (condition4) + foo() + else + bar() + else + foo() + } +}