mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
Added formatting mode to Java blocks
Needed to distinguish normal formatting from enter handling
This commit is contained in:
@@ -19,9 +19,7 @@
|
||||
*/
|
||||
package com.intellij.lang.java;
|
||||
|
||||
import com.intellij.formatting.Block;
|
||||
import com.intellij.formatting.FormattingModel;
|
||||
import com.intellij.formatting.FormattingModelBuilder;
|
||||
import com.intellij.formatting.*;
|
||||
import com.intellij.lang.ASTNode;
|
||||
import com.intellij.openapi.diagnostic.Logger;
|
||||
import com.intellij.openapi.util.TextRange;
|
||||
@@ -43,21 +41,37 @@ import com.intellij.psi.impl.source.tree.TreeUtil;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
public class JavaFormattingModelBuilder implements FormattingModelBuilder {
|
||||
public class JavaFormattingModelBuilder implements FormattingModelBuilderEx {
|
||||
private static final Logger LOG = Logger.getInstance("#com.intellij.lang.java.JavaFormattingModelBuilder");
|
||||
|
||||
@Override
|
||||
@NotNull
|
||||
public FormattingModel createModel(final PsiElement element, final CodeStyleSettings settings) {
|
||||
public FormattingModel createModel(@NotNull final PsiElement element,
|
||||
@NotNull final CodeStyleSettings settings,
|
||||
@NotNull final FormattingMode formattingMode) {
|
||||
final FileElement fileElement = TreeUtil.getFileElement((TreeElement)SourceTreeToPsiMap.psiElementToTree(element));
|
||||
LOG.assertTrue(fileElement != null, "File element should not be null for " + element);
|
||||
CommonCodeStyleSettings commonSettings = settings.getCommonSettings(JavaLanguage.INSTANCE);
|
||||
JavaCodeStyleSettings customJavaSettings = settings.getCustomSettings(JavaCodeStyleSettings.class);
|
||||
Block block = AbstractJavaBlock.newJavaBlock(fileElement, commonSettings, customJavaSettings);
|
||||
Block block = AbstractJavaBlock.newJavaBlock(fileElement, commonSettings, customJavaSettings, formattingMode);
|
||||
FormattingDocumentModelImpl model = FormattingDocumentModelImpl.createOn(element.getContainingFile());
|
||||
return new PsiBasedFormatterModelWithShiftIndentInside (element.getContainingFile(), block, model);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
@Override
|
||||
public CommonCodeStyleSettings.IndentOptions getIndentOptionsToUse(@NotNull PsiFile file,
|
||||
@NotNull FormatTextRanges ranges,
|
||||
@NotNull CodeStyleSettings settings) {
|
||||
return null;
|
||||
}
|
||||
|
||||
@NotNull
|
||||
@Override
|
||||
public FormattingModel createModel(PsiElement element, CodeStyleSettings settings) {
|
||||
return createModel(element, settings, FormattingMode.REFORMAT);
|
||||
}
|
||||
|
||||
@Override
|
||||
public TextRange getRangeAffectingIndent(PsiFile file, int offset, ASTNode elementAtOffset) {
|
||||
return doGetRangeAffectingIndent(elementAtOffset);
|
||||
|
||||
@@ -68,10 +68,12 @@ public abstract class AbstractJavaBlock extends AbstractBlock implements JavaBlo
|
||||
private Map<IElementType, Wrap> myPreferredWraps;
|
||||
private AbstractJavaBlock myParentBlock;
|
||||
|
||||
private final FormattingMode myFormattingMode;
|
||||
|
||||
private final BlockFactory myBlockFactory = new BlockFactory() {
|
||||
@Override
|
||||
public Block createBlock(ASTNode node, Indent indent, Alignment alignment, Wrap wrap) {
|
||||
return new SimpleJavaBlock(node, wrap, AlignmentStrategy.wrap(alignment), indent, mySettings, myJavaSettings);
|
||||
public Block createBlock(ASTNode node, Indent indent, Alignment alignment, Wrap wrap, @NotNull FormattingMode formattingMode) {
|
||||
return new SimpleJavaBlock(node, wrap, AlignmentStrategy.wrap(alignment), indent, mySettings, myJavaSettings, formattingMode);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -83,6 +85,11 @@ public abstract class AbstractJavaBlock extends AbstractBlock implements JavaBlo
|
||||
public JavaCodeStyleSettings getJavaSettings() {
|
||||
return myJavaSettings;
|
||||
}
|
||||
|
||||
@Override
|
||||
public FormattingMode getFormattingMode() {
|
||||
return myFormattingMode;
|
||||
}
|
||||
};
|
||||
|
||||
protected AbstractJavaBlock(@NotNull final ASTNode node,
|
||||
@@ -90,9 +97,10 @@ public abstract class AbstractJavaBlock extends AbstractBlock implements JavaBlo
|
||||
final Alignment alignment,
|
||||
final Indent indent,
|
||||
@NotNull final CommonCodeStyleSettings settings,
|
||||
@NotNull JavaCodeStyleSettings javaSettings)
|
||||
@NotNull JavaCodeStyleSettings javaSettings,
|
||||
@NotNull FormattingMode formattingMode)
|
||||
{
|
||||
this(node, wrap, indent, settings, javaSettings, JavaWrapManager.INSTANCE, AlignmentStrategy.wrap(alignment));
|
||||
this(node, wrap, indent, settings, javaSettings, JavaWrapManager.INSTANCE, AlignmentStrategy.wrap(alignment), formattingMode);
|
||||
}
|
||||
|
||||
protected AbstractJavaBlock(@NotNull final ASTNode node,
|
||||
@@ -100,14 +108,16 @@ public abstract class AbstractJavaBlock extends AbstractBlock implements JavaBlo
|
||||
@NotNull final AlignmentStrategy alignmentStrategy,
|
||||
final Indent indent,
|
||||
@NotNull final CommonCodeStyleSettings settings,
|
||||
@NotNull JavaCodeStyleSettings javaSettings)
|
||||
@NotNull JavaCodeStyleSettings javaSettings,
|
||||
@NotNull FormattingMode formattingMode)
|
||||
{
|
||||
this(node, wrap, indent, settings, javaSettings, JavaWrapManager.INSTANCE, alignmentStrategy);
|
||||
this(node, wrap, indent, settings, javaSettings, JavaWrapManager.INSTANCE, alignmentStrategy, formattingMode);
|
||||
}
|
||||
|
||||
private AbstractJavaBlock(@NotNull ASTNode ignored,
|
||||
@NotNull CommonCodeStyleSettings commonSettings,
|
||||
@NotNull JavaCodeStyleSettings javaSettings) {
|
||||
@NotNull JavaCodeStyleSettings javaSettings,
|
||||
@NotNull FormattingMode formattingMode) {
|
||||
super(ignored, null, null);
|
||||
mySettings = commonSettings;
|
||||
myJavaSettings = javaSettings;
|
||||
@@ -115,6 +125,7 @@ public abstract class AbstractJavaBlock extends AbstractBlock implements JavaBlo
|
||||
myIndent = null;
|
||||
myWrapManager = JavaWrapManager.INSTANCE;
|
||||
myAlignmentStrategy = AlignmentStrategy.getNullStrategy();
|
||||
myFormattingMode = formattingMode;
|
||||
}
|
||||
|
||||
protected AbstractJavaBlock(@NotNull final ASTNode node,
|
||||
@@ -123,7 +134,8 @@ public abstract class AbstractJavaBlock extends AbstractBlock implements JavaBlo
|
||||
@NotNull final CommonCodeStyleSettings settings,
|
||||
@NotNull JavaCodeStyleSettings javaSettings,
|
||||
final JavaWrapManager wrapManager,
|
||||
@NotNull final AlignmentStrategy alignmentStrategy) {
|
||||
@NotNull final AlignmentStrategy alignmentStrategy,
|
||||
@NotNull final FormattingMode formattingMode) {
|
||||
super(node, wrap, createBlockAlignment(alignmentStrategy, node));
|
||||
mySettings = settings;
|
||||
myJavaSettings = javaSettings;
|
||||
@@ -131,6 +143,7 @@ public abstract class AbstractJavaBlock extends AbstractBlock implements JavaBlo
|
||||
myIndent = indent;
|
||||
myWrapManager = wrapManager;
|
||||
myAlignmentStrategy = alignmentStrategy;
|
||||
myFormattingMode = formattingMode;
|
||||
}
|
||||
|
||||
@Nullable
|
||||
@@ -149,8 +162,9 @@ public abstract class AbstractJavaBlock extends AbstractBlock implements JavaBlo
|
||||
@NotNull JavaCodeStyleSettings javaSettings,
|
||||
@Nullable Indent indent,
|
||||
@Nullable Wrap wrap,
|
||||
Alignment alignment) {
|
||||
return createJavaBlock(child, settings, javaSettings,indent, wrap, AlignmentStrategy.wrap(alignment));
|
||||
Alignment alignment,
|
||||
@NotNull FormattingMode formattingMode) {
|
||||
return createJavaBlock(child, settings, javaSettings,indent, wrap, AlignmentStrategy.wrap(alignment), formattingMode);
|
||||
}
|
||||
|
||||
@NotNull
|
||||
@@ -159,8 +173,9 @@ public abstract class AbstractJavaBlock extends AbstractBlock implements JavaBlo
|
||||
@NotNull JavaCodeStyleSettings javaSettings,
|
||||
final Indent indent,
|
||||
@Nullable Wrap wrap,
|
||||
@NotNull AlignmentStrategy alignmentStrategy) {
|
||||
return createJavaBlock(child, settings, javaSettings, indent, wrap, alignmentStrategy, -1);
|
||||
@NotNull AlignmentStrategy alignmentStrategy,
|
||||
@NotNull FormattingMode formattingMode) {
|
||||
return createJavaBlock(child, settings, javaSettings, indent, wrap, alignmentStrategy, -1, formattingMode);
|
||||
}
|
||||
|
||||
@NotNull
|
||||
@@ -170,7 +185,8 @@ public abstract class AbstractJavaBlock extends AbstractBlock implements JavaBlo
|
||||
@Nullable Indent indent,
|
||||
Wrap wrap,
|
||||
@NotNull AlignmentStrategy alignmentStrategy,
|
||||
int startOffset) {
|
||||
int startOffset,
|
||||
@NotNull FormattingMode formattingMode) {
|
||||
Indent actualIndent = indent == null ? getDefaultSubtreeIndent(child, getJavaIndentOptions(settings)) : indent;
|
||||
IElementType elementType = child.getElementType();
|
||||
Alignment alignment = alignmentStrategy.getAlignment(elementType);
|
||||
@@ -182,26 +198,26 @@ public abstract class AbstractJavaBlock extends AbstractBlock implements JavaBlo
|
||||
int end = CharArrayUtil.shiftBackward(text, text.length() - 1, " \t\n") + 1;
|
||||
LOG.assertTrue(start < end);
|
||||
TextRange range = new TextRange(start + child.getStartOffset(), end + child.getStartOffset());
|
||||
return new PartialWhitespaceBlock(child, range, wrap, alignment, actualIndent, settings, javaSettings);
|
||||
return new PartialWhitespaceBlock(child, range, wrap, alignment, actualIndent, settings, javaSettings, myFormattingMode);
|
||||
}
|
||||
|
||||
if (childPsi instanceof PsiClass || childPsi instanceof PsiJavaModule) {
|
||||
return new CodeBlockBlock(child, wrap, alignment, actualIndent, settings, javaSettings);
|
||||
return new CodeBlockBlock(child, wrap, alignment, actualIndent, settings, javaSettings, formattingMode);
|
||||
}
|
||||
if (child.getElementType() == JavaElementType.METHOD) {
|
||||
return new BlockContainingJavaBlock(child, actualIndent, alignmentStrategy, mySettings, myJavaSettings);
|
||||
return new BlockContainingJavaBlock(child, actualIndent, alignmentStrategy, mySettings, myJavaSettings, formattingMode);
|
||||
}
|
||||
if (isBlockType(elementType)) {
|
||||
return new BlockContainingJavaBlock(child, wrap, alignment, actualIndent, settings, javaSettings);
|
||||
return new BlockContainingJavaBlock(child, wrap, alignment, actualIndent, settings, javaSettings, formattingMode);
|
||||
}
|
||||
if (isStatement(child, child.getTreeParent())) {
|
||||
return new CodeBlockBlock(child, wrap, alignment, actualIndent, settings, javaSettings);
|
||||
return new CodeBlockBlock(child, wrap, alignment, actualIndent, settings, javaSettings, myFormattingMode);
|
||||
}
|
||||
if (!isBuildIndentsOnly() &&
|
||||
child instanceof PsiComment &&
|
||||
child instanceof PsiLanguageInjectionHost &&
|
||||
InjectedLanguageUtil.hasInjections((PsiLanguageInjectionHost)child)) {
|
||||
return new CommentWithInjectionBlock(child, wrap, alignment, indent, settings, javaSettings);
|
||||
return new CommentWithInjectionBlock(child, wrap, alignment, indent, settings, javaSettings, formattingMode);
|
||||
}
|
||||
if (child instanceof LeafElement || childPsi instanceof PsiJavaModuleReferenceElement) {
|
||||
if (child.getElementType() == JavaTokenType.C_STYLE_COMMENT) {
|
||||
@@ -212,19 +228,19 @@ public abstract class AbstractJavaBlock extends AbstractBlock implements JavaBlo
|
||||
return block;
|
||||
}
|
||||
if (isLikeExtendsList(elementType)) {
|
||||
return new ExtendsListBlock(child, wrap, alignmentStrategy, settings, javaSettings);
|
||||
return new ExtendsListBlock(child, wrap, alignmentStrategy, settings, javaSettings, formattingMode);
|
||||
}
|
||||
if (elementType == JavaElementType.CODE_BLOCK) {
|
||||
return new CodeBlockBlock(child, wrap, alignment, actualIndent, settings, javaSettings);
|
||||
return new CodeBlockBlock(child, wrap, alignment, actualIndent, settings, javaSettings, formattingMode);
|
||||
}
|
||||
if (elementType == JavaElementType.LABELED_STATEMENT) {
|
||||
return new LabeledJavaBlock(child, wrap, alignment, actualIndent, settings, javaSettings);
|
||||
return new LabeledJavaBlock(child, wrap, alignment, actualIndent, settings, javaSettings, formattingMode);
|
||||
}
|
||||
if (elementType == JavaDocElementType.DOC_COMMENT) {
|
||||
return new DocCommentBlock(child, wrap, alignment, actualIndent, settings, javaSettings);
|
||||
return new DocCommentBlock(child, wrap, alignment, actualIndent, settings, javaSettings, formattingMode);
|
||||
}
|
||||
|
||||
final SimpleJavaBlock simpleJavaBlock = new SimpleJavaBlock(child, wrap, alignmentStrategy, actualIndent, settings, javaSettings);
|
||||
final SimpleJavaBlock simpleJavaBlock = new SimpleJavaBlock(child, wrap, alignmentStrategy, actualIndent, settings, javaSettings, myFormattingMode);
|
||||
simpleJavaBlock.setStartOffset(startOffset);
|
||||
return simpleJavaBlock;
|
||||
}
|
||||
@@ -232,9 +248,10 @@ public abstract class AbstractJavaBlock extends AbstractBlock implements JavaBlo
|
||||
@NotNull
|
||||
public static Block newJavaBlock(@NotNull ASTNode child,
|
||||
@NotNull CommonCodeStyleSettings settings,
|
||||
@NotNull JavaCodeStyleSettings javaSettings) {
|
||||
@NotNull JavaCodeStyleSettings javaSettings,
|
||||
@NotNull FormattingMode formattingMode) {
|
||||
final Indent indent = getDefaultSubtreeIndent(child, getJavaIndentOptions(settings));
|
||||
return newJavaBlock(child, settings, javaSettings, indent, null, AlignmentStrategy.getNullStrategy());
|
||||
return newJavaBlock(child, settings, javaSettings, indent, null, AlignmentStrategy.getNullStrategy(), formattingMode);
|
||||
}
|
||||
|
||||
@NotNull
|
||||
@@ -243,13 +260,14 @@ public abstract class AbstractJavaBlock extends AbstractBlock implements JavaBlo
|
||||
@NotNull JavaCodeStyleSettings javaSettings,
|
||||
@Nullable Indent indent,
|
||||
@Nullable Wrap wrap,
|
||||
@NotNull AlignmentStrategy strategy) {
|
||||
return new AbstractJavaBlock(child, settings, javaSettings) {
|
||||
@NotNull AlignmentStrategy strategy,
|
||||
@NotNull FormattingMode formattingMode) {
|
||||
return new AbstractJavaBlock(child, settings, javaSettings, formattingMode) {
|
||||
@Override
|
||||
protected List<Block> buildChildren() {
|
||||
return null;
|
||||
}
|
||||
}.createJavaBlock(child, settings, javaSettings, indent, wrap, strategy);
|
||||
}.createJavaBlock(child, settings, javaSettings, indent, wrap, strategy, formattingMode);
|
||||
}
|
||||
|
||||
@NotNull
|
||||
@@ -488,7 +506,7 @@ public abstract class AbstractJavaBlock extends AbstractBlock implements JavaBlo
|
||||
@NotNull ASTNode child,
|
||||
@NotNull AlignmentStrategy alignmentStrategy,
|
||||
final Wrap defaultWrap,
|
||||
final Indent childIndent,
|
||||
Indent childIndent,
|
||||
int childOffset) {
|
||||
final IElementType childType = child.getElementType();
|
||||
if (childType == JavaTokenType.CLASS_KEYWORD || childType == JavaTokenType.INTERFACE_KEYWORD) {
|
||||
@@ -564,11 +582,11 @@ public abstract class AbstractJavaBlock extends AbstractBlock implements JavaBlo
|
||||
|| childType == JavaElementType.DECLARATION_STATEMENT
|
||||
&& (nodeType == JavaElementType.METHOD || nodeType == JavaElementType.CODE_BLOCK))
|
||||
{
|
||||
result.add(new SimpleJavaBlock(child, defaultWrap, alignmentStrategy, childIndent, mySettings, myJavaSettings));
|
||||
result.add(new SimpleJavaBlock(child, defaultWrap, alignmentStrategy, childIndent, mySettings, myJavaSettings, myFormattingMode));
|
||||
}
|
||||
else if (childType == JavaElementType.METHOD) {
|
||||
Wrap wrap = arrangeChildWrap(child, defaultWrap);
|
||||
Block block = createJavaBlock(child, mySettings, myJavaSettings, childIndent, wrap, alignmentStrategy);
|
||||
Block block = createJavaBlock(child, mySettings, myJavaSettings, childIndent, wrap, alignmentStrategy, myFormattingMode);
|
||||
result.add(block);
|
||||
}
|
||||
else {
|
||||
@@ -584,7 +602,7 @@ public abstract class AbstractJavaBlock extends AbstractBlock implements JavaBlo
|
||||
|
||||
Wrap wrap = arrangeChildWrap(child, defaultWrap);
|
||||
|
||||
Block block = createJavaBlock(child, mySettings, myJavaSettings, childIndent, wrap, alignmentStrategyToUse, childOffset);
|
||||
Block block = createJavaBlock(child, mySettings, myJavaSettings, childIndent, wrap, alignmentStrategyToUse, childOffset, myFormattingMode);
|
||||
|
||||
if (block instanceof AbstractJavaBlock) {
|
||||
final AbstractJavaBlock javaBlock = (AbstractJavaBlock)block;
|
||||
@@ -644,7 +662,7 @@ public abstract class AbstractJavaBlock extends AbstractBlock implements JavaBlo
|
||||
final Indent childIndent) {
|
||||
ASTNode lastFieldInGroup = findLastFieldInGroup(child);
|
||||
if (lastFieldInGroup == child) {
|
||||
result.add(createJavaBlock(child, getSettings(), myJavaSettings, childIndent, arrangeChildWrap(child, defaultWrap), alignmentStrategy));
|
||||
result.add(createJavaBlock(child, getSettings(), myJavaSettings, childIndent, arrangeChildWrap(child, defaultWrap), alignmentStrategy, myFormattingMode));
|
||||
return child;
|
||||
}
|
||||
else {
|
||||
@@ -655,7 +673,8 @@ public abstract class AbstractJavaBlock extends AbstractBlock implements JavaBlo
|
||||
child, getSettings(), myJavaSettings,
|
||||
Indent.getContinuationWithoutFirstIndent(myIndentSettings.USE_RELATIVE_INDENTS),
|
||||
arrangeChildWrap(child, defaultWrap),
|
||||
alignmentStrategy
|
||||
alignmentStrategy,
|
||||
myFormattingMode
|
||||
)
|
||||
);
|
||||
}
|
||||
@@ -710,7 +729,7 @@ public abstract class AbstractJavaBlock extends AbstractBlock implements JavaBlo
|
||||
private Block createMethodCallExpressionBlock(@NotNull ASTNode node, Wrap blockWrap, Alignment alignment, Indent indent) {
|
||||
final ArrayList<ASTNode> nodes = new ArrayList<>();
|
||||
collectNodes(nodes, node);
|
||||
return new ChainMethodCallsBlockBuilder(alignment, blockWrap, indent, mySettings, myJavaSettings).build(nodes);
|
||||
return new ChainMethodCallsBlockBuilder(alignment, blockWrap, indent, mySettings, myJavaSettings, myFormattingMode).build(nodes);
|
||||
}
|
||||
|
||||
private static void collectNodes(@NotNull List<ASTNode> nodes, @NotNull ASTNode node) {
|
||||
@@ -905,13 +924,13 @@ public abstract class AbstractJavaBlock extends AbstractBlock implements JavaBlo
|
||||
child.getElementType() == JavaElementType.EMPTY_EXPRESSION;
|
||||
if (!FormatterUtil.containsWhiteSpacesOnly(child) && child.getTextLength() > 0) {
|
||||
if (child.getElementType() == from) {
|
||||
result.add(createJavaBlock(child, mySettings, myJavaSettings, externalIndent, null, bracketAlignment));
|
||||
result.add(createJavaBlock(child, mySettings, myJavaSettings, externalIndent, null, bracketAlignment, myFormattingMode));
|
||||
}
|
||||
else if (child.getElementType() == to) {
|
||||
Block block = createJavaBlock(child, mySettings, myJavaSettings,
|
||||
isAfterIncomplete && !afterAnonymousClass ? internalIndent : externalIndent,
|
||||
null,
|
||||
isAfterIncomplete ? alignmentStrategy.getAlignment(null) : bracketAlignment);
|
||||
isAfterIncomplete ? alignmentStrategy.getAlignment(null) : bracketAlignment, myFormattingMode);
|
||||
result.add(block);
|
||||
return child;
|
||||
}
|
||||
@@ -1003,7 +1022,7 @@ public abstract class AbstractJavaBlock extends AbstractBlock implements JavaBlo
|
||||
while (child != null) {
|
||||
if (!FormatterUtil.containsWhiteSpacesOnly(child) && child.getTextLength() > 0) {
|
||||
result.add(createJavaBlock(child, mySettings, myJavaSettings, Indent.getNormalIndent(),
|
||||
wrappingStrategy.getWrap(child.getElementType()), AlignmentStrategy.getNullStrategy()));
|
||||
wrappingStrategy.getWrap(child.getElementType()), AlignmentStrategy.getNullStrategy(), myFormattingMode));
|
||||
if (child == last) return child;
|
||||
}
|
||||
child = child.getTreeNext();
|
||||
@@ -1270,4 +1289,8 @@ public abstract class AbstractJavaBlock extends AbstractBlock implements JavaBlo
|
||||
result.setChildAttributes(new ChildAttributes(getCodeBlockInternalIndent(childrenIndent), null));
|
||||
return result;
|
||||
}
|
||||
|
||||
protected FormattingMode getFormattingMode() {
|
||||
return myFormattingMode;
|
||||
}
|
||||
}
|
||||
@@ -18,7 +18,9 @@ package com.intellij.psi.formatter.java;
|
||||
import com.intellij.formatting.*;
|
||||
import com.intellij.formatting.alignment.AlignmentStrategy;
|
||||
import com.intellij.lang.ASTNode;
|
||||
import com.intellij.psi.*;
|
||||
import com.intellij.psi.JavaTokenType;
|
||||
import com.intellij.psi.PsiStatement;
|
||||
import com.intellij.psi.PsiTypeElement;
|
||||
import com.intellij.psi.codeStyle.CommonCodeStyleSettings;
|
||||
import com.intellij.psi.codeStyle.JavaCodeStyleSettings;
|
||||
import com.intellij.psi.formatter.FormatterUtil;
|
||||
@@ -50,12 +52,18 @@ public class BlockContainingJavaBlock extends AbstractJavaBlock{
|
||||
Alignment alignment,
|
||||
Indent indent,
|
||||
CommonCodeStyleSettings settings,
|
||||
JavaCodeStyleSettings javaSettings) {
|
||||
super(node, wrap, alignment, indent, settings, javaSettings);
|
||||
JavaCodeStyleSettings javaSettings,
|
||||
@NotNull FormattingMode formattingMode) {
|
||||
super(node, wrap, alignment, indent, settings, javaSettings, formattingMode);
|
||||
}
|
||||
|
||||
public BlockContainingJavaBlock(ASTNode child, Indent indent, AlignmentStrategy strategy, CommonCodeStyleSettings settings, JavaCodeStyleSettings javaSettings) {
|
||||
super(child, null, strategy, indent, settings, javaSettings);
|
||||
public BlockContainingJavaBlock(ASTNode child,
|
||||
Indent indent,
|
||||
AlignmentStrategy strategy,
|
||||
CommonCodeStyleSettings settings,
|
||||
JavaCodeStyleSettings javaSettings,
|
||||
@NotNull FormattingMode formattingMode) {
|
||||
super(child, null, strategy, indent, settings, javaSettings, formattingMode);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -15,20 +15,20 @@
|
||||
*/
|
||||
package com.intellij.psi.formatter.java;
|
||||
|
||||
import com.intellij.formatting.Alignment;
|
||||
import com.intellij.formatting.Block;
|
||||
import com.intellij.formatting.Indent;
|
||||
import com.intellij.formatting.Wrap;
|
||||
import com.intellij.formatting.*;
|
||||
import com.intellij.lang.ASTNode;
|
||||
import com.intellij.psi.codeStyle.CommonCodeStyleSettings;
|
||||
import com.intellij.psi.codeStyle.JavaCodeStyleSettings;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
public interface BlockFactory {
|
||||
|
||||
Block createBlock(ASTNode node, Indent indent, Alignment alignment, Wrap wrap);
|
||||
Block createBlock(ASTNode node, Indent indent, Alignment alignment, Wrap wrap, @NotNull FormattingMode formattingMode);
|
||||
|
||||
CommonCodeStyleSettings getSettings();
|
||||
|
||||
JavaCodeStyleSettings getJavaSettings();
|
||||
|
||||
FormattingMode getFormattingMode();
|
||||
|
||||
}
|
||||
|
||||
@@ -15,10 +15,7 @@
|
||||
*/
|
||||
package com.intellij.psi.formatter.java;
|
||||
|
||||
import com.intellij.formatting.Alignment;
|
||||
import com.intellij.formatting.Block;
|
||||
import com.intellij.formatting.Indent;
|
||||
import com.intellij.formatting.Wrap;
|
||||
import com.intellij.formatting.*;
|
||||
import com.intellij.formatting.alignment.AlignmentStrategy;
|
||||
import com.intellij.lang.ASTNode;
|
||||
import com.intellij.psi.JavaTokenType;
|
||||
@@ -37,11 +34,14 @@ public class CallChunkBlockBuilder {
|
||||
private final CommonCodeStyleSettings mySettings;
|
||||
private final CommonCodeStyleSettings.IndentOptions myIndentSettings;
|
||||
private final JavaCodeStyleSettings myJavaSettings;
|
||||
private final FormattingMode myFormattingMode;
|
||||
|
||||
public CallChunkBlockBuilder(@NotNull CommonCodeStyleSettings settings, @NotNull JavaCodeStyleSettings javaSettings) {
|
||||
public CallChunkBlockBuilder(@NotNull CommonCodeStyleSettings settings, @NotNull JavaCodeStyleSettings javaSettings,
|
||||
@NotNull FormattingMode formattingMode) {
|
||||
mySettings = settings;
|
||||
myIndentSettings = settings.getIndentOptions();
|
||||
myJavaSettings = javaSettings;
|
||||
myFormattingMode = formattingMode;
|
||||
}
|
||||
|
||||
@NotNull
|
||||
@@ -50,7 +50,7 @@ public class CallChunkBlockBuilder {
|
||||
final ASTNode firstNode = subNodes.get(0);
|
||||
if (firstNode.getElementType() == JavaTokenType.DOT) {
|
||||
AlignmentStrategy strategy = AlignmentStrategy.getNullStrategy();
|
||||
Block block = newJavaBlock(firstNode, mySettings, myJavaSettings, Indent.getNoneIndent(), null, strategy);
|
||||
Block block = newJavaBlock(firstNode, mySettings, myJavaSettings, Indent.getNoneIndent(), null, strategy, myFormattingMode);
|
||||
subBlocks.add(block);
|
||||
subNodes.remove(0);
|
||||
if (!subNodes.isEmpty()) {
|
||||
@@ -66,7 +66,7 @@ public class CallChunkBlockBuilder {
|
||||
final ArrayList<Block> result = new ArrayList<>();
|
||||
for (ASTNode node : subNodes) {
|
||||
Indent indent = Indent.getContinuationWithoutFirstIndent(myIndentSettings.USE_RELATIVE_INDENTS);
|
||||
result.add(newJavaBlock(node, mySettings, myJavaSettings, indent, null, AlignmentStrategy.getNullStrategy()));
|
||||
result.add(newJavaBlock(node, mySettings, myJavaSettings, indent, null, AlignmentStrategy.getNullStrategy(), myFormattingMode));
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
+7
-6
@@ -15,10 +15,7 @@
|
||||
*/
|
||||
package com.intellij.psi.formatter.java;
|
||||
|
||||
import com.intellij.formatting.Alignment;
|
||||
import com.intellij.formatting.Block;
|
||||
import com.intellij.formatting.Indent;
|
||||
import com.intellij.formatting.Wrap;
|
||||
import com.intellij.formatting.*;
|
||||
import com.intellij.lang.ASTNode;
|
||||
import com.intellij.psi.JavaTokenType;
|
||||
import com.intellij.psi.PsiComment;
|
||||
@@ -41,11 +38,14 @@ class ChainMethodCallsBlockBuilder {
|
||||
private final Alignment myBlockAlignment;
|
||||
private final Indent myBlockIndent;
|
||||
|
||||
private final FormattingMode myFormattingMode;
|
||||
|
||||
public ChainMethodCallsBlockBuilder(Alignment alignment,
|
||||
Wrap wrap,
|
||||
Indent indent,
|
||||
CommonCodeStyleSettings settings,
|
||||
JavaCodeStyleSettings javaSettings)
|
||||
JavaCodeStyleSettings javaSettings,
|
||||
@NotNull FormattingMode formattingMode)
|
||||
{
|
||||
myBlockWrap = wrap;
|
||||
myBlockAlignment = alignment;
|
||||
@@ -53,6 +53,7 @@ class ChainMethodCallsBlockBuilder {
|
||||
mySettings = settings;
|
||||
myIndentSettings = settings.getIndentOptions();
|
||||
myJavaSettings = javaSettings;
|
||||
myFormattingMode = formattingMode;
|
||||
}
|
||||
|
||||
public Block build(List<ASTNode> nodes) {
|
||||
@@ -85,7 +86,7 @@ class ChainMethodCallsBlockBuilder {
|
||||
chainedCallsAlignment = null;
|
||||
}
|
||||
|
||||
CallChunkBlockBuilder builder = new CallChunkBlockBuilder(mySettings, myJavaSettings);
|
||||
CallChunkBlockBuilder builder = new CallChunkBlockBuilder(mySettings, myJavaSettings, myFormattingMode);
|
||||
blocks.add(builder.create(currentCallChunk.nodes, wrap, chainedCallsAlignment));
|
||||
}
|
||||
|
||||
|
||||
@@ -15,10 +15,7 @@
|
||||
*/
|
||||
package com.intellij.psi.formatter.java;
|
||||
|
||||
import com.intellij.formatting.Alignment;
|
||||
import com.intellij.formatting.Block;
|
||||
import com.intellij.formatting.Indent;
|
||||
import com.intellij.formatting.Wrap;
|
||||
import com.intellij.formatting.*;
|
||||
import com.intellij.lang.ASTNode;
|
||||
import com.intellij.openapi.util.Condition;
|
||||
import com.intellij.psi.formatter.FormatterUtil;
|
||||
@@ -50,7 +47,7 @@ public class ChildrenBlocksBuilder {
|
||||
Indent indent = myConfig.getIndent(type);
|
||||
Wrap wrap = myConfig.getWrap(type);
|
||||
|
||||
blocks.add(factory.createBlock(child, indent, alignment, wrap));
|
||||
blocks.add(factory.createBlock(child, indent, alignment, wrap, factory.getFormattingMode()));
|
||||
}
|
||||
|
||||
return blocks;
|
||||
@@ -69,6 +66,7 @@ public class ChildrenBlocksBuilder {
|
||||
private Alignment myDefaultAlignment;
|
||||
private Indent myDefaultIndent;
|
||||
private Wrap myDefaultWrap;
|
||||
private FormattingMode myFormattingMode;
|
||||
|
||||
public ChildrenBlocksBuilder createBuilder() {
|
||||
return new ChildrenBlocksBuilder(this);
|
||||
@@ -140,5 +138,13 @@ public class ChildrenBlocksBuilder {
|
||||
return this;
|
||||
}
|
||||
|
||||
public FormattingMode getFormattingMode() {
|
||||
return myFormattingMode;
|
||||
}
|
||||
|
||||
public Config setFormattingMode(FormattingMode formattingMode) {
|
||||
myFormattingMode = formattingMode;
|
||||
return this;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -45,8 +45,9 @@ public class CodeBlockBlock extends AbstractJavaBlock {
|
||||
Alignment alignment,
|
||||
Indent indent,
|
||||
CommonCodeStyleSettings settings,
|
||||
JavaCodeStyleSettings javaSettings) {
|
||||
super(node, wrap, getAlignmentStrategy(alignment, node, settings), indent, settings, javaSettings);
|
||||
JavaCodeStyleSettings javaSettings,
|
||||
@NotNull FormattingMode formattingMode) {
|
||||
super(node, wrap, getAlignmentStrategy(alignment, node, settings), indent, settings, javaSettings, formattingMode);
|
||||
if (isSwitchCodeBlock() && !settings.INDENT_CASE_FROM_SWITCH) {
|
||||
myChildrenIndent = 0;
|
||||
}
|
||||
|
||||
@@ -38,8 +38,9 @@ public class CommentWithInjectionBlock extends AbstractJavaBlock {
|
||||
Alignment alignment,
|
||||
Indent indent,
|
||||
CommonCodeStyleSettings settings,
|
||||
JavaCodeStyleSettings javaSettings) {
|
||||
super(node, wrap, alignment, indent, settings, javaSettings);
|
||||
JavaCodeStyleSettings javaSettings,
|
||||
@NotNull FormattingMode formattingMode) {
|
||||
super(node, wrap, alignment, indent, settings, javaSettings, formattingMode);
|
||||
myInjectedBlockBuilder = new JavaCommentInjectedBlockBuilder();
|
||||
}
|
||||
|
||||
|
||||
@@ -33,9 +33,10 @@ public class DocCommentBlock extends AbstractJavaBlock{
|
||||
Alignment alignment,
|
||||
Indent indent,
|
||||
CommonCodeStyleSettings settings,
|
||||
JavaCodeStyleSettings javaSettings)
|
||||
JavaCodeStyleSettings javaSettings,
|
||||
@NotNull FormattingMode formattingMode)
|
||||
{
|
||||
super(node, wrap, alignment, indent, settings, javaSettings);
|
||||
super(node, wrap, alignment, indent, settings, javaSettings, formattingMode);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -45,9 +46,9 @@ public class DocCommentBlock extends AbstractJavaBlock{
|
||||
ASTNode child = myNode.getFirstChildNode();
|
||||
while (child != null) {
|
||||
if (child.getElementType() == JavaDocTokenType.DOC_COMMENT_START) {
|
||||
result.add(createJavaBlock(child, mySettings, myJavaSettings, Indent.getNoneIndent(), null, AlignmentStrategy.getNullStrategy()));
|
||||
result.add(createJavaBlock(child, mySettings, myJavaSettings, Indent.getNoneIndent(), null, AlignmentStrategy.getNullStrategy(), getFormattingMode()));
|
||||
} else if (!FormatterUtil.containsWhiteSpacesOnly(child) && !child.getText().trim().isEmpty()){
|
||||
result.add(createJavaBlock(child, mySettings, myJavaSettings, Indent.getSpaceIndent(1), null, AlignmentStrategy.getNullStrategy()));
|
||||
result.add(createJavaBlock(child, mySettings, myJavaSettings, Indent.getSpaceIndent(1), null, AlignmentStrategy.getNullStrategy(), getFormattingMode()));
|
||||
}
|
||||
child = child.getTreeNext();
|
||||
}
|
||||
|
||||
@@ -15,10 +15,7 @@
|
||||
*/
|
||||
package com.intellij.psi.formatter.java;
|
||||
|
||||
import com.intellij.formatting.Alignment;
|
||||
import com.intellij.formatting.Block;
|
||||
import com.intellij.formatting.Indent;
|
||||
import com.intellij.formatting.Wrap;
|
||||
import com.intellij.formatting.*;
|
||||
import com.intellij.formatting.alignment.AlignmentStrategy;
|
||||
import com.intellij.lang.ASTNode;
|
||||
import com.intellij.psi.JavaTokenType;
|
||||
@@ -28,6 +25,7 @@ import com.intellij.psi.formatter.FormatterUtil;
|
||||
import com.intellij.psi.impl.source.tree.ElementType;
|
||||
import com.intellij.psi.impl.source.tree.JavaElementType;
|
||||
import com.intellij.psi.tree.IElementType;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
@@ -37,18 +35,20 @@ public class ExtendsListBlock extends AbstractJavaBlock{
|
||||
Wrap wrap,
|
||||
Alignment alignment,
|
||||
CommonCodeStyleSettings settings,
|
||||
JavaCodeStyleSettings javaSettings)
|
||||
JavaCodeStyleSettings javaSettings,
|
||||
@NotNull FormattingMode formattingMode)
|
||||
{
|
||||
super(node, wrap, alignment, Indent.getNoneIndent(), settings, javaSettings);
|
||||
super(node, wrap, alignment, Indent.getNoneIndent(), settings, javaSettings, formattingMode);
|
||||
}
|
||||
|
||||
public ExtendsListBlock(ASTNode node,
|
||||
Wrap wrap,
|
||||
AlignmentStrategy alignmentStrategy,
|
||||
CommonCodeStyleSettings settings,
|
||||
JavaCodeStyleSettings javaSettings)
|
||||
JavaCodeStyleSettings javaSettings,
|
||||
@NotNull FormattingMode formattingMode)
|
||||
{
|
||||
super(node, wrap, alignmentStrategy, Indent.getNoneIndent(), settings, javaSettings);
|
||||
super(node, wrap, alignmentStrategy, Indent.getNoneIndent(), settings, javaSettings, formattingMode);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -74,7 +74,7 @@ public class ExtendsListBlock extends AbstractJavaBlock{
|
||||
Indent indent = mySettings.ALIGN_THROWS_KEYWORD
|
||||
&& elementType == JavaTokenType.THROWS_KEYWORD ? Indent.getNoneIndent() : myChildIndent;
|
||||
|
||||
result.add(createJavaBlock(child, mySettings, myJavaSettings, indent, arrangeChildWrap(child, childWrap), alignment));
|
||||
result.add(createJavaBlock(child, mySettings, myJavaSettings, indent, arrangeChildWrap(child, childWrap), alignment, getFormattingMode()));
|
||||
} else {
|
||||
Alignment candidate = myAlignmentStrategy.getAlignment(elementType);
|
||||
if (candidate != null) {
|
||||
|
||||
@@ -34,8 +34,9 @@ public class LabeledJavaBlock extends AbstractJavaBlock{
|
||||
Alignment alignment,
|
||||
Indent indent,
|
||||
CommonCodeStyleSettings settings,
|
||||
JavaCodeStyleSettings javaSettings) {
|
||||
super(node, wrap, alignment, indent, settings, javaSettings);
|
||||
JavaCodeStyleSettings javaSettings,
|
||||
@NotNull FormattingMode formattingMode) {
|
||||
super(node, wrap, alignment, indent, settings, javaSettings, formattingMode);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -46,7 +47,7 @@ public class LabeledJavaBlock extends AbstractJavaBlock{
|
||||
Wrap currentWrap = null;
|
||||
while (child != null) {
|
||||
if (!FormatterUtil.containsWhiteSpacesOnly(child) && child.getTextLength() > 0){
|
||||
result.add(createJavaBlock(child, mySettings, myJavaSettings, currentIndent, currentWrap, AlignmentStrategy.getNullStrategy()));
|
||||
result.add(createJavaBlock(child, mySettings, myJavaSettings, currentIndent, currentWrap, AlignmentStrategy.getNullStrategy(), getFormattingMode()));
|
||||
if (child.getElementType() == JavaTokenType.COLON) {
|
||||
currentIndent = Indent.getNoneIndent();
|
||||
currentWrap =Wrap.createWrap(WrapType.ALWAYS, true);
|
||||
|
||||
@@ -16,6 +16,7 @@
|
||||
package com.intellij.psi.formatter.java;
|
||||
|
||||
import com.intellij.formatting.Alignment;
|
||||
import com.intellij.formatting.FormattingMode;
|
||||
import com.intellij.formatting.Indent;
|
||||
import com.intellij.formatting.Wrap;
|
||||
import com.intellij.formatting.alignment.AlignmentStrategy;
|
||||
@@ -37,8 +38,9 @@ public class PartialWhitespaceBlock extends SimpleJavaBlock {
|
||||
Alignment alignment,
|
||||
Indent indent,
|
||||
CommonCodeStyleSettings settings,
|
||||
JavaCodeStyleSettings javaSettings) {
|
||||
super(node, wrap, AlignmentStrategy.wrap(alignment), indent, settings, javaSettings);
|
||||
JavaCodeStyleSettings javaSettings,
|
||||
@NotNull FormattingMode formattingMode) {
|
||||
super(node, wrap, AlignmentStrategy.wrap(alignment), indent, settings, javaSettings, formattingMode);
|
||||
myRange = range;
|
||||
}
|
||||
|
||||
|
||||
@@ -46,8 +46,9 @@ public class SimpleJavaBlock extends AbstractJavaBlock {
|
||||
AlignmentStrategy alignment,
|
||||
Indent indent,
|
||||
CommonCodeStyleSettings settings,
|
||||
JavaCodeStyleSettings javaSettings) {
|
||||
super(node, wrap, alignment, indent, settings, javaSettings);
|
||||
JavaCodeStyleSettings javaSettings,
|
||||
@NotNull FormattingMode formattingMode) {
|
||||
super(node, wrap, alignment, indent, settings, javaSettings, formattingMode);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -118,7 +119,8 @@ public class SimpleJavaBlock extends AbstractJavaBlock {
|
||||
Block commentBlock = createJavaBlock(
|
||||
myCurrentChild,
|
||||
mySettings, myJavaSettings,
|
||||
Indent.getNoneIndent(), null, AlignmentStrategy.getNullStrategy()
|
||||
Indent.getNoneIndent(), null, AlignmentStrategy.getNullStrategy(),
|
||||
getFormattingMode()
|
||||
);
|
||||
result.add(commentBlock);
|
||||
myCurrentIndent = Indent.getNoneIndent();
|
||||
|
||||
Reference in New Issue
Block a user