From fdedd70428009816a5e71252619b85e5b1830f86 Mon Sep 17 00:00:00 2001 From: Sergey Prigogin Date: Wed, 27 Jul 2016 21:00:04 -0700 Subject: [PATCH] Speed up indexer in a situation when there is a large number of equivalent CPPMethodTemplateSpecialization objects Change-Id: I3ad05af2de652a109e1680c189b54e81e355d357 --- .../CPPFunctionTemplateSpecialization.java | 20 +++++++++++++++++++ .../cpp/CPPMethodTemplateSpecialization.java | 11 ++++++++++ 2 files changed, 31 insertions(+) diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPFunctionTemplateSpecialization.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPFunctionTemplateSpecialization.java index b20a0b84d69..c1a0be272e5 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPFunctionTemplateSpecialization.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPFunctionTemplateSpecialization.java @@ -8,9 +8,12 @@ * Contributors: * Andrew Niefer (IBM) - Initial API and implementation * Markus Schorn (Wind River Systems) + * Sergey Prigogin (Google) *******************************************************************************/ package org.eclipse.cdt.internal.core.dom.parser.cpp; +import java.util.Objects; + import org.eclipse.cdt.core.dom.ast.ASTTypeUtil; import org.eclipse.cdt.core.dom.ast.IBinding; import org.eclipse.cdt.core.dom.ast.IType; @@ -74,4 +77,21 @@ public class CPPFunctionTemplateSpecialization extends CPPFunctionSpecialization public IBinding resolveTemplateParameter(ICPPTemplateParameter param) { return param; } + + @Override + public boolean equals(Object obj) { + if (obj == this) + return true; + if (!getClass().equals(obj.getClass())) + return false; + CPPFunctionTemplateSpecialization other = (CPPFunctionTemplateSpecialization) obj; + return Objects.equals(getSpecializedBinding(), other.getSpecializedBinding()) + && Objects.equals(getOwner(), other.getOwner()) + && Objects.equals(getTemplateParameterMap(), other.getTemplateParameterMap()); + } + + @Override + public int hashCode() { + return Objects.hash(getSpecializedBinding(), getOwner(), getTemplateParameterMap()); + } } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPMethodTemplateSpecialization.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPMethodTemplateSpecialization.java index b426974d607..0eb4494a6f5 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPMethodTemplateSpecialization.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPMethodTemplateSpecialization.java @@ -10,6 +10,7 @@ * Markus Schorn (Wind River Systems) * Thomas Corbat (IFS) * Nathan Ridge + * Sergey Prigogin (Google) *******************************************************************************/ package org.eclipse.cdt.internal.core.dom.parser.cpp; @@ -111,4 +112,14 @@ public class CPPMethodTemplateSpecialization extends CPPFunctionTemplateSpeciali public ICPPClassSpecialization getOwner() { return (ICPPClassSpecialization) super.getOwner(); } + + /** + * Overridden to emphasize that {@link #fTemplateParameters} does not participate in the equality + * relationship. + */ + @SuppressWarnings("javadoc") + @Override + public boolean equals(Object obj) { + return super.equals(obj); + } }