From 5cce61160d06ef059a9d1f7b005dfc161c22afbe Mon Sep 17 00:00:00 2001 From: Aleksey Pivovarov Date: Tue, 15 Sep 2015 16:28:12 +0300 Subject: [PATCH] detect indent options by FileType if there are no PsiFile --- .../intellij/psi/codeStyle/CodeStyleSettings.java | 14 +++++++++++++- .../intellij/openapi/editor/actions/TabAction.java | 5 +---- 2 files changed, 14 insertions(+), 5 deletions(-) diff --git a/platform/lang-api/src/com/intellij/psi/codeStyle/CodeStyleSettings.java b/platform/lang-api/src/com/intellij/psi/codeStyle/CodeStyleSettings.java index 939d42cc0844..fc093b7e5e5d 100644 --- a/platform/lang-api/src/com/intellij/psi/codeStyle/CodeStyleSettings.java +++ b/platform/lang-api/src/com/intellij/psi/codeStyle/CodeStyleSettings.java @@ -17,13 +17,15 @@ package com.intellij.psi.codeStyle; import com.intellij.lang.Language; import com.intellij.openapi.diagnostic.Logger; -import com.intellij.openapi.extensions.ExtensionException; import com.intellij.openapi.editor.Document; +import com.intellij.openapi.extensions.ExtensionException; import com.intellij.openapi.extensions.Extensions; +import com.intellij.openapi.fileEditor.FileDocumentManager; import com.intellij.openapi.fileTypes.FileType; import com.intellij.openapi.fileTypes.FileTypeManager; import com.intellij.openapi.fileTypes.FileTypes; import com.intellij.openapi.fileTypes.LanguageFileType; +import com.intellij.openapi.project.Project; import com.intellij.openapi.util.*; import com.intellij.openapi.util.text.StringUtil; import com.intellij.openapi.vfs.VirtualFile; @@ -603,6 +605,16 @@ public class CodeStyleSettings extends CommonCodeStyleSettings implements Clonea return OTHER_INDENT_OPTIONS; } + @NotNull + public IndentOptions getIndentOptionsByDocument(@Nullable Project project, @NotNull Document document) { + PsiFile file = project != null ? PsiDocumentManager.getInstance(project).getPsiFile(document) : null; + if (file != null) return getIndentOptionsByFile(file); + + VirtualFile vFile = FileDocumentManager.getInstance().getFile(document); + FileType fileType = vFile != null ? vFile.getFileType() : null; + return getIndentOptions(fileType); + } + @NotNull public IndentOptions getIndentOptionsByFile(@Nullable PsiFile file) { return getIndentOptionsByFile(file, null); diff --git a/platform/platform-impl/src/com/intellij/openapi/editor/actions/TabAction.java b/platform/platform-impl/src/com/intellij/openapi/editor/actions/TabAction.java index a80c36b97aaf..d76d8b13e621 100644 --- a/platform/platform-impl/src/com/intellij/openapi/editor/actions/TabAction.java +++ b/platform/platform-impl/src/com/intellij/openapi/editor/actions/TabAction.java @@ -34,8 +34,6 @@ import com.intellij.openapi.editor.actionSystem.EditorWriteActionHandler; import com.intellij.openapi.editor.ex.EditorEx; import com.intellij.openapi.project.Project; import com.intellij.openapi.util.text.StringUtil; -import com.intellij.psi.PsiDocumentManager; -import com.intellij.psi.PsiFile; import com.intellij.psi.codeStyle.CodeStyleSettings; import com.intellij.psi.codeStyle.CodeStyleSettingsManager; import com.intellij.psi.codeStyle.CommonCodeStyleSettings; @@ -84,8 +82,7 @@ public class TabAction extends EditorAction { CodeStyleSettings settings = CodeStyleSettingsManager.getSettings(project); final Document doc = editor.getDocument(); - PsiFile file = project != null ? PsiDocumentManager.getInstance(project).getPsiFile(doc) : null; - CommonCodeStyleSettings.IndentOptions indentOptions = settings.getIndentOptionsByFile(file); + CommonCodeStyleSettings.IndentOptions indentOptions = settings.getIndentOptionsByDocument(project, doc); int tabSize = indentOptions.INDENT_SIZE; int spacesToAddCount = tabSize - columnNumber % Math.max(1,tabSize);