Revision 47017 trunk/org.gvsig.desktop/org.gvsig.desktop.library/org.gvsig.expressionevaluator/org.gvsig.expressionevaluator.lib/org.gvsig.expressionevaluator.lib.impl/src/main/java/org/gvsig/expressionevaluator/impl/function/programming/ForEachFunction.java
ForEachFunction.java | ||
---|---|---|
1 | 1 |
package org.gvsig.expressionevaluator.impl.function.programming; |
2 | 2 |
|
3 |
import java.util.Objects; |
|
3 | 4 |
import org.apache.commons.lang3.Range; |
4 | 5 |
import org.gvsig.expressionevaluator.Codes; |
5 | 6 |
import org.gvsig.expressionevaluator.Function; |
... | ... | |
7 | 8 |
import org.gvsig.expressionevaluator.spi.AbstractFunction; |
8 | 9 |
import org.gvsig.expressionevaluator.ExpressionRuntimeException; |
9 | 10 |
import org.gvsig.expressionevaluator.MutableSymbolTable; |
11 |
import org.gvsig.expressionevaluator.impl.function.programming.BreakFunction.BreakException; |
|
12 |
import org.gvsig.expressionevaluator.impl.function.programming.ReturnFunction.ReturnException; |
|
10 | 13 |
|
11 | 14 |
public class ForEachFunction extends AbstractFunction { |
12 | 15 |
|
... | ... | |
56 | 59 |
|
57 | 60 |
Object body = null; |
58 | 61 |
String varname = getObject(interpreter, args, 0).toString(); |
59 |
|
|
62 |
int argn = 1; |
|
60 | 63 |
Iterable iterable = (Iterable) getObject(interpreter, args, 1); |
61 | 64 |
for (Object value : iterable) { |
62 | 65 |
symbolTable.setVar(varname, value); |
63 |
body = getObject(interpreter, args, 2); |
|
66 |
try { |
|
67 |
Object x = getObject(interpreter, args, 2); |
|
68 |
body = x; |
|
69 |
} catch(BreakException ex) { |
|
70 |
break; |
|
71 |
} catch(ReturnException ex) { |
|
72 |
throw ex; |
|
73 |
} catch(Exception ex) { |
|
74 |
String stmt = "unknown"; |
|
75 |
try { |
|
76 |
stmt = Objects.toString(args); |
|
77 |
} catch(Exception ex2) { |
|
78 |
|
|
79 |
} |
|
80 |
LOGGER.warn("Error in foreach function calling arg "+ argn + ", "+ stmt, ex); |
|
81 |
throw ex; |
|
82 |
} |
|
83 |
argn++; |
|
64 | 84 |
} |
65 | 85 |
return body; |
66 | 86 |
} |
Also available in: Unified diff