/* * Copyright (c) 2012 Sam Harwell, Tunnel Vision Laboratories LLC * All rights reserved. * * The source code of this document is proprietary work, and is not licensed for * distribution. For information about licensing, contact Sam Harwell at: * sam@tunnelvisionlabs.com */ package org.antlr.works.editor.antlr4.parsing; import org.antlr.netbeans.editor.parsing.SyntaxError; import org.antlr.netbeans.editor.text.DocumentSnapshot; import org.antlr.netbeans.editor.text.OffsetRegion; import org.antlr.netbeans.editor.text.SnapshotPositionRegion; import org.antlr.v4.runtime.RecognitionException; import org.antlr.v4.runtime.Token; import org.netbeans.api.annotations.common.NonNull; import org.netbeans.spi.editor.hints.Severity; import org.openide.util.Parameters; /** * * @author Sam Harwell */ public class AntlrSyntaxErrorV4 extends SyntaxError { private final Token offendingToken; private final RecognitionException exception; public AntlrSyntaxErrorV4(@NonNull DocumentSnapshot snapshot, Token offendingToken, RecognitionException exception, String message, Severity severity) { super(getLocationFromToken(snapshot, offendingToken, exception), message, severity); this.offendingToken = offendingToken; this.exception = exception; } private static SnapshotPositionRegion getLocationFromToken(@NonNull DocumentSnapshot snapshot, Token offendingToken, RecognitionException exception) { Parameters.notNull("snapshot", snapshot); if (offendingToken != null) { int startOffset = offendingToken.getStartIndex(); int endOffset = offendingToken.getStopIndex() + 1; if (startOffset < 0 || endOffset + 1 < startOffset) { return new SnapshotPositionRegion(snapshot, 0, 0); } startOffset = Math.min(startOffset, snapshot.length()); endOffset = Math.min(endOffset, snapshot.length()); OffsetRegion offsetRegion = OffsetRegion.fromBounds(startOffset, endOffset); return new SnapshotPositionRegion(snapshot, offsetRegion); } return new SnapshotPositionRegion(snapshot, 0, 0); } public Token getOffendingToken() { return offendingToken; } public RecognitionException getException() { return exception; } }