package org.example.expressions.ui.hover;
import com.google.inject.Inject;
import java.util.List;
import org.eclipse.emf.common.util.Diagnostic;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.ecore.util.Diagnostician;
import org.eclipse.emf.ecore.util.EcoreUtil;
import org.eclipse.xtend2.lib.StringConcatenation;
import org.eclipse.xtext.ui.editor.hover.html.DefaultEObjectHoverProvider;
import org.eclipse.xtext.xbase.lib.Extension;
import org.example.expressions.expressions.AbstractElement;
import org.example.expressions.interpreter.ExpressionsInterpreter;
import org.example.expressions.typing.ExpressionsType;
import org.example.expressions.typing.ExpressionsTypeProvider;
@SuppressWarnings("all")
public class ExpressionsEObjectHoverProvider extends DefaultEObjectHoverProvider {
@Inject
@Extension
private ExpressionsTypeProvider _expressionsTypeProvider;
@Inject
@Extension
private ExpressionsInterpreter _expressionsInterpreter;
@Override
public String getHoverInfoAsHtml(final EObject o) {
boolean _and = false;
if (!(o instanceof AbstractElement)) {
_and = false;
} else {
boolean _programHasNoError = this.programHasNoError(o);
_and = _programHasNoError;
}
if (_and) {
final AbstractElement elem = ((AbstractElement) o);
StringConcatenation _builder = new StringConcatenation();
_builder.append("<p>");
_builder.newLine();
_builder.append("type : <b>");
ExpressionsType _typeFor = this._expressionsTypeProvider.typeFor(elem);
String _string = _typeFor.toString();
_builder.append(_string, "");
_builder.append("</b> <br>");
_builder.newLineIfNotEmpty();
_builder.append("value : <b>");
Object _interpret = this._expressionsInterpreter.interpret(elem);
String _string_1 = _interpret.toString();
_builder.append(_string_1, "");
_builder.append("</b>");
_builder.newLineIfNotEmpty();
_builder.append("</p>");
_builder.newLine();
return _builder.toString();
} else {
return super.getHoverInfoAsHtml(o);
}
}
public boolean programHasNoError(final EObject o) {
EObject _rootContainer = EcoreUtil.getRootContainer(o);
Diagnostic _validate = Diagnostician.INSTANCE.validate(_rootContainer);
List<Diagnostic> _children = _validate.getChildren();
return _children.isEmpty();
}
}