diff options
Diffstat (limited to 'indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/ExecutionContext.java')
-rw-r--r-- | indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/ExecutionContext.java | 50 |
1 files changed, 28 insertions, 22 deletions
diff --git a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/ExecutionContext.java b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/ExecutionContext.java index b0478f8001c..1935664cddc 100644 --- a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/ExecutionContext.java +++ b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/ExecutionContext.java @@ -10,16 +10,18 @@ import com.yahoo.language.detect.Detection; import java.util.HashMap; import java.util.Map; +import java.util.Objects; /** * @author Simon Thoresen Hult */ -public class ExecutionContext implements FieldTypeAdapter, FieldValueAdapter, Cloneable { +public class ExecutionContext implements FieldTypeAdapter, FieldValueAdapter { private final Map<String, FieldValue> variables = new HashMap<>(); private final FieldValueAdapter adapter; private FieldValue value; private Language language; + private Map<String, Object> cache = null; public ExecutionContext() { this(null); @@ -40,7 +42,9 @@ public class ExecutionContext implements FieldTypeAdapter, FieldValueAdapter, Cl * Returns whether this is for a complete execution of all statements of a script, * or a partial execution of only the statements accessing the available data. */ - public boolean isComplete() { return adapter == null ? false : adapter.isComplete(); } + public boolean isComplete() { + return adapter != null && adapter.isComplete(); + } @Override public DataType getInputType(Expression exp, String fieldName) { @@ -89,43 +93,45 @@ public class ExecutionContext implements FieldTypeAdapter, FieldValueAdapter, Cl return this; } - public Language getLanguage() { - return language; - } + public Language getLanguage() { return language; } public ExecutionContext setLanguage(Language language) { - language.getClass(); - this.language = language; + this.language = Objects.requireNonNull(language); return this; } public Language resolveLanguage(Linguistics linguistics) { - if (language != null && language != Language.UNKNOWN) { - return language; - } - if (linguistics == null) { - return Language.ENGLISH; - } + if (language != null && language != Language.UNKNOWN) return language; + if (linguistics == null) return Language.ENGLISH; + Detection detection = linguistics.getDetector().detect(String.valueOf(value), null); - if (detection == null) { - return Language.ENGLISH; - } + if (detection == null) return Language.ENGLISH; + Language detected = detection.getLanguage(); - if (detected == Language.UNKNOWN) { - return Language.ENGLISH; - } + if (detected == Language.UNKNOWN) return Language.ENGLISH; return detected; } - public FieldValue getValue() { - return value; - } + public FieldValue getValue() { return value; } public ExecutionContext setValue(FieldValue value) { this.value = value; return this; } + public void putCachedValue(String key, Object value) { + if (cache == null) + cache = new HashMap<>(); + cache.put(key, value); + } + + /** Returns a cached value, or null if not present. */ + public Object getCachedValue(String key) { + if (cache == null) return null; + return cache.get(key); + } + + /** Clears all state in this except the cache. */ public ExecutionContext clear() { variables.clear(); value = null; |