diff --git a/plugins/devkit/devkit-java-tests/intellij.devkit.java.tests.iml b/plugins/devkit/devkit-java-tests/intellij.devkit.java.tests.iml index 1cbf9e81081a..1af23a84908c 100644 --- a/plugins/devkit/devkit-java-tests/intellij.devkit.java.tests.iml +++ b/plugins/devkit/devkit-java-tests/intellij.devkit.java.tests.iml @@ -8,5 +8,6 @@ + \ No newline at end of file diff --git a/plugins/devkit/devkit-java-tests/testData/pluginXmlDomStubs/XIncludeWithActions-main.xml b/plugins/devkit/devkit-java-tests/testData/pluginXmlDomStubs/XIncludeWithActions-main.xml new file mode 100644 index 000000000000..c68191e03834 --- /dev/null +++ b/plugins/devkit/devkit-java-tests/testData/pluginXmlDomStubs/XIncludeWithActions-main.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/plugins/devkit/devkit-java-tests/testData/pluginXmlDomStubs/XIncludeWithActions.xml b/plugins/devkit/devkit-java-tests/testData/pluginXmlDomStubs/XIncludeWithActions.xml new file mode 100644 index 000000000000..2b8c33da1d0d --- /dev/null +++ b/plugins/devkit/devkit-java-tests/testData/pluginXmlDomStubs/XIncludeWithActions.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/plugins/devkit/devkit-java-tests/testSrc/org/jetbrains/idea/devkit/codeInsight/PluginXmlDomStubsTest.java b/plugins/devkit/devkit-java-tests/testSrc/org/jetbrains/idea/devkit/codeInsight/PluginXmlDomStubsTest.java index a6f109e3df78..5f1db3e86693 100644 --- a/plugins/devkit/devkit-java-tests/testSrc/org/jetbrains/idea/devkit/codeInsight/PluginXmlDomStubsTest.java +++ b/plugins/devkit/devkit-java-tests/testSrc/org/jetbrains/idea/devkit/codeInsight/PluginXmlDomStubsTest.java @@ -15,9 +15,20 @@ */ package org.jetbrains.idea.devkit.codeInsight; +import com.intellij.psi.xml.XmlTag; import com.intellij.testFramework.TestDataPath; +import com.intellij.util.xml.DomFileElement; +import com.intellij.util.xml.DomTarget; +import com.intellij.util.xml.impl.DomInvocationHandler; +import com.intellij.util.xml.impl.DomManagerImpl; import com.intellij.util.xml.stubs.DomStubTest; +import com.intellij.xml.util.IncludedXmlTag; import org.jetbrains.idea.devkit.DevkitJavaTestsUtil; +import org.jetbrains.idea.devkit.dom.Action; +import org.jetbrains.idea.devkit.dom.Actions; +import org.jetbrains.idea.devkit.dom.IdeaPlugin; + +import java.util.List; @TestDataPath("$CONTENT_ROOT/testData/pluginXmlDomStubs") public class PluginXmlDomStubsTest extends DomStubTest { @@ -74,6 +85,27 @@ public class PluginXmlDomStubsTest extends DomStubTest { myFixture.testHighlighting("pluginWithXInclude.xml"); } + public void testIncludedActions() { + prepareFile("XIncludeWithActions.xml"); + DomFileElement element = prepare("XIncludeWithActions-main.xml", IdeaPlugin.class); + + XmlTag[] tags = element.getRootTag().getSubTags(); + assertEquals(2, tags.length); + XmlTag included = tags[0]; + assertTrue(included instanceof IncludedXmlTag); + assertEquals("actions", included.getName()); + + List actions = element.getRootElement().getActions(); + assertEquals(1, actions.size()); + assertNotNull(actions.get(0).getXmlTag()); + + Action action = actions.get(0).getGroups().get(0).getActions().get(0); + DomInvocationHandler handler = DomManagerImpl.getDomInvocationHandler(action.getId()); + assertNotNull(handler.getStub()); + + assertNotNull(DomTarget.getTarget(action)); + } + @Override protected String getBasePath() { return DevkitJavaTestsUtil.TESTDATA_PATH + "pluginXmlDomStubs"; diff --git a/xml/dom-impl/src/com/intellij/util/xml/stubs/StubParentStrategy.java b/xml/dom-impl/src/com/intellij/util/xml/stubs/StubParentStrategy.java index 0bdc3e0a414a..65af3dbcbf8a 100644 --- a/xml/dom-impl/src/com/intellij/util/xml/stubs/StubParentStrategy.java +++ b/xml/dom-impl/src/com/intellij/util/xml/stubs/StubParentStrategy.java @@ -21,6 +21,7 @@ import com.intellij.psi.xml.XmlElement; import com.intellij.psi.xml.XmlFile; import com.intellij.psi.xml.XmlTag; import com.intellij.util.xml.impl.*; +import com.intellij.xml.util.IncludedXmlTag; import com.intellij.xml.util.XmlUtil; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -94,7 +95,7 @@ public class StubParentStrategy implements DomParentStrategy { int i = 0; String nameToFind = myStub.getName(); for (XmlTag xmlTag : tags) { - if (nameToFind.equals(xmlTag.getName()) && myStub.getIndex() == i++) { + if (nameToFind.equals(xmlTag.getName()) && !(xmlTag instanceof IncludedXmlTag) && myStub.getIndex() == i++) { return xmlTag; } }