mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-03-22 15:19:59 +07:00
[devkit] IJ-CR-145746 IJPL-163148: make ActionOrGroupIdReference implement PluginConfigReference
to highlight unresolved GitOrigin-RevId: 2327a574210bdb804dbbc7f73ed2bb1c5066e72a
This commit is contained in:
committed by
intellij-monorepo-bot
parent
781aab2a34
commit
bb2f8f4920
@@ -479,6 +479,8 @@ plugin.xml.convert.language.id.any.language.display.name=<any language>
|
||||
|
||||
plugin.xml.convert.module.descriptor.name=Cannot resolve module descriptor ''{0}'' in source roots of module ''{1}''
|
||||
|
||||
plugin.xml.action.cannot.resolve=Cannot resolve action id ''{0}''
|
||||
|
||||
error.message.cannot.find.module=Cannot find module ''{0}''
|
||||
error.message.cannot.find.resource.file=Cannot find ''{0}'' file in module ''{1}''
|
||||
|
||||
|
||||
@@ -6,6 +6,7 @@ import com.intellij.patterns.uast.injectionHostUExpression
|
||||
import com.intellij.psi.*
|
||||
import com.intellij.util.ThreeState
|
||||
import org.jetbrains.idea.devkit.util.PsiUtil
|
||||
import org.jetbrains.uast.evaluateString
|
||||
|
||||
private class ActionIdReferenceContributor : PsiReferenceContributor() {
|
||||
override fun registerReferenceProviders(registrar: PsiReferenceRegistrar) {
|
||||
@@ -16,11 +17,11 @@ private class ActionIdReferenceContributor : PsiReferenceContributor() {
|
||||
PsiJavaPatterns.psiMethod()
|
||||
.withName("getAction").definedInClass("com.intellij.openapi.actionSystem.ActionManager")
|
||||
),
|
||||
uastInjectionHostReferenceProvider { _, host ->
|
||||
uastInjectionHostReferenceProvider { uhost, host ->
|
||||
arrayOf(ActionOrGroupIdReference(
|
||||
host,
|
||||
ElementManipulators.getValueTextRange(host),
|
||||
ElementManipulators.getValueText(host),
|
||||
uhost.evaluateString() ?: ElementManipulators.getValueText(host),
|
||||
ThreeState.UNSURE
|
||||
))
|
||||
}
|
||||
|
||||
@@ -19,6 +19,7 @@ import com.intellij.util.containers.ContainerUtil;
|
||||
import com.intellij.util.containers.JBIterable;
|
||||
import com.intellij.util.xml.DomTarget;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.idea.devkit.DevKitBundle;
|
||||
import org.jetbrains.idea.devkit.dom.ActionOrGroup;
|
||||
import org.jetbrains.idea.devkit.dom.OverrideText;
|
||||
import org.jetbrains.idea.devkit.dom.impl.ActionOrGroupResolveConverter;
|
||||
@@ -27,7 +28,7 @@ import org.jetbrains.idea.devkit.dom.index.IdeaPluginRegistrationIndex;
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
|
||||
final class ActionOrGroupIdReference extends PsiPolyVariantReferenceBase<PsiElement> {
|
||||
final class ActionOrGroupIdReference extends PsiPolyVariantReferenceBase<PsiElement> implements PluginConfigReference {
|
||||
|
||||
private final String myId;
|
||||
private final ThreeState myIsAction;
|
||||
@@ -106,4 +107,9 @@ final class ActionOrGroupIdReference extends PsiPolyVariantReferenceBase<PsiElem
|
||||
IdeaPluginRegistrationIndex.processGroup(project, id, scope, processor);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public @NotNull String getUnresolvedMessagePattern() {
|
||||
return DevKitBundle.message("plugin.xml.action.cannot.resolve", myId);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2,12 +2,14 @@
|
||||
package org.jetbrains.idea.devkit.kotlin.codeInsight
|
||||
|
||||
import com.intellij.testFramework.fixtures.LightJavaCodeInsightFixtureTestCase
|
||||
import org.jetbrains.idea.devkit.inspections.UnresolvedPluginConfigReferenceInspection
|
||||
|
||||
class KtActionReferenceTest : LightJavaCodeInsightFixtureTestCase() {
|
||||
|
||||
override fun setUp() {
|
||||
super.setUp()
|
||||
myFixture.addClass("package com.intellij.ui.components; public class JBList {}");
|
||||
myFixture.addClass("package com.intellij.openapi.actionSystem; public abstract class AnAction {}");
|
||||
myFixture.addClass("""
|
||||
package com.intellij.openapi.actionSystem;
|
||||
|
||||
@@ -67,6 +69,27 @@ class KtActionReferenceTest : LightJavaCodeInsightFixtureTestCase() {
|
||||
assertSameElements(myFixture.getCompletionVariants("Caller.kt").orEmpty(), "myAction", "myGroup")
|
||||
}
|
||||
|
||||
fun testInvalidActionOrGroupReference() {
|
||||
val DLR = '$'.toString()
|
||||
myFixture.enableInspections(UnresolvedPluginConfigReferenceInspection::class.java)
|
||||
myFixture.createFile("plugin.xml", pluginXmlActions("""
|
||||
<group id="myGroup"></group>
|
||||
<action id="myAction" class="foo.bar.BarAction"></action>
|
||||
<action id="${DLR}myActionDollar" class="foo.bar.BarAction"></action>
|
||||
"""
|
||||
));
|
||||
myFixture.configureByText("Caller.kt", """
|
||||
fun usage(actionManager: com.intellij.openapi.actionSystem.ActionManager){
|
||||
|
||||
actionManager.getAction("myAction")
|
||||
actionManager.getAction("$DLR{"\$DLR"}myActionDollar")
|
||||
actionManager.getAction("<error descr="Cannot resolve action id 'someUndefinedAction'">someUndefinedAction</error>")
|
||||
|
||||
}
|
||||
""".trimIndent())
|
||||
myFixture.testHighlighting()
|
||||
}
|
||||
|
||||
fun testRenameGroup() {
|
||||
myFixture.createFile("plugin.xml", pluginXmlActions("""
|
||||
<group id="myGroup"></group>
|
||||
|
||||
Reference in New Issue
Block a user