mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
[formatter] moved from java-impl to core, extra ranges calculation now works for every language
This commit is contained in:
@@ -19,8 +19,6 @@ import com.intellij.formatting.*;
|
||||
import com.intellij.formatting.alignment.AlignmentStrategy;
|
||||
import com.intellij.lang.ASTNode;
|
||||
import com.intellij.openapi.diagnostic.Logger;
|
||||
import com.intellij.openapi.editor.Document;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.util.TextRange;
|
||||
import com.intellij.openapi.util.text.StringUtil;
|
||||
import com.intellij.psi.*;
|
||||
@@ -1282,37 +1280,4 @@ public abstract class AbstractJavaBlock extends AbstractBlock implements JavaBlo
|
||||
result.setChildAttributes(new ChildAttributes(getCodeBlockInternalIndent(childrenIndent), null));
|
||||
return result;
|
||||
}
|
||||
|
||||
@Nullable
|
||||
@Override
|
||||
public ExtraReformatRanges getExtraRangesToFormat(FormatTextRanges ranges) {
|
||||
if (ranges.isInsertedBlock(this) && myNode.textContains('\n')) {
|
||||
List<TextRange> extra = calculateExtraRanges(myNode);
|
||||
return new ExtraReformatRanges(extra);
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
@NotNull
|
||||
private List<TextRange> calculateExtraRanges(@NotNull ASTNode node) {
|
||||
Document document = retrieveDocument(node, getProject(node));
|
||||
if (document != null) {
|
||||
TextRange ranges = node.getTextRange();
|
||||
return new IndentRangesCalculator(document, ranges).calcIndentRanges();
|
||||
}
|
||||
|
||||
return ContainerUtil.newArrayList(myNode.getTextRange());
|
||||
}
|
||||
|
||||
|
||||
private static Document retrieveDocument(@NotNull ASTNode node, @NotNull Project project) {
|
||||
PsiFile file = node.getPsi().getContainingFile();
|
||||
return PsiDocumentManager.getInstance(project).getDocument(file);
|
||||
}
|
||||
|
||||
@NotNull
|
||||
private static Project getProject(@NotNull ASTNode node) {
|
||||
return node.getPsi().getProject();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -16,6 +16,7 @@
|
||||
package com.intellij.psi.formatter.java
|
||||
|
||||
import com.intellij.openapi.util.TextRange
|
||||
import com.intellij.psi.formatter.IndentRangesCalculator
|
||||
import com.intellij.testFramework.LightPlatformCodeInsightTestCase
|
||||
import org.assertj.core.api.Assertions.assertThat
|
||||
|
||||
|
||||
+2
-2
@@ -13,13 +13,13 @@
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package com.intellij.psi.formatter.java
|
||||
package com.intellij.psi.formatter
|
||||
|
||||
import com.intellij.openapi.editor.Document
|
||||
import com.intellij.openapi.util.TextRange
|
||||
import com.intellij.util.text.CharArrayUtil
|
||||
|
||||
class IndentRangesCalculator(private val document: Document,
|
||||
class IndentRangesCalculator(private val document: Document,
|
||||
private val textRange: TextRange)
|
||||
{
|
||||
private val startOffset = textRange.startOffset
|
||||
@@ -19,12 +19,16 @@ package com.intellij.psi.formatter.common;
|
||||
import com.intellij.formatting.*;
|
||||
import com.intellij.injected.editor.DocumentWindow;
|
||||
import com.intellij.lang.ASTNode;
|
||||
import com.intellij.openapi.editor.Document;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.util.TextRange;
|
||||
import com.intellij.psi.PsiDocumentManager;
|
||||
import com.intellij.psi.PsiElement;
|
||||
import com.intellij.psi.PsiFile;
|
||||
import com.intellij.psi.formatter.FormatterUtil;
|
||||
import com.intellij.psi.formatter.IndentRangesCalculator;
|
||||
import com.intellij.psi.impl.source.tree.injected.InjectedLanguageUtil;
|
||||
import com.intellij.util.containers.ContainerUtil;
|
||||
import com.intellij.util.containers.ContainerUtilRt;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
@@ -184,7 +188,34 @@ public abstract class AbstractBlock implements ASTBlock {
|
||||
*/
|
||||
@Nullable
|
||||
public ExtraReformatRanges getExtraRangesToFormat(FormatTextRanges ranges) {
|
||||
if (ranges.isInsertedBlock(this) && myNode.textContains('\n')) {
|
||||
List<TextRange> extra = calculateExtraRanges(myNode);
|
||||
return new ExtraReformatRanges(extra);
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
@NotNull
|
||||
private List<TextRange> calculateExtraRanges(@NotNull ASTNode node) {
|
||||
Document document = retrieveDocument(node, getProject(node));
|
||||
if (document != null) {
|
||||
TextRange ranges = node.getTextRange();
|
||||
return new IndentRangesCalculator(document, ranges).calcIndentRanges();
|
||||
}
|
||||
|
||||
return ContainerUtil.newArrayList(myNode.getTextRange());
|
||||
}
|
||||
|
||||
|
||||
private static Document retrieveDocument(@NotNull ASTNode node, @NotNull Project project) {
|
||||
PsiFile file = node.getPsi().getContainingFile();
|
||||
return PsiDocumentManager.getInstance(project).getDocument(file);
|
||||
}
|
||||
|
||||
@NotNull
|
||||
private static Project getProject(@NotNull ASTNode node) {
|
||||
return node.getPsi().getProject();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user