/*
* Copyright 2013 Guidewire Software, Inc.
*/
package gw.plugin.ij.formatting;
import com.intellij.formatting.*;
import com.intellij.lang.ASTNode;
import com.intellij.lang.java.JavaFormattingModelBuilder;
import com.intellij.openapi.util.TextRange;
import com.intellij.psi.PsiElement;
import com.intellij.psi.PsiFile;
import com.intellij.psi.codeStyle.CodeStyleSettings;
import com.intellij.psi.formatter.FormattingDocumentModelImpl;
import com.intellij.psi.formatter.common.AbstractBlock;
import gw.plugin.ij.lang.GosuLanguage;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import java.util.Collections;
import java.util.List;
public class GosuFormattingModelBuilder extends JavaFormattingModelBuilder {
@NotNull
public FormattingModel createModel(@NotNull final PsiElement element, final CodeStyleSettings settings) {
final PsiFile file = element.getContainingFile().getViewProvider().getPsi(GosuLanguage.instance());
Block block;
if (!file.getVirtualFile().getExtension().equals("gr")) {
block = new GosuBlock(
file.getNode(),
Alignment.createAlignment(),
Indent.getAbsoluteNoneIndent(),
null,
settings);
} else {
block = new AbstractBlock(file.getNode(), null, null) {
@Override
protected List<Block> buildChildren() {
return Collections.emptyList();
}
@Override
public Spacing getSpacing(Block child1, Block child2) {
return null;
}
@Override
public boolean isLeaf() {
return true;
}
};
}
return new GosuFormattingModel(file, block, FormattingDocumentModelImpl.createOn(file));
}
@Nullable
public TextRange getRangeAffectingIndent(PsiFile file, int offset, ASTNode elementAtOffset) {
return null;
}
}