Revision 44215 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/DefaultExpression.java

View differences:

DefaultExpression.java
6 6
import java.util.List;
7 7
import org.apache.commons.lang3.StringUtils;
8 8
import org.gvsig.expressionevaluator.Code;
9
import org.gvsig.expressionevaluator.Compiler;
9 10
import org.gvsig.expressionevaluator.Expression;
10 11
import org.gvsig.expressionevaluator.ExpressionEvaluatorLocator;
11 12
import org.gvsig.expressionevaluator.ExpressionEvaluatorManager;
13
import org.gvsig.expressionevaluator.ExpressionUtils;
12 14
import org.gvsig.expressionevaluator.Interpreter;
13 15
import org.gvsig.expressionevaluator.Optimizer;
14 16
import org.gvsig.expressionevaluator.SymbolTable;
......
38 40
    private Code code = null;
39 41
    private Interpreter interpreter;
40 42
    private boolean hasNotBeenOptimized = true;
43
    private SymbolTable mySymbolTable = null;
44
    private boolean useBracketsForIdentifiers = false;
41 45

  
42 46
    public DefaultExpression() {
43 47

  
44 48
    }
49
    
50
    @Override
51
    public SymbolTable getSymbolTable() {
52
        if( this.mySymbolTable==null ) {
53
            this.mySymbolTable = ExpressionUtils.createSymbolTable();
54
        }
55
        return this.mySymbolTable;
56
    }
45 57

  
46 58
    @Override
47 59
    public String getPhrase() {
......
147 159
    public Code getCode() {
148 160
        if (this.code == null) {
149 161
            ExpressionEvaluatorManager manager = ExpressionEvaluatorLocator.getManager();
150
            this.code = manager.compile(this.phrase);
162
            Compiler compiler = manager.createCompiler();
163
            compiler.getLexicalAnalyzer().setUseBracketsForIdentifiers(
164
                    this.useBracketsForIdentifiers
165
            );
166
            this.code = compiler.compileExpression(this.phrase);
151 167
        }
152 168
        return code;
153 169
    }
......
176 192
            ExpressionEvaluatorManager manager = ExpressionEvaluatorLocator.getManager();
177 193
            this.interpreter = manager.createInterpreter();
178 194
        }
179
        this.interpreter.setSymbolTable(symbolTable);
180
        if( this.hasNotBeenOptimized  ) {
181
            Optimizer optimizer = new DefaultOptimizer(symbolTable);
182
            this.code = optimizer.optimize(this.getCode());
183
            this.hasNotBeenOptimized = false;
195
        boolean added = this.getSymbolTable().addSymbolTable(symbolTable);
196
        try {
197
            this.interpreter.setSymbolTable(this.mySymbolTable);
198
            if( this.hasNotBeenOptimized  ) {
199
                Optimizer optimizer = new DefaultOptimizer(symbolTable);
200
                this.code = optimizer.optimize(this.getCode());
201
                this.hasNotBeenOptimized = false;
202
            }
203
            Object x = this.interpreter.run(this.getCode());
204

  
205
            return x;
206
        } finally {
207
            if( added ) {
208
                this.getSymbolTable().removeSymbolTable(symbolTable);
209
            }
184 210
        }
185
        Object x = this.interpreter.run(this.getCode());
186
        return x;
187 211
    }
188 212

  
189 213
    @Override
......
341 365
        return other;
342 366
    }
343 367

  
368
    @Override
369
    public void setUseBracketsForIdentifiers(boolean useBracketsForIdentifiers) {
370
        this.useBracketsForIdentifiers = useBracketsForIdentifiers;
371
    }
372
    
373
    @Override
374
    public boolean getUseBracketsForIdentifiers() {
375
        return this.useBracketsForIdentifiers;
376
    }
377
    
344 378
}

Also available in: Unified diff