Revision 47734 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

View differences:

ForEachFunction.java
10 10
import org.gvsig.expressionevaluator.ExpressionRuntimeException;
11 11
import org.gvsig.expressionevaluator.Formatter;
12 12
import org.gvsig.expressionevaluator.MutableSymbolTable;
13
import org.gvsig.expressionevaluator.PrettyFormatter;
13 14
import org.gvsig.expressionevaluator.impl.function.programming.BreakFunction.BreakException;
14 15
import org.gvsig.expressionevaluator.impl.function.programming.ReturnFunction.ReturnException;
15 16

  
......
89 90

  
90 91
    @Override
91 92
    public String toString(Codes args, Formatter<Code> formatter) {
92
        StringBuilder builder = new StringBuilder();
93
        builder.append("FOR \"");
94
        builder.append(Objects.toString(((Code.Constant)args.get(0)).value()));        
95
        builder.append("\" IN ");
96
        builder.append(args.get(1).toString(formatter));
97
        builder.append(" LOOP ");
98
        builder.append(args.get(2).toString(formatter));
99
        builder.append(" END LOOP");
100
        return builder.toString();
93
        Code codeVarname = args.get(0);
94
        Code codeList = args.get(1);
95
        Code codeLoopBody = args.get(2);
96
        
97
        PrettyFormatter builder = PrettyFormatter.get(formatter);
98
        try {
99
            builder.push();
100

  
101
            builder.append("FOR \"");
102
            builder.append(Objects.toString(((Code.Constant)codeVarname).value()));        
103
            builder.append("\" IN ");
104
            builder.append(codeList.toString(formatter));
105
            builder.append(" LOOP ");
106
            builder.indent();
107
            builder.nl();
108
            if( Code.isFunction(codeLoopBody,"BLOCK") ) {
109
                Code.Callable block = (Code.Callable)codeLoopBody;
110
                for (Code parameter : block.parameters()) {
111
                    builder.nl();
112
                    builder.append(parameter.toString(formatter));
113
                    builder.append("; ");
114
                }
115
            } else {
116
                builder.nl();
117
                builder.append(codeLoopBody.toString(formatter));
118
                builder.append(" ");
119
            }            
120
            builder.unindent();
121
            builder.nl();
122
            builder.append("END LOOP");
123
            
124
            return builder.build();
125
        } finally {
126
            builder.pop();
127
        }
101 128
    }
102 129
    
103 130
}

Also available in: Unified diff