Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAndré Arnold2011-05-16 05:58:43 +0000
committerAndré Arnold2011-05-16 05:58:43 +0000
commit78b616e167fc7a69385d09e371c6e7dea01bef1e (patch)
tree1a9637d4423bc12adffabab7fddde806090d8c13 /plugins/org.eclipse.xtend.backend/src
parentfbc4c8c03352497c01d2c4eb727453346f5baae8 (diff)
downloadorg.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')
-rw-r--r--plugins/org.eclipse.xtend.backend/src/org/eclipse/xtend/backend/common/FutureResultHolder.java41
-rw-r--r--plugins/org.eclipse.xtend.backend/src/org/eclipse/xtend/backend/expr/DeferredEvalExpression.java4
-rw-r--r--plugins/org.eclipse.xtend.backend/src/org/eclipse/xtend/backend/syslib/FileIoOperations.java15
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();

Back to the top