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