From 174a7a9b008214a015955407813f2d383c3adfa0 Mon Sep 17 00:00:00 2001 From: ronshapiro Date: Wed, 9 Jan 2019 09:17:21 -0800 Subject: [PATCH] Simplify ComponentDescriptor.hashCode() and memoize it For a very large internal component, saves roughly ~42 seconds on average (or 28%) over 10 runs. Memoizing the hashCode isn't as stupendous, but profiles do show that memoizing reduces the cost of the hashCode by an additional 10x (after the already big savings): 80ms -> 7ms RELNOTES=Build performance improvements ------------- Created by MOE: https://github.com/google/moe MOE_MIGRATED_REVID=228529245 --- .../dagger/internal/codegen/ComponentDescriptor.java | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/java/dagger/internal/codegen/ComponentDescriptor.java b/java/dagger/internal/codegen/ComponentDescriptor.java index 806134aab52..970f371bc50 100644 --- a/java/dagger/internal/codegen/ComponentDescriptor.java +++ b/java/dagger/internal/codegen/ComponentDescriptor.java @@ -41,6 +41,7 @@ import com.google.auto.common.MoreElements; import com.google.auto.common.MoreTypes; import com.google.auto.value.AutoValue; +import com.google.auto.value.extension.memoized.Memoized; import com.google.common.base.Supplier; import com.google.common.base.Suppliers; import com.google.common.collect.ImmutableBiMap; @@ -56,6 +57,7 @@ import dagger.producers.CancellationPolicy; import dagger.producers.ProductionComponent; import java.util.List; +import java.util.Objects; import java.util.Optional; import java.util.stream.Stream; import javax.inject.Inject; @@ -251,6 +253,16 @@ final Optional cancellationPolicy() { : Optional.empty(); } + @Memoized + @Override + public int hashCode() { + return Objects.hash(typeElement(), kind()); + } + + // TODO(ronshapiro): simplify the equality semantics + @Override + public abstract boolean equals(Object obj); + /** A function that returns all {@link #scopes()} of its input. */ @AutoValue abstract static class ComponentMethodDescriptor {