[xtext] Updated EObjectAtOffsetHelper since recent changes broke a bunch of ui tests and introduced #resolveContainedElementAt, updated JavaDoc accordingly

This commit is contained in:
Sebastian Zarnekow 2012-01-11 18:54:38 +01:00
parent 7305b66353
commit 2a9e9bf38f
2 changed files with 25 additions and 14 deletions

View file

@ -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);

View file

@ -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);
}
}
}