package com.jetbrains.lang.dart.ide.formatter; import com.intellij.formatting.FormatTextRanges; import com.intellij.formatting.FormattingMode; import com.intellij.formatting.FormattingModel; import com.intellij.formatting.FormattingModelBuilderEx; import com.intellij.lang.ASTNode; 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.codeStyle.CommonCodeStyleSettings; import com.intellij.psi.formatter.DocumentBasedFormattingModel; import com.jetbrains.lang.dart.psi.DartFile; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; public class DartFormattingModelBuilder implements FormattingModelBuilderEx { @NotNull @Override public FormattingModel createModel(@NotNull final PsiElement element, @NotNull final CodeStyleSettings settings) { return createModel(element, settings, FormattingMode.REFORMAT); } @Nullable @Override public TextRange getRangeAffectingIndent(PsiFile file, int offset, ASTNode elementAtOffset) { return null; } @NotNull @Override public FormattingModel createModel(@NotNull PsiElement element, @NotNull CodeStyleSettings settings, @NotNull FormattingMode mode) { // element can be DartFile, DartEmbeddedContent, DartExpressionCodeFragment final PsiFile psiFile = element.getContainingFile(); final ASTNode rootNode = psiFile instanceof DartFile ? psiFile.getNode() : element.getNode(); final DartBlockContext context = new DartBlockContext(settings, mode); final DartBlock rootBlock = new DartBlock(rootNode, null, null, settings, context); return new DocumentBasedFormattingModel(rootBlock, element.getProject(), settings, psiFile.getFileType(), psiFile); } @Nullable @Override public CommonCodeStyleSettings.IndentOptions getIndentOptionsToUse(@NotNull PsiFile file, @NotNull FormatTextRanges ranges, @NotNull CodeStyleSettings settings) { return null; } }