1616
1717package com .google .googlejavaformat .intellij ;
1818
19+ import static java .util .Comparator .comparing ;
20+
1921import com .google .common .collect .ImmutableList ;
20- import com .google .common .collect .Ordering ;
2122import com .google .common .collect .Range ;
2223import com .google .googlejavaformat .java .Formatter ;
2324import com .google .googlejavaformat .java .FormatterException ;
3435import com .intellij .psi .impl .CheckUtil ;
3536import com .intellij .util .IncorrectOperationException ;
3637import java .util .Collection ;
37- import java .util .Comparator ;
3838import java .util .List ;
39+ import java .util .stream .Collectors ;
3940import org .jetbrains .annotations .NotNull ;
4041
4142/**
@@ -48,10 +49,6 @@ public class GoogleJavaFormatCodeStyleManager extends CodeStyleManagerDecorator
4849
4950 private final Formatter formatter ;
5051
51- public GoogleJavaFormatCodeStyleManager (@ NotNull CodeStyleManager original ) {
52- this (original , JavaFormatterOptions .defaultOptions ());
53- }
54-
5552 public GoogleJavaFormatCodeStyleManager (
5653 @ NotNull CodeStyleManager original , @ NotNull JavaFormatterOptions formatterOptions ) {
5754 super (original );
@@ -61,7 +58,7 @@ public GoogleJavaFormatCodeStyleManager(
6158 @ Override
6259 public void reformatText (@ NotNull PsiFile file , int startOffset , int endOffset )
6360 throws IncorrectOperationException {
64- if (StdFileTypes .JAVA .equals (file .getFileType ())) {
61+ if (StdFileTypes .JAVA .equals (file .getFileType ()) && useGoogleFormatterForFile ( file ) ) {
6562 formatInternal (file , ImmutableList .of (Range .closedOpen (startOffset , endOffset )));
6663 } else {
6764 super .reformatText (file , startOffset , endOffset );
@@ -71,7 +68,7 @@ public void reformatText(@NotNull PsiFile file, int startOffset, int endOffset)
7168 @ Override
7269 public void reformatText (@ NotNull PsiFile file , @ NotNull Collection <TextRange > ranges )
7370 throws IncorrectOperationException {
74- if (StdFileTypes .JAVA .equals (file .getFileType ())) {
71+ if (StdFileTypes .JAVA .equals (file .getFileType ()) && useGoogleFormatterForFile ( file ) ) {
7572 formatInternal (file , convertToRanges (ranges ));
7673 } else {
7774 super .reformatText (file , ranges );
@@ -81,13 +78,17 @@ public void reformatText(@NotNull PsiFile file, @NotNull Collection<TextRange> r
8178 @ Override
8279 public void reformatTextWithContext (@ NotNull PsiFile file , @ NotNull Collection <TextRange > ranges )
8380 throws IncorrectOperationException {
84- if (StdFileTypes .JAVA .equals (file .getFileType ())) {
81+ if (StdFileTypes .JAVA .equals (file .getFileType ()) && useGoogleFormatterForFile ( file ) ) {
8582 formatInternal (file , convertToRanges (ranges ));
8683 } else {
8784 super .reformatTextWithContext (file , ranges );
8885 }
8986 }
9087
88+ protected boolean useGoogleFormatterForFile (@ NotNull PsiFile file ) {
89+ return true ;
90+ }
91+
9192 private void formatInternal (PsiFile file , List <Range <Integer >> ranges )
9293 throws IncorrectOperationException {
9394 ApplicationManager .getApplication ().assertWriteAccessAllowed ();
@@ -97,11 +98,14 @@ private void formatInternal(PsiFile file, List<Range<Integer>> ranges)
9798 Document document = PsiDocumentManager .getInstance (getProject ()).getDocument (file );
9899 if (document != null ) {
99100 try {
100- ImmutableList <Replacement > replacements =
101- formatter .getFormatReplacements (document .getText (), ranges );
102- List <Replacement > reverseSortedReplacements =
103- Ordering .from (REPLACEMENT_COMPARATOR ).reverse ().sortedCopy (replacements );
104- performReplacements (document , reverseSortedReplacements );
101+ List <Replacement > replacements =
102+ formatter
103+ .getFormatReplacements (document .getText (), ranges )
104+ .stream ()
105+ .sorted (
106+ comparing ((Replacement r ) -> r .getReplaceRange ().lowerEndpoint ()).reversed ())
107+ .collect (Collectors .toList ());
108+ performReplacements (document , replacements );
105109 } catch (FormatterException e ) {
106110 // Do not format on errors
107111 }
@@ -112,16 +116,13 @@ private void performReplacements(
112116 final Document document , final List <Replacement > reverseSortedReplacements ) {
113117 WriteCommandAction .runWriteCommandAction (
114118 getProject (),
115- new Runnable () {
116- @ Override
117- public void run () {
118- for (Replacement replacement : reverseSortedReplacements ) {
119- Range <Integer > range = replacement .getReplaceRange ();
120- document .replaceString (
121- range .lowerEndpoint (), range .upperEndpoint (), replacement .getReplacementString ());
122- }
123- PsiDocumentManager .getInstance (getProject ()).commitDocument (document );
119+ () -> {
120+ for (Replacement replacement : reverseSortedReplacements ) {
121+ Range <Integer > range = replacement .getReplaceRange ();
122+ document .replaceString (
123+ range .lowerEndpoint (), range .upperEndpoint (), replacement .getReplacementString ());
124124 }
125+ PsiDocumentManager .getInstance (getProject ()).commitDocument (document );
125126 });
126127 }
127128
@@ -132,12 +133,4 @@ private static List<Range<Integer>> convertToRanges(Collection<TextRange> textRa
132133 }
133134 return ranges .build ();
134135 }
135-
136- private static final Comparator <Replacement > REPLACEMENT_COMPARATOR =
137- new Comparator <Replacement >() {
138- @ Override
139- public int compare (Replacement o1 , Replacement o2 ) {
140- return o1 .getReplaceRange ().lowerEndpoint () - o2 .getReplaceRange ().lowerEndpoint ();
141- }
142- };
143136}
0 commit comments