diff --git a/platform/lang-impl/src/com/intellij/formatting/FormattingModelBuilderEx.java b/platform/lang-impl/src/com/intellij/formatting/FormattingModelBuilderEx.java index 47e05e9aeb0c..f08c374d36b4 100644 --- a/platform/lang-impl/src/com/intellij/formatting/FormattingModelBuilderEx.java +++ b/platform/lang-impl/src/com/intellij/formatting/FormattingModelBuilderEx.java @@ -16,8 +16,11 @@ package com.intellij.formatting; import com.intellij.psi.PsiElement; +import com.intellij.psi.PsiFile; import com.intellij.psi.codeStyle.CodeStyleSettings; +import com.intellij.psi.codeStyle.CommonCodeStyleSettings; import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; /** * @author Denis Zhdanov @@ -36,4 +39,20 @@ public interface FormattingModelBuilderEx extends FormattingModelBuilder { */ @NotNull FormattingModel createModel(@NotNull final PsiElement element, @NotNull final CodeStyleSettings settings, @NotNull FormattingMode mode); + + /** + * Allows to adjust indent options to used during performing formatting operation on the given ranges of the given file. + *
+ * Default algorithm is to query given settings for indent options using given file's language as a key. + * + * @param file target file which content is going to be reformatted + * @param ranges given file's ranges to reformat + * @param settings code style settings holder + * @return indent options to use for the target formatting operation (if any adjustment is required); + *null to trigger default algorithm usage
+ */
+ @Nullable
+ CommonCodeStyleSettings.IndentOptions getIndentOptionsToUse(@NotNull PsiFile file,
+ @NotNull FormatTextRanges ranges,
+ @NotNull CodeStyleSettings settings);
}
diff --git a/platform/lang-impl/src/com/intellij/psi/impl/source/codeStyle/CodeFormatterFacade.java b/platform/lang-impl/src/com/intellij/psi/impl/source/codeStyle/CodeFormatterFacade.java
index 0e590ef8f4f3..fe64c1d1d51a 100644
--- a/platform/lang-impl/src/com/intellij/psi/impl/source/codeStyle/CodeFormatterFacade.java
+++ b/platform/lang-impl/src/com/intellij/psi/impl/source/codeStyle/CodeFormatterFacade.java
@@ -44,6 +44,7 @@ import com.intellij.psi.PsiFile;
import com.intellij.psi.PsiLanguageInjectionHost;
import com.intellij.psi.codeStyle.CodeStyleManager;
import com.intellij.psi.codeStyle.CodeStyleSettings;
+import com.intellij.psi.codeStyle.CommonCodeStyleSettings;
import com.intellij.psi.formatter.DocumentBasedFormattingModel;
import com.intellij.psi.impl.source.PostprocessReformattingAspect;
import com.intellij.psi.impl.source.SourceTreeToPsiMap;
@@ -210,7 +211,16 @@ public class CodeFormatterFacade {
if (CodeStyleManager.getInstance(project).isSequentialProcessingAllowed()) {
formatter.setProgressTask(new FormattingProgressTask(project, file, document));
}
- formatter.format(model, mySettings, mySettings.getIndentOptions(file.getFileType()), ranges);
+
+ CommonCodeStyleSettings.IndentOptions indentOptions = null;
+ if (builder instanceof FormattingModelBuilderEx) {
+ indentOptions = ((FormattingModelBuilderEx)builder).getIndentOptionsToUse(file, ranges, mySettings);
+ }
+ if (indentOptions == null) {
+ indentOptions = mySettings.getIndentOptions(file.getFileType());
+ }
+
+ formatter.format(model, mySettings, indentOptions, ranges);
for (FormatTextRanges.FormatTextRange range : textRanges) {
TextRange textRange = range.getTextRange();
wrapLongLinesIfNecessary(file, document, textRange.getStartOffset(), textRange.getEndOffset());