From 9c2e8afce66a73ba74e5aac2392fd65eb852c319 Mon Sep 17 00:00:00 2001 From: Knut Wannheden Date: Thu, 12 Apr 2012 19:11:59 +0200 Subject: [PATCH] [node model][performance] added caching of hash code Caching the hash code of EObjectArrayAsList objects improves the overall parse performance by around 10%. --- .../xtext/nodemodel/impl/NodeModelBuilder.java | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/plugins/org.eclipse.xtext/src/org/eclipse/xtext/nodemodel/impl/NodeModelBuilder.java b/plugins/org.eclipse.xtext/src/org/eclipse/xtext/nodemodel/impl/NodeModelBuilder.java index 4a2b53db0..f9aebec35 100644 --- a/plugins/org.eclipse.xtext/src/org/eclipse/xtext/nodemodel/impl/NodeModelBuilder.java +++ b/plugins/org.eclipse.xtext/src/org/eclipse/xtext/nodemodel/impl/NodeModelBuilder.java @@ -38,6 +38,7 @@ public class NodeModelBuilder { private static class EObjectArrayAsList extends AbstractList implements Serializable, RandomAccess { final EObject[] array; + private int hashCode = -1; EObjectArrayAsList(@Nullable EObject first, EObject[] rest) { array = new EObject[rest.length + 1]; @@ -57,16 +58,16 @@ public class NodeModelBuilder { return array[index]; } + @Override public int hashCode() { + if (hashCode == -1) + hashCode = Arrays.hashCode(array); + return hashCode; + } + @Override public boolean equals(@Nullable Object o) { if (this == o) return true; - if (!(o instanceof EObjectArrayAsList)) { - return false; - } - EObjectArrayAsList other = (EObjectArrayAsList) o; - if (this.size() != other.size()) - return false; - return Arrays.equals(array, other.array); + return o instanceof EObjectArrayAsList && Arrays.equals(array, ((EObjectArrayAsList) o).array); } private static final long serialVersionUID = 0;