use of org.eclipse.xtext.validation.Issue in project xtext-eclipse by eclipse.
the class ReplAutoEdit method computeResultText.
protected String computeResultText(final IDocument document, final DocumentCommand command, XtextResource resource) throws BadLocationException {
if (resource.getContents().isEmpty())
return null;
if (!(resource.getContents().get(0) instanceof Model))
return null;
Model model = (Model) resource.getContents().get(0);
if (model.getBlock() == null)
return null;
EList<XExpression> expressions = model.getBlock().getExpressions();
if (expressions.isEmpty())
return null;
XExpression expression = expressions.get(expressions.size() - 1);
if (expression == null) {
return null;
}
ICompositeNode node = NodeModelUtils.getNode(expression);
if (node == null || document.getLineOfOffset(command.offset) + 1 != node.getEndLine())
return null;
List<Issue> issues = validator.validate(resource, CheckMode.NORMAL_AND_FAST, CancelIndicator.NullImpl);
if (issues.stream().anyMatch(i -> i.getSeverity() == Severity.ERROR)) {
return null;
}
XbaseInterpreter xbaseInterpreter = getConfiguredInterpreter(resource);
IEvaluationResult result = xbaseInterpreter.evaluate(model.getBlock(), new DefaultEvaluationContext(), new CancelIndicator() {
private long stopAt = System.currentTimeMillis() + 2000;
@Override
public boolean isCanceled() {
return System.currentTimeMillis() > stopAt;
}
});
if (result == null)
return null;
String value = "" + result.getResult();
if (result.getException() != null)
value = "threw " + result.getException().getClass().getSimpleName();
LightweightTypeReference expressionType = typeResolver.resolveTypes(expression).getActualType(expression);
if (expressionType != null) {
String newText = command.text + "// " + value + " (" + expressionType.getSimpleName() + ")" + command.text;
return newText;
}
return command.text + "// " + value;
}
use of org.eclipse.xtext.validation.Issue in project xtext-eclipse by eclipse.
the class ValidateActionHandler method execute.
@Override
public Object execute(ExecutionEvent event) throws ExecutionException {
XtextEditor xtextEditor = EditorUtils.getActiveXtextEditor(event);
if (xtextEditor != null) {
IXtextDocument xtextDocument = xtextEditor.getDocument();
IResource resource = xtextEditor.getResource();
if (resource != null) {
IValidationIssueProcessor issueProcessor = new MarkerIssueProcessor(resource, xtextEditor.getInternalSourceViewer().getAnnotationModel(), markerCreator, markerTypeProvider);
IValidationIssueProcessor issueProcessorFastIssues = new AnnotationIssueProcessor(xtextDocument, xtextEditor.getInternalSourceViewer().getAnnotationModel(), issueResolutionProvider);
ValidationJob validationJob = new ValidationJob(resourceValidator, xtextDocument, new IValidationIssueProcessor() {
@Override
public void processIssues(List<Issue> issues, IProgressMonitor monitor) {
List<Issue> fast = new ArrayList<Issue>();
for (Issue i : issues) {
if (CheckType.FAST == i.getType()) {
fast.add(i);
}
}
SubMonitor subMonitor = SubMonitor.convert(monitor, 2);
issueProcessor.processIssues(issues, subMonitor.split(1));
issueProcessorFastIssues.processIssues(fast, subMonitor.split(1));
}
}, CheckMode.ALL);
validationJob.schedule();
} else {
IValidationIssueProcessor issueProcessor = new AnnotationIssueProcessor(xtextDocument, xtextEditor.getInternalSourceViewer().getAnnotationModel(), issueResolutionProvider);
ValidationJob validationJob = new ValidationJob(resourceValidator, xtextDocument, issueProcessor, CheckMode.ALL);
validationJob.schedule();
}
}
return this;
}
use of org.eclipse.xtext.validation.Issue in project xtext-eclipse by eclipse.
the class Bug390595Test method testNoExceptionDuringResolutionCreation.
@Test
public void testNoExceptionDuringResolutionCreation() {
String code = // @formatter:off
"{\n" + "val n = newHashSet ( )\n" + "val m = newHashSet ( )\n" + "if ( n < m ) { }\n" + "}";
// @formatter:on
XtextResource resource = getResourceFor(new StringInputStream(code));
modificationContext.setDocument(getDocument(resource, code));
Issue issue = Iterables.getFirst(resourceValidator.validate(resource, CheckMode.ALL, CancelIndicator.NullImpl), null);
Iterables.getFirst(quickfixProvider.getResolutionsForLinkingIssue(issue), null);
}
use of org.eclipse.xtext.validation.Issue in project xtext-eclipse by eclipse.
the class ValidationInOsgiTest method testLambdaIssuesEmittedOnce.
@Test
public void testLambdaIssuesEmittedOnce() throws Exception {
XExpression expr = parser.parse("{ val list = #[] list.filter[it == null] }");
List<Issue> issues = helper.validate(expr);
Assert.assertEquals(1, issues.size());
}
use of org.eclipse.xtext.validation.Issue in project xtext-eclipse by eclipse.
the class XtextGrammarQuickfixProviderTest method assertAndApplySingleResolution.
private void assertAndApplySingleResolution(XtextEditor xtextEditor, String issueCode, int issueDataCount, String resolutionLabel, boolean isCleanAfterApply) {
IXtextDocument document = xtextEditor.getDocument();
List<Issue> issues = getIssues(document);
assertFalse(issues.toString(), issues.isEmpty());
Optional<Issue> issue = issues.stream().filter(i -> issueCode.equals(i.getCode())).findFirst();
assertTrue(issue.isPresent());
assertNotNull(issue.get().getData());
assertEquals(issueDataCount, issue.get().getData().length);
List<IssueResolution> resolutions = issueResolutionProvider.getResolutions(issue.get());
resolutions = resolutions.stream().filter(resolution -> resolutionLabel.equals(resolution.getLabel())).collect(Collectors.toList());
assertFalse(resolutions.isEmpty());
IssueResolution resolution = resolutions.iterator().next();
assertEquals(resolutionLabel, resolution.getLabel());
try {
resolution.apply();
assertEquals(getIssues(document).toString(), isCleanAfterApply, getIssues(document).isEmpty());
} finally {
// Save xtextEditor in any case. Otherwise test will stuck,
// because the "save changed resource dialog" waits for user input.
xtextEditor.doSave(new NullProgressMonitor());
}
}
Aggregations