diff --git a/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/compiler/KotlinCoreEnvironment.kt b/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/compiler/KotlinCoreEnvironment.kt index 58697fcb2e7..b48d97e01e0 100644 --- a/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/compiler/KotlinCoreEnvironment.kt +++ b/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/compiler/KotlinCoreEnvironment.kt @@ -26,6 +26,7 @@ import com.intellij.core.JavaCoreApplicationEnvironment import com.intellij.core.JavaCoreProjectEnvironment import com.intellij.ide.highlighter.JavaFileType import com.intellij.lang.MetaLanguage +import com.intellij.lang.injection.InjectedLanguageManager import com.intellij.lang.java.JavaParserDefinition import com.intellij.mock.MockProject import com.intellij.openapi.Disposable @@ -158,6 +159,7 @@ class KotlinCoreEnvironment private constructor( registerService(ExternalAnnotationsManager::class.java, MockExternalAnnotationsManager()) registerService(InferredAnnotationsManager::class.java, MockInferredAnnotationsManager()) + registerService(InjectedLanguageManager::class.java, MockInjectedLanguageManager()) } super.registerJavaPsiFacade() diff --git a/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/compiler/MockInjectedLanguageManager.kt b/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/compiler/MockInjectedLanguageManager.kt new file mode 100644 index 00000000000..f3bfa65ff1b --- /dev/null +++ b/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/compiler/MockInjectedLanguageManager.kt @@ -0,0 +1,54 @@ +/* + * Copyright 2010-2019 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. + */ + +package org.jetbrains.kotlin.cli.jvm.compiler + +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 + +class MockInjectedLanguageManager : InjectedLanguageManager() { + override fun mightHaveInjectedFragmentAtOffset(hostDocument: Document, hostOffset: Int): Boolean = false + + override fun getTopLevelFile(element: PsiElement): PsiFile? = null + override fun getUnescapedText(injectedNode: PsiElement): String = "" + override fun getInjectionHost(injectedProvider: FileViewProvider): PsiLanguageInjectionHost? = null + override fun getInjectionHost(injectedElement: PsiElement): PsiLanguageInjectionHost? = null + override fun getInjectedPsiFiles(host: PsiElement): List> = emptyList() + + override fun enumerate(host: PsiElement, visitor: PsiLanguageInjectionHost.InjectedPsiVisitor) {} + override fun enumerateEx( + host: PsiElement, containingFile: PsiFile, probeUp: Boolean, visitor: PsiLanguageInjectionHost.InjectedPsiVisitor) {} + + override fun getCachedInjectedDocumentsInRange(hostPsiFile: PsiFile, range: TextRange): List = emptyList() + + override fun dropFileCaches(file: PsiFile) {} + override fun getNonEditableFragments(window: DocumentWindow): List = emptyList() + + override fun registerMultiHostInjector(injector: MultiHostInjector) {} + override fun registerMultiHostInjector(injector: MultiHostInjector, parentDisposable: Disposable) {} + + override fun isInjectedFragment(injectedFile: PsiFile): Boolean = false + + override fun intersectWithAllEditableFragments(injectedPsi: PsiFile, rangeToEdit: TextRange): List = emptyList() + + override fun freezeWindow(document: DocumentWindow): DocumentWindow = document + override fun findInjectedElementAt(hostFile: PsiFile, hostDocumentOffset: Int): PsiElement? = null + + override fun injectedToHost(injectedContext: PsiElement, injectedTextRange: TextRange): TextRange = injectedTextRange + override fun injectedToHost(injectedContext: PsiElement, injectedOffset: Int): Int = injectedOffset + + // BUNCH: 183 + @Suppress("MissingRecentApi") + override fun injectedToHost(injectedContext: PsiElement, injectedOffset: Int, minHostOffset: Boolean): Int = injectedOffset +} \ No newline at end of file diff --git a/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/compiler/MockInjectedLanguageManager.kt.183 b/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/compiler/MockInjectedLanguageManager.kt.183 new file mode 100644 index 00000000000..e6d35191dc4 --- /dev/null +++ b/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/compiler/MockInjectedLanguageManager.kt.183 @@ -0,0 +1,50 @@ +/* + * Copyright 2010-2019 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. + */ + +package org.jetbrains.kotlin.cli.jvm.compiler + +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 + +class MockInjectedLanguageManager : InjectedLanguageManager() { + override fun mightHaveInjectedFragmentAtOffset(hostDocument: Document, hostOffset: Int): Boolean = false + + override fun getTopLevelFile(element: PsiElement): PsiFile? = null + override fun getUnescapedText(injectedNode: PsiElement): String = "" + override fun getInjectionHost(injectedProvider: FileViewProvider): PsiLanguageInjectionHost? = null + override fun getInjectionHost(injectedElement: PsiElement): PsiLanguageInjectionHost? = null + override fun getInjectedPsiFiles(host: PsiElement): List> = emptyList() + + override fun enumerate(host: PsiElement, visitor: PsiLanguageInjectionHost.InjectedPsiVisitor) {} + override fun enumerateEx( + host: PsiElement, containingFile: PsiFile, probeUp: Boolean, visitor: PsiLanguageInjectionHost.InjectedPsiVisitor) {} + + override fun getCachedInjectedDocumentsInRange(hostPsiFile: PsiFile, range: TextRange): List = emptyList() + + override fun dropFileCaches(file: PsiFile) {} + override fun getNonEditableFragments(window: DocumentWindow): List = emptyList() + + override fun registerMultiHostInjector(injector: MultiHostInjector) {} + override fun registerMultiHostInjector(injector: MultiHostInjector, parentDisposable: Disposable) {} + + override fun isInjectedFragment(injectedFile: PsiFile): Boolean = false + + override fun intersectWithAllEditableFragments(injectedPsi: PsiFile, rangeToEdit: TextRange): List = emptyList() + + override fun freezeWindow(document: DocumentWindow): DocumentWindow = document + override fun findInjectedElementAt(hostFile: PsiFile, hostDocumentOffset: Int): PsiElement? = null + + override fun injectedToHost(injectedContext: PsiElement, injectedTextRange: TextRange): TextRange = injectedTextRange + override fun injectedToHost(injectedContext: PsiElement, injectedOffset: Int): Int = injectedOffset +} \ No newline at end of file