diff --git a/plugins/org.eclipse.xtext/src/org/eclipse/xtext/nodemodel/util/NodeModelUtils.java b/plugins/org.eclipse.xtext/src/org/eclipse/xtext/nodemodel/util/NodeModelUtils.java index 80000b15d..c72f388cd 100644 --- a/plugins/org.eclipse.xtext/src/org/eclipse/xtext/nodemodel/util/NodeModelUtils.java +++ b/plugins/org.eclipse.xtext/src/org/eclipse/xtext/nodemodel/util/NodeModelUtils.java @@ -254,7 +254,7 @@ public class NodeModelUtils { } sibling = sibling.getNextSibling(); } - } else { + } else if (!GrammarUtil.isEObjectFragmentRuleCall(grammarElement)) { EObject result = findActualSemanticObjectInChildren(node, grammarElement); if (result != null) return result; diff --git a/tests/org.eclipse.xtext.tests/src/org/eclipse/xtext/nodemodel/util/NodeModelUtilsTest.java b/tests/org.eclipse.xtext.tests/src/org/eclipse/xtext/nodemodel/util/NodeModelUtilsTest.java index fa4546266..28022c009 100644 --- a/tests/org.eclipse.xtext.tests/src/org/eclipse/xtext/nodemodel/util/NodeModelUtilsTest.java +++ b/tests/org.eclipse.xtext.tests/src/org/eclipse/xtext/nodemodel/util/NodeModelUtilsTest.java @@ -182,6 +182,22 @@ public class NodeModelUtilsTest extends AbstractXtextTests { assertTrue(object instanceof ParserRule); } + @Test public void testFindActualSemanticObjectFor_10() throws Exception { + String grammarString = "grammar foo.Bar with org.eclipse.xtext.common.Terminals generate foo 'bar' Model:name=ID;"; + Grammar grammar = (Grammar) getModel(grammarString); + ILeafNode ruleName = NodeModelUtils.findLeafNodeAtOffset(NodeModelUtils.getNode(grammar), grammarString.indexOf("Model")); + EObject object = NodeModelUtils.findActualSemanticObjectFor(ruleName); + assertTrue(object instanceof ParserRule); + } + + @Test public void testFindActualSemanticObjectFor_11() throws Exception { + String grammarString = "grammar foo.Bar with org.eclipse.xtext.common.Terminals generate foo 'bar' Model:name=ID;"; + Grammar grammar = (Grammar) getModel(grammarString); + ILeafNode lessThan = NodeModelUtils.findLeafNodeAtOffset(NodeModelUtils.getNode(grammar), grammarString.indexOf("<")); + EObject object = NodeModelUtils.findActualSemanticObjectFor(lessThan); + assertTrue(object instanceof ParserRule); + } + @Test public void testCompactDump_1() throws Exception { String grammarString = "grammar foo.Bar with org.eclipse.xtext.common.Terminals generate foo 'bar' Model:name=ID;"; Grammar grammar = (Grammar) getModel(grammarString);