KotlinLanguageInjector using Registry to enable annotation injections

(cherry picked from commit 8bdfeb7)
This commit is contained in:
Nicolay Mitropolsky
2017-09-14 20:07:46 +03:00
committed by Nikolay Krasko
parent 12daf4389e
commit 7eb2d0d185
2 changed files with 11 additions and 1 deletions
@@ -23,6 +23,7 @@ import com.intellij.openapi.application.ApplicationManager
import com.intellij.openapi.progress.ProgressManager
import com.intellij.openapi.project.Project
import com.intellij.openapi.util.Key
import com.intellij.openapi.util.registry.Registry
import com.intellij.openapi.util.text.StringUtilRt
import com.intellij.patterns.PatternCondition
import com.intellij.patterns.PatternConditionPlus
@@ -68,6 +69,8 @@ class KotlinLanguageInjector(
private val ABSENT_KOTLIN_INJECTION = BaseInjection("ABSENT_KOTLIN_BASE_INJECTION")
}
var annotationInjectionsEnabled = Registry.`is`("kotlin.annotation.injection.enabled", false)
private val kotlinSupport: KotlinLanguageInjectionSupport? by lazy {
ArrayList(InjectorUtils.getActiveInjectionSupports()).filterIsInstance(KotlinLanguageInjectionSupport::class.java).firstOrNull()
}
@@ -273,6 +276,7 @@ class KotlinLanguageInjector(
}
private fun injectInAnnotationCall(host: KtElement): InjectionInfo? {
if (!annotationInjectionsEnabled) return null
val argument = host.parent as? KtValueArgument ?: return null
val annotationEntry = argument.parent.parent as? KtAnnotationEntry ?: return null
if (!fastCheckInjectionsExists(annotationEntry)) return null
@@ -18,12 +18,15 @@ package org.jetbrains.kotlin.psi
import com.intellij.codeInsight.completion.CompletionType
import com.intellij.lang.html.HTMLLanguage
import com.intellij.lang.injection.MultiHostInjector
import com.intellij.openapi.fileTypes.PlainTextLanguage
import org.intellij.lang.annotations.Language
import org.intellij.lang.regexp.RegExpLanguage
import org.intellij.plugins.intelliLang.Configuration
import org.intellij.plugins.intelliLang.inject.config.BaseInjection
import org.intellij.plugins.intelliLang.inject.config.InjectionPlace
import org.jetbrains.kotlin.idea.injection.KotlinLanguageInjector
import org.jetbrains.kotlin.utils.addToStdlib.firstIsInstance
class KotlinInjectionTest : AbstractInjectionTest() {
fun testInjectionOnJavaPredefinedMethodWithAnnotation() = doInjectionPresentTest(
@@ -524,8 +527,10 @@ class KotlinInjectionTest : AbstractInjectionTest() {
pattern,
"temp rule")
customInjection.setInjectionPlaces(InjectionPlace(elementPattern, true))
val kotlinLanguageInjector = MultiHostInjector.MULTIHOST_INJECTOR_EP_NAME.getExtensions(project).firstIsInstance<KotlinLanguageInjector>()
val injectionsEnabled = kotlinLanguageInjector.annotationInjectionsEnabled
try {
kotlinLanguageInjector.annotationInjectionsEnabled = true
Configuration.getInstance().replaceInjections(listOf(customInjection), listOf(), true)
doInjectionPresentTest(
@@ -536,6 +541,7 @@ class KotlinInjectionTest : AbstractInjectionTest() {
additionalAsserts()
}
finally {
kotlinLanguageInjector.annotationInjectionsEnabled = injectionsEnabled
Configuration.getInstance().replaceInjections(listOf(), listOf(customInjection), true)
}
}