From 7eb2d0d1853d1620d5152e8b829db289f43c6e15 Mon Sep 17 00:00:00 2001 From: Nicolay Mitropolsky Date: Thu, 14 Sep 2017 20:07:46 +0300 Subject: [PATCH] `KotlinLanguageInjector` using Registry to enable annotation injections (cherry picked from commit 8bdfeb7) --- .../kotlin/idea/injection/KotlinLanguageInjector.kt | 4 ++++ .../tests/org/jetbrains/kotlin/psi/KotlinInjectionTest.kt | 8 +++++++- 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/idea/idea-jvm/src/org/jetbrains/kotlin/idea/injection/KotlinLanguageInjector.kt b/idea/idea-jvm/src/org/jetbrains/kotlin/idea/injection/KotlinLanguageInjector.kt index 45f609d97dc..d7c430e51d8 100644 --- a/idea/idea-jvm/src/org/jetbrains/kotlin/idea/injection/KotlinLanguageInjector.kt +++ b/idea/idea-jvm/src/org/jetbrains/kotlin/idea/injection/KotlinLanguageInjector.kt @@ -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 diff --git a/idea/tests/org/jetbrains/kotlin/psi/KotlinInjectionTest.kt b/idea/tests/org/jetbrains/kotlin/psi/KotlinInjectionTest.kt index 940c067ab69..426f343ae99 100644 --- a/idea/tests/org/jetbrains/kotlin/psi/KotlinInjectionTest.kt +++ b/idea/tests/org/jetbrains/kotlin/psi/KotlinInjectionTest.kt @@ -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() + 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) } }