KotlinLanguageInjector using Registry to enable annotation injections
(cherry picked from commit 8bdfeb7)
This commit is contained in:
committed by
Nikolay Krasko
parent
12daf4389e
commit
7eb2d0d185
@@ -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)
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user