From a1657e1a0e25bcdf73eb8ec4c237249ec9684b7b Mon Sep 17 00:00:00 2001 From: Stanislav Utikeev Date: Tue, 5 Nov 2019 14:41:55 +0300 Subject: [PATCH] Move CommaTailType and EqTailType to analysis.impl. Also provide PsiEditorUtil::getPsiFile(Editor) method GitOrigin-RevId: 85e07b9866c239b442c6a73168f1bbfda88943c1 --- .../simple/ParenthesesTailType.java | 3 +- .../completion/simple/RParenthTailType.java | 3 +- .../intellij/codeStyle/CodeStyleFacade.java | 6 +++ .../codeInsight/lookup/CommaTailType.java | 29 ++++++++++++ .../codeInsight/lookup/EqTailType.java | 10 ++++- .../codeInsight/lookup/LookupItem.java | 4 +- .../com/intellij/psi/util/PsiEditorUtil.java | 12 +++++ .../codeInsight/lookup/CommaTailType.java | 45 ------------------- .../codeStyle/CommonCodeStyleSettings.java | 10 +++++ .../source/codeStyle/CodeStyleFacadeImpl.java | 15 +++++++ .../util/FieldInitializerTailTypes.java | 2 +- 11 files changed, 87 insertions(+), 52 deletions(-) create mode 100644 platform/analysis-impl/src/com/intellij/codeInsight/lookup/CommaTailType.java rename platform/{lang-api => analysis-impl}/src/com/intellij/codeInsight/lookup/EqTailType.java (73%) delete mode 100644 platform/lang-api/src/com/intellij/codeInsight/lookup/CommaTailType.java diff --git a/java/java-impl/src/com/intellij/codeInsight/completion/simple/ParenthesesTailType.java b/java/java-impl/src/com/intellij/codeInsight/completion/simple/ParenthesesTailType.java index c2927ed7f9da..051be4a072e8 100644 --- a/java/java-impl/src/com/intellij/codeInsight/completion/simple/ParenthesesTailType.java +++ b/java/java-impl/src/com/intellij/codeInsight/completion/simple/ParenthesesTailType.java @@ -2,7 +2,6 @@ package com.intellij.codeInsight.completion.simple; -import com.intellij.codeInsight.lookup.CommaTailType; import com.intellij.codeInsight.TailType; import com.intellij.codeInsight.editorActions.TabOutScopesTracker; import com.intellij.openapi.editor.Document; @@ -20,7 +19,7 @@ public abstract class ParenthesesTailType extends TailType { @Override public int processTail(final Editor editor, int tailOffset) { - CommonCodeStyleSettings styleSettings = CommaTailType.getLocalCodeStyleSettings(editor, tailOffset); + CommonCodeStyleSettings styleSettings = CommonCodeStyleSettings.getLocalCodeStyleSettings(editor, tailOffset); if (isSpaceBeforeParentheses(styleSettings, editor, tailOffset)) { tailOffset = insertChar(editor, tailOffset, ' '); } diff --git a/java/java-impl/src/com/intellij/codeInsight/completion/simple/RParenthTailType.java b/java/java-impl/src/com/intellij/codeInsight/completion/simple/RParenthTailType.java index 4a245aa911d7..00d1933ffe77 100644 --- a/java/java-impl/src/com/intellij/codeInsight/completion/simple/RParenthTailType.java +++ b/java/java-impl/src/com/intellij/codeInsight/completion/simple/RParenthTailType.java @@ -54,7 +54,8 @@ public abstract class RParenthTailType extends TailType { @Override public int processTail(final Editor editor, int tailOffset) { - return addRParenth(editor, tailOffset, isSpaceWithinParentheses(CommaTailType.getLocalCodeStyleSettings(editor, tailOffset), editor, tailOffset)); + return addRParenth(editor, tailOffset, + isSpaceWithinParentheses(CommonCodeStyleSettings.getLocalCodeStyleSettings(editor, tailOffset), editor, tailOffset)); } public static int addRParenth(Editor editor, int offset, boolean spaceWithinParens) { diff --git a/platform/analysis-api/src/com/intellij/codeStyle/CodeStyleFacade.java b/platform/analysis-api/src/com/intellij/codeStyle/CodeStyleFacade.java index 4535b8476f7c..13a56161d5d6 100644 --- a/platform/analysis-api/src/com/intellij/codeStyle/CodeStyleFacade.java +++ b/platform/analysis-api/src/com/intellij/codeStyle/CodeStyleFacade.java @@ -11,6 +11,7 @@ import com.intellij.openapi.editor.Document; import com.intellij.openapi.editor.Editor; import com.intellij.openapi.fileTypes.FileType; import com.intellij.openapi.project.Project; +import com.intellij.psi.PsiFile; import org.jetbrains.annotations.ApiStatus; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -101,4 +102,9 @@ public abstract class CodeStyleFacade { @Deprecated public abstract String getLineSeparator(); + public abstract boolean useSpaceBeforeComma(PsiFile psiFile, Language language); + + public abstract boolean useSpaceAfterComma(PsiFile psiFile, Language language); + + public abstract boolean useSpaceAroundAssignmentOperators(PsiFile psiFile, Language language); } diff --git a/platform/analysis-impl/src/com/intellij/codeInsight/lookup/CommaTailType.java b/platform/analysis-impl/src/com/intellij/codeInsight/lookup/CommaTailType.java new file mode 100644 index 000000000000..27fd54c32722 --- /dev/null +++ b/platform/analysis-impl/src/com/intellij/codeInsight/lookup/CommaTailType.java @@ -0,0 +1,29 @@ +// Copyright 2000-2019 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file. +package com.intellij.codeInsight.lookup; + +import com.intellij.codeInsight.TailType; +import com.intellij.codeStyle.CodeStyleFacade; +import com.intellij.lang.Language; +import com.intellij.openapi.editor.Editor; +import com.intellij.psi.PsiFile; +import com.intellij.psi.util.PsiEditorUtil; +import com.intellij.psi.util.PsiUtilCore; + +public class CommaTailType extends TailType { + public static final TailType INSTANCE = new CommaTailType(); + + @Override + public int processTail(final Editor editor, int tailOffset) { + CodeStyleFacade codeStyleFacade = CodeStyleFacade.getInstance(editor.getProject()); + PsiFile psiFile = PsiEditorUtil.getPsiFile(editor); + Language language = PsiUtilCore.getLanguageAtOffset(PsiEditorUtil.getPsiFile(editor), tailOffset); + if (codeStyleFacade.useSpaceBeforeComma(psiFile, language)) tailOffset = insertChar(editor, tailOffset, ' '); + tailOffset = insertChar(editor, tailOffset, ','); + if (codeStyleFacade.useSpaceAfterComma(psiFile, language)) tailOffset = insertChar(editor, tailOffset, ' '); + return tailOffset; + } + + public String toString() { + return "COMMA"; + } +} diff --git a/platform/lang-api/src/com/intellij/codeInsight/lookup/EqTailType.java b/platform/analysis-impl/src/com/intellij/codeInsight/lookup/EqTailType.java similarity index 73% rename from platform/lang-api/src/com/intellij/codeInsight/lookup/EqTailType.java rename to platform/analysis-impl/src/com/intellij/codeInsight/lookup/EqTailType.java index dc4a66aa7da5..eaaaba7026da 100644 --- a/platform/lang-api/src/com/intellij/codeInsight/lookup/EqTailType.java +++ b/platform/analysis-impl/src/com/intellij/codeInsight/lookup/EqTailType.java @@ -2,14 +2,22 @@ package com.intellij.codeInsight.lookup; import com.intellij.codeInsight.TailType; +import com.intellij.codeStyle.CodeStyleFacade; +import com.intellij.lang.Language; import com.intellij.openapi.editor.Document; import com.intellij.openapi.editor.Editor; +import com.intellij.psi.PsiFile; +import com.intellij.psi.util.PsiEditorUtil; +import com.intellij.psi.util.PsiUtilCore; public class EqTailType extends TailType { public static final TailType INSTANCE = new EqTailType(); protected boolean isSpaceAroundAssignmentOperators(Editor editor, int tailOffset) { - return CommaTailType.getLocalCodeStyleSettings(editor, tailOffset).SPACE_AROUND_ASSIGNMENT_OPERATORS; + CodeStyleFacade codeStyleFacade = CodeStyleFacade.getInstance(editor.getProject()); + PsiFile psiFile = PsiEditorUtil.getPsiFile(editor); + Language language = PsiUtilCore.getLanguageAtOffset(psiFile, tailOffset); + return codeStyleFacade.useSpaceAroundAssignmentOperators(psiFile, language); } @Override diff --git a/platform/analysis-impl/src/com/intellij/codeInsight/lookup/LookupItem.java b/platform/analysis-impl/src/com/intellij/codeInsight/lookup/LookupItem.java index 6c06e4d77546..66932c586f79 100644 --- a/platform/analysis-impl/src/com/intellij/codeInsight/lookup/LookupItem.java +++ b/platform/analysis-impl/src/com/intellij/codeInsight/lookup/LookupItem.java @@ -193,9 +193,9 @@ public class LookupItem extends MutableLookupElement implements Comparable public static TailType getDefaultTailType(final char completionChar) { switch(completionChar){ case '.': return new CharTailType('.', false); - //case ',': return CommaTailType.INSTANCE; TODO[traff]: uncomment, refactor + case ',': return CommaTailType.INSTANCE; case ';': return TailType.SEMICOLON; - //case '=': return EqTailType.INSTANCE; TODO[traff]: uncomment, refactor + case '=': return EqTailType.INSTANCE; case ' ': return TailType.SPACE; case ':': return TailType.CASE_COLON; //? } diff --git a/platform/editor-ui-api/src/com/intellij/psi/util/PsiEditorUtil.java b/platform/editor-ui-api/src/com/intellij/psi/util/PsiEditorUtil.java index 0f0f0879f79c..e4c9946ab1dd 100644 --- a/platform/editor-ui-api/src/com/intellij/psi/util/PsiEditorUtil.java +++ b/platform/editor-ui-api/src/com/intellij/psi/util/PsiEditorUtil.java @@ -17,7 +17,10 @@ package com.intellij.psi.util; import com.intellij.openapi.components.ServiceManager; import com.intellij.openapi.editor.Editor; +import com.intellij.openapi.project.Project; +import com.intellij.psi.PsiDocumentManager; import com.intellij.psi.PsiElement; +import com.intellij.psi.PsiFile; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -30,4 +33,13 @@ public interface PsiEditorUtil { return ServiceManager.getService(PsiEditorUtil.class); } } + + @NotNull + static PsiFile getPsiFile(Editor editor) { + Project project = editor.getProject(); + assert project != null; + PsiFile psiFile = PsiDocumentManager.getInstance(project).getPsiFile(editor.getDocument()); + assert psiFile != null; + return psiFile; + } } diff --git a/platform/lang-api/src/com/intellij/codeInsight/lookup/CommaTailType.java b/platform/lang-api/src/com/intellij/codeInsight/lookup/CommaTailType.java deleted file mode 100644 index 103c494045bb..000000000000 --- a/platform/lang-api/src/com/intellij/codeInsight/lookup/CommaTailType.java +++ /dev/null @@ -1,45 +0,0 @@ -// Copyright 2000-2019 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file. -package com.intellij.codeInsight.lookup; - -import com.intellij.application.options.CodeStyle; -import com.intellij.codeInsight.TailType; -import com.intellij.lang.Language; -import com.intellij.openapi.editor.Editor; -import com.intellij.openapi.project.Project; -import com.intellij.psi.PsiDocumentManager; -import com.intellij.psi.PsiFile; -import com.intellij.psi.codeStyle.CommonCodeStyleSettings; -import com.intellij.psi.util.PsiUtilCore; -import org.jetbrains.annotations.NotNull; - -public class CommaTailType extends TailType { - public static final TailType INSTANCE = new CommaTailType(); - - @Override - public int processTail(final Editor editor, int tailOffset) { - CommonCodeStyleSettings styleSettings = getLocalCodeStyleSettings(editor, tailOffset); - if (styleSettings.SPACE_BEFORE_COMMA) tailOffset = insertChar(editor, tailOffset, ' '); - tailOffset = insertChar(editor, tailOffset, ','); - if (styleSettings.SPACE_AFTER_COMMA) tailOffset = insertChar(editor, tailOffset, ' '); - return tailOffset; - } - - public String toString() { - return "COMMA"; - } - - public static CommonCodeStyleSettings getLocalCodeStyleSettings(Editor editor, int tailOffset) { - final PsiFile psiFile = getFile(editor); - Language language = PsiUtilCore.getLanguageAtOffset(psiFile, tailOffset); - return CodeStyle.getLanguageSettings(psiFile, language); - } - - @NotNull - private static PsiFile getFile(Editor editor) { - Project project = editor.getProject(); - assert project != null; - PsiFile psiFile = PsiDocumentManager.getInstance(project).getPsiFile(editor.getDocument()); - assert psiFile != null; - return psiFile; - } -} diff --git a/platform/lang-api/src/com/intellij/psi/codeStyle/CommonCodeStyleSettings.java b/platform/lang-api/src/com/intellij/psi/codeStyle/CommonCodeStyleSettings.java index ed3925a1d455..5e7df3a273c5 100644 --- a/platform/lang-api/src/com/intellij/psi/codeStyle/CommonCodeStyleSettings.java +++ b/platform/lang-api/src/com/intellij/psi/codeStyle/CommonCodeStyleSettings.java @@ -1,10 +1,12 @@ // Copyright 2000-2019 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file. package com.intellij.psi.codeStyle; +import com.intellij.application.options.CodeStyle; import com.intellij.configurationStore.Property; import com.intellij.configurationStore.XmlSerializer; import com.intellij.lang.Language; import com.intellij.openapi.editor.Document; +import com.intellij.openapi.editor.Editor; import com.intellij.openapi.fileTypes.FileType; import com.intellij.openapi.util.*; import com.intellij.psi.PsiDocumentManager; @@ -13,6 +15,8 @@ import com.intellij.psi.codeStyle.arrangement.ArrangementSettings; import com.intellij.psi.codeStyle.arrangement.ArrangementUtil; import com.intellij.psi.codeStyle.arrangement.Rearranger; import com.intellij.psi.codeStyle.arrangement.std.ArrangementStandardSettingsAware; +import com.intellij.psi.util.PsiEditorUtil; +import com.intellij.psi.util.PsiUtilCore; import com.intellij.util.ReflectionUtil; import com.intellij.util.xmlb.SerializationFilter; import com.intellij.util.xmlb.SkipDefaultValuesSerializationFilters; @@ -1155,4 +1159,10 @@ public class CommonCodeStyleSettings { void setSoftMargins(List values) { mySoftMargins.setValues(values); } + + public static CommonCodeStyleSettings getLocalCodeStyleSettings(Editor editor, int tailOffset) { + PsiFile psiFile = PsiEditorUtil.getPsiFile(editor); + Language language = PsiUtilCore.getLanguageAtOffset(psiFile, tailOffset); + return CodeStyle.getLanguageSettings(psiFile, language); + } } diff --git a/platform/lang-impl/src/com/intellij/psi/impl/source/codeStyle/CodeStyleFacadeImpl.java b/platform/lang-impl/src/com/intellij/psi/impl/source/codeStyle/CodeStyleFacadeImpl.java index add2463bc2f6..6186ad02e095 100644 --- a/platform/lang-impl/src/com/intellij/psi/impl/source/codeStyle/CodeStyleFacadeImpl.java +++ b/platform/lang-impl/src/com/intellij/psi/impl/source/codeStyle/CodeStyleFacadeImpl.java @@ -105,4 +105,19 @@ public class CodeStyleFacadeImpl extends CodeStyleFacade { public boolean useTabCharacter(final FileType fileType) { return CodeStyle.getProjectOrDefaultSettings(myProject).useTabCharacter(fileType); } + + @Override + public boolean useSpaceBeforeComma(PsiFile psiFile, Language language) { + return CodeStyle.getLanguageSettings(psiFile, language).SPACE_BEFORE_COMMA; + } + + @Override + public boolean useSpaceAfterComma(PsiFile psiFile, Language language) { + return CodeStyle.getLanguageSettings(psiFile, language).SPACE_AFTER_COMMA; + } + + @Override + public boolean useSpaceAroundAssignmentOperators(PsiFile psiFile, Language language) { + return CodeStyle.getLanguageSettings(psiFile, language).SPACE_AROUND_ASSIGNMENT_OPERATORS; + } } diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/util/FieldInitializerTailTypes.java b/plugins/groovy/src/org/jetbrains/plugins/groovy/util/FieldInitializerTailTypes.java index e3b2be11470a..c5e852ce6637 100644 --- a/plugins/groovy/src/org/jetbrains/plugins/groovy/util/FieldInitializerTailTypes.java +++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/util/FieldInitializerTailTypes.java @@ -26,7 +26,7 @@ public class FieldInitializerTailTypes extends TailType { @Override public int processTail(Editor editor, int tailOffset) { - CommonCodeStyleSettings styleSettings = CommaTailType.getLocalCodeStyleSettings(editor, tailOffset); + CommonCodeStyleSettings styleSettings = CommonCodeStyleSettings.getLocalCodeStyleSettings(editor, tailOffset); Document document = editor.getDocument(); CharSequence chars = document.getCharsSequence(); int textLength = chars.length();