Move CommaTailType and EqTailType to analysis.impl. Also provide PsiEditorUtil::getPsiFile(Editor) method

GitOrigin-RevId: 85e07b9866c239b442c6a73168f1bbfda88943c1
This commit is contained in:
Stanislav Utikeev
2019-12-03 15:11:09 +00:00
committed by intellij-monorepo-bot
parent ac1f525e27
commit a1657e1a0e
11 changed files with 87 additions and 52 deletions
@@ -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, ' ');
}
@@ -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) {
@@ -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);
}
@@ -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";
}
}
@@ -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
@@ -193,9 +193,9 @@ public class LookupItem<T> extends MutableLookupElement<T> 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; //?
}
@@ -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;
}
}
@@ -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;
}
}
@@ -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<Integer> 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);
}
}
@@ -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;
}
}
@@ -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();