Revision 44622 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
1 1
package org.gvsig.expressionevaluator.impl;
2 2

  
3
import java.lang.ref.Reference;
4
import java.lang.ref.WeakReference;
3 5
import java.util.Objects;
4 6
import org.apache.commons.lang3.StringUtils;
5 7
import org.gvsig.expressionevaluator.Code;
......
35 37
    private Interpreter interpreter;
36 38
    private boolean hasNotBeenOptimized = true;
37 39
    private SymbolTable mySymbolTable = null;
40
    private WeakReference<SymbolTable> lastSymbolTable = null;    
38 41
    private boolean useBracketsForIdentifiers = false;
39 42

  
40 43
    public DefaultExpression() {
......
216 219
            this.interpreter = manager.createInterpreter();
217 220
        }
218 221
        boolean added = this.getSymbolTable().addSymbolTable(symbolTable);
222
        if( this.lastSymbolTable==null ) {
223
            this.lastSymbolTable = new WeakReference<>(symbolTable);            
224
        } else if( this.lastSymbolTable.get()!=symbolTable ) {
225
            this.link(this.getSymbolTable());
226
            this.lastSymbolTable = new WeakReference<>(symbolTable);
227
            this.hasNotBeenOptimized = true;            
228
        }
219 229
        try {
220 230
            this.interpreter.setSymbolTable(this.mySymbolTable);
221 231
            if( this.hasNotBeenOptimized  ) {
222
                Optimizer optimizer = new DefaultOptimizer(symbolTable);
223
                this.code = optimizer.optimize(this.getCode());
232
                try {
233
                    Optimizer optimizer = new DefaultOptimizer(this.getSymbolTable());
234
                    this.code = optimizer.optimize(this.getCode());
235
                } catch(Throwable th) {
236
                    // Si no es capaz de optimizar la expresion no, peta y la
237
                    // ejecuta tal cual.
238
                }
224 239
                this.hasNotBeenOptimized = false;
225 240
            }
226 241
            Object x = this.interpreter.run(this.getCode());

Also available in: Unified diff