Search in sources :

Example 91 with Issue

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;
}
Also used : Issue(org.eclipse.xtext.validation.Issue) LightweightTypeReference(org.eclipse.xtext.xbase.typesystem.references.LightweightTypeReference) IEvaluationResult(org.eclipse.xtext.xbase.interpreter.IEvaluationResult) DefaultEvaluationContext(org.eclipse.xtext.xbase.interpreter.impl.DefaultEvaluationContext) XbaseInterpreter(org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter) Model(org.eclipse.xtext.purexbase.pureXbase.Model) ICompositeNode(org.eclipse.xtext.nodemodel.ICompositeNode) XExpression(org.eclipse.xtext.xbase.XExpression) CancelIndicator(org.eclipse.xtext.util.CancelIndicator)

Example 92 with Issue

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;
}
Also used : Issue(org.eclipse.xtext.validation.Issue) XtextEditor(org.eclipse.xtext.ui.editor.XtextEditor) SubMonitor(org.eclipse.core.runtime.SubMonitor) AnnotationIssueProcessor(org.eclipse.xtext.ui.editor.validation.AnnotationIssueProcessor) ValidationJob(org.eclipse.xtext.ui.editor.validation.ValidationJob) IValidationIssueProcessor(org.eclipse.xtext.ui.editor.validation.IValidationIssueProcessor) IProgressMonitor(org.eclipse.core.runtime.IProgressMonitor) ArrayList(java.util.ArrayList) List(java.util.List) IResource(org.eclipse.core.resources.IResource) MarkerIssueProcessor(org.eclipse.xtext.ui.editor.validation.MarkerIssueProcessor) IXtextDocument(org.eclipse.xtext.ui.editor.model.IXtextDocument)

Example 93 with Issue

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);
}
Also used : StringInputStream(org.eclipse.xtext.util.StringInputStream) Issue(org.eclipse.xtext.validation.Issue) XtextResource(org.eclipse.xtext.resource.XtextResource) Test(org.junit.Test)

Example 94 with Issue

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());
}
Also used : Issue(org.eclipse.xtext.validation.Issue) XExpression(org.eclipse.xtext.xbase.XExpression) Test(org.junit.Test)

Example 95 with Issue

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());
    }
}
Also used : Arrays(java.util.Arrays) ValidationJob(org.eclipse.xtext.ui.editor.validation.ValidationJob) MarkerResolutionGenerator(org.eclipse.xtext.ui.editor.quickfix.MarkerResolutionGenerator) RunWith(org.junit.runner.RunWith) CoreException(org.eclipse.core.runtime.CoreException) XtextRunner(org.eclipse.xtext.testing.XtextRunner) RuleWithoutInstantiationInspector(org.eclipse.xtext.xtext.RuleWithoutInstantiationInspector) XtextConfigurableIssueCodes(org.eclipse.xtext.xtext.XtextConfigurableIssueCodes) ArrayList(java.util.ArrayList) OperationCanceledException(org.eclipse.core.runtime.OperationCanceledException) Lists(com.google.common.collect.Lists) IProject(org.eclipse.core.resources.IProject) AbstractQuickfixTest(org.eclipse.xtext.ui.testing.AbstractQuickfixTest) IResourcesSetupUtil(org.eclipse.xtext.ui.testing.util.IResourcesSetupUtil) PartInitException(org.eclipse.ui.PartInitException) XtextEditor(org.eclipse.xtext.ui.editor.XtextEditor) IFile(org.eclipse.core.resources.IFile) XtextDocument(org.eclipse.xtext.ui.editor.model.XtextDocument) XtextUiInjectorProvider(org.eclipse.xtext.xtext.ui.XtextUiInjectorProvider) IMarker(org.eclipse.core.resources.IMarker) Before(org.junit.Before) XtextResource(org.eclipse.xtext.resource.XtextResource) WorkbenchMarkerResolution(org.eclipse.ui.views.markers.WorkbenchMarkerResolution) IUnitOfWork(org.eclipse.xtext.util.concurrent.IUnitOfWork) Job(org.eclipse.core.runtime.jobs.Job) Strings(org.eclipse.xtext.util.Strings) Test(org.junit.Test) XtextLinkingDiagnosticMessageProvider(org.eclipse.xtext.xtext.XtextLinkingDiagnosticMessageProvider) Collectors(java.util.stream.Collectors) IssueResolution(org.eclipse.xtext.ui.editor.quickfix.IssueResolution) InternalBuilderTest(org.eclipse.xtext.junit4.internal.InternalBuilderTest) List(java.util.List) Issue(org.eclipse.xtext.validation.Issue) NullProgressMonitor(org.eclipse.core.runtime.NullProgressMonitor) InjectWith(org.eclipse.xtext.testing.InjectWith) IResource(org.eclipse.core.resources.IResource) Optional(java.util.Optional) IXtextDocument(org.eclipse.xtext.ui.editor.model.IXtextDocument) MarkerTypes(org.eclipse.xtext.ui.MarkerTypes) Assert(org.junit.Assert) IMarkerResolution(org.eclipse.ui.IMarkerResolution) CheckMode(org.eclipse.xtext.validation.CheckMode) NullProgressMonitor(org.eclipse.core.runtime.NullProgressMonitor) Issue(org.eclipse.xtext.validation.Issue) IssueResolution(org.eclipse.xtext.ui.editor.quickfix.IssueResolution) IXtextDocument(org.eclipse.xtext.ui.editor.model.IXtextDocument)

Aggregations

Issue (org.eclipse.xtext.validation.Issue)108 Test (org.junit.Test)40 XtextResource (org.eclipse.xtext.resource.XtextResource)35 Resource (org.eclipse.emf.ecore.resource.Resource)23 List (java.util.List)20 IResourceValidator (org.eclipse.xtext.validation.IResourceValidator)20 URI (org.eclipse.emf.common.util.URI)16 ArrayList (java.util.ArrayList)12 XtextResourceSet (org.eclipse.xtext.resource.XtextResourceSet)12 IFile (org.eclipse.core.resources.IFile)11 XtendFile (org.eclipse.xtend.core.xtend.XtendFile)11 IXtextDocument (org.eclipse.xtext.ui.editor.model.IXtextDocument)11 IssueResolution (org.eclipse.xtext.ui.editor.quickfix.IssueResolution)11 XtextEditor (org.eclipse.xtext.ui.editor.XtextEditor)10 Severity (org.eclipse.xtext.diagnostics.Severity)9 IOException (java.io.IOException)8 CoreException (org.eclipse.core.runtime.CoreException)8 ResourceSet (org.eclipse.emf.ecore.resource.ResourceSet)8 StringInputStream (org.eclipse.xtext.util.StringInputStream)8 EObject (org.eclipse.emf.ecore.EObject)6