use of org.eclipse.xtext.validation.Issue in project xtext-xtend by eclipse.
the class LinkingTest method testBug345433_02.
@Test
public void testBug345433_02() throws Exception {
String classAsString = "import static extension org.eclipse.xtext.GrammarUtil.*\n" + "class Foo {" + " org.eclipse.xtext.Grammar grammar\n" + " def function1() {\n" + " grammar.containedRuleCalls.filter(e0 | " + " !e0.isAssigned() && !e0.isEObjectRuleCall()" + " ).map(e1 | e1.rule)\n" + " }\n" + "}";
XtendClass clazz = clazz(classAsString);
IResourceValidator validator = ((XtextResource) clazz.eResource()).getResourceServiceProvider().getResourceValidator();
List<Issue> issues = validator.validate(clazz.eResource(), CheckMode.ALL, CancelIndicator.NullImpl);
assertTrue("Resource contained errors : " + issues.toString(), issues.isEmpty());
XtendFunction function = (XtendFunction) clazz.getMembers().get(1);
XExpression body = function.getExpression();
LightweightTypeReference bodyType = getType(body);
assertEquals("java.lang.Iterable<org.eclipse.xtext.AbstractRule>", bodyType.getIdentifier());
XBlockExpression block = (XBlockExpression) body;
XMemberFeatureCall featureCall = (XMemberFeatureCall) block.getExpressions().get(0);
XClosure closure = (XClosure) featureCall.getMemberCallArguments().get(0);
JvmFormalParameter e1 = closure.getFormalParameters().get(0);
assertEquals("e1", e1.getSimpleName());
assertEquals("org.eclipse.xtext.RuleCall", getType(e1).getIdentifier());
}
use of org.eclipse.xtext.validation.Issue in project xtext-xtend by eclipse.
the class FeatureCallValidationTest method testLocationForDeclaratorMarker.
@Test
public void testLocationForDeclaratorMarker() throws Exception {
String input = "class C { def void m() { com::acme::Unknown::unknown }}";
XtendClass clazz = clazz(input);
List<Issue> issues = helper.validate(clazz);
assertEquals(String.valueOf(issues), 1, issues.size());
Issue issue = issues.get(0);
assertEquals(input.indexOf("com::acme"), issue.getOffset().intValue());
assertEquals("com::acme::Unknown".length(), issue.getLength().intValue());
assertEquals("com.acme.Unknown cannot be resolved to a type.", issue.getMessage());
assertEquals(1, issue.getLineNumber().intValue());
}
use of org.eclipse.xtext.validation.Issue in project xtext-xtend by eclipse.
the class FeatureCallValidationTest method testBug400989.
@Test
public void testBug400989() throws Exception {
String content = "abstract class Bar<E> extends java.util.AbstractList<E> { protected new() { new Object() => [add && remove] }}";
XtendClass clazz = clazz(content);
List<Issue> issues = helper.validate(clazz);
assertEquals(1, issues.size());
Issue issue = issues.get(0);
assertEquals(IssueCodes.INCOMPATIBLE_TYPES, issue.getCode());
assertTrue(issue.getMessage(), issue.getMessage().contains("cannot convert implicit first argument from Object to E"));
assertEquals(content.indexOf("add"), issue.getOffset().intValue());
assertEquals(3, issue.getLength().intValue());
assertEquals(1, issue.getLineNumber().intValue());
}
use of org.eclipse.xtext.validation.Issue in project xtext-xtend by eclipse.
the class XtendQuickfixProvider method removeUnusedPrivateMember.
@Fix(IssueCodes.UNUSED_PRIVATE_MEMBER)
public void removeUnusedPrivateMember(final Issue issue, IssueResolutionAcceptor acceptor) {
// use the same label, description and image
// to be able to use the quickfixes (issue resolution) in batch mode
String label = "Remove member.";
String description = "Remove the unused private member.";
String image = "delete_edit.png";
acceptor.accept(issue, label, description, image, new IModification() {
@Override
public void apply(IModificationContext context) throws Exception {
final IXtextDocument document = context.getXtextDocument();
document.modify(new IUnitOfWork.Void<XtextResource>() {
@Override
public void process(XtextResource state) throws Exception {
final EObject element = state.getEObject(issue.getUriToProblem().fragment());
final ICompositeNode elementNode = NodeModelUtils.findActualNodeFor(element);
final Position elementPosition = new Position(elementNode.getOffset(), elementNode.getLength());
document.addPosition(elementPosition);
if (element instanceof XtendField) {
final JvmField field = associations.getJvmField((XtendField) element);
final List<Position> assignments = EcoreUtil2.eAllContentsAsList(element.eResource()).stream().filter(XAssignment.class::isInstance).map(XAssignment.class::cast).filter(assignment -> field == assignment.getFeature()).map(assignment -> {
final ICompositeNode assignmentNode = NodeModelUtils.findActualNodeFor(assignment);
final int offset = assignmentNode.getOffset();
final XExpression assignmentValue = assignment.getValue();
int length = assignmentNode.getLength();
if (expressionHelper.hasSideEffects(assignmentValue)) {
length -= NodeModelUtils.findActualNodeFor(assignmentValue).getLength();
}
return new Position(offset, length);
}).collect(Collectors.toList());
for (final Position assignment : assignments) {
document.addPosition(assignment);
}
for (final Position assignment : assignments) {
document.replace(assignment.getOffset(), assignment.getLength(), "");
}
}
document.replace(elementPosition.getOffset(), elementPosition.getLength(), "");
}
});
organizeImportsHandler.doOrganizeImports(document);
}
});
}
use of org.eclipse.xtext.validation.Issue in project xtext-eclipse by eclipse.
the class IssuesProvider method getPersistedIssues.
public List<Issue> getPersistedIssues(URI uri) {
List<Issue> result = Lists.newArrayList();
Iterable<Pair<IStorage, IProject>> storages = mapper.getStorages(uri);
for (Pair<IStorage, IProject> storageToProject : storages) {
IStorage iStorage = storageToProject.getFirst();
if (iStorage instanceof IFile) {
try {
IMarker[] markers;
markers = ((IFile) iStorage).findMarkers(EValidator.MARKER, true, 1);
for (IMarker iMarker : markers) {
Issue issue = issueUtil.createIssue(iMarker);
if (issue != null)
result.add(issue);
}
} catch (CoreException e) {
log.error(e.getMessage(), e);
}
}
}
return result;
}
Aggregations