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.progress.ProgressManager
|
||||||
import com.intellij.openapi.project.Project
|
import com.intellij.openapi.project.Project
|
||||||
import com.intellij.openapi.util.Key
|
import com.intellij.openapi.util.Key
|
||||||
|
import com.intellij.openapi.util.registry.Registry
|
||||||
import com.intellij.openapi.util.text.StringUtilRt
|
import com.intellij.openapi.util.text.StringUtilRt
|
||||||
import com.intellij.patterns.PatternCondition
|
import com.intellij.patterns.PatternCondition
|
||||||
import com.intellij.patterns.PatternConditionPlus
|
import com.intellij.patterns.PatternConditionPlus
|
||||||
@@ -68,6 +69,8 @@ class KotlinLanguageInjector(
|
|||||||
private val ABSENT_KOTLIN_INJECTION = BaseInjection("ABSENT_KOTLIN_BASE_INJECTION")
|
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 {
|
private val kotlinSupport: KotlinLanguageInjectionSupport? by lazy {
|
||||||
ArrayList(InjectorUtils.getActiveInjectionSupports()).filterIsInstance(KotlinLanguageInjectionSupport::class.java).firstOrNull()
|
ArrayList(InjectorUtils.getActiveInjectionSupports()).filterIsInstance(KotlinLanguageInjectionSupport::class.java).firstOrNull()
|
||||||
}
|
}
|
||||||
@@ -273,6 +276,7 @@ class KotlinLanguageInjector(
|
|||||||
}
|
}
|
||||||
|
|
||||||
private fun injectInAnnotationCall(host: KtElement): InjectionInfo? {
|
private fun injectInAnnotationCall(host: KtElement): InjectionInfo? {
|
||||||
|
if (!annotationInjectionsEnabled) return null
|
||||||
val argument = host.parent as? KtValueArgument ?: return null
|
val argument = host.parent as? KtValueArgument ?: return null
|
||||||
val annotationEntry = argument.parent.parent as? KtAnnotationEntry ?: return null
|
val annotationEntry = argument.parent.parent as? KtAnnotationEntry ?: return null
|
||||||
if (!fastCheckInjectionsExists(annotationEntry)) 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.codeInsight.completion.CompletionType
|
||||||
import com.intellij.lang.html.HTMLLanguage
|
import com.intellij.lang.html.HTMLLanguage
|
||||||
|
import com.intellij.lang.injection.MultiHostInjector
|
||||||
import com.intellij.openapi.fileTypes.PlainTextLanguage
|
import com.intellij.openapi.fileTypes.PlainTextLanguage
|
||||||
import org.intellij.lang.annotations.Language
|
import org.intellij.lang.annotations.Language
|
||||||
import org.intellij.lang.regexp.RegExpLanguage
|
import org.intellij.lang.regexp.RegExpLanguage
|
||||||
import org.intellij.plugins.intelliLang.Configuration
|
import org.intellij.plugins.intelliLang.Configuration
|
||||||
import org.intellij.plugins.intelliLang.inject.config.BaseInjection
|
import org.intellij.plugins.intelliLang.inject.config.BaseInjection
|
||||||
import org.intellij.plugins.intelliLang.inject.config.InjectionPlace
|
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() {
|
class KotlinInjectionTest : AbstractInjectionTest() {
|
||||||
fun testInjectionOnJavaPredefinedMethodWithAnnotation() = doInjectionPresentTest(
|
fun testInjectionOnJavaPredefinedMethodWithAnnotation() = doInjectionPresentTest(
|
||||||
@@ -524,8 +527,10 @@ class KotlinInjectionTest : AbstractInjectionTest() {
|
|||||||
pattern,
|
pattern,
|
||||||
"temp rule")
|
"temp rule")
|
||||||
customInjection.setInjectionPlaces(InjectionPlace(elementPattern, true))
|
customInjection.setInjectionPlaces(InjectionPlace(elementPattern, true))
|
||||||
|
val kotlinLanguageInjector = MultiHostInjector.MULTIHOST_INJECTOR_EP_NAME.getExtensions(project).firstIsInstance<KotlinLanguageInjector>()
|
||||||
|
val injectionsEnabled = kotlinLanguageInjector.annotationInjectionsEnabled
|
||||||
try {
|
try {
|
||||||
|
kotlinLanguageInjector.annotationInjectionsEnabled = true
|
||||||
Configuration.getInstance().replaceInjections(listOf(customInjection), listOf(), true)
|
Configuration.getInstance().replaceInjections(listOf(customInjection), listOf(), true)
|
||||||
|
|
||||||
doInjectionPresentTest(
|
doInjectionPresentTest(
|
||||||
@@ -536,6 +541,7 @@ class KotlinInjectionTest : AbstractInjectionTest() {
|
|||||||
additionalAsserts()
|
additionalAsserts()
|
||||||
}
|
}
|
||||||
finally {
|
finally {
|
||||||
|
kotlinLanguageInjector.annotationInjectionsEnabled = injectionsEnabled
|
||||||
Configuration.getInstance().replaceInjections(listOf(), listOf(customInjection), true)
|
Configuration.getInstance().replaceInjections(listOf(), listOf(customInjection), true)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user