blob: 2c8321fd82289ac027b573d98155b9db1814cd39 [file] [log] [blame]
/*
* Copyright (c) 2011 Google Inc.
*
* 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
*/
package com.google.eclipse.protobuf.linking;
import static java.util.Arrays.copyOf;
import static org.eclipse.xtext.util.Arrays.contains;
import static com.google.common.base.Objects.equal;
import org.eclipse.xtext.diagnostics.AbstractDiagnostic;
import org.eclipse.xtext.diagnostics.Diagnostic;
import org.eclipse.xtext.nodemodel.INode;
import com.google.common.base.Objects;
/**
* <code>{@link Diagnostic}</code> that supports appending text to its message.
*
* @author alruiz@google.com (Alex Ruiz)
*/
public class ProtobufDiagnostic extends AbstractDiagnostic {
private final String code;
private final String[] data;
private final StringBuilder message;
private final INode node;
public ProtobufDiagnostic(String code, String[] data, String message, INode node) {
if (data == null) {
throw new NullPointerException("The given array should not be null");
}
if (contains(data, null)) {
throw new IllegalArgumentException("The given array should not contain null elements");
}
if (node == null) {
throw new NullPointerException("The given node should not be null");
}
this.code = code;
this.data = copyOf(data, data.length);
this.message = new StringBuilder();
this.message.append(message);
this.node = node;
}
@Override public String getCode() {
return code;
}
@Override public String[] getData() {
return copyOf(data, data.length);
}
@Override public String getMessage() {
return message.toString();
}
@Override protected INode getNode() {
return node;
}
/**
* Appends the given text to this diagnostic's message.
* @param s the text to append.
*/
public void appendToMessage(String s) {
message.append(s);
}
@Override public int hashCode() {
return Objects.hashCode(message, node);
}
@Override public boolean equals(Object obj) {
if (this == obj) {
return true;
}
if (obj == null || getClass() != obj.getClass()) {
return false;
}
ProtobufDiagnostic other = (ProtobufDiagnostic) obj;
if (!equal(message, other.message)) {
return false;
}
return equal(node, other.node);
}
}