/*******************************************************************************
* Copyright (c) 2005, 2007 committers of openArchitectureWare and others.
* 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:
* committers of openArchitectureWare - initial API and implementation
*******************************************************************************/
package org.eclipse.xtend.expression;
import org.eclipse.internal.xtend.expression.ast.SyntaxElement;
/**
* @author Sven Efftinge (http://www.efftinge.de)
* @author Arno Haase
*/
public class AnalysationIssue {
private enum AnalysationIssueSeverity {
WARNING, ERROR
}
public final static class AnalysationIssueType {
String name;
public AnalysationIssueType(final String name) {
this.name = name;
}
@Override
public String toString() {
return name;
}
}
public final static AnalysationIssueType INCOMPATIBLE_TYPES = new AnalysationIssueType("Incompatible types");
public final static AnalysationIssueType UNNECESSARY_CAST = new AnalysationIssueType("Unnecessary cast");
public final static AnalysationIssueType FEATURE_NOT_FOUND = new AnalysationIssueType("Callable not found");
public static final AnalysationIssueType TYPE_NOT_FOUND = new AnalysationIssueType("AnalysationIssueType not found");
public static final AnalysationIssueType INTERNAL_ERROR = new AnalysationIssueType("Internal error");
public static final AnalysationIssueType JAVA_TYPE_NOT_FOUND = new AnalysationIssueType(
"Java AnalysationIssueType not found");
public static final AnalysationIssueType SYNTAX_ERROR = new AnalysationIssueType("Syntax error");
public static final AnalysationIssueType RESOURCE_NOT_FOUND = new AnalysationIssueType("Resource not found");
private final AnalysationIssueType analysationIssueType;
private final String message;
private final SyntaxElement element;
private final AnalysationIssueSeverity severity;
private int onLine;
public AnalysationIssue(final AnalysationIssueType analysationIssueType, final String message,
final SyntaxElement element) {
this(analysationIssueType, message, element, false);
}
public AnalysationIssue(final AnalysationIssueType analysationIssueType, final String message,
final SyntaxElement element, boolean warning) {
if (analysationIssueType == null || message == null || message.length() == 0 || element == null)
throw new IllegalArgumentException();
this.analysationIssueType = analysationIssueType;
this.message = message;
this.element = element;
if (warning) {
severity = AnalysationIssueSeverity.WARNING;
}
else {
severity = AnalysationIssueSeverity.ERROR;
}
}
public AnalysationIssue(final AnalysationIssueType analysationIssueType, final String message,
final SyntaxElement element, boolean warning, int onLine) {
if (analysationIssueType == null || message == null || message.length() == 0 || element == null)
throw new IllegalArgumentException();
this.analysationIssueType = analysationIssueType;
this.message = message;
this.element = element;
if (warning) {
severity = AnalysationIssueSeverity.WARNING;
}
else {
severity = AnalysationIssueSeverity.ERROR;
}
this.onLine = onLine;
}
public SyntaxElement getElement() {
return element;
}
public String getMessage() {
return message;
}
public AnalysationIssueType getType() {
return analysationIssueType;
}
public boolean isError() {
return severity == AnalysationIssueSeverity.ERROR;
}
public boolean isWarning() {
return severity == AnalysationIssueSeverity.WARNING;
}
public int getOnLine() {
return onLine;
}
@Override
public String toString() {
return new StringBuilder()
.append("[")
.append(analysationIssueType.name)
.append("] - ")
.append(message)
.append(" : ")
.append(element)
.toString();
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((analysationIssueType == null) ? 0 : analysationIssueType.hashCode());
result = prime * result + ((element == null) ? 0 : element.hashCode());
result = prime * result + ((message == null) ? 0 : message.hashCode());
result = prime * result + onLine;
result = prime * result + ((severity == null) ? 0 : severity.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
AnalysationIssue other = (AnalysationIssue) obj;
if (analysationIssueType == null) {
if (other.analysationIssueType != null)
return false;
} else if (!analysationIssueType.equals(other.analysationIssueType))
return false;
if (element == null) {
if (other.element != null)
return false;
} else if (!element.equals(other.element))
return false;
else if (other.element.getStart() != element.getStart())
return false;
if (message == null) {
if (other.message != null)
return false;
} else if (!message.equals(other.message))
return false;
if (onLine != other.onLine)
return false;
if (severity != other.severity)
return false;
return true;
}
// @Override
// public boolean equals(Object obj) {
// if (obj == null) {
// return false;
// }
// if (obj == this) {
// return true;
// }
// if (obj.getClass() != getClass()) {
// return false;
// }
// AnalysationIssue rhs = (AnalysationIssue) obj;
// return new EqualsBuilder().append(analysationIssueType, rhs.analysationIssueType).append(element, rhs.element)
// .append(message, rhs.message).append(onLine,rhs.getOnLine()).isEquals();
// }
//
// @Override
// public int hashCode() {
// return new HashCodeBuilder().append(analysationIssueType).append(element).append(message).append(onLine).toHashCode();
// }
}