From f29e35e9b7bd038d3c55ee18b87ceb56a50291d9 Mon Sep 17 00:00:00 2001 From: Russ Cam Date: Mon, 10 Feb 2020 13:39:15 +1000 Subject: [PATCH] Add missing visit methods to aggregation visitor (#4372) * Add missing visit methods to aggregation visitor This commit updates the AggregationVisitorTests to ensure that there is a Visit method for all aggregations and that all aggregations (expect the intermediate aggregations) have a Visit method. Missing visit methods added. --- .../Visitor/AggregationVisitor.cs | 520 +++++++++--------- .../Aggregations/AggregationVisitorTests.cs | 22 +- 2 files changed, 286 insertions(+), 256 deletions(-) diff --git a/src/Nest/Aggregations/Visitor/AggregationVisitor.cs b/src/Nest/Aggregations/Visitor/AggregationVisitor.cs index 83a49e95b84..3620ac20a94 100644 --- a/src/Nest/Aggregations/Visitor/AggregationVisitor.cs +++ b/src/Nest/Aggregations/Visitor/AggregationVisitor.cs @@ -1,250 +1,270 @@ -namespace Nest -{ - public interface IAggregationVisitor - { - /// - /// The current depth of the node being visited - /// - int Depth { get; set; } - - /// - /// Hints the relation with the parent, i.e aggregations contained inside a bucket aggregation will have AggregationVisitorScope.Bucket set. - /// - AggregationVisitorScope Scope { get; set; } - - /// - /// Visit the aggregation container just before we dispatch into the aggregation it holds - /// - /// - void Visit(IAggregationContainer aggregationContainer); - - /// - /// Visit every aggregation item just before they are visited by their specialized Visit() implementation - /// - /// The IAggregation object that will be visited - void Visit(IAggregation aggregation); - - void Visit(IAverageAggregation aggregation); - - void Visit(IValueCountAggregation aggregation); - - void Visit(IMaxAggregation aggregation); - - void Visit(IMinAggregation aggregation); - - void Visit(IStatsAggregation aggregation); - - void Visit(ISumAggregation aggregation); - - void Visit(IExtendedStatsAggregation aggregation); - - void Visit(IDateHistogramAggregation aggregation); - - void Visit(IPercentilesAggregation aggregation); - - void Visit(IDateRangeAggregation aggregation); - - void Visit(IFilterAggregation aggregation); - - void Visit(IFiltersAggregation aggregation); - - void Visit(IGeoDistanceAggregation aggregation); - - void Visit(IGeoHashGridAggregation aggregation); - - void Visit(IGeoTileGridAggregation aggregation); - - void Visit(IGeoBoundsAggregation aggregation); - - void Visit(IHistogramAggregation aggregation); - - void Visit(IGlobalAggregation aggregation); - - void Visit(IIpRangeAggregation aggregation); - - void Visit(ICardinalityAggregation aggregation); - - void Visit(IMissingAggregation aggregation); - - void Visit(INestedAggregation aggregation); - - void Visit(IParentAggregation aggregation); - - void Visit(IReverseNestedAggregation aggregation); - - void Visit(IRangeAggregation aggregation); - - void Visit(IRareTermsAggregation aggregation); - - void Visit(ITermsAggregation aggregation); - - void Visit(ISignificantTermsAggregation aggregation); - - void Visit(ISignificantTextAggregation aggregation); - - void Visit(IPercentileRanksAggregation aggregation); - - void Visit(ITopHitsAggregation aggregation); - - void Visit(IChildrenAggregation aggregation); - - void Visit(IScriptedMetricAggregation aggregation); - - void Visit(IAverageBucketAggregation aggregation); - - void Visit(IDerivativeAggregation aggregation); - - void Visit(IMaxBucketAggregation aggregation); - - void Visit(IMinBucketAggregation aggregation); - - void Visit(ISumBucketAggregation aggregation); - - void Visit(IStatsBucketAggregation aggregation); - - void Visit(IExtendedStatsBucketAggregation aggregation); - - void Visit(IPercentilesBucketAggregation aggregation); - - void Visit(IMovingAverageAggregation aggregation); - - void Visit(ICumulativeSumAggregation aggregation); - - void Visit(ICumulativeCardinalityAggregation aggregation); - - void Visit(ISerialDifferencingAggregation aggregation); - - void Visit(IBucketScriptAggregation aggregation); - - void Visit(IBucketSelectorAggregation aggregation); - - void Visit(IBucketSortAggregation aggregation); - - void Visit(ISamplerAggregation aggregation); - - void Visit(IGeoCentroidAggregation aggregation); - - void Visit(ICompositeAggregation aggregation); - - void Visit(IMedianAbsoluteDeviationAggregation aggregation); - - void Visit(IStringStatsAggregation aggregation); - } - - public class AggregationVisitor : IAggregationVisitor - { - public int Depth { get; set; } - - public AggregationVisitorScope Scope { get; set; } - - public virtual void Visit(IValueCountAggregation aggregation) { } - - public virtual void Visit(IMinAggregation aggregation) { } - - public virtual void Visit(ISumAggregation aggregation) { } - - public virtual void Visit(IDateHistogramAggregation aggregation) { } - - public virtual void Visit(IDateRangeAggregation aggregation) { } - - public virtual void Visit(IFiltersAggregation aggregation) { } - - public virtual void Visit(IGeoHashGridAggregation aggregation) { } - - public virtual void Visit(IGeoTileGridAggregation aggregation) { } - - public virtual void Visit(IHistogramAggregation aggregation) { } - - public virtual void Visit(IIpRangeAggregation aggregation) { } - - public virtual void Visit(IMissingAggregation aggregation) { } - - public virtual void Visit(IReverseNestedAggregation aggregation) { } - - public virtual void Visit(ITermsAggregation aggregation) { } - - public virtual void Visit(ISignificantTextAggregation aggregation) { } - - public virtual void Visit(IPercentileRanksAggregation aggregation) { } - - public virtual void Visit(IChildrenAggregation aggregation) { } - - public virtual void Visit(IAverageBucketAggregation aggregation) { } - - public virtual void Visit(IMaxBucketAggregation aggregation) { } - - public virtual void Visit(ISumBucketAggregation aggregation) { } - - public virtual void Visit(IStatsBucketAggregation aggregation) { } - - public virtual void Visit(IExtendedStatsBucketAggregation aggregation) { } - - public virtual void Visit(IPercentilesBucketAggregation aggregation) { } - - public virtual void Visit(ICumulativeSumAggregation aggregation) { } - - public virtual void Visit(ICumulativeCardinalityAggregation aggregation) { } - - public virtual void Visit(IBucketScriptAggregation aggregation) { } - - public virtual void Visit(ISamplerAggregation aggregation) { } - - public virtual void Visit(IBucketSelectorAggregation aggregation) { } - - public virtual void Visit(IBucketSortAggregation aggregation) { } - - public virtual void Visit(ISerialDifferencingAggregation aggregation) { } - - public virtual void Visit(IMovingAverageAggregation aggregation) { } - - public virtual void Visit(IMinBucketAggregation aggregation) { } - - public virtual void Visit(IDerivativeAggregation aggregation) { } - - public virtual void Visit(IScriptedMetricAggregation aggregation) { } - - public virtual void Visit(ITopHitsAggregation aggregation) { } - - public virtual void Visit(ISignificantTermsAggregation aggregation) { } - - public virtual void Visit(IRangeAggregation aggregation) { } - - public virtual void Visit(IRareTermsAggregation aggregation) { } - - public virtual void Visit(INestedAggregation aggregation) { } - - public virtual void Visit(IParentAggregation aggregation) { } - - public virtual void Visit(ICardinalityAggregation aggregation) { } - - public virtual void Visit(IGlobalAggregation aggregation) { } - - public virtual void Visit(IGeoBoundsAggregation aggregation) { } - - public virtual void Visit(IGeoDistanceAggregation aggregation) { } - - public virtual void Visit(IFilterAggregation aggregation) { } - - public virtual void Visit(IPercentilesAggregation aggregation) { } - - public virtual void Visit(IExtendedStatsAggregation aggregation) { } - - public virtual void Visit(IStatsAggregation aggregation) { } - - public virtual void Visit(IMaxAggregation aggregation) { } - - public virtual void Visit(IAverageAggregation aggregation) { } - - public virtual void Visit(IGeoCentroidAggregation aggregation) { } - - public virtual void Visit(ICompositeAggregation aggregation) { } - - public virtual void Visit(IMedianAbsoluteDeviationAggregation aggregation) { } - - public virtual void Visit(IStringStatsAggregation aggregation) { } - - public virtual void Visit(IAggregation aggregation) { } - - public virtual void Visit(IAggregationContainer aggregationContainer) { } - } -} +namespace Nest +{ + public interface IAggregationVisitor + { + /// + /// The current depth of the node being visited + /// + int Depth { get; set; } + + /// + /// Hints the relation with the parent, i.e aggregations contained inside a bucket aggregation will have AggregationVisitorScope.Bucket set. + /// + AggregationVisitorScope Scope { get; set; } + + /// + /// Visit the aggregation container just before we dispatch into the aggregation it holds + /// + /// + void Visit(IAggregationContainer aggregationContainer); + + /// + /// Visit every aggregation item just before they are visited by their specialized Visit() implementation + /// + /// The IAggregation object that will be visited + void Visit(IAggregation aggregation); + + void Visit(IAverageAggregation aggregation); + + void Visit(IValueCountAggregation aggregation); + + void Visit(IMaxAggregation aggregation); + + void Visit(IMinAggregation aggregation); + + void Visit(IStatsAggregation aggregation); + + void Visit(ISumAggregation aggregation); + + void Visit(IExtendedStatsAggregation aggregation); + + void Visit(IDateHistogramAggregation aggregation); + + void Visit(IPercentilesAggregation aggregation); + + void Visit(IDateRangeAggregation aggregation); + + void Visit(IFilterAggregation aggregation); + + void Visit(IFiltersAggregation aggregation); + + void Visit(IGeoDistanceAggregation aggregation); + + void Visit(IGeoHashGridAggregation aggregation); + + void Visit(IGeoTileGridAggregation aggregation); + + void Visit(IGeoBoundsAggregation aggregation); + + void Visit(IHistogramAggregation aggregation); + + void Visit(IGlobalAggregation aggregation); + + void Visit(IIpRangeAggregation aggregation); + + void Visit(ICardinalityAggregation aggregation); + + void Visit(IMissingAggregation aggregation); + + void Visit(INestedAggregation aggregation); + + void Visit(IParentAggregation aggregation); + + void Visit(IReverseNestedAggregation aggregation); + + void Visit(IRangeAggregation aggregation); + + void Visit(IRareTermsAggregation aggregation); + + void Visit(ITermsAggregation aggregation); + + void Visit(ISignificantTermsAggregation aggregation); + + void Visit(ISignificantTextAggregation aggregation); + + void Visit(IPercentileRanksAggregation aggregation); + + void Visit(ITopHitsAggregation aggregation); + + void Visit(IChildrenAggregation aggregation); + + void Visit(IScriptedMetricAggregation aggregation); + + void Visit(IAverageBucketAggregation aggregation); + + void Visit(IDerivativeAggregation aggregation); + + void Visit(IMaxBucketAggregation aggregation); + + void Visit(IMinBucketAggregation aggregation); + + void Visit(ISumBucketAggregation aggregation); + + void Visit(IStatsBucketAggregation aggregation); + + void Visit(IExtendedStatsBucketAggregation aggregation); + + void Visit(IPercentilesBucketAggregation aggregation); + + void Visit(IMovingAverageAggregation aggregation); + + void Visit(ICumulativeSumAggregation aggregation); + + void Visit(ICumulativeCardinalityAggregation aggregation); + + void Visit(ISerialDifferencingAggregation aggregation); + + void Visit(IBucketScriptAggregation aggregation); + + void Visit(IBucketSelectorAggregation aggregation); + + void Visit(IBucketSortAggregation aggregation); + + void Visit(ISamplerAggregation aggregation); + + void Visit(IGeoCentroidAggregation aggregation); + + void Visit(ICompositeAggregation aggregation); + + void Visit(IMedianAbsoluteDeviationAggregation aggregation); + + void Visit(IAdjacencyMatrixAggregation aggregation); + + void Visit(IAutoDateHistogramAggregation aggregation); + + void Visit(IMatrixStatsAggregation aggregation); + + void Visit(IWeightedAverageAggregation aggregation); + + void Visit(IMovingFunctionAggregation aggregation); + + void Visit(IStringStatsAggregation aggregation); + } + + public class AggregationVisitor : IAggregationVisitor + { + public int Depth { get; set; } + + public AggregationVisitorScope Scope { get; set; } + + public virtual void Visit(IValueCountAggregation aggregation) { } + + public virtual void Visit(IMinAggregation aggregation) { } + + public virtual void Visit(ISumAggregation aggregation) { } + + public virtual void Visit(IDateHistogramAggregation aggregation) { } + + public virtual void Visit(IDateRangeAggregation aggregation) { } + + public virtual void Visit(IFiltersAggregation aggregation) { } + + public virtual void Visit(IGeoHashGridAggregation aggregation) { } + + public virtual void Visit(IGeoTileGridAggregation aggregation) { } + + public virtual void Visit(IHistogramAggregation aggregation) { } + + public virtual void Visit(IIpRangeAggregation aggregation) { } + + public virtual void Visit(IMissingAggregation aggregation) { } + + public virtual void Visit(IReverseNestedAggregation aggregation) { } + + public virtual void Visit(ITermsAggregation aggregation) { } + + public virtual void Visit(ISignificantTextAggregation aggregation) { } + + public virtual void Visit(IPercentileRanksAggregation aggregation) { } + + public virtual void Visit(IChildrenAggregation aggregation) { } + + public virtual void Visit(IAverageBucketAggregation aggregation) { } + + public virtual void Visit(IMaxBucketAggregation aggregation) { } + + public virtual void Visit(ISumBucketAggregation aggregation) { } + + public virtual void Visit(IStatsBucketAggregation aggregation) { } + + public virtual void Visit(IExtendedStatsBucketAggregation aggregation) { } + + public virtual void Visit(IPercentilesBucketAggregation aggregation) { } + + public virtual void Visit(ICumulativeSumAggregation aggregation) { } + + public virtual void Visit(ICumulativeCardinalityAggregation aggregation) { } + + public virtual void Visit(IBucketScriptAggregation aggregation) { } + + public virtual void Visit(ISamplerAggregation aggregation) { } + + public virtual void Visit(IBucketSelectorAggregation aggregation) { } + + public virtual void Visit(IBucketSortAggregation aggregation) { } + + public virtual void Visit(ISerialDifferencingAggregation aggregation) { } + + public virtual void Visit(IMovingAverageAggregation aggregation) { } + + public virtual void Visit(IMinBucketAggregation aggregation) { } + + public virtual void Visit(IDerivativeAggregation aggregation) { } + + public virtual void Visit(IScriptedMetricAggregation aggregation) { } + + public virtual void Visit(ITopHitsAggregation aggregation) { } + + public virtual void Visit(ISignificantTermsAggregation aggregation) { } + + public virtual void Visit(IRangeAggregation aggregation) { } + + public virtual void Visit(IRareTermsAggregation aggregation) { } + + public virtual void Visit(INestedAggregation aggregation) { } + + public virtual void Visit(IParentAggregation aggregation) { } + + public virtual void Visit(ICardinalityAggregation aggregation) { } + + public virtual void Visit(IGlobalAggregation aggregation) { } + + public virtual void Visit(IGeoBoundsAggregation aggregation) { } + + public virtual void Visit(IGeoDistanceAggregation aggregation) { } + + public virtual void Visit(IFilterAggregation aggregation) { } + + public virtual void Visit(IPercentilesAggregation aggregation) { } + + public virtual void Visit(IExtendedStatsAggregation aggregation) { } + + public virtual void Visit(IStatsAggregation aggregation) { } + + public virtual void Visit(IMaxAggregation aggregation) { } + + public virtual void Visit(IAverageAggregation aggregation) { } + + public virtual void Visit(IGeoCentroidAggregation aggregation) { } + + public virtual void Visit(ICompositeAggregation aggregation) { } + + public virtual void Visit(IMedianAbsoluteDeviationAggregation aggregation) { } + + public virtual void Visit(IAdjacencyMatrixAggregation aggregation) { } + + public virtual void Visit(IAutoDateHistogramAggregation aggregation) { } + + public virtual void Visit(IMatrixStatsAggregation aggregation) { } + + public virtual void Visit(IWeightedAverageAggregation aggregation) { } + + public virtual void Visit(IMovingFunctionAggregation aggregation) { } + + public virtual void Visit(IStringStatsAggregation aggregation) { } + + public virtual void Visit(IAggregation aggregation) { } + + public virtual void Visit(IAggregationContainer aggregationContainer) { } + } +} diff --git a/tests/Tests/Aggregations/AggregationVisitorTests.cs b/tests/Tests/Aggregations/AggregationVisitorTests.cs index c318794a81d..5198af3c2f5 100644 --- a/tests/Tests/Aggregations/AggregationVisitorTests.cs +++ b/tests/Tests/Aggregations/AggregationVisitorTests.cs @@ -10,20 +10,30 @@ public class AggregationVisitorTests { [U] public void VisitMethodForEachTypeOfAggregation() { + // exclude intermediate aggregations + var exclude = new[] + { + typeof(IMetricAggregation), typeof(IBucketAggregation), typeof(IPipelineAggregation), typeof(IMatrixAggregation), + typeof(IFormattableMetricAggregation) + }; + var aggregationTypes = - from t in typeof(IAggregation).Assembly.Types() + (from t in typeof(IAggregation).Assembly.Types() where typeof(IAggregation).IsAssignableFrom(t) - where t.IsInterface - select t; + where t.IsInterface && !exclude.Contains(t) + select t).ToList(); var visitorMethodParameters = - from m in typeof(IAggregationVisitor).GetTypeInfo().DeclaredMethods + (from m in typeof(IAggregationVisitor).GetTypeInfo().DeclaredMethods where m.Name == "Visit" let aggregationInterface = m.GetParameters().First().ParameterType where aggregationInterface != typeof(IAggregationContainer) - select aggregationInterface; + select aggregationInterface).ToList(); - visitorMethodParameters.Except(aggregationTypes).Should().BeEmpty(); + if (aggregationTypes.Count < visitorMethodParameters.Count) + visitorMethodParameters.Except(aggregationTypes).Should().BeEmpty(); + else + aggregationTypes.Except(visitorMethodParameters).Should().BeEmpty(); } } }