diff options
author | André Arnold | 2011-05-16 05:58:43 +0000 |
---|---|---|
committer | André Arnold | 2011-05-16 05:58:43 +0000 |
commit | 78b616e167fc7a69385d09e371c6e7dea01bef1e (patch) | |
tree | 1a9637d4423bc12adffabab7fddde806090d8c13 /plugins/org.eclipse.xtend.backend/src | |
parent | fbc4c8c03352497c01d2c4eb727453346f5baae8 (diff) | |
download | org.eclipse.xpand-78b616e167fc7a69385d09e371c6e7dea01bef1e.tar.gz org.eclipse.xpand-78b616e167fc7a69385d09e371c6e7dea01bef1e.tar.xz org.eclipse.xpand-78b616e167fc7a69385d09e371c6e7dea01bef1e.zip |
Fixed DeferredEvalExpression
Diffstat (limited to 'plugins/org.eclipse.xtend.backend/src')
3 files changed, 54 insertions, 6 deletions
diff --git a/plugins/org.eclipse.xtend.backend/src/org/eclipse/xtend/backend/common/FutureResultHolder.java b/plugins/org.eclipse.xtend.backend/src/org/eclipse/xtend/backend/common/FutureResultHolder.java index 720218ae..8d01e703 100644 --- a/plugins/org.eclipse.xtend.backend/src/org/eclipse/xtend/backend/common/FutureResultHolder.java +++ b/plugins/org.eclipse.xtend.backend/src/org/eclipse/xtend/backend/common/FutureResultHolder.java @@ -15,13 +15,36 @@ public class FutureResultHolder { private Object _value; private QualifiedName _name; private boolean _isReady = false; + private Function _function; + private ExpressionBase _expression; public FutureResultHolder() { + + } + + public FutureResultHolder(Function function) { + _function = function; + } + + public FutureResultHolder(ExpressionBase expression) { + _expression = expression; } - public FutureResultHolder(QualifiedName name) { + public FutureResultHolder(QualifiedName name, Function function) { super(); _name = name; + _function = function; + } + + public Object evaluate (ExecutionContext ctx) throws FutureResultNotReadyException { + if (_function != null) { + return _function.invoke (ctx, new Object[]{}); + } else if (_expression != null) { + _expression.evaluate (ctx); + } else { + throw new FutureResultNotReadyException(); + } + return null; } public Object getValue () throws FutureResultNotReadyException { @@ -43,6 +66,22 @@ public class FutureResultHolder { return _isReady; } + public Function getFunction() { + return _function; + } + + public void setFunction(Function _function) { + this._function = _function; + } + + public ExpressionBase getExpression() { + return _expression; + } + + public void setExpression(ExpressionBase _expression) { + this._expression = _expression; + } + @Override public String toString () { if (!_isReady) diff --git a/plugins/org.eclipse.xtend.backend/src/org/eclipse/xtend/backend/expr/DeferredEvalExpression.java b/plugins/org.eclipse.xtend.backend/src/org/eclipse/xtend/backend/expr/DeferredEvalExpression.java index 53a8cd65..dfc22d8c 100644 --- a/plugins/org.eclipse.xtend.backend/src/org/eclipse/xtend/backend/expr/DeferredEvalExpression.java +++ b/plugins/org.eclipse.xtend.backend/src/org/eclipse/xtend/backend/expr/DeferredEvalExpression.java @@ -31,14 +31,14 @@ public class DeferredEvalExpression extends ExpressionBase { @Override protected Object evaluateInternal(ExecutionContext ctx) { - _result = new FutureResultHolder(); + _result = new FutureResultHolder (_inner); return _result; } public FutureResultHolder evalDeferred (ExecutionContext ctx) { if (_result == null) throw new IllegalStateException(getClass().getSimpleName() + ": FutureResultHolder not initialized, evaluateInternal() must be called first."); - _result.setValue(_inner.evaluate(ctx)); + _result.evaluate (ctx); return _result; } diff --git a/plugins/org.eclipse.xtend.backend/src/org/eclipse/xtend/backend/syslib/FileIoOperations.java b/plugins/org.eclipse.xtend.backend/src/org/eclipse/xtend/backend/syslib/FileIoOperations.java index 21a566cf..d8d048bc 100644 --- a/plugins/org.eclipse.xtend.backend/src/org/eclipse/xtend/backend/syslib/FileIoOperations.java +++ b/plugins/org.eclipse.xtend.backend/src/org/eclipse/xtend/backend/syslib/FileIoOperations.java @@ -19,6 +19,7 @@ import java.util.Map; import org.eclipse.xtend.backend.common.FutureResultHolder; import org.eclipse.xtend.backend.common.EfficientLazyString; import org.eclipse.xtend.backend.util.ErrorHandler; +import org.eclipse.xtend.middleend.javaannotations.AbstractExecutionContextAware; /** @@ -31,7 +32,7 @@ import org.eclipse.xtend.backend.util.ErrorHandler; * * @author Arno Haase (http://www.haase-consulting.com) */ -public final class FileIoOperations { +public final class FileIoOperations extends AbstractExecutionContextAware { private Map<String, Outlet> _outlets = new HashMap<String, Outlet>(); public static final String DEFAULT_OUTLET_NAME = "OUT"; @@ -144,7 +145,14 @@ public final class FileIoOperations { try { final Outlet outlet = _outlets.get (outletName); - CharSequence evaluatedContent = content.toString(); + CharSequence evaluatedContent = null; + if (content.isReady()) { + evaluatedContent = content.toString(); + } else { + final Object result = content.evaluate (_ctx); + if (result instanceof CharSequence) + evaluatedContent = (CharSequence) result; + } if (outlet == null) throw new IllegalArgumentException ("no outlet '" + outletName + "' was registered."); @@ -154,7 +162,8 @@ public final class FileIoOperations { final Writer w = outlet.createWriter (fileName, append); try { - w.write (evaluatedContent.toString()); + if (evaluatedContent != null) + w.write (evaluatedContent.toString()); } finally { w.close(); |