aboutsummaryrefslogtreecommitdiffstats
path: root/searchlib
diff options
context:
space:
mode:
authorJon Bratseth <bratseth@verizonmedia.com>2019-03-26 15:39:52 +0200
committerJon Bratseth <bratseth@verizonmedia.com>2019-03-26 15:39:52 +0200
commitb34ab2a5656401edd97ea70137a4be31406fb719 (patch)
treeedb7441250486d01e3656ada858b98ddcf60eadc /searchlib
parentdc46e712efefb2324869a1abf7baac198b33778e (diff)
Optimize type resolving
- Cache reference hash code - Cache resolved types
Diffstat (limited to 'searchlib')
-rw-r--r--searchlib/src/main/java/com/yahoo/searchlib/rankingexpression/Reference.java12
1 files changed, 7 insertions, 5 deletions
diff --git a/searchlib/src/main/java/com/yahoo/searchlib/rankingexpression/Reference.java b/searchlib/src/main/java/com/yahoo/searchlib/rankingexpression/Reference.java
index cd5f42ac05c..829a796eee0 100644
--- a/searchlib/src/main/java/com/yahoo/searchlib/rankingexpression/Reference.java
+++ b/searchlib/src/main/java/com/yahoo/searchlib/rankingexpression/Reference.java
@@ -21,11 +21,11 @@ import java.util.stream.Collectors;
*/
public class Reference extends TypeContext.Name {
+ private final int hashCode;
+
private final Arguments arguments;
- /**
- * The output, or null if none
- */
+ /** The output, or null if none */
private final String output;
public Reference(String name, Arguments arguments, String output) {
@@ -34,6 +34,7 @@ public class Reference extends TypeContext.Name {
Objects.requireNonNull(arguments, "arguments cannot be null");
this.arguments = arguments;
this.output = output;
+ this.hashCode = Objects.hash(name(), arguments, output);
}
public Arguments arguments() { return arguments; }
@@ -115,7 +116,8 @@ public class Reference extends TypeContext.Name {
@Override
public boolean equals(Object o) {
if (o == this) return true;
- if (!(o instanceof Reference)) return false;
+ if (o.hashCode() != this.hashCode()) return false; // because this has a fast hashCode
+ if ( ! (o instanceof Reference)) return false;
Reference other = (Reference) o;
if (!Objects.equals(other.name(), this.name())) return false;
if (!Objects.equals(other.arguments, this.arguments)) return false;
@@ -125,7 +127,7 @@ public class Reference extends TypeContext.Name {
@Override
public int hashCode() {
- return Objects.hash(name(), arguments, output);
+ return hashCode;
}
@Override