summaryrefslogtreecommitdiff
path: root/platform/platform-impl/src/com/intellij/openapi/editor/impl/EditorHighlighterCache.java
diff options
context:
space:
mode:
Diffstat (limited to 'platform/platform-impl/src/com/intellij/openapi/editor/impl/EditorHighlighterCache.java')
-rw-r--r--platform/platform-impl/src/com/intellij/openapi/editor/impl/EditorHighlighterCache.java33
1 files changed, 33 insertions, 0 deletions
diff --git a/platform/platform-impl/src/com/intellij/openapi/editor/impl/EditorHighlighterCache.java b/platform/platform-impl/src/com/intellij/openapi/editor/impl/EditorHighlighterCache.java
index c1499a71a71b..8be2284e8360 100644
--- a/platform/platform-impl/src/com/intellij/openapi/editor/impl/EditorHighlighterCache.java
+++ b/platform/platform-impl/src/com/intellij/openapi/editor/impl/EditorHighlighterCache.java
@@ -15,10 +15,19 @@
*/
package com.intellij.openapi.editor.impl;
+import com.intellij.lexer.Lexer;
import com.intellij.openapi.editor.Document;
import com.intellij.openapi.editor.ex.util.LexerEditorHighlighter;
import com.intellij.openapi.editor.highlighter.EditorHighlighter;
+import com.intellij.openapi.editor.highlighter.EditorHighlighterFactory;
+import com.intellij.openapi.project.Project;
import com.intellij.openapi.util.Key;
+import com.intellij.openapi.vfs.VirtualFile;
+import com.intellij.psi.PsiDocumentManager;
+import com.intellij.psi.PsiFile;
+import com.intellij.psi.PsiManager;
+import com.intellij.psi.impl.cache.impl.id.PlatformIdTableBuilding;
+import com.intellij.psi.impl.search.LexerEditorHighlighterLexer;
import com.intellij.reference.SoftReference;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
@@ -55,4 +64,28 @@ public class EditorHighlighterCache {
return null;
}
+ @Nullable
+ public static Lexer getLexerBasedOnLexerHighlighter(CharSequence text, VirtualFile virtualFile, Project project) {
+ EditorHighlighter highlighter = null;
+
+ PsiFile psiFile = virtualFile != null ? PsiManager.getInstance(project).findFile(virtualFile) : null;
+ final Document document = psiFile != null ? PsiDocumentManager.getInstance(project).getDocument(psiFile) : null;
+ final EditorHighlighter cachedEditorHighlighter;
+ boolean alreadyInitializedHighlighter = false;
+
+ if (document != null &&
+ (cachedEditorHighlighter = getEditorHighlighterForCachesBuilding(document)) != null &&
+ PlatformIdTableBuilding.checkCanUseCachedEditorHighlighter(text, cachedEditorHighlighter)) {
+ highlighter = cachedEditorHighlighter;
+ alreadyInitializedHighlighter = true;
+ }
+ else if (virtualFile != null) {
+ highlighter = EditorHighlighterFactory.getInstance().createEditorHighlighter(project, virtualFile);
+ }
+
+ if (highlighter != null) {
+ return new LexerEditorHighlighterLexer(highlighter, alreadyInitializedHighlighter);
+ }
+ return null;
+ }
}