Refactoring: wrap Spacing.createSpacing to Kotlin function with default parameters

This commit is contained in:
Nikolay Krasko
2016-06-21 12:34:29 +03:00
committed by Nikolay Krasko
parent f8196d8331
commit 49aaeb5a38
2 changed files with 20 additions and 12 deletions
@@ -27,7 +27,7 @@ import com.intellij.psi.tree.TokenSet
import org.jetbrains.kotlin.KtNodeTypes
import org.jetbrains.kotlin.idea.KotlinLanguage
import org.jetbrains.kotlin.lexer.KtTokens
import java.util.ArrayList
import java.util.*
class KotlinSpacingBuilder(val codeStyleSettings: CodeStyleSettings, val spacingBuilderUtil: KotlinSpacingBuilderUtil) {
private val builders = ArrayList<Builder>()
@@ -120,7 +120,7 @@ class KotlinSpacingBuilder(val codeStyleSettings: CodeStyleSettings, val spacing
if (child1.node.elementType == KtTokens.EOL_COMMENT && spacing.toString().contains("minLineFeeds=0")) {
val isBeforeBlock = child2.node.elementType == KtNodeTypes.BLOCK || child2.node.firstChildNode?.elementType == KtNodeTypes.BLOCK
val keepBlankLines = if (isBeforeBlock) 0 else codeStyleSettings.KEEP_BLANK_LINES_IN_CODE
return Spacing.createSpacing(0, 0, 1, true, keepBlankLines)
return createSpacing(0, minLineFeeds = 1, keepLineBreaks = true, keepBlankLines = keepBlankLines)
}
return spacing
}
@@ -139,6 +139,14 @@ class KotlinSpacingBuilder(val codeStyleSettings: CodeStyleSettings, val spacing
builder.init()
builders.add(builder)
}
fun createSpacing(minSpaces: Int,
maxSpaces: Int = minSpaces,
minLineFeeds: Int = 0,
keepLineBreaks: Boolean = codeStyleSettings.KEEP_LINE_BREAKS,
keepBlankLines: Int = codeStyleSettings.KEEP_BLANK_LINES_IN_CODE): Spacing {
return Spacing.createSpacing(minSpaces, maxSpaces, minLineFeeds, keepLineBreaks, keepBlankLines)
}
}
interface KotlinSpacingBuilderUtil {
@@ -70,14 +70,14 @@ fun createSpacingBuilder(settings: CodeStyleSettings, builderUtil: KotlinSpacing
inPosition(parent = CLASS_BODY, left = SEMICOLON).customRule { parent, left, right ->
val klass = parent.node.treeParent.psi as? KtClass ?: return@customRule null
if (klass.isEnum() && right.node.elementType in DECLARATIONS) {
Spacing.createSpacing(0, 0, 2, settings.KEEP_LINE_BREAKS, settings.KEEP_BLANK_LINES_IN_DECLARATIONS)
createSpacing(0, minLineFeeds = 2, keepBlankLines = settings.KEEP_BLANK_LINES_IN_DECLARATIONS)
} else null
}
val parameterWithDocCommentRule = {
parent: ASTBlock, left: ASTBlock, right: ASTBlock ->
if (right.node.firstChildNode.elementType == KtTokens.DOC_COMMENT) {
Spacing.createSpacing(0, 0, 1, true, settings.KEEP_BLANK_LINES_IN_DECLARATIONS)
createSpacing(0, minLineFeeds = 1, keepLineBreaks = true, keepBlankLines = settings.KEEP_BLANK_LINES_IN_DECLARATIONS)
}
else {
null
@@ -178,7 +178,7 @@ fun createSpacingBuilder(settings: CodeStyleSettings, builderUtil: KotlinSpacing
custom {
inPosition(right = PRIMARY_CONSTRUCTOR).customRule { p, l, r ->
val spacesCount = if (r.node.findLeafElementAt(0)?.elementType != LPAR) 1 else 0
Spacing.createSpacing(spacesCount, spacesCount, 0, true, 0)
createSpacing(spacesCount, minLineFeeds = 0, keepLineBreaks = true, keepBlankLines = 0)
}
}
@@ -267,7 +267,7 @@ fun createSpacingBuilder(settings: CodeStyleSettings, builderUtil: KotlinSpacing
} else null
val removeLineBreaks = leftBlock != null && afterBlockFilter(right.node?.treeParent!!, leftBlock)
Spacing.createSpacing(1, 1, 0, !removeLineBreaks, 0)
createSpacing(1, minLineFeeds = 0, keepLineBreaks = !removeLineBreaks, keepBlankLines = 0)
}
}
}
@@ -290,10 +290,10 @@ fun createSpacingBuilder(settings: CodeStyleSettings, builderUtil: KotlinSpacing
val isAfterEolComment = previousLeaf != null && (previousLeaf.elementType == EOL_COMMENT)
val keepLineBreaks = kotlinSettings.LBRACE_ON_NEXT_LINE || isAfterEolComment
val minimumLF = if (kotlinSettings.LBRACE_ON_NEXT_LINE) 1 else 0
return Spacing.createSpacing(1, 1, minimumLF, keepLineBreaks, 0)
return createSpacing(1, minLineFeeds = minimumLF, keepLineBreaks = keepLineBreaks, keepBlankLines = 0)
}
}
return Spacing.createSpacing(1, 1, 0, settings.KEEP_LINE_BREAKS, settings.KEEP_BLANK_LINES_IN_CODE)
return createSpacing(1)
}
fun leftBraceRule(blockType: IElementType = BLOCK) = {
@@ -311,7 +311,7 @@ fun createSpacingBuilder(settings: CodeStyleSettings, builderUtil: KotlinSpacing
val nodeBeforeRight = right.node.treePrev
if (nodeBeforeRight is PsiWhiteSpace && !nodeBeforeRight.textContains('\n')) {
// Several line comments happened to be generated in one line
Spacing.createSpacing(1, 0, 1, settings.KEEP_LINE_BREAKS, settings.KEEP_BLANK_LINES_IN_CODE)
createSpacing(0, minLineFeeds = 1)
}
else {
null
@@ -326,7 +326,7 @@ fun createSpacingBuilder(settings: CodeStyleSettings, builderUtil: KotlinSpacing
inPosition(left = SEMICOLON).customRule { parent, left, right ->
val nodeAfterLeft = left.node.treeNext
if (nodeAfterLeft is PsiWhiteSpace && !nodeAfterLeft.textContains('\n')) {
Spacing.createSpacing(1, 1, 0, settings.KEEP_LINE_BREAKS, settings.KEEP_BLANK_LINES_IN_CODE)
createSpacing(1)
}
else {
null
@@ -371,7 +371,7 @@ fun createSpacingBuilder(settings: CodeStyleSettings, builderUtil: KotlinSpacing
inPosition(parent = FUNCTION_LITERAL,
left = LBRACE,
right = RBRACE)
.spacing(Spacing.createSpacing(0, 1, 0, settings.KEEP_LINE_BREAKS, settings.KEEP_BLANK_LINES_IN_CODE))
.spacing(createSpacing(minSpaces = 0, maxSpaces = 1))
inPosition(parent = FUNCTION_LITERAL,
right = RBRACE)
@@ -392,7 +392,7 @@ fun createSpacingBuilder(settings: CodeStyleSettings, builderUtil: KotlinSpacing
}
}
Spacing.createSpacing(numSpaces, numSpaces, 0, settings.KEEP_LINE_BREAKS, settings.KEEP_BLANK_LINES_IN_CODE)
createSpacing(numSpaces)
}
inPosition(parent = CLASS_BODY, right = RBRACE).lineBreakIfLineBreakInParent(numSpacesOtherwise = 1)