Search in sources :

Example 1 with DefaultEvaluationContext

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;
}
Also used : Issue(org.eclipse.xtext.validation.Issue) LightweightTypeReference(org.eclipse.xtext.xbase.typesystem.references.LightweightTypeReference) IEvaluationResult(org.eclipse.xtext.xbase.interpreter.IEvaluationResult) DefaultEvaluationContext(org.eclipse.xtext.xbase.interpreter.impl.DefaultEvaluationContext) XbaseInterpreter(org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter) Model(org.eclipse.xtext.purexbase.pureXbase.Model) ICompositeNode(org.eclipse.xtext.nodemodel.ICompositeNode) XExpression(org.eclipse.xtext.xbase.XExpression) CancelIndicator(org.eclipse.xtext.util.CancelIndicator)

Aggregations

ICompositeNode (org.eclipse.xtext.nodemodel.ICompositeNode)1 Model (org.eclipse.xtext.purexbase.pureXbase.Model)1 CancelIndicator (org.eclipse.xtext.util.CancelIndicator)1 Issue (org.eclipse.xtext.validation.Issue)1 XExpression (org.eclipse.xtext.xbase.XExpression)1 IEvaluationResult (org.eclipse.xtext.xbase.interpreter.IEvaluationResult)1 DefaultEvaluationContext (org.eclipse.xtext.xbase.interpreter.impl.DefaultEvaluationContext)1 XbaseInterpreter (org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter)1 LightweightTypeReference (org.eclipse.xtext.xbase.typesystem.references.LightweightTypeReference)1