Refactoring: use more specific block type in signatures
This commit is contained in:
@@ -58,14 +58,14 @@ abstract class KotlinCommonBlock(
|
|||||||
private val settings: CodeStyleSettings,
|
private val settings: CodeStyleSettings,
|
||||||
private val spacingBuilder: KotlinSpacingBuilder,
|
private val spacingBuilder: KotlinSpacingBuilder,
|
||||||
private val alignmentStrategy: CommonAlignmentStrategy) {
|
private val alignmentStrategy: CommonAlignmentStrategy) {
|
||||||
private @Volatile var mySubBlocks: List<Block>? = null
|
private @Volatile var mySubBlocks: List<ASTBlock>? = null
|
||||||
|
|
||||||
abstract protected fun createBlock(node: ASTNode,
|
abstract protected fun createBlock(node: ASTNode,
|
||||||
alignmentStrategy: CommonAlignmentStrategy,
|
alignmentStrategy: CommonAlignmentStrategy,
|
||||||
indent: Indent?,
|
indent: Indent?,
|
||||||
wrap: Wrap?,
|
wrap: Wrap?,
|
||||||
settings: CodeStyleSettings,
|
settings: CodeStyleSettings,
|
||||||
spacingBuilder: KotlinSpacingBuilder): Block
|
spacingBuilder: KotlinSpacingBuilder): ASTBlock
|
||||||
|
|
||||||
abstract protected fun createSyntheticSpacingNodeBlock(node: ASTNode): ASTBlock
|
abstract protected fun createSyntheticSpacingNodeBlock(node: ASTNode): ASTBlock
|
||||||
|
|
||||||
@@ -104,7 +104,7 @@ abstract class KotlinCommonBlock(
|
|||||||
else
|
else
|
||||||
Indent.getNormalIndent()
|
Indent.getNormalIndent()
|
||||||
val operationSyntheticBlock = SyntheticKotlinBlock(
|
val operationSyntheticBlock = SyntheticKotlinBlock(
|
||||||
(operationBlock as ASTBlock).node,
|
operationBlock.node,
|
||||||
nodeSubBlocks.subList(operationBlockIndex, nodeSubBlocks.size),
|
nodeSubBlocks.subList(operationBlockIndex, nodeSubBlocks.size),
|
||||||
null, indent, null, spacingBuilder) { createSyntheticSpacingNodeBlock(it) }
|
null, indent, null, spacingBuilder) { createSyntheticSpacingNodeBlock(it) }
|
||||||
|
|
||||||
@@ -172,7 +172,7 @@ abstract class KotlinCommonBlock(
|
|||||||
|
|
||||||
if (type == KtNodeTypes.IF) {
|
if (type == KtNodeTypes.IF) {
|
||||||
val elseBlock = mySubBlocks?.getOrNull(newChildIndex)
|
val elseBlock = mySubBlocks?.getOrNull(newChildIndex)
|
||||||
if (elseBlock is ASTBlock && elseBlock.node.elementType == KtTokens.ELSE_KEYWORD) {
|
if (elseBlock != null && elseBlock.node.elementType == KtTokens.ELSE_KEYWORD) {
|
||||||
return ChildAttributes.DELEGATE_TO_NEXT_CHILD
|
return ChildAttributes.DELEGATE_TO_NEXT_CHILD
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -278,7 +278,7 @@ abstract class KotlinCommonBlock(
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
private fun buildSubBlock(child: ASTNode, alignmentStrategy: CommonAlignmentStrategy, wrappingStrategy: WrappingStrategy): Block {
|
private fun buildSubBlock(child: ASTNode, alignmentStrategy: CommonAlignmentStrategy, wrappingStrategy: WrappingStrategy): ASTBlock {
|
||||||
val childWrap = wrappingStrategy.getWrap(child)
|
val childWrap = wrappingStrategy.getWrap(child)
|
||||||
|
|
||||||
// Skip one sub-level for operators, so type of block node is an element type of operator
|
// Skip one sub-level for operators, so type of block node is an element type of operator
|
||||||
@@ -298,14 +298,14 @@ abstract class KotlinCommonBlock(
|
|||||||
return createBlock(child, alignmentStrategy, createChildIndent(child), childWrap, settings, spacingBuilder)
|
return createBlock(child, alignmentStrategy, createChildIndent(child), childWrap, settings, spacingBuilder)
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun buildSubBlocks(): List<Block> {
|
private fun buildSubBlocks(): List<ASTBlock> {
|
||||||
val childrenAlignmentStrategy = getChildrenAlignmentStrategy()
|
val childrenAlignmentStrategy = getChildrenAlignmentStrategy()
|
||||||
val wrappingStrategy = getWrappingStrategy()
|
val wrappingStrategy = getWrappingStrategy()
|
||||||
|
|
||||||
return node.children()
|
return node.children()
|
||||||
.filter { it.textRange.length > 0 && it.elementType != TokenType.WHITE_SPACE }
|
.filter { it.textRange.length > 0 && it.elementType != TokenType.WHITE_SPACE }
|
||||||
.map { buildSubBlock(it, childrenAlignmentStrategy, wrappingStrategy ) }
|
.map { buildSubBlock(it, childrenAlignmentStrategy, wrappingStrategy ) }
|
||||||
.toMutableList()
|
.toList()
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun getWrappingStrategy(): WrappingStrategy {
|
private fun getWrappingStrategy(): WrappingStrategy {
|
||||||
@@ -619,11 +619,6 @@ private fun getWrappingStrategyForItemList(wrapType: Int, itemTypes: TokenSet, w
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun findNodeBlockIndex(blocks: List<Block>, tokenSet: TokenSet): Int {
|
private fun findNodeBlockIndex(blocks: List<ASTBlock>, tokenSet: TokenSet): Int {
|
||||||
return blocks.indexOfFirst { block ->
|
return blocks.indexOfFirst { block -> block.node?.elementType in tokenSet }
|
||||||
if (block !is ASTBlock) return@indexOfFirst false
|
}
|
||||||
|
|
||||||
val node = block.node
|
|
||||||
node != null && node.elementType in tokenSet
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|||||||
@@ -22,7 +22,7 @@ import com.intellij.openapi.util.TextRange
|
|||||||
|
|
||||||
class SyntheticKotlinBlock(
|
class SyntheticKotlinBlock(
|
||||||
private val node: ASTNode,
|
private val node: ASTNode,
|
||||||
private val subBlocks: List<Block>,
|
private val subBlocks: List<ASTBlock>,
|
||||||
private val alignment: Alignment?,
|
private val alignment: Alignment?,
|
||||||
private val indent: Indent?,
|
private val indent: Indent?,
|
||||||
private val wrap: Wrap?,
|
private val wrap: Wrap?,
|
||||||
@@ -56,9 +56,7 @@ class SyntheticKotlinBlock(
|
|||||||
while (treeNode == null) when (child) {
|
while (treeNode == null) when (child) {
|
||||||
is SyntheticKotlinBlock -> child = child.getSubBlocks().first()
|
is SyntheticKotlinBlock -> child = child.getSubBlocks().first()
|
||||||
|
|
||||||
is ASTBlock -> treeNode = child.node
|
else -> treeNode = child.node
|
||||||
|
|
||||||
else -> break@loop
|
|
||||||
}
|
}
|
||||||
|
|
||||||
val textRange = getTextRange()
|
val textRange = getTextRange()
|
||||||
|
|||||||
@@ -24,8 +24,8 @@ import com.intellij.psi.codeStyle.CodeStyleSettings
|
|||||||
import com.intellij.psi.formatter.FormatterUtil
|
import com.intellij.psi.formatter.FormatterUtil
|
||||||
import com.intellij.psi.formatter.common.AbstractBlock
|
import com.intellij.psi.formatter.common.AbstractBlock
|
||||||
import com.intellij.psi.tree.IElementType
|
import com.intellij.psi.tree.IElementType
|
||||||
import org.jetbrains.kotlin.KtNodeTypes.*
|
import org.jetbrains.kotlin.KtNodeTypes.WHEN_ENTRY
|
||||||
import org.jetbrains.kotlin.lexer.KtTokens.*
|
import org.jetbrains.kotlin.lexer.KtTokens.ARROW
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @see Block for good JavaDoc documentation
|
* @see Block for good JavaDoc documentation
|
||||||
@@ -63,7 +63,7 @@ class KotlinBlock(
|
|||||||
|
|
||||||
override fun getSubBlocks(): List<Block> = subBlocks
|
override fun getSubBlocks(): List<Block> = subBlocks
|
||||||
|
|
||||||
override fun createBlock(node: ASTNode, alignmentStrategy: CommonAlignmentStrategy, indent: Indent?, wrap: Wrap?, settings: CodeStyleSettings, spacingBuilder: KotlinSpacingBuilder): Block {
|
override fun createBlock(node: ASTNode, alignmentStrategy: CommonAlignmentStrategy, indent: Indent?, wrap: Wrap?, settings: CodeStyleSettings, spacingBuilder: KotlinSpacingBuilder): ASTBlock {
|
||||||
return KotlinBlock(
|
return KotlinBlock(
|
||||||
node,
|
node,
|
||||||
alignmentStrategy,
|
alignmentStrategy,
|
||||||
|
|||||||
Reference in New Issue
Block a user