mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
WI-863 HTML formatting in PHP files does not work
This commit is contained in:
+19
-4
@@ -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<DataLanguageBlockWrapper> myForeignChildren;
|
||||
private boolean myChildrenBuilt = false;
|
||||
private BlockWithParent myParent;
|
||||
|
||||
protected TemplateLanguageBlock(@NotNull TemplateLanguageBlockFactory blockFactory, @NotNull ASTNode node, @Nullable List<DataLanguageBlockWrapper> foreignChildren) {
|
||||
super(node, null, null);
|
||||
protected TemplateLanguageBlock(@NotNull TemplateLanguageBlockFactory blockFactory, @NotNull CodeStyleSettings settings,
|
||||
@NotNull ASTNode node, @Nullable List<DataLanguageBlockWrapper> 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<DataLanguageBlockWrapper> foreignChildren) {
|
||||
super(node, wrap, alignment);
|
||||
myBlockFactory = blockFactory;
|
||||
myForeignChildren = foreignChildren;
|
||||
mySettings = settings;
|
||||
}
|
||||
|
||||
protected List<Block> buildChildren() {
|
||||
@@ -51,8 +62,8 @@ public abstract class TemplateLanguageBlock extends AbstractBlock implements Blo
|
||||
final ArrayList<TemplateLanguageBlock> tlChildren = new ArrayList<TemplateLanguageBlock>(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());
|
||||
}
|
||||
|
||||
+3
-1
@@ -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<DataLanguageBlockWrapper> foreignChildren);
|
||||
TemplateLanguageBlock createTemplateLanguageBlock(@NotNull ASTNode node, @Nullable List<DataLanguageBlockWrapper> foreignChildren,
|
||||
@NotNull CodeStyleSettings codeStyleSettings);
|
||||
}
|
||||
|
||||
+3
-3
@@ -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.<DataLanguageBlockWrapper>emptyList());
|
||||
return createTemplateLanguageBlock(node, Collections.<DataLanguageBlockWrapper>emptyList(), null);
|
||||
}
|
||||
final FormattingModel model = builder.createModel(viewProvider.getPsi(dataLanguage), settings);
|
||||
List<DataLanguageBlockWrapper> 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) {
|
||||
|
||||
Reference in New Issue
Block a user