diff --git a/platform/lang-impl/src/com/intellij/formatting/templateLanguages/TemplateLanguageBlock.java b/platform/lang-impl/src/com/intellij/formatting/templateLanguages/TemplateLanguageBlock.java index dfec65651ec8..af5a734cf4fe 100644 --- a/platform/lang-impl/src/com/intellij/formatting/templateLanguages/TemplateLanguageBlock.java +++ b/platform/lang-impl/src/com/intellij/formatting/templateLanguages/TemplateLanguageBlock.java @@ -17,6 +17,7 @@ package com.intellij.formatting.templateLanguages; import com.intellij.formatting.*; import com.intellij.lang.ASTNode; +import com.intellij.psi.codeStyle.CodeStyleSettings; import com.intellij.psi.formatter.FormatterUtil; import com.intellij.psi.formatter.common.AbstractBlock; import com.intellij.psi.tree.IElementType; @@ -33,14 +34,24 @@ import java.util.List; */ public abstract class TemplateLanguageBlock extends AbstractBlock implements BlockWithParent { private final TemplateLanguageBlockFactory myBlockFactory; + protected final CodeStyleSettings mySettings; private List myForeignChildren; private boolean myChildrenBuilt = false; private BlockWithParent myParent; - protected TemplateLanguageBlock(@NotNull TemplateLanguageBlockFactory blockFactory, @NotNull ASTNode node, @Nullable List foreignChildren) { - super(node, null, null); + protected TemplateLanguageBlock(@NotNull TemplateLanguageBlockFactory blockFactory, @NotNull CodeStyleSettings settings, + @NotNull ASTNode node, @Nullable List foreignChildren) { + this(node, null, null, blockFactory, settings, foreignChildren); + } + + protected TemplateLanguageBlock(@NotNull ASTNode node, @Nullable Wrap wrap, @Nullable Alignment alignment, + @NotNull TemplateLanguageBlockFactory blockFactory, + @NotNull CodeStyleSettings settings, + @Nullable List foreignChildren) { + super(node, wrap, alignment); myBlockFactory = blockFactory; myForeignChildren = foreignChildren; + mySettings = settings; } protected List buildChildren() { @@ -51,8 +62,8 @@ public abstract class TemplateLanguageBlock extends AbstractBlock implements Blo final ArrayList tlChildren = new ArrayList(5); for (ASTNode childNode = getNode().getFirstChildNode(); childNode != null; childNode = childNode.getTreeNext()) { if (FormatterUtil.containsWhiteSpacesOnly(childNode)) continue; - if (childNode.getElementType() != getTemplateTextElementType() || noForeignChildren()) { - final TemplateLanguageBlock childBlock = myBlockFactory.createTemplateLanguageBlock(childNode, null); + if (shouldBuildBlockFor(childNode)) { + final TemplateLanguageBlock childBlock = myBlockFactory.createTemplateLanguageBlock(childNode, null, mySettings); childBlock.setParent(this); tlChildren.add(childBlock); } @@ -62,6 +73,10 @@ public abstract class TemplateLanguageBlock extends AbstractBlock implements Blo return BlockUtil.setParent(children, this); } + protected boolean shouldBuildBlockFor(ASTNode childNode) { + return childNode.getElementType() != getTemplateTextElementType() || noForeignChildren(); + } + private boolean noForeignChildren() { return (myForeignChildren == null || myForeignChildren.isEmpty()); } diff --git a/platform/lang-impl/src/com/intellij/formatting/templateLanguages/TemplateLanguageBlockFactory.java b/platform/lang-impl/src/com/intellij/formatting/templateLanguages/TemplateLanguageBlockFactory.java index 23aad1181096..0a8d54c13f38 100644 --- a/platform/lang-impl/src/com/intellij/formatting/templateLanguages/TemplateLanguageBlockFactory.java +++ b/platform/lang-impl/src/com/intellij/formatting/templateLanguages/TemplateLanguageBlockFactory.java @@ -16,6 +16,7 @@ package com.intellij.formatting.templateLanguages; import com.intellij.lang.ASTNode; +import com.intellij.psi.codeStyle.CodeStyleSettings; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -27,5 +28,6 @@ import java.util.List; * Time: 6:56:55 PM */ public interface TemplateLanguageBlockFactory { - TemplateLanguageBlock createTemplateLanguageBlock(@NotNull ASTNode node, @Nullable List foreignChildren); + TemplateLanguageBlock createTemplateLanguageBlock(@NotNull ASTNode node, @Nullable List foreignChildren, + @NotNull CodeStyleSettings codeStyleSettings); } diff --git a/platform/lang-impl/src/com/intellij/formatting/templateLanguages/TemplateLanguageFormattingModelBuilder.java b/platform/lang-impl/src/com/intellij/formatting/templateLanguages/TemplateLanguageFormattingModelBuilder.java index f0037d896fb6..51e6016250ca 100644 --- a/platform/lang-impl/src/com/intellij/formatting/templateLanguages/TemplateLanguageFormattingModelBuilder.java +++ b/platform/lang-impl/src/com/intellij/formatting/templateLanguages/TemplateLanguageFormattingModelBuilder.java @@ -44,7 +44,7 @@ public abstract class TemplateLanguageFormattingModelBuilder implements Delegati @NotNull public FormattingModel createModel(PsiElement element, CodeStyleSettings settings) { final PsiFile file = element.getContainingFile(); - Block rootBlock = getRootBlock(element, file.getViewProvider(), settings); + Block rootBlock = getRootBlock(file, file.getViewProvider(), settings); return new DocumentBasedFormattingModel(rootBlock, element.getProject(), settings, file.getFileType(), file); } @@ -59,14 +59,14 @@ public abstract class TemplateLanguageFormattingModelBuilder implements Delegati return createDummyBlock(node); } if (builder == null) { - return createTemplateLanguageBlock(node, Collections.emptyList()); + return createTemplateLanguageBlock(node, Collections.emptyList(), null); } final FormattingModel model = builder.createModel(viewProvider.getPsi(dataLanguage), settings); List childWrappers = buildChildWrappers(model.getRootBlock()); if (childWrappers.size() == 1) { childWrappers = buildChildWrappers(childWrappers.get(0).getOriginal()); } - return createTemplateLanguageBlock(node, filterBlocksByRange(childWrappers, node.getTextRange())); + return createTemplateLanguageBlock(node, filterBlocksByRange(childWrappers, node.getTextRange()), settings); } protected AbstractBlock createDummyBlock(final ASTNode node) {