mirror of
https://github.com/sigmasternchen/xtext-core
synced 2025-03-17 01:08:56 +00:00
[xtext] Updated EObjectAtOffsetHelper since recent changes broke a bunch of ui tests and introduced #resolveContainedElementAt, updated JavaDoc accordingly
This commit is contained in:
parent
7305b66353
commit
2a9e9bf38f
2 changed files with 25 additions and 14 deletions
|
@ -29,12 +29,20 @@ import org.eclipse.xtext.util.TextRegion;
|
|||
public class EObjectAtOffsetHelper {
|
||||
|
||||
/**
|
||||
* @return the contained element next to the offset
|
||||
* @return the declared or the referenced element next to the offset
|
||||
*/
|
||||
public EObject resolveElementAt(XtextResource resource, int offset) {
|
||||
return internalResolveElementAt(resource, offset, true);
|
||||
return internalResolveElementAt(resource, offset, false);
|
||||
}
|
||||
|
||||
/**
|
||||
* @return the declared element next to the offset
|
||||
* @since 2.3
|
||||
*/
|
||||
public EObject resolveContainedElementAt(XtextResource resource, int offset) {
|
||||
return internalResolveElementAt(resource, offset, true);
|
||||
}
|
||||
|
||||
/**
|
||||
* @return the cross referenced EObject under, right or left to the cursor (in that order) or
|
||||
* <code>null</code> if there is no cross referenced object next to the offset.
|
||||
|
@ -107,11 +115,11 @@ public class EObjectAtOffsetHelper {
|
|||
}
|
||||
|
||||
protected EObject internalResolveElementAt(XtextResource resource, int offset, boolean containment) {
|
||||
if(!containment){
|
||||
if(!containment) {
|
||||
EObject crossRef = resolveCrossReferencedElementAt(resource, offset);
|
||||
if (crossRef != null)
|
||||
return crossRef;
|
||||
}
|
||||
}
|
||||
IParseResult parseResult = resource.getParseResult();
|
||||
if (parseResult != null && parseResult.getRootNode() != null) {
|
||||
ILeafNode leaf = NodeModelUtils.findLeafNodeAtOffset(parseResult.getRootNode(), offset);
|
||||
|
|
|
@ -46,9 +46,9 @@ public class EObjectAtOffsetTest extends AbstractXtextTests {
|
|||
String modelAsString = "foo foo0 bar bar0 foo0 bar bar1 foo0";
|
||||
XtextResource resource = getResourceFromString(modelAsString);
|
||||
Model model = (Model) resource.getContents().get(0);
|
||||
checkContainedElementAt(resource, modelAsString, "foo foo0 ", model.getFoos().get(0));
|
||||
checkContainedElementAt(resource, modelAsString, "bar bar0 ", model.getBars().get(0));
|
||||
checkContainedElementAt(resource, modelAsString, "bar bar1 ", model.getBars().get(1));
|
||||
checkContainedOrReferencedElementAt(resource, modelAsString, "foo foo0 ", model.getFoos().get(0));
|
||||
checkContainedOrReferencedElementAt(resource, modelAsString, "bar bar0 ", model.getBars().get(0));
|
||||
checkContainedOrReferencedElementAt(resource, modelAsString, "bar bar1 ", model.getBars().get(1));
|
||||
}
|
||||
|
||||
@Test public void testCrossRefs_01() throws Exception {
|
||||
|
@ -107,20 +107,20 @@ public class EObjectAtOffsetTest extends AbstractXtextTests {
|
|||
String modelAsString = "bar bar0 foo0 foobar foo1 foo foo0 foo foo1";
|
||||
XtextResource resource = getResourceFromString(modelAsString);
|
||||
Model model = (Model) resource.getContents().get(0);
|
||||
checkContainedElementAt(resource, modelAsString, "foobar ", model.getBars().get(0));
|
||||
checkContainedOrReferencedElementAt(resource, modelAsString, "foobar ", model.getBars().get(0));
|
||||
checkCrossReferencedElementAt(resource, modelAsString, "foo0 ", model.getFoos().get(0));
|
||||
checkCrossReferencedElementAt(resource, modelAsString, "foo1 ", model.getFoos().get(1));
|
||||
checkContainedElementAt(resource, modelAsString, "bar bar0 ", ((FooBar) model.getBars().get(0)).getBar());
|
||||
checkContainedOrReferencedElementAt(resource, modelAsString, "bar bar0 ", ((FooBar) model.getBars().get(0)).getBar());
|
||||
}
|
||||
|
||||
@Test public void testAction_02() throws Exception {
|
||||
String modelAsString = "zonk 1 bar bar0 foo0 foobar foo1 foo foo0 foo foo1";
|
||||
XtextResource resource = getResourceFromString(modelAsString);
|
||||
Model model = (Model) resource.getContents().get(0);
|
||||
checkContainedElementAt(resource, modelAsString, "foobar ", model.getBars().get(0));
|
||||
checkContainedOrReferencedElementAt(resource, modelAsString, "foobar ", model.getBars().get(0));
|
||||
checkCrossReferencedElementAt(resource, modelAsString, "foo0 ", model.getFoos().get(0));
|
||||
checkCrossReferencedElementAt(resource, modelAsString, "foo1 ", model.getFoos().get(1));
|
||||
checkContainedElementAt(resource, modelAsString, "bar bar0 ", ((FooBar) model.getBars().get(0)).getBar());
|
||||
checkContainedOrReferencedElementAt(resource, modelAsString, "bar bar0 ", ((FooBar) model.getBars().get(0)).getBar());
|
||||
}
|
||||
|
||||
@Test public void testFindCrossReferencedElementAt() throws Exception {
|
||||
|
@ -169,20 +169,23 @@ public class EObjectAtOffsetTest extends AbstractXtextTests {
|
|||
assertNull(eObjectAtOffsetHelper.getCrossReferenceNode(resource, new TextRegion(firstPart.length()+1, 9)));
|
||||
}
|
||||
|
||||
private void checkContainedElementAt(XtextResource resource, String model, String substring, EObject expectedElement) {
|
||||
private void checkContainedOrReferencedElementAt(XtextResource resource, String model, String substring, EObject expectedElement) {
|
||||
int index = model.indexOf(substring);
|
||||
for (int i = index; i < index + substring.length(); ++i) {
|
||||
EObject foundElement = eObjectAtOffsetHelper.resolveElementAt(resource, i);
|
||||
assertEquals(expectedElement, foundElement);
|
||||
foundElement = eObjectAtOffsetHelper.resolveCrossReferencedElementAt(resource, i);
|
||||
assertNotSame(expectedElement, foundElement);
|
||||
}
|
||||
}
|
||||
|
||||
private void checkCrossReferencedElementAt(XtextResource resource, String model, String substring,
|
||||
EObject expectedElement) {
|
||||
private void checkCrossReferencedElementAt(XtextResource resource, String model, String substring, EObject expectedElement) {
|
||||
int index = model.indexOf(substring);
|
||||
for (int i = index; i < index + substring.length(); ++i) {
|
||||
EObject foundElement = eObjectAtOffsetHelper.resolveCrossReferencedElementAt(resource, i);
|
||||
assertEquals(expectedElement, foundElement);
|
||||
foundElement = eObjectAtOffsetHelper.resolveElementAt(resource, i);
|
||||
assertEquals(expectedElement, foundElement);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue