use of org.eclipse.xtext.xbase.interpreter.impl.DefaultEvaluationContext in project xtext-eclipse by eclipse.
the class ReplAutoEdit method computeResultText.
protected String computeResultText(final IDocument document, final DocumentCommand command, XtextResource resource) throws BadLocationException {
if (resource.getContents().isEmpty())
return null;
if (!(resource.getContents().get(0) instanceof Model))
return null;
Model model = (Model) resource.getContents().get(0);
if (model.getBlock() == null)
return null;
EList<XExpression> expressions = model.getBlock().getExpressions();
if (expressions.isEmpty())
return null;
XExpression expression = expressions.get(expressions.size() - 1);
if (expression == null) {
return null;
}
ICompositeNode node = NodeModelUtils.getNode(expression);
if (node == null || document.getLineOfOffset(command.offset) + 1 != node.getEndLine())
return null;
List<Issue> issues = validator.validate(resource, CheckMode.NORMAL_AND_FAST, CancelIndicator.NullImpl);
if (issues.stream().anyMatch(i -> i.getSeverity() == Severity.ERROR)) {
return null;
}
XbaseInterpreter xbaseInterpreter = getConfiguredInterpreter(resource);
IEvaluationResult result = xbaseInterpreter.evaluate(model.getBlock(), new DefaultEvaluationContext(), new CancelIndicator() {
private long stopAt = System.currentTimeMillis() + 2000;
@Override
public boolean isCanceled() {
return System.currentTimeMillis() > stopAt;
}
});
if (result == null)
return null;
String value = "" + result.getResult();
if (result.getException() != null)
value = "threw " + result.getException().getClass().getSimpleName();
LightweightTypeReference expressionType = typeResolver.resolveTypes(expression).getActualType(expression);
if (expressionType != null) {
String newText = command.text + "// " + value + " (" + expressionType.getSimpleName() + ")" + command.text;
return newText;
}
return command.text + "// " + value;
}
Aggregations