From a58e3e7447baa4bb4854f79e095f341893bd3533 Mon Sep 17 00:00:00 2001 From: Alexey Kudravtsev Date: Fri, 21 Jun 2019 18:19:24 +0300 Subject: [PATCH] supply mock InjectedLanguageManager for core environment to make Kotlin tests work (because InjectedManager is used in PsiCachedValue now) GitOrigin-RevId: 5f9becd7ce3ca653ae50ab22d082ad942d1ffe65 --- .../core/CoreInjectedLanguageManager.java | 135 ++++++++++++++++++ .../intellij/core/CoreProjectEnvironment.java | 2 + 2 files changed, 137 insertions(+) create mode 100644 platform/core-impl/src/com/intellij/core/CoreInjectedLanguageManager.java diff --git a/platform/core-impl/src/com/intellij/core/CoreInjectedLanguageManager.java b/platform/core-impl/src/com/intellij/core/CoreInjectedLanguageManager.java new file mode 100644 index 000000000000..e972f1bb89e8 --- /dev/null +++ b/platform/core-impl/src/com/intellij/core/CoreInjectedLanguageManager.java @@ -0,0 +1,135 @@ +// 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.core; + +import com.intellij.injected.editor.DocumentWindow; +import com.intellij.lang.injection.InjectedLanguageManager; +import com.intellij.lang.injection.MultiHostInjector; +import com.intellij.openapi.Disposable; +import com.intellij.openapi.editor.Document; +import com.intellij.openapi.util.Pair; +import com.intellij.openapi.util.TextRange; +import com.intellij.psi.FileViewProvider; +import com.intellij.psi.PsiElement; +import com.intellij.psi.PsiFile; +import com.intellij.psi.PsiLanguageInjectionHost; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +import java.util.Collections; +import java.util.List; + +public class CoreInjectedLanguageManager extends InjectedLanguageManager { + CoreInjectedLanguageManager() {} + + @Override + public PsiLanguageInjectionHost getInjectionHost(@NotNull FileViewProvider injectedProvider) { + return null; + } + + @Nullable + @Override + public PsiLanguageInjectionHost getInjectionHost(@NotNull PsiElement injectedElement) { + return null; + } + + @NotNull + @Override + public TextRange injectedToHost(@NotNull PsiElement injectedContext, @NotNull TextRange injectedTextRange) { + return injectedTextRange; + } + + @Override + public int injectedToHost(@NotNull PsiElement injectedContext, int injectedOffset) { + return 0; + } + + @Override + public int injectedToHost(@NotNull PsiElement injectedContext, int injectedOffset, boolean minHostOffset) { + return 0; + } + + @Override + public void registerMultiHostInjector(@NotNull MultiHostInjector injector) { + + } + + @Override + public void registerMultiHostInjector(@NotNull MultiHostInjector injector, @NotNull Disposable parentDisposable) { + + } + + @NotNull + @Override + public String getUnescapedText(@NotNull PsiElement injectedNode) { + return injectedNode.getText(); + } + + @NotNull + @Override + public List intersectWithAllEditableFragments(@NotNull PsiFile injectedPsi, @NotNull TextRange rangeToEdit) { + return Collections.singletonList(rangeToEdit); + } + + @Override + public boolean isInjectedFragment(@NotNull PsiFile injectedFile) { + return false; + } + + @Nullable + @Override + public PsiElement findInjectedElementAt(@NotNull PsiFile hostFile, int hostDocumentOffset) { + return null; + } + + @Nullable + @Override + public List> getInjectedPsiFiles(@NotNull PsiElement host) { + return null; + } + + @Override + public void dropFileCaches(@NotNull PsiFile file) { + + } + + @Override + public PsiFile getTopLevelFile(@NotNull PsiElement element) { + return element.getContainingFile(); + } + + @NotNull + @Override + public List getCachedInjectedDocumentsInRange(@NotNull PsiFile hostPsiFile, @NotNull TextRange range) { + return Collections.emptyList(); + } + + @Override + public void enumerate(@NotNull PsiElement host, @NotNull PsiLanguageInjectionHost.InjectedPsiVisitor visitor) { + + } + + @Override + public void enumerateEx(@NotNull PsiElement host, + @NotNull PsiFile containingFile, + boolean probeUp, + @NotNull PsiLanguageInjectionHost.InjectedPsiVisitor visitor) { + + } + + @NotNull + @Override + public List getNonEditableFragments(@NotNull DocumentWindow window) { + return Collections.emptyList(); + } + + @Override + public boolean mightHaveInjectedFragmentAtOffset(@NotNull Document hostDocument, int hostOffset) { + return false; + } + + @NotNull + @Override + public DocumentWindow freezeWindow(@NotNull DocumentWindow document) { + return document; + } +} diff --git a/platform/core-impl/src/com/intellij/core/CoreProjectEnvironment.java b/platform/core-impl/src/com/intellij/core/CoreProjectEnvironment.java index 47bb5956cae5..a67eaf46285f 100644 --- a/platform/core-impl/src/com/intellij/core/CoreProjectEnvironment.java +++ b/platform/core-impl/src/com/intellij/core/CoreProjectEnvironment.java @@ -1,6 +1,7 @@ // 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.core; +import com.intellij.lang.injection.InjectedLanguageManager; import com.intellij.mock.MockDumbService; import com.intellij.mock.MockFileIndexFacade; import com.intellij.mock.MockProject; @@ -67,6 +68,7 @@ public class CoreProjectEnvironment { myProject.registerService(ProjectScopeBuilder.class, createProjectScopeBuilder()); myProject.registerService(DumbService.class, new MockDumbService(myProject)); myProject.registerService(CoreEncodingProjectManager.class, CoreEncodingProjectManager.class); + myProject.registerService(InjectedLanguageManager.class, new CoreInjectedLanguageManager()); } @NotNull