package de.unidue.ecg.common.linking;
import com.google.common.base.Objects;
import org.eclipse.emf.ecore.EClass;
import org.eclipse.emf.ecore.EClassifier;
import org.eclipse.emf.ecore.EReference;
import org.eclipse.xtext.diagnostics.Diagnostic;
import org.eclipse.xtext.diagnostics.DiagnosticMessage;
import org.eclipse.xtext.diagnostics.Severity;
import org.eclipse.xtext.linking.ILinkingDiagnosticMessageProvider;
import org.eclipse.xtext.linking.impl.IllegalNodeException;
import org.eclipse.xtext.linking.impl.LinkingDiagnosticMessageProvider;
import org.eclipse.xtext.nodemodel.INode;
import org.eclipse.xtext.util.Strings;
import org.eclipse.xtext.validation.Issue;
import org.eclipse.xtext.xbase.lib.Exceptions;
@SuppressWarnings("all")
public class CustomLinkingDiagnosticMessageProvider extends LinkingDiagnosticMessageProvider {
public DiagnosticMessage getUnresolvedProxyMessage(final ILinkingDiagnosticMessageProvider.ILinkingDiagnosticContext context) {
EReference _reference = context.getReference();
final EClass referenceType = _reference.getEReferenceType();
String linkText = "";
try {
String _linkText = context.getLinkText();
linkText = _linkText;
} catch (final Throwable _t) {
if (_t instanceof IllegalNodeException) {
final IllegalNodeException e = (IllegalNodeException)_t;
INode _node = e.getNode();
String _text = _node.getText();
linkText = _text;
} else {
throw Exceptions.sneakyThrow(_t);
}
}
String _name = referenceType.getName();
String _plus = ("Couldn\'t resolve reference to " + _name);
String _plus_1 = (_plus + " \'");
String _plus_2 = (_plus_1 + linkText);
final String msg = (_plus_2 + "\'.");
String _name_1 = referenceType.getName();
DiagnosticMessage _diagnosticMessage = new DiagnosticMessage(msg, Severity.ERROR, Diagnostic.LINKING_DIAGNOSTIC, _name_1, linkText);
return _diagnosticMessage;
}
/**
* Method for Linking diagnostics which contain the EClass name and the link
* text as user data.
*
* @param issue
* @param eClassifier
* @return
*/
public String getLinkText(final Issue issue, final EClassifier eClassifier) {
boolean _or = false;
String[] _data = issue.getData();
boolean _equals = Objects.equal(_data, null);
if (_equals) {
_or = true;
} else {
String[] _data_1 = issue.getData();
int _length = _data_1.length;
boolean _lessThan = (_length < 2);
_or = (_equals || _lessThan);
}
if (_or) {
return null;
}
String[] _data_2 = issue.getData();
final String refClass = _data_2[0];
String[] _data_3 = issue.getData();
final String linkText = _data_3[1];
boolean _or_1 = false;
boolean _isEmpty = Strings.isEmpty(linkText);
if (_isEmpty) {
_or_1 = true;
} else {
boolean _isEmpty_1 = Strings.isEmpty(refClass);
_or_1 = (_isEmpty || _isEmpty_1);
}
if (_or_1) {
return null;
}
String _name = eClassifier.getName();
boolean _equals_1 = refClass.equals(_name);
if (_equals_1) {
return linkText;
}
return null;
}
}