From 4585767adf286f68e38f749ccf4ff8603fa3e5d2 Mon Sep 17 00:00:00 2001 From: "Gregory.Shrago" Date: Thu, 5 Nov 2015 19:14:24 +0300 Subject: [PATCH] introduce LanguageUtil.getLanguageForPsi --- .../core-api/src/com/intellij/lang/LanguageUtil.java | 9 +++++++++ .../com/intellij/psi/SingleRootFileViewProvider.java | 8 +++----- .../com/intellij/ide/scratch/ScratchFileActions.java | 3 ++- .../intellij/ide/scratch/ScratchFileServiceImpl.java | 2 +- .../src/com/intellij/ide/scratch/ScratchUtil.java | 12 ------------ .../python/debugger/PyLineBreakpointType.java | 3 ++- 6 files changed, 17 insertions(+), 20 deletions(-) diff --git a/platform/core-api/src/com/intellij/lang/LanguageUtil.java b/platform/core-api/src/com/intellij/lang/LanguageUtil.java index a546ad0b909d..90d68abd4817 100644 --- a/platform/core-api/src/com/intellij/lang/LanguageUtil.java +++ b/platform/core-api/src/com/intellij/lang/LanguageUtil.java @@ -19,10 +19,12 @@ package com.intellij.lang; import com.intellij.lexer.Lexer; import com.intellij.openapi.fileTypes.FileType; import com.intellij.openapi.fileTypes.LanguageFileType; +import com.intellij.openapi.project.Project; import com.intellij.openapi.util.Condition; import com.intellij.openapi.util.text.StringUtil; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.psi.FileViewProvider; +import com.intellij.psi.LanguageSubstitutors; import com.intellij.psi.PsiElement; import com.intellij.psi.PsiFile; import com.intellij.psi.templateLanguages.TemplateLanguage; @@ -47,6 +49,13 @@ public final class LanguageUtil { }; + @Nullable + public static Language getLanguageForPsi(@NotNull Project project, @Nullable VirtualFile file) { + Language language = getFileLanguage(file); + if (language == null) return null; + return LanguageSubstitutors.INSTANCE.substituteLanguage(language, file, project); + } + @Nullable public static Language getFileLanguage(@Nullable VirtualFile file) { return file == null ? null : getFileTypeLanguage(file.getFileType()); diff --git a/platform/core-impl/src/com/intellij/psi/SingleRootFileViewProvider.java b/platform/core-impl/src/com/intellij/psi/SingleRootFileViewProvider.java index de96f0e4c5bd..b490856185cf 100644 --- a/platform/core-impl/src/com/intellij/psi/SingleRootFileViewProvider.java +++ b/platform/core-impl/src/com/intellij/psi/SingleRootFileViewProvider.java @@ -19,6 +19,7 @@ import com.google.common.util.concurrent.Atomics; import com.intellij.injected.editor.DocumentWindow; import com.intellij.lang.Language; import com.intellij.lang.LanguageParserDefinitions; +import com.intellij.lang.LanguageUtil; import com.intellij.lang.ParserDefinition; import com.intellij.openapi.application.ApplicationManager; import com.intellij.openapi.command.undo.UndoConstants; @@ -28,7 +29,6 @@ import com.intellij.openapi.fileEditor.FileDocumentManager; import com.intellij.openapi.fileEditor.impl.LoadTextUtil; import com.intellij.openapi.fileTypes.FileType; import com.intellij.openapi.fileTypes.FileTypeRegistry; -import com.intellij.openapi.fileTypes.LanguageFileType; import com.intellij.openapi.fileTypes.PlainTextLanguage; import com.intellij.openapi.progress.ProcessCanceledException; import com.intellij.openapi.project.Project; @@ -134,11 +134,9 @@ public class SingleRootFileViewProvider extends UserDataHolderBase implements Fi if (fileType.isBinary()) return Language.ANY; if (isTooLargeForIntelligence(file)) return PlainTextLanguage.INSTANCE; - if (fileType instanceof LanguageFileType) { - return LanguageSubstitutors.INSTANCE.substituteLanguage(((LanguageFileType)fileType).getLanguage(), file, project); - } + Language language = LanguageUtil.getLanguageForPsi(project, file); - return PlainTextLanguage.INSTANCE; + return language == null ? null : PlainTextLanguage.INSTANCE; } @Override diff --git a/platform/lang-impl/src/com/intellij/ide/scratch/ScratchFileActions.java b/platform/lang-impl/src/com/intellij/ide/scratch/ScratchFileActions.java index c4118ffa3283..80aa2bb61178 100644 --- a/platform/lang-impl/src/com/intellij/ide/scratch/ScratchFileActions.java +++ b/platform/lang-impl/src/com/intellij/ide/scratch/ScratchFileActions.java @@ -17,6 +17,7 @@ package com.intellij.ide.scratch; import com.intellij.featureStatistics.FeatureUsageTracker; import com.intellij.lang.Language; +import com.intellij.lang.LanguageUtil; import com.intellij.lang.PerFileMappings; import com.intellij.lang.StdLanguages; import com.intellij.lang.injection.InjectedLanguageManager; @@ -196,7 +197,7 @@ public class ScratchFileActions { @Override public Language fun(VirtualFile file) { Language lang = fileService.getScratchesMapping().getMapping(file); - return lang != null ? lang : ScratchUtil.getLanguage(project, file); + return lang != null ? lang : LanguageUtil.getLanguageForPsi(project, file); } }; } diff --git a/platform/lang-impl/src/com/intellij/ide/scratch/ScratchFileServiceImpl.java b/platform/lang-impl/src/com/intellij/ide/scratch/ScratchFileServiceImpl.java index e16d48739ee7..c6cbd7554700 100644 --- a/platform/lang-impl/src/com/intellij/ide/scratch/ScratchFileServiceImpl.java +++ b/platform/lang-impl/src/com/intellij/ide/scratch/ScratchFileServiceImpl.java @@ -224,7 +224,7 @@ public class ScratchFileServiceImpl extends ScratchFileService implements Persis public SyntaxHighlighter create(@NotNull FileType fileType, @Nullable Project project, @Nullable VirtualFile file) { if (project == null || file == null || !(fileType instanceof ScratchFileType)) return null; - Language language = ScratchUtil.getLanguage(project, file); + Language language = LanguageUtil.getLanguageForPsi(project, file); return language == null ? null : SyntaxHighlighterFactory.getSyntaxHighlighter(language, project, file); } } diff --git a/platform/lang-impl/src/com/intellij/ide/scratch/ScratchUtil.java b/platform/lang-impl/src/com/intellij/ide/scratch/ScratchUtil.java index 051f9e54d3a8..124e220ecb9c 100644 --- a/platform/lang-impl/src/com/intellij/ide/scratch/ScratchUtil.java +++ b/platform/lang-impl/src/com/intellij/ide/scratch/ScratchUtil.java @@ -15,12 +15,7 @@ */ package com.intellij.ide.scratch; -import com.intellij.lang.Language; -import com.intellij.lang.LanguageUtil; -import com.intellij.openapi.project.Project; import com.intellij.openapi.vfs.VirtualFile; -import com.intellij.psi.LanguageSubstitutors; -import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; /** @@ -38,11 +33,4 @@ public class ScratchUtil { public static boolean isScratch(@Nullable VirtualFile file) { return file != null && file.getFileType() == ScratchFileType.INSTANCE; } - - @Nullable - public static Language getLanguage(@NotNull Project project, @Nullable VirtualFile file) { - Language language = LanguageUtil.getFileLanguage(file); - if (language == null) return null; - return LanguageSubstitutors.INSTANCE.substituteLanguage(language, file, project); - } } diff --git a/python/src/com/jetbrains/python/debugger/PyLineBreakpointType.java b/python/src/com/jetbrains/python/debugger/PyLineBreakpointType.java index 71de7b929f6c..c71494a0bf5d 100644 --- a/python/src/com/jetbrains/python/debugger/PyLineBreakpointType.java +++ b/python/src/com/jetbrains/python/debugger/PyLineBreakpointType.java @@ -16,6 +16,7 @@ package com.jetbrains.python.debugger; import com.intellij.ide.scratch.ScratchUtil; +import com.intellij.lang.LanguageUtil; import com.intellij.openapi.editor.Document; import com.intellij.openapi.fileEditor.FileDocumentManager; import com.intellij.openapi.project.Project; @@ -70,7 +71,7 @@ public class PyLineBreakpointType extends XLineBreakpointTypeBase { } private static boolean isPythonScratch(@NotNull Project project, @NotNull VirtualFile file) { - return ScratchUtil.isScratch(file) && ScratchUtil.getLanguage(project, file) == PythonLanguage.INSTANCE; + return ScratchUtil.isScratch(file) && LanguageUtil.getLanguageForPsi(project, file) == PythonLanguage.INSTANCE; } private static boolean notStoppableElementType(IElementType elementType) {