mirror of
https://gitflic.ru/project/openide/openide.git
synced 2025-12-14 09:12:22 +07:00
[kotlin] k2: restore navigation to registry keys located in plugin.xml
- Registry was converted from java to kotlin, then resolve inside sources start to return functions from the companion object. At the same time, decompiled code still returns bridges from Registry itself and thus was not affected by the bug. - Test covers now only "sources" case, because the compiled case is covered by java/k1 tests. ^KTIJ-31444 fixed GitOrigin-RevId: 59dfa24c89b89057e6af3e5da939cf7a93bdb8fa
This commit is contained in:
committed by
intellij-monorepo-bot
parent
644c0d4252
commit
a43aa6fee3
@@ -44,7 +44,10 @@ final class RegistryKeyIdReferenceContributor extends PsiReferenceContributor {
|
||||
.methodCallParameter(0, psiMethod()
|
||||
.withName(string().oneOf("get", "is", "intValue", "doubleValue", "stringValue", "getColor"))
|
||||
.definedInClass(PsiJavaPatterns.psiClass().withQualifiedName(string().oneOf(
|
||||
//kotlin would resolve in the companion,
|
||||
//while java would pretend to see static method in class
|
||||
Registry.class.getName(),
|
||||
Registry.class.getName() + ".Companion",
|
||||
RegistryManager.class.getName()
|
||||
)))),
|
||||
new UastInjectionHostReferenceProvider() {
|
||||
|
||||
@@ -14,5 +14,6 @@
|
||||
<orderEntry type="module" module-name="intellij.devkit.testFramework" />
|
||||
<orderEntry type="module" module-name="intellij.kotlin.plugin.community.main" />
|
||||
<orderEntry type="module" module-name="intellij.kotlin.devkit" />
|
||||
<orderEntry type="module" module-name="kotlin.base.test" scope="TEST" />
|
||||
</component>
|
||||
</module>
|
||||
@@ -0,0 +1,24 @@
|
||||
import com.intellij.openapi.util.registry.Registry
|
||||
import com.intellij.openapi.util.registry.RegistryManager
|
||||
|
||||
class RegistryKeyId {
|
||||
|
||||
fun registry() {
|
||||
Registry.intValue("vcs.showConsole") // registry.properties
|
||||
Registry.intValue("my.plugin.key") // registryKey.xml
|
||||
|
||||
Registry.get("<error descr="Cannot resolve registry key 'INVALID_VALUE'">INVALID_VALUE</error>")
|
||||
Registry.`is`("<error descr="Cannot resolve registry key 'INVALID_VALUE'">INVALID_VALUE</error>")
|
||||
Registry.intValue("<error descr="Cannot resolve registry key 'INVALID_VALUE'">INVALID_VALUE</error>")
|
||||
Registry.doubleValue("<error descr="Cannot resolve registry key 'INVALID_VALUE'">INVALID_VALUE</error>")
|
||||
Registry.stringValue("<error descr="Cannot resolve registry key 'INVALID_VALUE'">INVALID_VALUE</error>")
|
||||
}
|
||||
|
||||
fun registryManager() {
|
||||
val registryManager = RegistryManager.getInstance()
|
||||
registryManager.`is`("<error descr="Cannot resolve registry key 'INVALID_VALUE'">INVALID_VALUE</error>")
|
||||
registryManager.intValue("<error descr="Cannot resolve registry key 'INVALID_VALUE'">INVALID_VALUE</error>")
|
||||
registryManager.intValue("<error descr="Cannot resolve registry key 'INVALID_VALUE'">INVALID_VALUE</error>", 123)
|
||||
registryManager.get("<error descr="Cannot resolve registry key 'INVALID_VALUE'">INVALID_VALUE</error>")
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,5 @@
|
||||
<idea-plugin>
|
||||
<extensions defaultExtensionNs="com.intellij">
|
||||
<registryKey defaultValue="myDefaultValue" description="My description" restartRequired="true" key="my.plugin.key"/>
|
||||
</extensions>
|
||||
</idea-plugin>
|
||||
@@ -1,19 +1,39 @@
|
||||
package org.jetbrains.idea.devkit.k2.codeInsight
|
||||
|
||||
import com.intellij.codeInspection.LocalInspectionEP
|
||||
import com.intellij.diagnostic.ITNReporter
|
||||
import com.intellij.notification.impl.NotificationGroupEP
|
||||
import com.intellij.openapi.application.PluginPathManager
|
||||
import com.intellij.openapi.extensions.BaseExtensionPointName
|
||||
import com.intellij.openapi.options.Configurable
|
||||
import com.intellij.openapi.options.advanced.AdvancedSettings
|
||||
import com.intellij.openapi.project.IntelliJProjectUtil
|
||||
import com.intellij.openapi.util.Iconable
|
||||
import com.intellij.openapi.util.registry.RegistryManager
|
||||
import com.intellij.testFramework.IdeaTestUtil
|
||||
import com.intellij.testFramework.builders.JavaModuleFixtureBuilder
|
||||
import com.intellij.testFramework.fixtures.JavaCodeInsightFixtureTestCase
|
||||
import com.intellij.ui.components.JBList
|
||||
import com.intellij.util.IncorrectOperationException
|
||||
import com.intellij.util.PathUtil
|
||||
import com.intellij.util.xmlb.annotations.XCollection
|
||||
import org.jetbrains.annotations.NonNls
|
||||
import org.jetbrains.idea.devkit.inspections.PluginXmlDomInspection
|
||||
import org.jetbrains.idea.devkit.inspections.UnresolvedPluginConfigReferenceInspection
|
||||
import org.jetbrains.kotlin.idea.base.plugin.KotlinPluginMode
|
||||
import org.jetbrains.kotlin.idea.base.plugin.artifacts.TestKotlinArtifacts
|
||||
import org.jetbrains.kotlin.idea.test.ExpectedPluginModeProvider
|
||||
import org.jetbrains.kotlin.idea.test.setUpWithKotlinPlugin
|
||||
import java.nio.file.Paths
|
||||
|
||||
class KotlinFirPluginXmlFunctionalTest : JavaCodeInsightFixtureTestCase(), ExpectedPluginModeProvider {
|
||||
override val pluginMode: KotlinPluginMode = KotlinPluginMode.K2
|
||||
|
||||
class KotlinFirPluginXmlFunctionalTest : JavaCodeInsightFixtureTestCase() {
|
||||
override fun setUp() {
|
||||
super.setUp()
|
||||
myFixture.enableInspections(PluginXmlDomInspection::class.java)
|
||||
setUpWithKotlinPlugin {
|
||||
super.setUp()
|
||||
myFixture.enableInspections(PluginXmlDomInspection::class.java)
|
||||
}
|
||||
}
|
||||
|
||||
override fun getBasePath(): @NonNls String? {
|
||||
@@ -26,10 +46,45 @@ class KotlinFirPluginXmlFunctionalTest : JavaCodeInsightFixtureTestCase() {
|
||||
//because kotlin builtins are not found in library session
|
||||
moduleBuilder.addLibrary("annotations", TestKotlinArtifacts.kotlinStdlib.canonicalPath, PathUtil.getJarPathForClass(XCollection::class.java))
|
||||
moduleBuilder.addJdk(IdeaTestUtil.getMockJdk18Path().getPath())
|
||||
moduleBuilder.addLibrary("platform-core", PathUtil.getJarPathForClass(RegistryManager::class.java))
|
||||
moduleBuilder.addLibrary("platform-ide", PathUtil.getJarPathForClass(JBList::class.java))
|
||||
moduleBuilder.addLibrary("platform-ide-impl", PathUtil.getJarPathForClass(ITNReporter::class.java))
|
||||
moduleBuilder.addLibrary("platform-util-base", PathUtil.getJarPathForClass(IncorrectOperationException::class.java))
|
||||
//moduleBuilder.addLibrary("platform-util", PathUtil.getJarPathForClass(Iconable::class.java))
|
||||
moduleBuilder.addLibrary("platform-analysis", PathUtil.getJarPathForClass(LocalInspectionEP::class.java))
|
||||
moduleBuilder.addLibrary("platform-resources", Paths.get(PathUtil.getJarPathForClass(LocalInspectionEP::class.java))
|
||||
.resolveSibling("intellij.platform.resources").toString());
|
||||
moduleBuilder.addLibrary("platform-ide-core", PathUtil.getJarPathForClass(Configurable::class.java))
|
||||
moduleBuilder.addLibrary("platform-ide-core-impl", PathUtil.getJarPathForClass(NotificationGroupEP::class.java))
|
||||
moduleBuilder.addLibrary("platform-editor", PathUtil.getJarPathForClass(AdvancedSettings::class.java))
|
||||
moduleBuilder.addLibrary("platform-extensions", PathUtil.getJarPathForClass(BaseExtensionPointName::class.java))
|
||||
}
|
||||
|
||||
fun testCustomAttribute() {
|
||||
myFixture.testHighlightingAllFiles(true, false, false, "MyBean.kt", "plugin.xml")
|
||||
}
|
||||
|
||||
fun testRegistryKeyIdHighlighting() {
|
||||
myFixture.addFileToProject("Registry.kt", """
|
||||
package com.intellij.openapi.util.registry
|
||||
|
||||
class Registry {
|
||||
companion object {
|
||||
@JvmStatic fun get(key: String): RegistryValue
|
||||
@JvmStatic fun `is`(key: String): Boolean
|
||||
@JvmStatic fun `is`(key: String, defaultValue: Boolean): Boolean
|
||||
@JvmStatic fun intValue(key: String): Int
|
||||
@JvmStatic fun intValue(key: String, defaultValue: Int): Int
|
||||
@JvmStatic fun doubleValue(key: String, defaultValue: Double): Double
|
||||
@JvmStatic fun doubleValue(key: String): Double
|
||||
@JvmStatic fun stringValue(key: String): String
|
||||
@JvmStatic fun intValue(key: String, defaultValue: Int, minValue: Int, maxValue: Int): Int
|
||||
}
|
||||
}
|
||||
""")
|
||||
myFixture.enableInspections(UnresolvedPluginConfigReferenceInspection())
|
||||
|
||||
myFixture.testHighlighting(true, false, false, "RegistryKeyId.kt", "registryKeyId.xml")
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user