/** * @since 2.8 */ protected StringBuilder doGetIssuesAsString(Resource resource, final Iterable<Issue> issues, StringBuilder result) { for (Issue issue : issues) { URI uri = issue.getUriToProblem(); result.append(issue.getSeverity()); result.append(" ("); result.append(issue.getCode()); result.append(") '"); result.append(issue.getMessage()); result.append("'"); if (uri != null) { EObject eObject = resource.getResourceSet().getEObject(uri, true); result.append(" on "); result.append(eObject.eClass().getName()); } result.append(", offset " + issue.getOffset() + ", length " + issue.getLength()); result.append("\n"); } return result; }
public void apply(IModificationContext context) throws BadLocationException { context.getXtextDocument().replace(issue.getOffset(), issue.getLength(), replacement); }
protected Map<Annotation, Position> getAnnotationsToAdd(Multimap<Position, Annotation> positionToAnnotations, List<Issue> issues, IProgressMonitor monitor) { if (monitor.isCanceled()) { return HashBiMap.create(); } Map<Annotation, Position> annotationToPosition = Maps.newHashMapWithExpectedSize(issues.size()); for (Issue issue : issues) { if (monitor.isCanceled()) { return annotationToPosition; } if (isSet(issue.getOffset()) && isSet(issue.getLength()) && issue.getMessage() != null) { String type = lookup.getAnnotationType(EValidator.MARKER, getMarkerSeverity(issue.getSeverity())); boolean isQuickfixable = false; if (issueResolutionProvider instanceof IssueResolutionProviderExtension) { isQuickfixable = ((IssueResolutionProviderExtension)issueResolutionProvider).hasResolutionFor(issue); } else { isQuickfixable = issueResolutionProvider.hasResolutionFor(issue.getCode()); } Annotation annotation = new XtextAnnotation(type, false, xtextDocument, issue, isQuickfixable); if (issue.getOffset() < 0 || issue.getLength() < 0) { LOG.error("Invalid annotation position offset=" + issue.getOffset() + " length = " + issue.getLength()); } Position position = new Position(Math.max(0, issue.getOffset()), Math.max(0, issue.getLength())); annotationToPosition.put(annotation, position); positionToAnnotations.put(position, annotation); } } return annotationToPosition; }
public ScriptParsingException addValidationIssues(Iterable<Issue> validationErrors) { for (Issue validationError : validationErrors) { this.getErrors().add( new ScriptError(validationError.getMessage(), validationError.getLineNumber(), validationError .getOffset(), validationError.getLength())); } return this; }
protected EReference getUnresolvedEReference(final Issue issue, EObject target) { final ICompositeNode node = NodeModelUtils.getNode(target); if (node==null) return null; ICompositeNode rootNode = node.getRootNode(); ILeafNode leaf = NodeModelUtils.findLeafNodeAtOffset(rootNode, issue.getOffset()); CrossReference crossReference = findCrossReference(target, leaf); if (crossReference != null) { return GrammarUtil.getReference(crossReference, target.eClass()); } return null; }
public int compare(MWEDiagnostic o1, MWEDiagnostic o2) { Issue issue1 = (Issue) o1.getElement(); Issue issue2 = (Issue) o2.getElement(); int lineNumberCompare = nullSafeCompare(issue1.getLineNumber(), issue2.getLineNumber()); if (lineNumberCompare != 0) { return lineNumberCompare; } int offsetCompare = nullSafeCompare(issue1.getOffset(), issue2.getOffset()); if (offsetCompare != 0) { return offsetCompare; } return Strings.notNull(o1.getMessage()).compareTo(Strings.notNull(o2.getMessage())); }
@Override public boolean apply(Issue input) { if (Strings.equal(input.getCode(), code) && input.getSeverity()==severity) { if ((offset < 0 || offset == input.getOffset()) && (length < 0 || length == input.getLength())) { EObject object = resource.getResourceSet().getEObject(input.getUriToProblem(), true); if (objectType.isInstance(object)) { for (String messagePart : messageParts) { if (!input.getMessage().toLowerCase().contains(messagePart.toLowerCase())) { return false; } } return true; } } } return false; } });
/** * Compute the validation result for the given document. This method should not be called * directly from the service dispatcher; use {@link #getResult(XtextWebDocumentAccess)} instead * in order to avoid duplicate computations. */ @Override public ValidationResult compute(final IXtextWebDocument it, final CancelIndicator cancelIndicator) { final List<Issue> issues = this.resourceValidator.validate(it.getResource(), CheckMode.ALL, cancelIndicator); final ValidationResult result = new ValidationResult(); final Function1<Issue, Boolean> _function = (Issue it_1) -> { Severity _severity = it_1.getSeverity(); return Boolean.valueOf((!Objects.equal(_severity, Severity.IGNORE))); }; final Consumer<Issue> _function_1 = (Issue issue) -> { List<ValidationResult.Issue> _issues = result.getIssues(); String _message = issue.getMessage(); String _translate = this.translate(issue.getSeverity()); Integer _lineNumber = issue.getLineNumber(); Integer _column = issue.getColumn(); Integer _offset = issue.getOffset(); Integer _length = issue.getLength(); ValidationResult.Issue _issue = new ValidationResult.Issue(_message, _translate, _lineNumber, _column, _offset, _length); _issues.add(_issue); }; IterableExtensions.<Issue>filter(issues, _function).forEach(_function_1); return result; }
/** * @since 2.0 */ protected void setMarkerAttributes(Issue issue, IResource resource, IMarker marker) throws CoreException { String lineNR = ""; if (issue.getLineNumber() != null) { lineNR = "line: " + issue.getLineNumber() + " "; } marker.setAttribute(IMarker.LOCATION, lineNR + resource.getFullPath().toString()); marker.setAttribute(Issue.CODE_KEY, issue.getCode()); marker.setAttribute(IMarker.SEVERITY, getSeverity(issue)); marker.setAttribute(IMarker.CHAR_START, issue.getOffset()); if(issue.getOffset() != null && issue.getLength() != null) marker.setAttribute(IMarker.CHAR_END, issue.getOffset()+issue.getLength()); marker.setAttribute(IMarker.LINE_NUMBER, issue.getLineNumber()); marker.setAttribute(IMarker.MESSAGE, issue.getMessage()); if (issue.getUriToProblem()!=null) marker.setAttribute(Issue.URI_KEY, issue.getUriToProblem().toString()); if(issue.getData() != null && issue.getData().length > 0) { marker.setAttribute(Issue.DATA_KEY, Strings.pack(issue.getData())); } if (resolutionProvider != null && resolutionProvider.hasResolutionFor(issue.getCode())) { marker.setAttribute(FIXABLE_KEY, true); } }