aboutsummaryrefslogtreecommitdiffstats
path: root/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/ExecutionContext.java
diff options
context:
space:
mode:
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.java50
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;