/*******************************************************************************
* Copyright (c) 2015 Bruno Medeiros and other Contributors.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Bruno Medeiros - initial API and implementation
*******************************************************************************/
package melnorme.lang.tooling.common;
import static melnorme.utilbox.core.Assert.AssertNamespace.assertNotNull;
import static melnorme.utilbox.core.CoreUtil.areEqual;
import java.util.Comparator;
import melnorme.lang.tooling.ast.ParserErrorTypes;
import melnorme.lang.tooling.ast.SourceRange;
import melnorme.utilbox.status.Severity;
public class ParserError {
public final ParserErrorTypes errorType;
public final Severity severity;
public final SourceRange sourceRange;
public final String msgErrorSource;
public final Object msgData;
public ParserError(ParserErrorTypes errorType, SourceRange sourceRange,
String msgErrorSource, Object msgData) {
this(errorType, Severity.ERROR, sourceRange, msgErrorSource, msgData);
}
public ParserError(ParserErrorTypes errorType, Severity severity, SourceRange sourceRange,
String msgErrorSource, Object msgData) {
this.errorType = assertNotNull(errorType);
this.severity = assertNotNull(severity);
this.sourceRange = assertNotNull(sourceRange);
this.msgErrorSource = msgErrorSource;
this.msgData = msgData;
}
public int getOffset() {
return sourceRange.getOffset();
}
public int getLength() {
return sourceRange.getLength();
}
public int getStartPos() {
return getOffset();
}
public int getEndPos() {
return getOffset() + getLength();
}
public SourceRange getSourceRange() {
return sourceRange;
}
public Severity getSeverity() {
return severity;
}
@Override
public boolean equals(Object obj) {
if(!(obj instanceof ParserError))
return false;
ParserError other = (ParserError) obj;
return
areEqual(errorType, other.errorType) &&
areEqual(sourceRange, other.sourceRange) &&
areEqual(msgErrorSource, other.msgErrorSource) &&
areEqual(msgData, other.msgData);
}
public static final class ErrorSourceRangeComparator implements Comparator<ParserError> {
@Override
public int compare(ParserError o1, ParserError o2) {
int compareResult = o1.sourceRange.compareTo(o2.sourceRange);
return compareResult;
}
}
@Override
public String toString() {
return "ERROR:" + errorType + sourceRange.toString() +
(msgErrorSource == null ? "" : ("【"+msgErrorSource+"】")) + "("+msgData+")";
}
public String getUserMessage() {
return errorType.getUserMessage(this);
}
}