Browse Source

removes a lot of warnings form the aggregations

Colin Goodheart-Smithe 9 years ago
parent
commit
86b0777392
55 changed files with 165 additions and 217 deletions
  1. 1 8
      core/src/main/java/org/elasticsearch/search/SearchModule.java
  2. 1 1
      core/src/main/java/org/elasticsearch/search/aggregations/Aggregator.java
  3. 3 1
      core/src/main/java/org/elasticsearch/search/aggregations/AggregatorBuilder.java
  4. 26 26
      core/src/main/java/org/elasticsearch/search/aggregations/AggregatorFactories.java
  5. 2 2
      core/src/main/java/org/elasticsearch/search/aggregations/AggregatorParsers.java
  6. 3 4
      core/src/main/java/org/elasticsearch/search/aggregations/bucket/children/ChildrenParser.java
  7. 1 3
      core/src/main/java/org/elasticsearch/search/aggregations/bucket/filter/FilterParser.java
  8. 7 6
      core/src/main/java/org/elasticsearch/search/aggregations/bucket/filters/FiltersParser.java
  9. 1 2
      core/src/main/java/org/elasticsearch/search/aggregations/bucket/geogrid/GeoHashGridParser.java
  10. 1 0
      core/src/main/java/org/elasticsearch/search/aggregations/bucket/geogrid/InternalGeoHashGrid.java
  11. 3 4
      core/src/main/java/org/elasticsearch/search/aggregations/bucket/global/GlobalParser.java
  12. 1 2
      core/src/main/java/org/elasticsearch/search/aggregations/bucket/histogram/DateHistogramParser.java
  13. 8 1
      core/src/main/java/org/elasticsearch/search/aggregations/bucket/histogram/HistogramAggregator.java
  14. 1 2
      core/src/main/java/org/elasticsearch/search/aggregations/bucket/histogram/HistogramParser.java
  15. 10 3
      core/src/main/java/org/elasticsearch/search/aggregations/bucket/histogram/InternalHistogram.java
  16. 1 2
      core/src/main/java/org/elasticsearch/search/aggregations/bucket/missing/MissingParser.java
  17. 3 4
      core/src/main/java/org/elasticsearch/search/aggregations/bucket/nested/NestedParser.java
  18. 3 4
      core/src/main/java/org/elasticsearch/search/aggregations/bucket/nested/ReverseNestedParser.java
  19. 6 1
      core/src/main/java/org/elasticsearch/search/aggregations/bucket/range/InternalRange.java
  20. 2 2
      core/src/main/java/org/elasticsearch/search/aggregations/bucket/range/RangeParser.java
  21. 2 2
      core/src/main/java/org/elasticsearch/search/aggregations/bucket/range/date/DateRangeParser.java
  22. 4 5
      core/src/main/java/org/elasticsearch/search/aggregations/bucket/range/geodistance/GeoDistanceParser.java
  23. 2 2
      core/src/main/java/org/elasticsearch/search/aggregations/bucket/range/ipv4/IpRangeParser.java
  24. 3 4
      core/src/main/java/org/elasticsearch/search/aggregations/bucket/sampler/SamplerParser.java
  25. 1 2
      core/src/main/java/org/elasticsearch/search/aggregations/bucket/significant/SignificantTermsParser.java
  26. 2 2
      core/src/main/java/org/elasticsearch/search/aggregations/bucket/terms/TermsParser.java
  27. 1 2
      core/src/main/java/org/elasticsearch/search/aggregations/metrics/avg/AvgParser.java
  28. 1 2
      core/src/main/java/org/elasticsearch/search/aggregations/metrics/cardinality/CardinalityParser.java
  29. 1 2
      core/src/main/java/org/elasticsearch/search/aggregations/metrics/geobounds/GeoBoundsParser.java
  30. 1 2
      core/src/main/java/org/elasticsearch/search/aggregations/metrics/geocentroid/GeoCentroidParser.java
  31. 1 2
      core/src/main/java/org/elasticsearch/search/aggregations/metrics/max/MaxParser.java
  32. 1 2
      core/src/main/java/org/elasticsearch/search/aggregations/metrics/min/MinParser.java
  33. 0 2
      core/src/main/java/org/elasticsearch/search/aggregations/metrics/percentiles/AbstractPercentilesParser.java
  34. 1 2
      core/src/main/java/org/elasticsearch/search/aggregations/metrics/percentiles/PercentileRanksParser.java
  35. 1 2
      core/src/main/java/org/elasticsearch/search/aggregations/metrics/percentiles/PercentilesParser.java
  36. 3 4
      core/src/main/java/org/elasticsearch/search/aggregations/metrics/scripted/ScriptedMetricParser.java
  37. 1 29
      core/src/main/java/org/elasticsearch/search/aggregations/metrics/tophits/TopHitsParser.java
  38. 1 2
      core/src/main/java/org/elasticsearch/search/aggregations/metrics/valuecount/ValueCountParser.java
  39. 3 2
      core/src/main/java/org/elasticsearch/search/aggregations/pipeline/PipelineAggregator.java
  40. 4 6
      core/src/main/java/org/elasticsearch/search/aggregations/pipeline/bucketmetrics/BucketMetricsParser.java
  41. 1 1
      core/src/main/java/org/elasticsearch/search/aggregations/pipeline/bucketmetrics/BucketMetricsPipelineAggregator.java
  42. 2 4
      core/src/main/java/org/elasticsearch/search/aggregations/pipeline/bucketmetrics/avg/AvgBucketParser.java
  43. 2 4
      core/src/main/java/org/elasticsearch/search/aggregations/pipeline/bucketmetrics/max/MaxBucketParser.java
  44. 2 4
      core/src/main/java/org/elasticsearch/search/aggregations/pipeline/bucketmetrics/min/MinBucketParser.java
  45. 5 7
      core/src/main/java/org/elasticsearch/search/aggregations/pipeline/bucketmetrics/percentile/PercentilesBucketParser.java
  46. 3 5
      core/src/main/java/org/elasticsearch/search/aggregations/pipeline/bucketmetrics/stats/StatsBucketParser.java
  47. 3 5
      core/src/main/java/org/elasticsearch/search/aggregations/pipeline/bucketmetrics/stats/extended/ExtendedStatsBucketParser.java
  48. 2 4
      core/src/main/java/org/elasticsearch/search/aggregations/pipeline/bucketmetrics/sum/SumBucketParser.java
  49. 3 4
      core/src/main/java/org/elasticsearch/search/aggregations/pipeline/bucketscript/BucketScriptParser.java
  50. 3 5
      core/src/main/java/org/elasticsearch/search/aggregations/pipeline/cumulativesum/CumulativeSumParser.java
  51. 3 5
      core/src/main/java/org/elasticsearch/search/aggregations/pipeline/derivative/DerivativeParser.java
  52. 3 4
      core/src/main/java/org/elasticsearch/search/aggregations/pipeline/having/BucketSelectorParser.java
  53. 3 4
      core/src/main/java/org/elasticsearch/search/aggregations/pipeline/movavg/MovAvgParser.java
  54. 3 4
      core/src/main/java/org/elasticsearch/search/aggregations/pipeline/serialdiff/SerialDiffParser.java
  55. 9 1
      core/src/main/java/org/elasticsearch/search/aggregations/support/ValuesSourceAggregatorBuilder.java

+ 1 - 8
core/src/main/java/org/elasticsearch/search/SearchModule.java

@@ -209,26 +209,20 @@ import org.elasticsearch.search.controller.SearchPhaseController;
 import org.elasticsearch.search.dfs.DfsPhase;
 import org.elasticsearch.search.fetch.FetchPhase;
 import org.elasticsearch.search.fetch.FetchSubPhase;
-import org.elasticsearch.search.fetch.FieldsParseElement;
 import org.elasticsearch.search.fetch.explain.ExplainFetchSubPhase;
 import org.elasticsearch.search.fetch.fielddata.FieldDataFieldsFetchSubPhase;
-import org.elasticsearch.search.fetch.fielddata.FieldDataFieldsParseElement;
 import org.elasticsearch.search.fetch.innerhits.InnerHitsFetchSubPhase;
 import org.elasticsearch.search.fetch.matchedqueries.MatchedQueriesFetchSubPhase;
 import org.elasticsearch.search.fetch.parent.ParentFieldSubFetchPhase;
 import org.elasticsearch.search.fetch.script.ScriptFieldsFetchSubPhase;
-import org.elasticsearch.search.fetch.script.ScriptFieldsParseElement;
-import org.elasticsearch.search.fetch.source.FetchSourceParseElement;
 import org.elasticsearch.search.fetch.source.FetchSourceSubPhase;
 import org.elasticsearch.search.fetch.version.VersionFetchSubPhase;
 import org.elasticsearch.search.highlight.HighlightPhase;
 import org.elasticsearch.search.highlight.Highlighter;
-import org.elasticsearch.search.highlight.HighlighterParseElement;
 import org.elasticsearch.search.highlight.Highlighters;
 import org.elasticsearch.search.query.QueryPhase;
 import org.elasticsearch.search.rescore.QueryRescorerBuilder;
 import org.elasticsearch.search.rescore.RescoreBuilder;
-import org.elasticsearch.search.sort.SortParseElement;
 import org.elasticsearch.search.suggest.Suggester;
 import org.elasticsearch.search.suggest.Suggesters;
 
@@ -413,8 +407,7 @@ public class SearchModule extends AbstractModule {
         registerAggregatorParser(new GeoHashGridParser());
         registerAggregatorParser(new NestedParser());
         registerAggregatorParser(new ReverseNestedParser());
-        registerAggregatorParser(new TopHitsParser(new SortParseElement(), new FetchSourceParseElement(), new HighlighterParseElement(),
-                new FieldDataFieldsParseElement(), new ScriptFieldsParseElement(), new FieldsParseElement()));
+        registerAggregatorParser(new TopHitsParser());
         registerAggregatorParser(new GeoBoundsParser());
         registerAggregatorParser(new GeoCentroidParser());
         registerAggregatorParser(new ScriptedMetricParser());

+ 1 - 1
core/src/main/java/org/elasticsearch/search/aggregations/Aggregator.java

@@ -62,7 +62,7 @@ public abstract class Aggregator extends BucketCollector implements Releasable {
          * @return                  The resolved aggregator factory or {@code null} in case the aggregation should be skipped
          * @throws java.io.IOException      When parsing fails
          */
-        AggregatorBuilder parse(String aggregationName, XContentParser parser, QueryParseContext context) throws IOException;
+        AggregatorBuilder<?> parse(String aggregationName, XContentParser parser, QueryParseContext context) throws IOException;
 
         /**
          * @return an empty {@link AggregatorBuilder} instance for this parser

+ 3 - 1
core/src/main/java/org/elasticsearch/search/aggregations/AggregatorBuilder.java

@@ -77,7 +77,7 @@ public abstract class AggregatorBuilder<AB extends AggregatorBuilder<AB>> extend
      * Add a sub aggregation to this aggregation.
      */
     @SuppressWarnings("unchecked")
-    public AB subAggregation(PipelineAggregatorBuilder aggregation) {
+    public AB subAggregation(PipelineAggregatorBuilder<?> aggregation) {
         if (aggregation == null) {
             throw new IllegalArgumentException("[aggregation] must not be null: [" + name + "]");
         }
@@ -103,6 +103,7 @@ public abstract class AggregatorBuilder<AB extends AggregatorBuilder<AB>> extend
         return (AB) this;
     }
 
+    @SuppressWarnings("unchecked")
     public AB setMetaData(Map<String, Object> metaData) {
         if (metaData == null) {
             throw new IllegalArgumentException("[metaData] must not be null: [" + name + "]");
@@ -183,6 +184,7 @@ public abstract class AggregatorBuilder<AB extends AggregatorBuilder<AB>> extend
             return false;
         if (getClass() != obj.getClass())
             return false;
+        @SuppressWarnings("unchecked")
         AggregatorBuilder<AB> other = (AggregatorBuilder<AB>) obj;
         if (!Objects.equals(name, other.name))
             return false;

+ 26 - 26
core/src/main/java/org/elasticsearch/search/aggregations/AggregatorFactories.java

@@ -45,18 +45,18 @@ import java.util.Set;
 public class AggregatorFactories {
 
     public static final AggregatorFactories EMPTY = new AggregatorFactories(null, new AggregatorFactory<?>[0],
-            new ArrayList<PipelineAggregatorBuilder>());
+            new ArrayList<PipelineAggregatorBuilder<?>>());
 
     private AggregatorFactory<?> parent;
     private AggregatorFactory<?>[] factories;
-    private List<PipelineAggregatorBuilder> pipelineAggregatorFactories;
+    private List<PipelineAggregatorBuilder<?>> pipelineAggregatorFactories;
 
     public static Builder builder() {
         return new Builder();
     }
 
     private AggregatorFactories(AggregatorFactory<?> parent, AggregatorFactory<?>[] factories,
-            List<PipelineAggregatorBuilder> pipelineAggregators) {
+            List<PipelineAggregatorBuilder<?>> pipelineAggregators) {
         this.parent = parent;
         this.factories = factories;
         this.pipelineAggregatorFactories = pipelineAggregators;
@@ -64,7 +64,7 @@ public class AggregatorFactories {
 
     public List<PipelineAggregator> createPipelineAggregators() throws IOException {
         List<PipelineAggregator> pipelineAggregators = new ArrayList<>();
-        for (PipelineAggregatorBuilder factory : this.pipelineAggregatorFactories) {
+        for (PipelineAggregatorBuilder<?> factory : this.pipelineAggregatorFactories) {
             pipelineAggregators.add(factory.create());
         }
         return pipelineAggregators;
@@ -117,7 +117,7 @@ public class AggregatorFactories {
         for (AggregatorFactory<?> factory : factories) {
             factory.validate();
         }
-        for (PipelineAggregatorBuilder factory : pipelineAggregatorFactories) {
+        for (PipelineAggregatorBuilder<?> factory : pipelineAggregatorFactories) {
             factory.validate(parent, factories, pipelineAggregatorFactories);
         }
     }
@@ -128,7 +128,7 @@ public class AggregatorFactories {
 
         private final Set<String> names = new HashSet<>();
         private final List<AggregatorBuilder<?>> aggregatorBuilders = new ArrayList<>();
-        private final List<PipelineAggregatorBuilder> pipelineAggregatorFactories = new ArrayList<>();
+        private final List<PipelineAggregatorBuilder<?>> pipelineAggregatorFactories = new ArrayList<>();
         private boolean skipResolveOrder;
 
         public Builder addAggregators(AggregatorFactories factories) {
@@ -143,7 +143,7 @@ public class AggregatorFactories {
             return this;
         }
 
-        public Builder addPipelineAggregator(PipelineAggregatorBuilder pipelineAggregatorFactory) {
+        public Builder addPipelineAggregator(PipelineAggregatorBuilder<?> pipelineAggregatorFactory) {
             this.pipelineAggregatorFactories.add(pipelineAggregatorFactory);
             return this;
         }
@@ -160,7 +160,7 @@ public class AggregatorFactories {
             if (aggregatorBuilders.isEmpty() && pipelineAggregatorFactories.isEmpty()) {
                 return EMPTY;
             }
-            List<PipelineAggregatorBuilder> orderedpipelineAggregators = null;
+            List<PipelineAggregatorBuilder<?>> orderedpipelineAggregators = null;
             if (skipResolveOrder) {
                 orderedpipelineAggregators = new ArrayList<>(pipelineAggregatorFactories);
             } else {
@@ -173,21 +173,21 @@ public class AggregatorFactories {
             return new AggregatorFactories(parent, aggFactories, orderedpipelineAggregators);
         }
 
-        private List<PipelineAggregatorBuilder> resolvePipelineAggregatorOrder(List<PipelineAggregatorBuilder> pipelineAggregatorFactories,
-                List<AggregatorBuilder<?>> aggFactories) {
-            Map<String, PipelineAggregatorBuilder> pipelineAggregatorFactoriesMap = new HashMap<>();
-            for (PipelineAggregatorBuilder factory : pipelineAggregatorFactories) {
+        private List<PipelineAggregatorBuilder<?>> resolvePipelineAggregatorOrder(
+                List<PipelineAggregatorBuilder<?>> pipelineAggregatorFactories, List<AggregatorBuilder<?>> aggFactories) {
+            Map<String, PipelineAggregatorBuilder<?>> pipelineAggregatorFactoriesMap = new HashMap<>();
+            for (PipelineAggregatorBuilder<?> factory : pipelineAggregatorFactories) {
                 pipelineAggregatorFactoriesMap.put(factory.getName(), factory);
             }
             Map<String, AggregatorBuilder<?>> aggFactoriesMap = new HashMap<>();
             for (AggregatorBuilder<?> aggFactory : aggFactories) {
                 aggFactoriesMap.put(aggFactory.name, aggFactory);
             }
-            List<PipelineAggregatorBuilder> orderedPipelineAggregatorrs = new LinkedList<>();
-            List<PipelineAggregatorBuilder> unmarkedFactories = new ArrayList<PipelineAggregatorBuilder>(pipelineAggregatorFactories);
-            Set<PipelineAggregatorBuilder> temporarilyMarked = new HashSet<PipelineAggregatorBuilder>();
+            List<PipelineAggregatorBuilder<?>> orderedPipelineAggregatorrs = new LinkedList<>();
+            List<PipelineAggregatorBuilder<?>> unmarkedFactories = new ArrayList<PipelineAggregatorBuilder<?>>(pipelineAggregatorFactories);
+            Set<PipelineAggregatorBuilder<?>> temporarilyMarked = new HashSet<PipelineAggregatorBuilder<?>>();
             while (!unmarkedFactories.isEmpty()) {
-                PipelineAggregatorBuilder factory = unmarkedFactories.get(0);
+                PipelineAggregatorBuilder<?> factory = unmarkedFactories.get(0);
                 resolvePipelineAggregatorOrder(aggFactoriesMap, pipelineAggregatorFactoriesMap, orderedPipelineAggregatorrs,
                         unmarkedFactories, temporarilyMarked, factory);
             }
@@ -195,9 +195,9 @@ public class AggregatorFactories {
         }
 
         private void resolvePipelineAggregatorOrder(Map<String, AggregatorBuilder<?>> aggFactoriesMap,
-                Map<String, PipelineAggregatorBuilder> pipelineAggregatorFactoriesMap,
-                List<PipelineAggregatorBuilder> orderedPipelineAggregators, List<PipelineAggregatorBuilder> unmarkedFactories, Set<PipelineAggregatorBuilder> temporarilyMarked,
-                PipelineAggregatorBuilder factory) {
+                Map<String, PipelineAggregatorBuilder<?>> pipelineAggregatorFactoriesMap,
+                List<PipelineAggregatorBuilder<?>> orderedPipelineAggregators, List<PipelineAggregatorBuilder<?>> unmarkedFactories,
+                Set<PipelineAggregatorBuilder<?>> temporarilyMarked, PipelineAggregatorBuilder<?> factory) {
             if (temporarilyMarked.contains(factory)) {
                 throw new IllegalArgumentException("Cyclical dependancy found with pipeline aggregator [" + factory.getName() + "]");
             } else if (unmarkedFactories.contains(factory)) {
@@ -229,8 +229,8 @@ public class AggregatorFactories {
                                 }
                                 // Check the pipeline sub-aggregator factories
                                 if (!foundSubFactory && (i == bucketsPathElements.size() - 1)) {
-                                    List<PipelineAggregatorBuilder> subPipelineFactories = aggFactory.factoriesBuilder.pipelineAggregatorFactories;
-                                    for (PipelineAggregatorBuilder subFactory : subPipelineFactories) {
+                                    List<PipelineAggregatorBuilder<?>> subPipelineFactories = aggFactory.factoriesBuilder.pipelineAggregatorFactories;
+                                    for (PipelineAggregatorBuilder<?> subFactory : subPipelineFactories) {
                                         if (aggName.equals(subFactory.name())) {
                                             foundSubFactory = true;
                                             break;
@@ -245,7 +245,7 @@ public class AggregatorFactories {
                         }
                         continue;
                     } else {
-                        PipelineAggregatorBuilder matchingFactory = pipelineAggregatorFactoriesMap.get(firstAggName);
+                        PipelineAggregatorBuilder<?> matchingFactory = pipelineAggregatorFactoriesMap.get(firstAggName);
                         if (matchingFactory != null) {
                             resolvePipelineAggregatorOrder(aggFactoriesMap, pipelineAggregatorFactoriesMap, orderedPipelineAggregators,
                                     unmarkedFactories,
@@ -265,7 +265,7 @@ public class AggregatorFactories {
             return this.aggregatorBuilders.toArray(new AggregatorBuilder<?>[this.aggregatorBuilders.size()]);
         }
 
-        List<PipelineAggregatorBuilder> getPipelineAggregatorFactories() {
+        List<PipelineAggregatorBuilder<?>> getPipelineAggregatorFactories() {
             return this.pipelineAggregatorFactories;
         }
 
@@ -283,7 +283,7 @@ public class AggregatorFactories {
             }
             int pipelineFactoriesSize = in.readVInt();
             for (int i = 0; i < pipelineFactoriesSize; i++) {
-                PipelineAggregatorBuilder factory = in.readPipelineAggregatorFactory();
+                PipelineAggregatorBuilder<?> factory = in.readPipelineAggregatorFactory();
                 builder.addPipelineAggregator(factory);
             }
             return builder;
@@ -296,7 +296,7 @@ public class AggregatorFactories {
                 out.writeAggregatorFactory(factory);
             }
             out.writeVInt(this.pipelineAggregatorFactories.size());
-            for (PipelineAggregatorBuilder factory : pipelineAggregatorFactories) {
+            for (PipelineAggregatorBuilder<?> factory : pipelineAggregatorFactories) {
                 out.writePipelineAggregatorFactory(factory);
             }
         }
@@ -310,7 +310,7 @@ public class AggregatorFactories {
                 }
             }
             if (pipelineAggregatorFactories != null) {
-                for (PipelineAggregatorBuilder subAgg : pipelineAggregatorFactories) {
+                for (PipelineAggregatorBuilder<?> subAgg : pipelineAggregatorFactories) {
                     subAgg.toXContent(builder, params);
                 }
             }

+ 2 - 2
core/src/main/java/org/elasticsearch/search/aggregations/AggregatorParsers.java

@@ -67,7 +67,7 @@ public class AggregatorParsers {
         Map<String, PipelineAggregator.Parser> pipelineAggregatorParsersBuilder = new HashMap<>(pipelineAggregatorParsers.size());
         for (PipelineAggregator.Parser parser : pipelineAggregatorParsers) {
             pipelineAggregatorParsersBuilder.put(parser.type(), parser);
-            PipelineAggregatorBuilder factoryPrototype = parser.getFactoryPrototype();
+            PipelineAggregatorBuilder<?> factoryPrototype = parser.getFactoryPrototype();
             namedWriteableRegistry.registerPrototype(PipelineAggregatorBuilder.class, factoryPrototype);
         }
         this.pipelineAggregatorParsers = unmodifiableMap(pipelineAggregatorParsersBuilder);
@@ -134,7 +134,7 @@ public class AggregatorParsers {
             }
 
             AggregatorBuilder<?> aggFactory = null;
-            PipelineAggregatorBuilder pipelineAggregatorFactory = null;
+            PipelineAggregatorBuilder<?> pipelineAggregatorFactory = null;
             AggregatorFactories.Builder subFactories = null;
 
             Map<String, Object> metaData = null;

+ 3 - 4
core/src/main/java/org/elasticsearch/search/aggregations/bucket/children/ChildrenParser.java

@@ -22,8 +22,6 @@ import org.elasticsearch.common.ParsingException;
 import org.elasticsearch.common.xcontent.XContentParser;
 import org.elasticsearch.index.query.QueryParseContext;
 import org.elasticsearch.search.aggregations.Aggregator;
-import org.elasticsearch.search.aggregations.AggregatorBuilder;
-
 import java.io.IOException;
 
 /**
@@ -37,7 +35,8 @@ public class ChildrenParser implements Aggregator.Parser {
     }
 
     @Override
-    public AggregatorBuilder parse(String aggregationName, XContentParser parser, QueryParseContext context) throws IOException {
+    public ParentToChildrenAggregator.ChildrenAggregatorBuilder parse(String aggregationName, XContentParser parser,
+            QueryParseContext context) throws IOException {
         String childType = null;
 
         XContentParser.Token token;
@@ -67,7 +66,7 @@ public class ChildrenParser implements Aggregator.Parser {
             }
 
     @Override
-    public AggregatorBuilder<?> getFactoryPrototypes() {
+    public ParentToChildrenAggregator.ChildrenAggregatorBuilder getFactoryPrototypes() {
         return ParentToChildrenAggregator.ChildrenAggregatorBuilder.PROTOTYPE;
     }
 }

+ 1 - 3
core/src/main/java/org/elasticsearch/search/aggregations/bucket/filter/FilterParser.java

@@ -24,8 +24,6 @@ import org.elasticsearch.index.query.MatchAllQueryBuilder;
 import org.elasticsearch.index.query.QueryBuilder;
 import org.elasticsearch.index.query.QueryParseContext;
 import org.elasticsearch.search.aggregations.Aggregator;
-import org.elasticsearch.search.aggregations.AggregatorBuilder;
-
 import java.io.IOException;
 
 /**
@@ -53,7 +51,7 @@ public class FilterParser implements Aggregator.Parser {
     }
 
     @Override
-    public AggregatorBuilder<?> getFactoryPrototypes() {
+    public FilterAggregator.FilterAggregatorBuilder getFactoryPrototypes() {
         return FilterAggregator.FilterAggregatorBuilder.PROTOTYPE;
     }
 

+ 7 - 6
core/src/main/java/org/elasticsearch/search/aggregations/bucket/filters/FiltersParser.java

@@ -28,8 +28,6 @@ import org.elasticsearch.index.query.QueryBuilders;
 import org.elasticsearch.index.query.QueryParseContext;
 import org.elasticsearch.indices.query.IndicesQueriesRegistry;
 import org.elasticsearch.search.aggregations.Aggregator;
-import org.elasticsearch.search.aggregations.AggregatorBuilder;
-
 import java.io.IOException;
 import java.util.ArrayList;
 import java.util.List;
@@ -55,7 +53,8 @@ public class FiltersParser implements Aggregator.Parser {
     }
 
     @Override
-    public AggregatorBuilder parse(String aggregationName, XContentParser parser, QueryParseContext context) throws IOException {
+    public FiltersAggregator.FiltersAggregatorBuilder parse(String aggregationName, XContentParser parser, QueryParseContext context)
+            throws IOException {
 
         List<FiltersAggregator.KeyedFilter> keyedFilters = null;
         List<QueryBuilder<?>> nonKeyedFilters = null;
@@ -127,9 +126,11 @@ public class FiltersParser implements Aggregator.Parser {
 
         FiltersAggregator.FiltersAggregatorBuilder factory;
         if (keyedFilters != null) {
-            factory = new FiltersAggregator.FiltersAggregatorBuilder(aggregationName, keyedFilters.toArray(new FiltersAggregator.KeyedFilter[keyedFilters.size()]));
+            factory = new FiltersAggregator.FiltersAggregatorBuilder(aggregationName,
+                    keyedFilters.toArray(new FiltersAggregator.KeyedFilter[keyedFilters.size()]));
         } else {
-            factory = new FiltersAggregator.FiltersAggregatorBuilder(aggregationName, nonKeyedFilters.toArray(new QueryBuilder<?>[nonKeyedFilters.size()]));
+            factory = new FiltersAggregator.FiltersAggregatorBuilder(aggregationName,
+                    nonKeyedFilters.toArray(new QueryBuilder<?>[nonKeyedFilters.size()]));
         }
         if (otherBucket != null) {
             factory.otherBucket(otherBucket);
@@ -141,7 +142,7 @@ public class FiltersParser implements Aggregator.Parser {
     }
 
     @Override
-    public AggregatorBuilder<?> getFactoryPrototypes() {
+    public FiltersAggregator.FiltersAggregatorBuilder getFactoryPrototypes() {
         return FiltersAggregator.FiltersAggregatorBuilder.PROTOTYPE;
     }
 

+ 1 - 2
core/src/main/java/org/elasticsearch/search/aggregations/bucket/geogrid/GeoHashGridParser.java

@@ -34,7 +34,6 @@ import org.elasticsearch.index.fielddata.SortedBinaryDocValues;
 import org.elasticsearch.index.fielddata.SortedNumericDoubleValues;
 import org.elasticsearch.index.fielddata.SortingNumericDocValues;
 import org.elasticsearch.index.query.GeoBoundingBoxQueryBuilder;
-import org.elasticsearch.search.aggregations.AggregatorBuilder;
 import org.elasticsearch.search.aggregations.AggregatorFactory;
 import org.elasticsearch.search.aggregations.AggregatorFactories.Builder;
 import org.elasticsearch.search.aggregations.bucket.BucketUtils;
@@ -70,7 +69,7 @@ public class GeoHashGridParser extends GeoPointValuesSourceParser {
         return InternalGeoHashGrid.TYPE.name();
     }
     @Override
-    public AggregatorBuilder<?> getFactoryPrototypes() {
+    public GeoGridAggregatorBuilder getFactoryPrototypes() {
         return GeoGridAggregatorBuilder.PROTOTYPE;
     }
 

+ 1 - 0
core/src/main/java/org/elasticsearch/search/aggregations/bucket/geogrid/InternalGeoHashGrid.java

@@ -193,6 +193,7 @@ public class InternalGeoHashGrid extends InternalMultiBucketAggregation<Internal
         return new Bucket(prototype.geohashAsLong, prototype.docCount, aggregations);
     }
 
+    @SuppressWarnings("unchecked")
     @Override
     public List<GeoHashGrid.Bucket> getBuckets() {
         Object o = buckets;

+ 3 - 4
core/src/main/java/org/elasticsearch/search/aggregations/bucket/global/GlobalParser.java

@@ -21,8 +21,6 @@ package org.elasticsearch.search.aggregations.bucket.global;
 import org.elasticsearch.common.xcontent.XContentParser;
 import org.elasticsearch.index.query.QueryParseContext;
 import org.elasticsearch.search.aggregations.Aggregator;
-import org.elasticsearch.search.aggregations.AggregatorBuilder;
-
 import java.io.IOException;
 
 /**
@@ -36,13 +34,14 @@ public class GlobalParser implements Aggregator.Parser {
     }
 
     @Override
-    public AggregatorBuilder parse(String aggregationName, XContentParser parser, QueryParseContext context) throws IOException {
+    public GlobalAggregator.GlobalAggregatorBuilder parse(String aggregationName, XContentParser parser, QueryParseContext context)
+            throws IOException {
         parser.nextToken();
         return new GlobalAggregator.GlobalAggregatorBuilder(aggregationName);
     }
 
     @Override
-    public AggregatorBuilder<?> getFactoryPrototypes() {
+    public GlobalAggregator.GlobalAggregatorBuilder getFactoryPrototypes() {
         return GlobalAggregator.GlobalAggregatorBuilder.PROTOTYPE;
     }
 

+ 1 - 2
core/src/main/java/org/elasticsearch/search/aggregations/bucket/histogram/DateHistogramParser.java

@@ -21,7 +21,6 @@ package org.elasticsearch.search.aggregations.bucket.histogram;
 import org.elasticsearch.common.ParseField;
 import org.elasticsearch.common.ParsingException;
 import org.elasticsearch.common.rounding.Rounding;
-import org.elasticsearch.search.aggregations.AggregatorBuilder;
 import org.elasticsearch.search.aggregations.bucket.histogram.HistogramAggregator.DateHistogramAggregatorBuilder;
 import org.elasticsearch.search.aggregations.support.ValueType;
 import org.elasticsearch.search.aggregations.support.ValuesSourceType;
@@ -100,7 +99,7 @@ public class DateHistogramParser extends HistogramParser {
     }
 
     @Override
-    public AggregatorBuilder<?> getFactoryPrototypes() {
+    public DateHistogramAggregatorBuilder getFactoryPrototypes() {
         return HistogramAggregator.DateHistogramAggregatorBuilder.PROTOTYPE;
     }
 }

+ 8 - 1
core/src/main/java/org/elasticsearch/search/aggregations/bucket/histogram/HistogramAggregator.java

@@ -198,6 +198,7 @@ public class HistogramAggregator extends BucketsAggregator {
             return interval;
         }
 
+        @SuppressWarnings("unchecked")
         public AB interval(long interval) {
             if (interval < 1) {
                 throw new IllegalArgumentException("[interval] must be 1 or greater for histogram aggregation [" + name + "]");
@@ -210,6 +211,7 @@ public class HistogramAggregator extends BucketsAggregator {
             return offset;
         }
 
+        @SuppressWarnings("unchecked")
         public AB offset(long offset) {
             this.offset = offset;
             return (AB) this;
@@ -219,6 +221,7 @@ public class HistogramAggregator extends BucketsAggregator {
             return order;
         }
 
+        @SuppressWarnings("unchecked")
         public AB order(Histogram.Order order) {
             if (order == null) {
                 throw new IllegalArgumentException("[order] must not be null: [" + name + "]");
@@ -231,6 +234,7 @@ public class HistogramAggregator extends BucketsAggregator {
             return keyed;
         }
 
+        @SuppressWarnings("unchecked")
         public AB keyed(boolean keyed) {
             this.keyed = keyed;
             return (AB) this;
@@ -240,6 +244,7 @@ public class HistogramAggregator extends BucketsAggregator {
             return minDocCount;
         }
 
+        @SuppressWarnings("unchecked")
         public AB minDocCount(long minDocCount) {
             if (minDocCount < 0) {
                 throw new IllegalArgumentException(
@@ -253,6 +258,7 @@ public class HistogramAggregator extends BucketsAggregator {
             return extendedBounds;
         }
 
+        @SuppressWarnings("unchecked")
         public AB extendedBounds(ExtendedBounds extendedBounds) {
             if (extendedBounds == null) {
                 throw new IllegalArgumentException("[extendedBounds] must not be null: [" + name + "]");
@@ -294,6 +300,7 @@ public class HistogramAggregator extends BucketsAggregator {
             return InternalHistogram.TYPE.name();
         }
 
+        @SuppressWarnings("unchecked")
         @Override
         protected AB innerReadFrom(String name, ValuesSourceType valuesSourceType, ValueType targetValueType, StreamInput in)
                 throws IOException {
@@ -343,7 +350,7 @@ public class HistogramAggregator extends BucketsAggregator {
 
         @Override
         protected boolean innerEquals(Object obj) {
-            AbstractBuilder other = (AbstractBuilder) obj;
+            AbstractBuilder<?> other = (AbstractBuilder<?>) obj;
             return Objects.equals(interval, other.interval)
                     && Objects.equals(offset, other.offset)
                     && Objects.equals(order, other.order)

+ 1 - 2
core/src/main/java/org/elasticsearch/search/aggregations/bucket/histogram/HistogramParser.java

@@ -24,7 +24,6 @@ import org.elasticsearch.common.ParsingException;
 import org.elasticsearch.common.rounding.Rounding;
 import org.elasticsearch.common.xcontent.XContentParser;
 import org.elasticsearch.common.xcontent.XContentParser.Token;
-import org.elasticsearch.search.aggregations.AggregatorBuilder;
 import org.elasticsearch.search.aggregations.support.AbstractValuesSourceParser.NumericValuesSourceParser;
 import org.elasticsearch.search.aggregations.support.ValueType;
 import org.elasticsearch.search.aggregations.support.ValuesSourceType;
@@ -163,7 +162,7 @@ public class HistogramParser extends NumericValuesSourceParser {
     }
 
     @Override
-    public AggregatorBuilder<?> getFactoryPrototypes() {
+    public HistogramAggregator.AbstractBuilder<?> getFactoryPrototypes() {
         return HistogramAggregator.HistogramAggregatorBuilder.PROTOTYPE;
     }
 }

+ 10 - 3
core/src/main/java/org/elasticsearch/search/aggregations/bucket/histogram/InternalHistogram.java

@@ -49,13 +49,15 @@ import java.util.Map;
 /**
  * TODO should be renamed to InternalNumericHistogram (see comment on {@link Histogram})?
  */
-public class InternalHistogram<B extends InternalHistogram.Bucket> extends InternalMultiBucketAggregation<InternalHistogram, B> implements
+public class InternalHistogram<B extends InternalHistogram.Bucket> extends InternalMultiBucketAggregation<InternalHistogram<B>, B>
+        implements
         Histogram {
 
     public static final Factory<Bucket> HISTOGRAM_FACTORY = new Factory<Bucket>();
     final static Type TYPE = new Type("histogram", "histo");
 
     private final static AggregationStreams.Stream STREAM = new AggregationStreams.Stream() {
+        @SuppressWarnings("rawtypes")
         @Override
         public InternalHistogram readResult(StreamInput in) throws IOException {
             InternalHistogram histogram = new InternalHistogram();
@@ -106,7 +108,7 @@ public class InternalHistogram<B extends InternalHistogram.Bucket> extends Inter
             this.factory = factory;
         }
 
-        public Bucket(long key, long docCount, boolean keyed, ValueFormatter formatter, Factory factory,
+        public Bucket(long key, long docCount, boolean keyed, ValueFormatter formatter, Factory<?> factory,
                 InternalAggregations aggregations) {
             this(keyed, formatter, factory);
             this.key = key;
@@ -138,6 +140,7 @@ public class InternalHistogram<B extends InternalHistogram.Bucket> extends Inter
             return aggregations;
         }
 
+        @SuppressWarnings("unchecked")
         <B extends Bucket> B reduce(List<B> buckets, ReduceContext context) {
             List<InternalAggregations> aggregations = new ArrayList<>(buckets.size());
             long docCount = 0;
@@ -258,10 +261,12 @@ public class InternalHistogram<B extends InternalHistogram.Bucket> extends Inter
                     prototype.formatter, prototype.keyed, this, prototype.pipelineAggregators(), prototype.metaData);
         }
 
+        @SuppressWarnings("unchecked")
         public B createBucket(InternalAggregations aggregations, B prototype) {
             return (B) new Bucket(prototype.key, prototype.docCount, prototype.getKeyed(), prototype.formatter, this, aggregations);
         }
 
+        @SuppressWarnings("unchecked")
         public B createBucket(Object key, long docCount, InternalAggregations aggregations, boolean keyed, ValueFormatter formatter) {
             if (key instanceof Number) {
                 return (B) new Bucket(((Number) key).longValue(), docCount, keyed, formatter, this, aggregations);
@@ -270,6 +275,7 @@ public class InternalHistogram<B extends InternalHistogram.Bucket> extends Inter
             }
         }
 
+        @SuppressWarnings("unchecked")
         protected B createEmptyBucket(boolean keyed, ValueFormatter formatter) {
             return (B) new Bucket(keyed, formatter, this);
         }
@@ -349,7 +355,8 @@ public class InternalHistogram<B extends InternalHistogram.Bucket> extends Inter
             }
         };
         for (InternalAggregation aggregation : aggregations) {
-            InternalHistogram<B> histogram = (InternalHistogram) aggregation;
+            @SuppressWarnings("unchecked")
+            InternalHistogram<B> histogram = (InternalHistogram<B>) aggregation;
             if (histogram.buckets.isEmpty() == false) {
                 pq.add(new IteratorAndCurrent<>(histogram.buckets.iterator()));
             }

+ 1 - 2
core/src/main/java/org/elasticsearch/search/aggregations/bucket/missing/MissingParser.java

@@ -21,7 +21,6 @@ package org.elasticsearch.search.aggregations.bucket.missing;
 import org.elasticsearch.common.ParseField;
 import org.elasticsearch.common.ParseFieldMatcher;
 import org.elasticsearch.common.xcontent.XContentParser;
-import org.elasticsearch.search.aggregations.AggregatorBuilder;
 import org.elasticsearch.search.aggregations.support.AbstractValuesSourceParser.AnyValuesSourceParser;
 import org.elasticsearch.search.aggregations.support.ValueType;
 import org.elasticsearch.search.aggregations.support.ValuesSourceType;
@@ -53,7 +52,7 @@ public class MissingParser extends AnyValuesSourceParser {
     }
 
     @Override
-    public AggregatorBuilder<?> getFactoryPrototypes() {
+    public MissingAggregator.MissingAggregatorBuilder getFactoryPrototypes() {
         return MissingAggregator.MissingAggregatorBuilder.PROTOTYPE;
     }
 }

+ 3 - 4
core/src/main/java/org/elasticsearch/search/aggregations/bucket/nested/NestedParser.java

@@ -22,8 +22,6 @@ import org.elasticsearch.common.ParsingException;
 import org.elasticsearch.common.xcontent.XContentParser;
 import org.elasticsearch.index.query.QueryParseContext;
 import org.elasticsearch.search.aggregations.Aggregator;
-import org.elasticsearch.search.aggregations.AggregatorBuilder;
-
 import java.io.IOException;
 
 /**
@@ -37,7 +35,8 @@ public class NestedParser implements Aggregator.Parser {
     }
 
     @Override
-    public AggregatorBuilder parse(String aggregationName, XContentParser parser, QueryParseContext context) throws IOException {
+    public NestedAggregator.NestedAggregatorBuilder parse(String aggregationName, XContentParser parser, QueryParseContext context)
+            throws IOException {
         String path = null;
 
         XContentParser.Token token;
@@ -66,7 +65,7 @@ public class NestedParser implements Aggregator.Parser {
     }
 
     @Override
-    public AggregatorBuilder<?> getFactoryPrototypes() {
+    public NestedAggregator.NestedAggregatorBuilder getFactoryPrototypes() {
         return NestedAggregator.NestedAggregatorBuilder.PROTOTYPE;
     }
 }

+ 3 - 4
core/src/main/java/org/elasticsearch/search/aggregations/bucket/nested/ReverseNestedParser.java

@@ -22,8 +22,6 @@ import org.elasticsearch.common.ParsingException;
 import org.elasticsearch.common.xcontent.XContentParser;
 import org.elasticsearch.index.query.QueryParseContext;
 import org.elasticsearch.search.aggregations.Aggregator;
-import org.elasticsearch.search.aggregations.AggregatorBuilder;
-
 import java.io.IOException;
 
 /**
@@ -37,7 +35,8 @@ public class ReverseNestedParser implements Aggregator.Parser {
     }
 
     @Override
-    public AggregatorBuilder parse(String aggregationName, XContentParser parser, QueryParseContext context) throws IOException {
+    public ReverseNestedAggregator.ReverseNestedAggregatorBuilder parse(String aggregationName, XContentParser parser,
+            QueryParseContext context) throws IOException {
         String path = null;
 
         XContentParser.Token token;
@@ -66,7 +65,7 @@ public class ReverseNestedParser implements Aggregator.Parser {
     }
 
     @Override
-    public AggregatorBuilder<?> getFactoryPrototypes() {
+    public ReverseNestedAggregator.ReverseNestedAggregatorBuilder getFactoryPrototypes() {
         return ReverseNestedAggregator.ReverseNestedAggregatorBuilder.PROTOTYPE;
     }
 }

+ 6 - 1
core/src/main/java/org/elasticsearch/search/aggregations/bucket/range/InternalRange.java

@@ -235,21 +235,25 @@ public class InternalRange<B extends InternalRange.Bucket, R extends InternalRan
             return ValueType.NUMERIC;
         }
 
+        @SuppressWarnings("unchecked")
         public R create(String name, List<B> ranges, ValueFormatter formatter, boolean keyed, List<PipelineAggregator> pipelineAggregators,
                 Map<String, Object> metaData) {
             return (R) new InternalRange<>(name, ranges, formatter, keyed, pipelineAggregators, metaData);
         }
 
+        @SuppressWarnings("unchecked")
         public B createBucket(String key, double from, double to, long docCount, InternalAggregations aggregations, boolean keyed,
                 ValueFormatter formatter) {
             return (B) new Bucket(key, from, to, docCount, aggregations, keyed, formatter);
         }
 
+        @SuppressWarnings("unchecked")
         public R create(List<B> ranges, R prototype) {
             return (R) new InternalRange<>(prototype.name, ranges, prototype.formatter, prototype.keyed, prototype.pipelineAggregators(),
                     prototype.metaData);
         }
 
+        @SuppressWarnings("unchecked")
         public B createBucket(InternalAggregations aggregations, B prototype) {
             return (B) new Bucket(prototype.getKey(), prototype.from, prototype.to, prototype.getDocCount(), aggregations, prototype.keyed,
                     prototype.formatter);
@@ -286,6 +290,7 @@ public class InternalRange<B extends InternalRange.Bucket, R extends InternalRan
         return FACTORY;
     }
 
+    @SuppressWarnings("unchecked")
     @Override
     public R create(List<B> buckets) {
         return getFactory().create(buckets, (R) this);
@@ -296,9 +301,9 @@ public class InternalRange<B extends InternalRange.Bucket, R extends InternalRan
         return getFactory().createBucket(aggregations, prototype);
     }
 
+    @SuppressWarnings("unchecked")
     @Override
     public InternalAggregation doReduce(List<InternalAggregation> aggregations, ReduceContext reduceContext) {
-        @SuppressWarnings("unchecked")
         List<Bucket>[] rangeList = new List[ranges.size()];
         for (int i = 0; i < rangeList.length; ++i) {
             rangeList[i] = new ArrayList<Bucket>();

+ 2 - 2
core/src/main/java/org/elasticsearch/search/aggregations/bucket/range/RangeParser.java

@@ -22,7 +22,6 @@ import org.elasticsearch.common.ParseField;
 import org.elasticsearch.common.ParseFieldMatcher;
 import org.elasticsearch.common.xcontent.XContentParser;
 import org.elasticsearch.common.xcontent.XContentParser.Token;
-import org.elasticsearch.search.aggregations.AggregatorBuilder;
 import org.elasticsearch.search.aggregations.bucket.range.RangeAggregator.Range;
 import org.elasticsearch.search.aggregations.support.AbstractValuesSourceParser.NumericValuesSourceParser;
 import org.elasticsearch.search.aggregations.support.ValueType;
@@ -55,6 +54,7 @@ public class RangeParser extends NumericValuesSourceParser {
     protected RangeAggregator.AbstractBuilder<?, ?> createFactory(String aggregationName, ValuesSourceType valuesSourceType,
             ValueType targetValueType, Map<ParseField, Object> otherOptions) {
         RangeAggregator.RangeAggregatorBuilder factory = new RangeAggregator.RangeAggregatorBuilder(aggregationName);
+        @SuppressWarnings("unchecked")
         List<? extends Range> ranges = (List<? extends Range>) otherOptions.get(RangeAggregator.RANGES_FIELD);
         for (Range range : ranges) {
             factory.addRange(range);
@@ -94,7 +94,7 @@ public class RangeParser extends NumericValuesSourceParser {
     }
 
     @Override
-    public AggregatorBuilder<?> getFactoryPrototypes() {
+    public RangeAggregator.AbstractBuilder<?, ?> getFactoryPrototypes() {
         return RangeAggregator.RangeAggregatorBuilder.PROTOTYPE;
     }
 }

+ 2 - 2
core/src/main/java/org/elasticsearch/search/aggregations/bucket/range/date/DateRangeParser.java

@@ -19,7 +19,6 @@
 package org.elasticsearch.search.aggregations.bucket.range.date;
 
 import org.elasticsearch.common.ParseField;
-import org.elasticsearch.search.aggregations.AggregatorBuilder;
 import org.elasticsearch.search.aggregations.bucket.range.RangeAggregator;
 import org.elasticsearch.search.aggregations.bucket.range.RangeAggregator.Range;
 import org.elasticsearch.search.aggregations.bucket.range.RangeParser;
@@ -47,6 +46,7 @@ public class DateRangeParser extends RangeParser {
     protected DateRangeAggregatorBuilder createFactory(String aggregationName, ValuesSourceType valuesSourceType,
             ValueType targetValueType, Map<ParseField, Object> otherOptions) {
         DateRangeAggregatorBuilder factory = new DateRangeAggregatorBuilder(aggregationName);
+        @SuppressWarnings("unchecked")
         List<Range> ranges = (List<Range>) otherOptions.get(RangeAggregator.RANGES_FIELD);
         for (Range range : ranges) {
             factory.addRange(range);
@@ -59,7 +59,7 @@ public class DateRangeParser extends RangeParser {
     }
 
     @Override
-    public AggregatorBuilder<?> getFactoryPrototypes() {
+    public DateRangeAggregatorBuilder getFactoryPrototypes() {
         return DateRangeAggregatorBuilder.PROTOTYPE;
     }
 }

+ 4 - 5
core/src/main/java/org/elasticsearch/search/aggregations/bucket/range/geodistance/GeoDistanceParser.java

@@ -28,7 +28,6 @@ import org.elasticsearch.common.unit.DistanceUnit;
 import org.elasticsearch.common.xcontent.XContentBuilder;
 import org.elasticsearch.common.xcontent.XContentParser;
 import org.elasticsearch.common.xcontent.XContentParser.Token;
-import org.elasticsearch.search.aggregations.AggregatorBuilder;
 import org.elasticsearch.search.aggregations.AggregatorFactory;
 import org.elasticsearch.search.aggregations.AggregatorFactories.Builder;
 import org.elasticsearch.search.aggregations.bucket.range.InternalRange;
@@ -110,6 +109,7 @@ public class GeoDistanceParser extends GeoPointValuesSourceParser {
             String aggregationName, ValuesSourceType valuesSourceType, ValueType targetValueType, Map<ParseField, Object> otherOptions) {
         GeoPoint origin = (GeoPoint) otherOptions.get(ORIGIN_FIELD);
         GeoDistanceAggregatorBuilder factory = new GeoDistanceAggregatorBuilder(aggregationName, origin);
+        @SuppressWarnings("unchecked")
         List<Range> ranges = (List<Range>) otherOptions.get(RangeAggregator.RANGES_FIELD);
         for (Range range : ranges) {
             factory.addRange(range);
@@ -197,7 +197,6 @@ public class GeoDistanceParser extends GeoPointValuesSourceParser {
         static final GeoDistanceAggregatorBuilder PROTOTYPE = new GeoDistanceAggregatorBuilder("", new GeoPoint());
 
         private final GeoPoint origin;
-        private final InternalRange.Factory rangeFactory;
         private List<Range> ranges = new ArrayList<>();
         private DistanceUnit unit = DistanceUnit.DEFAULT;
         private GeoDistance distanceType = GeoDistance.DEFAULT;
@@ -207,13 +206,13 @@ public class GeoDistanceParser extends GeoPointValuesSourceParser {
             this(name, origin, InternalGeoDistance.FACTORY);
         }
 
-        private GeoDistanceAggregatorBuilder(String name, GeoPoint origin, InternalRange.Factory rangeFactory) {
+        private GeoDistanceAggregatorBuilder(String name, GeoPoint origin,
+                InternalRange.Factory<InternalGeoDistance.Bucket, InternalGeoDistance> rangeFactory) {
             super(name, rangeFactory.type(), rangeFactory.getValueSourceType(), rangeFactory.getValueType());
             if (origin == null) {
                 throw new IllegalArgumentException("[origin] must not be null: [" + name + "]");
             }
             this.origin = origin;
-            this.rangeFactory = rangeFactory;
         }
 
         public GeoDistanceAggregatorBuilder addRange(Range range) {
@@ -396,7 +395,7 @@ public class GeoDistanceParser extends GeoPointValuesSourceParser {
     }
 
     @Override
-    public AggregatorBuilder<?> getFactoryPrototypes() {
+    public GeoDistanceAggregatorBuilder getFactoryPrototypes() {
         return GeoDistanceAggregatorBuilder.PROTOTYPE;
     }
 

+ 2 - 2
core/src/main/java/org/elasticsearch/search/aggregations/bucket/range/ipv4/IpRangeParser.java

@@ -21,7 +21,6 @@ package org.elasticsearch.search.aggregations.bucket.range.ipv4;
 import org.elasticsearch.common.ParseField;
 import org.elasticsearch.common.ParseFieldMatcher;
 import org.elasticsearch.common.xcontent.XContentParser;
-import org.elasticsearch.search.aggregations.AggregatorBuilder;
 import org.elasticsearch.search.aggregations.bucket.range.RangeAggregator;
 import org.elasticsearch.search.aggregations.bucket.range.RangeAggregator.Range;
 import org.elasticsearch.search.aggregations.bucket.range.RangeParser;
@@ -55,6 +54,7 @@ public class IpRangeParser extends RangeParser {
     protected IPv4RangeAggregatorBuilder createFactory(String aggregationName, ValuesSourceType valuesSourceType,
             ValueType targetValueType, Map<ParseField, Object> otherOptions) {
         IPv4RangeAggregatorBuilder factory = new IPv4RangeAggregatorBuilder(aggregationName);
+        @SuppressWarnings("unchecked")
         List<IPv4RangeAggregatorBuilder.Range> ranges = (List<IPv4RangeAggregatorBuilder.Range>) otherOptions
                 .get(RangeAggregator.RANGES_FIELD);
         for (IPv4RangeAggregatorBuilder.Range range : ranges) {
@@ -68,7 +68,7 @@ public class IpRangeParser extends RangeParser {
         }
 
     @Override
-    public AggregatorBuilder<?> getFactoryPrototypes() {
+    public IPv4RangeAggregatorBuilder getFactoryPrototypes() {
         return IPv4RangeAggregatorBuilder.PROTOTYPE;
     }
 

+ 3 - 4
core/src/main/java/org/elasticsearch/search/aggregations/bucket/sampler/SamplerParser.java

@@ -23,8 +23,6 @@ import org.elasticsearch.common.ParsingException;
 import org.elasticsearch.common.xcontent.XContentParser;
 import org.elasticsearch.index.query.QueryParseContext;
 import org.elasticsearch.search.aggregations.Aggregator;
-import org.elasticsearch.search.aggregations.AggregatorBuilder;
-
 import java.io.IOException;
 
 /**
@@ -38,7 +36,8 @@ public class SamplerParser implements Aggregator.Parser {
     }
 
     @Override
-    public AggregatorBuilder parse(String aggregationName, XContentParser parser, QueryParseContext context) throws IOException {
+    public SamplerAggregator.SamplerAggregatorBuilder parse(String aggregationName, XContentParser parser, QueryParseContext context)
+            throws IOException {
 
         XContentParser.Token token;
         String currentFieldName = null;
@@ -68,7 +67,7 @@ public class SamplerParser implements Aggregator.Parser {
     }
 
     @Override
-    public AggregatorBuilder<?> getFactoryPrototypes() {
+    public SamplerAggregator.SamplerAggregatorBuilder getFactoryPrototypes() {
         return SamplerAggregator.SamplerAggregatorBuilder.PROTOTYPE;
     }
 

+ 1 - 2
core/src/main/java/org/elasticsearch/search/aggregations/bucket/significant/SignificantTermsParser.java

@@ -27,7 +27,6 @@ import org.elasticsearch.index.query.QueryBuilder;
 import org.elasticsearch.index.query.QueryParseContext;
 import org.elasticsearch.indices.query.IndicesQueriesRegistry;
 import org.elasticsearch.search.aggregations.Aggregator.SubAggCollectionMode;
-import org.elasticsearch.search.aggregations.AggregatorBuilder;
 import org.elasticsearch.search.aggregations.bucket.significant.heuristics.SignificanceHeuristic;
 import org.elasticsearch.search.aggregations.bucket.significant.heuristics.SignificanceHeuristicParser;
 import org.elasticsearch.search.aggregations.bucket.significant.heuristics.SignificanceHeuristicParserMapper;
@@ -107,7 +106,7 @@ public class SignificantTermsParser extends AbstractTermsParser {
     }
 
     @Override
-    public AggregatorBuilder<?> getFactoryPrototypes() {
+    public SignificantTermsAggregatorBuilder getFactoryPrototypes() {
         return SignificantTermsAggregatorBuilder.PROTOTYPE;
     }
 

+ 2 - 2
core/src/main/java/org/elasticsearch/search/aggregations/bucket/terms/TermsParser.java

@@ -24,7 +24,6 @@ import org.elasticsearch.common.ParsingException;
 import org.elasticsearch.common.xcontent.XContentParser;
 import org.elasticsearch.common.xcontent.XContentParser.Token;
 import org.elasticsearch.search.aggregations.Aggregator.SubAggCollectionMode;
-import org.elasticsearch.search.aggregations.AggregatorBuilder;
 import org.elasticsearch.search.aggregations.bucket.terms.Terms.Order;
 import org.elasticsearch.search.aggregations.bucket.terms.TermsAggregator.BucketCountThresholds;
 import org.elasticsearch.search.aggregations.bucket.terms.support.IncludeExclude;
@@ -53,6 +52,7 @@ public class TermsParser extends AbstractTermsParser {
             ValueType targetValueType, BucketCountThresholds bucketCountThresholds, SubAggCollectionMode collectMode, String executionHint,
             IncludeExclude incExc, Map<ParseField, Object> otherOptions) {
         TermsAggregatorBuilder factory = new TermsAggregatorBuilder(aggregationName, targetValueType);
+        @SuppressWarnings("unchecked")
         List<OrderElement> orderElements = (List<OrderElement>) otherOptions.get(TermsAggregatorBuilder.ORDER_FIELD);
         if (orderElements != null) {
             List<Terms.Order> orders = new ArrayList<>(orderElements.size());
@@ -179,7 +179,7 @@ public class TermsParser extends AbstractTermsParser {
     }
 
     @Override
-    public AggregatorBuilder<?> getFactoryPrototypes() {
+    public TermsAggregatorBuilder getFactoryPrototypes() {
         return TermsAggregatorBuilder.PROTOTYPE;
     }
 

+ 1 - 2
core/src/main/java/org/elasticsearch/search/aggregations/metrics/avg/AvgParser.java

@@ -21,7 +21,6 @@ package org.elasticsearch.search.aggregations.metrics.avg;
 import org.elasticsearch.common.ParseField;
 import org.elasticsearch.common.ParseFieldMatcher;
 import org.elasticsearch.common.xcontent.XContentParser;
-import org.elasticsearch.search.aggregations.AggregatorBuilder;
 import org.elasticsearch.search.aggregations.support.AbstractValuesSourceParser.NumericValuesSourceParser;
 import org.elasticsearch.search.aggregations.support.ValueType;
 import org.elasticsearch.search.aggregations.support.ValuesSourceType;
@@ -56,7 +55,7 @@ public class AvgParser extends NumericValuesSourceParser {
     }
 
     @Override
-    public AggregatorBuilder<?> getFactoryPrototypes() {
+    public AvgAggregator.AvgAggregatorBuilder getFactoryPrototypes() {
         return AvgAggregator.AvgAggregatorBuilder.PROTOTYPE;
     }
 

+ 1 - 2
core/src/main/java/org/elasticsearch/search/aggregations/metrics/cardinality/CardinalityParser.java

@@ -23,7 +23,6 @@ import org.elasticsearch.common.ParseField;
 import org.elasticsearch.common.ParseFieldMatcher;
 import org.elasticsearch.common.xcontent.XContentParser;
 import org.elasticsearch.common.xcontent.XContentParser.Token;
-import org.elasticsearch.search.aggregations.AggregatorBuilder;
 import org.elasticsearch.search.aggregations.support.AbstractValuesSourceParser.AnyValuesSourceParser;
 import org.elasticsearch.search.aggregations.support.ValueType;
 import org.elasticsearch.search.aggregations.support.ValuesSourceType;
@@ -72,7 +71,7 @@ public class CardinalityParser extends AnyValuesSourceParser {
     }
 
     @Override
-    public AggregatorBuilder<?> getFactoryPrototypes() {
+    public CardinalityAggregatorBuilder getFactoryPrototypes() {
         return CardinalityAggregatorBuilder.PROTOTYPE;
     }
 }

+ 1 - 2
core/src/main/java/org/elasticsearch/search/aggregations/metrics/geobounds/GeoBoundsParser.java

@@ -23,7 +23,6 @@ import org.elasticsearch.common.ParseField;
 import org.elasticsearch.common.ParseFieldMatcher;
 import org.elasticsearch.common.xcontent.XContentParser;
 import org.elasticsearch.common.xcontent.XContentParser.Token;
-import org.elasticsearch.search.aggregations.AggregatorBuilder;
 import org.elasticsearch.search.aggregations.support.AbstractValuesSourceParser.GeoPointValuesSourceParser;
 import org.elasticsearch.search.aggregations.support.ValueType;
 import org.elasticsearch.search.aggregations.support.ValuesSourceType;
@@ -66,7 +65,7 @@ public class GeoBoundsParser extends GeoPointValuesSourceParser {
     }
 
     @Override
-    public AggregatorBuilder<?> getFactoryPrototypes() {
+    public GeoBoundsAggregator.GeoBoundsAggregatorBuilder getFactoryPrototypes() {
         return GeoBoundsAggregator.GeoBoundsAggregatorBuilder.PROTOTYPE;
     }
 

+ 1 - 2
core/src/main/java/org/elasticsearch/search/aggregations/metrics/geocentroid/GeoCentroidParser.java

@@ -23,7 +23,6 @@ import org.elasticsearch.common.ParseField;
 import org.elasticsearch.common.ParseFieldMatcher;
 import org.elasticsearch.common.xcontent.XContentParser;
 import org.elasticsearch.common.xcontent.XContentParser.Token;
-import org.elasticsearch.search.aggregations.AggregatorBuilder;
 import org.elasticsearch.search.aggregations.support.AbstractValuesSourceParser.GeoPointValuesSourceParser;
 import org.elasticsearch.search.aggregations.support.ValueType;
 import org.elasticsearch.search.aggregations.support.ValuesSourceType;
@@ -58,7 +57,7 @@ public class GeoCentroidParser extends GeoPointValuesSourceParser {
     }
 
     @Override
-    public AggregatorBuilder<?> getFactoryPrototypes() {
+    public GeoCentroidAggregator.GeoCentroidAggregatorBuilder getFactoryPrototypes() {
         return GeoCentroidAggregator.GeoCentroidAggregatorBuilder.PROTOTYPE;
     }
 }

+ 1 - 2
core/src/main/java/org/elasticsearch/search/aggregations/metrics/max/MaxParser.java

@@ -21,7 +21,6 @@ package org.elasticsearch.search.aggregations.metrics.max;
 import org.elasticsearch.common.ParseField;
 import org.elasticsearch.common.ParseFieldMatcher;
 import org.elasticsearch.common.xcontent.XContentParser;
-import org.elasticsearch.search.aggregations.AggregatorBuilder;
 import org.elasticsearch.search.aggregations.support.AbstractValuesSourceParser.NumericValuesSourceParser;
 import org.elasticsearch.search.aggregations.support.ValueType;
 import org.elasticsearch.search.aggregations.support.ValuesSourceType;
@@ -56,7 +55,7 @@ public class MaxParser extends NumericValuesSourceParser {
     }
 
     @Override
-    public AggregatorBuilder<?> getFactoryPrototypes() {
+    public MaxAggregator.MaxAggregatorBuilder getFactoryPrototypes() {
         return MaxAggregator.MaxAggregatorBuilder.PROTOTYPE;
     }
 

+ 1 - 2
core/src/main/java/org/elasticsearch/search/aggregations/metrics/min/MinParser.java

@@ -22,7 +22,6 @@ import org.elasticsearch.common.ParseField;
 import org.elasticsearch.common.ParseFieldMatcher;
 import org.elasticsearch.common.xcontent.XContentParser;
 import org.elasticsearch.common.xcontent.XContentParser.Token;
-import org.elasticsearch.search.aggregations.AggregatorBuilder;
 import org.elasticsearch.search.aggregations.support.AbstractValuesSourceParser.NumericValuesSourceParser;
 import org.elasticsearch.search.aggregations.support.ValueType;
 import org.elasticsearch.search.aggregations.support.ValuesSourceType;
@@ -57,7 +56,7 @@ public class MinParser extends NumericValuesSourceParser {
     }
 
     @Override
-    public AggregatorBuilder<?> getFactoryPrototypes() {
+    public MinAggregator.MinAggregatorBuilder getFactoryPrototypes() {
         return MinAggregator.MinAggregatorBuilder.PROTOTYPE;
     }
 }

+ 0 - 2
core/src/main/java/org/elasticsearch/search/aggregations/metrics/percentiles/AbstractPercentilesParser.java

@@ -40,8 +40,6 @@ public abstract class AbstractPercentilesParser extends NumericValuesSourceParse
     public static final ParseField COMPRESSION_FIELD = new ParseField("compression");
     public static final ParseField NUMBER_SIGNIFICANT_DIGITS_FIELD = new ParseField("number_of_significant_value_digits");
 
-    private boolean formattable;
-
     public AbstractPercentilesParser(boolean formattable) {
         super(true, formattable, false);
     }

+ 1 - 2
core/src/main/java/org/elasticsearch/search/aggregations/metrics/percentiles/PercentileRanksParser.java

@@ -19,7 +19,6 @@
 package org.elasticsearch.search.aggregations.metrics.percentiles;
 
 import org.elasticsearch.common.ParseField;
-import org.elasticsearch.search.aggregations.AggregatorBuilder;
 import org.elasticsearch.search.aggregations.metrics.percentiles.tdigest.InternalTDigestPercentileRanks;
 import org.elasticsearch.search.aggregations.support.ValuesSource.Numeric;
 import org.elasticsearch.search.aggregations.support.ValuesSourceAggregatorBuilder;
@@ -68,7 +67,7 @@ public class PercentileRanksParser extends AbstractPercentilesParser {
     }
 
     @Override
-    public AggregatorBuilder<?> getFactoryPrototypes() {
+    public PercentileRanksAggregatorBuilder getFactoryPrototypes() {
         return PercentileRanksAggregatorBuilder.PROTOTYPE;
     }
 

+ 1 - 2
core/src/main/java/org/elasticsearch/search/aggregations/metrics/percentiles/PercentilesParser.java

@@ -19,7 +19,6 @@
 package org.elasticsearch.search.aggregations.metrics.percentiles;
 
 import org.elasticsearch.common.ParseField;
-import org.elasticsearch.search.aggregations.AggregatorBuilder;
 import org.elasticsearch.search.aggregations.metrics.percentiles.tdigest.InternalTDigestPercentiles;
 import org.elasticsearch.search.aggregations.support.ValuesSource.Numeric;
 import org.elasticsearch.search.aggregations.support.ValuesSourceAggregatorBuilder;
@@ -70,7 +69,7 @@ public class PercentilesParser extends AbstractPercentilesParser {
     }
 
     @Override
-    public AggregatorBuilder<?> getFactoryPrototypes() {
+    public PercentilesAggregatorBuilder getFactoryPrototypes() {
         return PercentilesAggregatorBuilder.PROTOTYPE;
     }
 

+ 3 - 4
core/src/main/java/org/elasticsearch/search/aggregations/metrics/scripted/ScriptedMetricParser.java

@@ -27,8 +27,6 @@ import org.elasticsearch.script.Script;
 import org.elasticsearch.script.ScriptParameterParser;
 import org.elasticsearch.script.ScriptParameterParser.ScriptParameterValue;
 import org.elasticsearch.search.aggregations.Aggregator;
-import org.elasticsearch.search.aggregations.AggregatorBuilder;
-
 import java.io.IOException;
 import java.util.HashSet;
 import java.util.Map;
@@ -54,7 +52,8 @@ public class ScriptedMetricParser implements Aggregator.Parser {
     }
 
     @Override
-    public AggregatorBuilder parse(String aggregationName, XContentParser parser, QueryParseContext context) throws IOException {
+    public ScriptedMetricAggregator.ScriptedMetricAggregatorBuilder parse(String aggregationName, XContentParser parser,
+            QueryParseContext context) throws IOException {
         Script initScript = null;
         Script mapScript = null;
         Script combineScript = null;
@@ -161,7 +160,7 @@ public class ScriptedMetricParser implements Aggregator.Parser {
     }
 
     @Override
-    public AggregatorBuilder<?> getFactoryPrototypes() {
+    public ScriptedMetricAggregator.ScriptedMetricAggregatorBuilder getFactoryPrototypes() {
         return ScriptedMetricAggregator.ScriptedMetricAggregatorBuilder.PROTOTYPE;
     }
 

+ 1 - 29
core/src/main/java/org/elasticsearch/search/aggregations/metrics/tophits/TopHitsParser.java

@@ -20,25 +20,16 @@ package org.elasticsearch.search.aggregations.metrics.tophits;
 
 import org.elasticsearch.common.ParsingException;
 import org.elasticsearch.common.bytes.BytesReference;
-import org.elasticsearch.common.inject.Inject;
 import org.elasticsearch.common.xcontent.XContentBuilder;
 import org.elasticsearch.common.xcontent.XContentFactory;
 import org.elasticsearch.common.xcontent.XContentParser;
 import org.elasticsearch.index.query.QueryParseContext;
 import org.elasticsearch.script.Script;
 import org.elasticsearch.search.aggregations.Aggregator;
-import org.elasticsearch.search.aggregations.AggregatorBuilder;
 import org.elasticsearch.search.builder.SearchSourceBuilder;
 import org.elasticsearch.search.builder.SearchSourceBuilder.ScriptField;
-import org.elasticsearch.search.fetch.FieldsParseElement;
-import org.elasticsearch.search.fetch.fielddata.FieldDataFieldsParseElement;
-import org.elasticsearch.search.fetch.script.ScriptFieldsParseElement;
 import org.elasticsearch.search.fetch.source.FetchSourceContext;
-import org.elasticsearch.search.fetch.source.FetchSourceParseElement;
 import org.elasticsearch.search.highlight.HighlightBuilder;
-import org.elasticsearch.search.highlight.HighlighterParseElement;
-import org.elasticsearch.search.sort.SortParseElement;
-
 import java.io.IOException;
 import java.util.ArrayList;
 import java.util.List;
@@ -48,25 +39,6 @@ import java.util.List;
  */
 public class TopHitsParser implements Aggregator.Parser {
 
-    private final SortParseElement sortParseElement;
-    private final FetchSourceParseElement sourceParseElement;
-    private final HighlighterParseElement highlighterParseElement;
-    private final FieldDataFieldsParseElement fieldDataFieldsParseElement;
-    private final ScriptFieldsParseElement scriptFieldsParseElement;
-    private final FieldsParseElement fieldsParseElement;
-
-    @Inject
-    public TopHitsParser(SortParseElement sortParseElement, FetchSourceParseElement sourceParseElement,
-            HighlighterParseElement highlighterParseElement, FieldDataFieldsParseElement fieldDataFieldsParseElement,
-            ScriptFieldsParseElement scriptFieldsParseElement, FieldsParseElement fieldsParseElement) {
-        this.sortParseElement = sortParseElement;
-        this.sourceParseElement = sourceParseElement;
-        this.highlighterParseElement = highlighterParseElement;
-        this.fieldDataFieldsParseElement = fieldDataFieldsParseElement;
-        this.scriptFieldsParseElement = scriptFieldsParseElement;
-        this.fieldsParseElement = fieldsParseElement;
-    }
-
     @Override
     public String type() {
         return InternalTopHits.TYPE.name();
@@ -206,7 +178,7 @@ public class TopHitsParser implements Aggregator.Parser {
     }
 
     @Override
-    public AggregatorBuilder<?> getFactoryPrototypes() {
+    public TopHitsAggregator.TopHitsAggregatorBuilder getFactoryPrototypes() {
         return TopHitsAggregator.TopHitsAggregatorBuilder.PROTOTYPE;
     }
 

+ 1 - 2
core/src/main/java/org/elasticsearch/search/aggregations/metrics/valuecount/ValueCountParser.java

@@ -21,7 +21,6 @@ package org.elasticsearch.search.aggregations.metrics.valuecount;
 import org.elasticsearch.common.ParseField;
 import org.elasticsearch.common.ParseFieldMatcher;
 import org.elasticsearch.common.xcontent.XContentParser;
-import org.elasticsearch.search.aggregations.AggregatorBuilder;
 import org.elasticsearch.search.aggregations.support.AbstractValuesSourceParser.AnyValuesSourceParser;
 import org.elasticsearch.search.aggregations.support.ValueType;
 import org.elasticsearch.search.aggregations.support.ValuesSource;
@@ -58,7 +57,7 @@ public class ValueCountParser extends AnyValuesSourceParser {
     }
 
     @Override
-    public AggregatorBuilder<?> getFactoryPrototypes() {
+    public ValueCountAggregator.ValueCountAggregatorBuilder getFactoryPrototypes() {
         return ValueCountAggregator.ValueCountAggregatorBuilder.PROTOTYPE;
     }
 }

+ 3 - 2
core/src/main/java/org/elasticsearch/search/aggregations/pipeline/PipelineAggregator.java

@@ -67,13 +67,14 @@ public abstract class PipelineAggregator implements Streamable {
          * @throws java.io.IOException
          *             When parsing fails
          */
-        PipelineAggregatorBuilder parse(String pipelineAggregatorName, XContentParser parser, QueryParseContext context) throws IOException;
+        PipelineAggregatorBuilder<?> parse(String pipelineAggregatorName, XContentParser parser, QueryParseContext context)
+                throws IOException;
 
         /**
          * @return an empty {@link PipelineAggregatorBuilder} instance for this
          *         parser that can be used for deserialization
          */
-        PipelineAggregatorBuilder getFactoryPrototype();
+        PipelineAggregatorBuilder<?> getFactoryPrototype();
 
     }
 

+ 4 - 6
core/src/main/java/org/elasticsearch/search/aggregations/pipeline/bucketmetrics/BucketMetricsParser.java

@@ -25,8 +25,6 @@ import org.elasticsearch.common.xcontent.XContentParser;
 import org.elasticsearch.index.query.QueryParseContext;
 import org.elasticsearch.search.aggregations.pipeline.BucketHelpers.GapPolicy;
 import org.elasticsearch.search.aggregations.pipeline.PipelineAggregator;
-import org.elasticsearch.search.aggregations.pipeline.PipelineAggregatorBuilder;
-
 import java.io.IOException;
 import java.text.ParseException;
 import java.util.ArrayList;
@@ -46,8 +44,8 @@ public abstract class BucketMetricsParser implements PipelineAggregator.Parser {
     }
 
     @Override
-    public final PipelineAggregatorBuilder parse(String pipelineAggregatorName, XContentParser parser, QueryParseContext context)
-            throws IOException {
+    public final BucketMetricsPipelineAggregatorBuilder<?> parse(String pipelineAggregatorName, XContentParser parser,
+            QueryParseContext context) throws IOException {
         XContentParser.Token token;
         String currentFieldName = null;
         String[] bucketsPaths = null;
@@ -89,7 +87,7 @@ public abstract class BucketMetricsParser implements PipelineAggregator.Parser {
                     "Missing required field [" + BUCKETS_PATH.getPreferredName() + "] for aggregation [" + pipelineAggregatorName + "]");
         }
 
-        BucketMetricsPipelineAggregatorBuilder factory = null;
+        BucketMetricsPipelineAggregatorBuilder<?> factory = null;
         try {
             factory = buildFactory(pipelineAggregatorName, bucketsPaths[0], leftover);
             if (format != null) {
@@ -112,7 +110,7 @@ public abstract class BucketMetricsParser implements PipelineAggregator.Parser {
         return factory;
     }
 
-    protected abstract BucketMetricsPipelineAggregatorBuilder buildFactory(String pipelineAggregatorName, String bucketsPaths,
+    protected abstract BucketMetricsPipelineAggregatorBuilder<?> buildFactory(String pipelineAggregatorName, String bucketsPaths,
             Map<String, Object> unparsedParams) throws ParseException;
 
 }

+ 1 - 1
core/src/main/java/org/elasticsearch/search/aggregations/pipeline/bucketmetrics/BucketMetricsPipelineAggregator.java

@@ -67,7 +67,7 @@ public abstract class BucketMetricsPipelineAggregator extends SiblingPipelineAgg
         for (Aggregation aggregation : aggregations) {
             if (aggregation.getName().equals(bucketsPath.get(0))) {
                 bucketsPath = bucketsPath.subList(1, bucketsPath.size());
-                InternalMultiBucketAggregation multiBucketsAgg = (InternalMultiBucketAggregation) aggregation;
+                InternalMultiBucketAggregation<?, ?> multiBucketsAgg = (InternalMultiBucketAggregation<?, ?>) aggregation;
                 List<? extends Bucket> buckets = multiBucketsAgg.getBuckets();
                 for (int i = 0; i < buckets.size(); i++) {
                     Bucket bucket = buckets.get(i);

+ 2 - 4
core/src/main/java/org/elasticsearch/search/aggregations/pipeline/bucketmetrics/avg/AvgBucketParser.java

@@ -19,8 +19,6 @@
 
 package org.elasticsearch.search.aggregations.pipeline.bucketmetrics.avg;
 
-import org.elasticsearch.search.aggregations.pipeline.PipelineAggregatorBuilder;
-import org.elasticsearch.search.aggregations.pipeline.bucketmetrics.BucketMetricsPipelineAggregatorBuilder;
 import org.elasticsearch.search.aggregations.pipeline.bucketmetrics.BucketMetricsParser;
 
 import java.util.Map;
@@ -32,13 +30,13 @@ public class AvgBucketParser extends BucketMetricsParser {
     }
 
     @Override
-    protected BucketMetricsPipelineAggregatorBuilder buildFactory(String pipelineAggregatorName, String bucketsPath,
+    protected AvgBucketPipelineAggregator.AvgBucketPipelineAggregatorBuilder buildFactory(String pipelineAggregatorName, String bucketsPath,
             Map<String, Object> unparsedParams) {
         return new AvgBucketPipelineAggregator.AvgBucketPipelineAggregatorBuilder(pipelineAggregatorName, bucketsPath);
     }
 
     @Override
-    public PipelineAggregatorBuilder getFactoryPrototype() {
+    public AvgBucketPipelineAggregator.AvgBucketPipelineAggregatorBuilder getFactoryPrototype() {
         return AvgBucketPipelineAggregator.AvgBucketPipelineAggregatorBuilder.PROTOTYPE;
     }
 }

+ 2 - 4
core/src/main/java/org/elasticsearch/search/aggregations/pipeline/bucketmetrics/max/MaxBucketParser.java

@@ -19,8 +19,6 @@
 
 package org.elasticsearch.search.aggregations.pipeline.bucketmetrics.max;
 
-import org.elasticsearch.search.aggregations.pipeline.PipelineAggregatorBuilder;
-import org.elasticsearch.search.aggregations.pipeline.bucketmetrics.BucketMetricsPipelineAggregatorBuilder;
 import org.elasticsearch.search.aggregations.pipeline.bucketmetrics.BucketMetricsParser;
 
 import java.util.Map;
@@ -33,13 +31,13 @@ public class MaxBucketParser extends BucketMetricsParser {
     }
 
     @Override
-    protected BucketMetricsPipelineAggregatorBuilder buildFactory(String pipelineAggregatorName, String bucketsPath,
+    protected MaxBucketPipelineAggregator.MaxBucketPipelineAggregatorBuilder buildFactory(String pipelineAggregatorName, String bucketsPath,
             Map<String, Object> unparsedParams) {
         return new MaxBucketPipelineAggregator.MaxBucketPipelineAggregatorBuilder(pipelineAggregatorName, bucketsPath);
     }
 
     @Override
-    public PipelineAggregatorBuilder getFactoryPrototype() {
+    public MaxBucketPipelineAggregator.MaxBucketPipelineAggregatorBuilder getFactoryPrototype() {
         return MaxBucketPipelineAggregator.MaxBucketPipelineAggregatorBuilder.PROTOTYPE;
     }
 

+ 2 - 4
core/src/main/java/org/elasticsearch/search/aggregations/pipeline/bucketmetrics/min/MinBucketParser.java

@@ -19,8 +19,6 @@
 
 package org.elasticsearch.search.aggregations.pipeline.bucketmetrics.min;
 
-import org.elasticsearch.search.aggregations.pipeline.PipelineAggregatorBuilder;
-import org.elasticsearch.search.aggregations.pipeline.bucketmetrics.BucketMetricsPipelineAggregatorBuilder;
 import org.elasticsearch.search.aggregations.pipeline.bucketmetrics.BucketMetricsParser;
 
 import java.util.Map;
@@ -33,13 +31,13 @@ public class MinBucketParser extends BucketMetricsParser {
     }
 
     @Override
-    protected BucketMetricsPipelineAggregatorBuilder buildFactory(String pipelineAggregatorName, String bucketsPath,
+    protected MinBucketPipelineAggregator.MinBucketPipelineAggregatorBuilder buildFactory(String pipelineAggregatorName, String bucketsPath,
             Map<String, Object> unparsedParams) {
         return new MinBucketPipelineAggregator.MinBucketPipelineAggregatorBuilder(pipelineAggregatorName, bucketsPath);
     }
 
     @Override
-    public PipelineAggregatorBuilder getFactoryPrototype() {
+    public MinBucketPipelineAggregator.MinBucketPipelineAggregatorBuilder getFactoryPrototype() {
         return MinBucketPipelineAggregator.MinBucketPipelineAggregatorBuilder.PROTOTYPE;
     }
 

+ 5 - 7
core/src/main/java/org/elasticsearch/search/aggregations/pipeline/bucketmetrics/percentile/PercentilesBucketParser.java

@@ -20,8 +20,6 @@
 package org.elasticsearch.search.aggregations.pipeline.bucketmetrics.percentile;
 
 import org.elasticsearch.common.ParseField;
-import org.elasticsearch.search.aggregations.pipeline.PipelineAggregatorBuilder;
-import org.elasticsearch.search.aggregations.pipeline.bucketmetrics.BucketMetricsPipelineAggregatorBuilder;
 import org.elasticsearch.search.aggregations.pipeline.bucketmetrics.BucketMetricsParser;
 
 import java.text.ParseException;
@@ -39,8 +37,8 @@ public class PercentilesBucketParser extends BucketMetricsParser {
     }
 
     @Override
-    protected BucketMetricsPipelineAggregatorBuilder buildFactory(String pipelineAggregatorName, String bucketsPath,
-            Map<String, Object> unparsedParams) throws ParseException {
+    protected PercentilesBucketPipelineAggregator.PercentilesBucketPipelineAggregatorBuilder buildFactory(String pipelineAggregatorName,
+            String bucketsPath, Map<String, Object> unparsedParams) throws ParseException {
 
         double[] percents = null;
         int counter = 0;
@@ -48,8 +46,8 @@ public class PercentilesBucketParser extends BucketMetricsParser {
 
         if (percentParam != null) {
             if (percentParam instanceof List) {
-                percents = new double[((List) percentParam).size()];
-                for (Object p : (List) percentParam) {
+                percents = new double[((List<?>) percentParam).size()];
+                for (Object p : (List<?>) percentParam) {
                     if (p instanceof Double) {
                         percents[counter] = (Double) p;
                         counter += 1;
@@ -74,7 +72,7 @@ public class PercentilesBucketParser extends BucketMetricsParser {
     }
 
     @Override
-    public PipelineAggregatorBuilder getFactoryPrototype() {
+    public PercentilesBucketPipelineAggregator.PercentilesBucketPipelineAggregatorBuilder getFactoryPrototype() {
         return PercentilesBucketPipelineAggregator.PercentilesBucketPipelineAggregatorBuilder.PROTOTYPE;
     }
 }

+ 3 - 5
core/src/main/java/org/elasticsearch/search/aggregations/pipeline/bucketmetrics/stats/StatsBucketParser.java

@@ -19,8 +19,6 @@
 
 package org.elasticsearch.search.aggregations.pipeline.bucketmetrics.stats;
 
-import org.elasticsearch.search.aggregations.pipeline.PipelineAggregatorBuilder;
-import org.elasticsearch.search.aggregations.pipeline.bucketmetrics.BucketMetricsPipelineAggregatorBuilder;
 import org.elasticsearch.search.aggregations.pipeline.bucketmetrics.BucketMetricsParser;
 
 import java.util.Map;
@@ -32,13 +30,13 @@ public class StatsBucketParser extends BucketMetricsParser {
     }
 
     @Override
-    protected BucketMetricsPipelineAggregatorBuilder buildFactory(String pipelineAggregatorName, String bucketsPath,
-            Map<String, Object> unparsedParams) {
+    protected StatsBucketPipelineAggregator.StatsBucketPipelineAggregatorBuilder buildFactory(String pipelineAggregatorName,
+            String bucketsPath, Map<String, Object> unparsedParams) {
         return new StatsBucketPipelineAggregator.StatsBucketPipelineAggregatorBuilder(pipelineAggregatorName, bucketsPath);
     }
 
     @Override
-    public PipelineAggregatorBuilder getFactoryPrototype() {
+    public StatsBucketPipelineAggregator.StatsBucketPipelineAggregatorBuilder getFactoryPrototype() {
         return StatsBucketPipelineAggregator.StatsBucketPipelineAggregatorBuilder.PROTOTYPE;
     }
 }

+ 3 - 5
core/src/main/java/org/elasticsearch/search/aggregations/pipeline/bucketmetrics/stats/extended/ExtendedStatsBucketParser.java

@@ -20,8 +20,6 @@
 package org.elasticsearch.search.aggregations.pipeline.bucketmetrics.stats.extended;
 
 import org.elasticsearch.common.ParseField;
-import org.elasticsearch.search.aggregations.pipeline.PipelineAggregatorBuilder;
-import org.elasticsearch.search.aggregations.pipeline.bucketmetrics.BucketMetricsPipelineAggregatorBuilder;
 import org.elasticsearch.search.aggregations.pipeline.bucketmetrics.BucketMetricsParser;
 
 import java.text.ParseException;
@@ -36,8 +34,8 @@ public class ExtendedStatsBucketParser extends BucketMetricsParser {
     }
 
     @Override
-    protected BucketMetricsPipelineAggregatorBuilder buildFactory(String pipelineAggregatorName, String bucketsPath,
-            Map<String, Object> unparsedParams) throws ParseException {
+    protected ExtendedStatsBucketPipelineAggregator.ExtendedStatsBucketPipelineAggregatorBuilder buildFactory(String pipelineAggregatorName,
+            String bucketsPath, Map<String, Object> unparsedParams) throws ParseException {
 
         Double sigma = null;
         Object param = unparsedParams.get(SIGMA.getPreferredName());
@@ -60,7 +58,7 @@ public class ExtendedStatsBucketParser extends BucketMetricsParser {
     }
 
     @Override
-    public PipelineAggregatorBuilder getFactoryPrototype() {
+    public ExtendedStatsBucketPipelineAggregator.ExtendedStatsBucketPipelineAggregatorBuilder getFactoryPrototype() {
         return ExtendedStatsBucketPipelineAggregator.ExtendedStatsBucketPipelineAggregatorBuilder.PROTOTYPE;
     }
 }

+ 2 - 4
core/src/main/java/org/elasticsearch/search/aggregations/pipeline/bucketmetrics/sum/SumBucketParser.java

@@ -19,8 +19,6 @@
 
 package org.elasticsearch.search.aggregations.pipeline.bucketmetrics.sum;
 
-import org.elasticsearch.search.aggregations.pipeline.PipelineAggregatorBuilder;
-import org.elasticsearch.search.aggregations.pipeline.bucketmetrics.BucketMetricsPipelineAggregatorBuilder;
 import org.elasticsearch.search.aggregations.pipeline.bucketmetrics.BucketMetricsParser;
 
 import java.util.Map;
@@ -32,13 +30,13 @@ public class SumBucketParser extends BucketMetricsParser {
     }
 
     @Override
-    protected BucketMetricsPipelineAggregatorBuilder buildFactory(String pipelineAggregatorName, String bucketsPath,
+    protected SumBucketPipelineAggregator.SumBucketPipelineAggregatorBuilder buildFactory(String pipelineAggregatorName, String bucketsPath,
             Map<String, Object> unparsedParams) {
         return new SumBucketPipelineAggregator.SumBucketPipelineAggregatorBuilder(pipelineAggregatorName, bucketsPath);
     }
 
     @Override
-    public PipelineAggregatorBuilder getFactoryPrototype() {
+    public SumBucketPipelineAggregator.SumBucketPipelineAggregatorBuilder getFactoryPrototype() {
         return SumBucketPipelineAggregator.SumBucketPipelineAggregatorBuilder.PROTOTYPE;
     }
 }

+ 3 - 4
core/src/main/java/org/elasticsearch/search/aggregations/pipeline/bucketscript/BucketScriptParser.java

@@ -27,8 +27,6 @@ import org.elasticsearch.script.Script;
 import org.elasticsearch.script.Script.ScriptField;
 import org.elasticsearch.search.aggregations.pipeline.BucketHelpers.GapPolicy;
 import org.elasticsearch.search.aggregations.pipeline.PipelineAggregator;
-import org.elasticsearch.search.aggregations.pipeline.PipelineAggregatorBuilder;
-
 import java.io.IOException;
 import java.util.ArrayList;
 import java.util.HashMap;
@@ -47,7 +45,8 @@ public class BucketScriptParser implements PipelineAggregator.Parser {
     }
 
     @Override
-    public PipelineAggregatorBuilder parse(String reducerName, XContentParser parser, QueryParseContext context) throws IOException {
+    public BucketScriptPipelineAggregator.BucketScriptPipelineAggregatorBuilder parse(String reducerName, XContentParser parser,
+            QueryParseContext context) throws IOException {
         XContentParser.Token token;
         Script script = null;
         String currentFieldName = null;
@@ -127,7 +126,7 @@ public class BucketScriptParser implements PipelineAggregator.Parser {
     }
 
     @Override
-    public PipelineAggregatorBuilder getFactoryPrototype() {
+    public BucketScriptPipelineAggregator.BucketScriptPipelineAggregatorBuilder getFactoryPrototype() {
         return BucketScriptPipelineAggregator.BucketScriptPipelineAggregatorBuilder.PROTOTYPE;
     }
 

+ 3 - 5
core/src/main/java/org/elasticsearch/search/aggregations/pipeline/cumulativesum/CumulativeSumParser.java

@@ -24,8 +24,6 @@ import org.elasticsearch.common.ParsingException;
 import org.elasticsearch.common.xcontent.XContentParser;
 import org.elasticsearch.index.query.QueryParseContext;
 import org.elasticsearch.search.aggregations.pipeline.PipelineAggregator;
-import org.elasticsearch.search.aggregations.pipeline.PipelineAggregatorBuilder;
-
 import java.io.IOException;
 import java.util.ArrayList;
 import java.util.List;
@@ -42,8 +40,8 @@ public class CumulativeSumParser implements PipelineAggregator.Parser {
     }
 
     @Override
-    public PipelineAggregatorBuilder parse(String pipelineAggregatorName, XContentParser parser, QueryParseContext context)
-            throws IOException {
+    public CumulativeSumPipelineAggregator.CumulativeSumPipelineAggregatorBuilder parse(String pipelineAggregatorName,
+            XContentParser parser, QueryParseContext context) throws IOException {
         XContentParser.Token token;
         String currentFieldName = null;
         String[] bucketsPaths = null;
@@ -93,7 +91,7 @@ public class CumulativeSumParser implements PipelineAggregator.Parser {
     }
 
     @Override
-    public PipelineAggregatorBuilder getFactoryPrototype() {
+    public CumulativeSumPipelineAggregator.CumulativeSumPipelineAggregatorBuilder getFactoryPrototype() {
         return CumulativeSumPipelineAggregator.CumulativeSumPipelineAggregatorBuilder.PROTOTYPE;
     }
 

+ 3 - 5
core/src/main/java/org/elasticsearch/search/aggregations/pipeline/derivative/DerivativeParser.java

@@ -25,8 +25,6 @@ import org.elasticsearch.common.xcontent.XContentParser;
 import org.elasticsearch.index.query.QueryParseContext;
 import org.elasticsearch.search.aggregations.pipeline.BucketHelpers.GapPolicy;
 import org.elasticsearch.search.aggregations.pipeline.PipelineAggregator;
-import org.elasticsearch.search.aggregations.pipeline.PipelineAggregatorBuilder;
-
 import java.io.IOException;
 import java.util.ArrayList;
 import java.util.List;
@@ -43,8 +41,8 @@ public class DerivativeParser implements PipelineAggregator.Parser {
     }
 
     @Override
-    public PipelineAggregatorBuilder parse(String pipelineAggregatorName, XContentParser parser, QueryParseContext context)
-            throws IOException {
+    public DerivativePipelineAggregator.DerivativePipelineAggregatorBuilder parse(String pipelineAggregatorName, XContentParser parser,
+            QueryParseContext context) throws IOException {
         XContentParser.Token token;
         String currentFieldName = null;
         String[] bucketsPaths = null;
@@ -106,7 +104,7 @@ public class DerivativeParser implements PipelineAggregator.Parser {
     }
 
     @Override
-    public PipelineAggregatorBuilder getFactoryPrototype() {
+    public DerivativePipelineAggregator.DerivativePipelineAggregatorBuilder getFactoryPrototype() {
         return DerivativePipelineAggregator.DerivativePipelineAggregatorBuilder.PROTOTYPE;
     }
 

+ 3 - 4
core/src/main/java/org/elasticsearch/search/aggregations/pipeline/having/BucketSelectorParser.java

@@ -27,8 +27,6 @@ import org.elasticsearch.script.Script;
 import org.elasticsearch.script.Script.ScriptField;
 import org.elasticsearch.search.aggregations.pipeline.BucketHelpers.GapPolicy;
 import org.elasticsearch.search.aggregations.pipeline.PipelineAggregator;
-import org.elasticsearch.search.aggregations.pipeline.PipelineAggregatorBuilder;
-
 import java.io.IOException;
 import java.util.ArrayList;
 import java.util.HashMap;
@@ -47,7 +45,8 @@ public class BucketSelectorParser implements PipelineAggregator.Parser {
     }
 
     @Override
-    public PipelineAggregatorBuilder parse(String reducerName, XContentParser parser, QueryParseContext context) throws IOException {
+    public BucketSelectorPipelineAggregator.BucketSelectorPipelineAggregatorBuilder parse(String reducerName, XContentParser parser,
+            QueryParseContext context) throws IOException {
         XContentParser.Token token;
         Script script = null;
         String currentFieldName = null;
@@ -122,7 +121,7 @@ public class BucketSelectorParser implements PipelineAggregator.Parser {
     }
 
     @Override
-    public PipelineAggregatorBuilder getFactoryPrototype() {
+    public BucketSelectorPipelineAggregator.BucketSelectorPipelineAggregatorBuilder getFactoryPrototype() {
         return BucketSelectorPipelineAggregator.BucketSelectorPipelineAggregatorBuilder.PROTOTYPE;
     }
 

+ 3 - 4
core/src/main/java/org/elasticsearch/search/aggregations/pipeline/movavg/MovAvgParser.java

@@ -26,7 +26,6 @@ import org.elasticsearch.common.xcontent.XContentParser;
 import org.elasticsearch.index.query.QueryParseContext;
 import org.elasticsearch.search.aggregations.pipeline.BucketHelpers.GapPolicy;
 import org.elasticsearch.search.aggregations.pipeline.PipelineAggregator;
-import org.elasticsearch.search.aggregations.pipeline.PipelineAggregatorBuilder;
 import org.elasticsearch.search.aggregations.pipeline.movavg.models.MovAvgModel;
 import org.elasticsearch.search.aggregations.pipeline.movavg.models.MovAvgModelParserMapper;
 
@@ -57,8 +56,8 @@ public class MovAvgParser implements PipelineAggregator.Parser {
     }
 
     @Override
-    public PipelineAggregatorBuilder parse(String pipelineAggregatorName, XContentParser parser, QueryParseContext context)
-            throws IOException {
+    public MovAvgPipelineAggregator.MovAvgPipelineAggregatorBuilder parse(String pipelineAggregatorName, XContentParser parser,
+            QueryParseContext context) throws IOException {
         XContentParser.Token token;
         String currentFieldName = null;
         String[] bucketsPaths = null;
@@ -177,7 +176,7 @@ public class MovAvgParser implements PipelineAggregator.Parser {
     }
 
     @Override
-    public PipelineAggregatorBuilder getFactoryPrototype() {
+    public MovAvgPipelineAggregator.MovAvgPipelineAggregatorBuilder getFactoryPrototype() {
         return MovAvgPipelineAggregator.MovAvgPipelineAggregatorBuilder.PROTOTYPE;
     }
 

+ 3 - 4
core/src/main/java/org/elasticsearch/search/aggregations/pipeline/serialdiff/SerialDiffParser.java

@@ -25,8 +25,6 @@ import org.elasticsearch.common.xcontent.XContentParser;
 import org.elasticsearch.index.query.QueryParseContext;
 import org.elasticsearch.search.aggregations.pipeline.BucketHelpers.GapPolicy;
 import org.elasticsearch.search.aggregations.pipeline.PipelineAggregator;
-import org.elasticsearch.search.aggregations.pipeline.PipelineAggregatorBuilder;
-
 import java.io.IOException;
 import java.util.ArrayList;
 import java.util.List;
@@ -43,7 +41,8 @@ public class SerialDiffParser implements PipelineAggregator.Parser {
     }
 
     @Override
-    public PipelineAggregatorBuilder parse(String reducerName, XContentParser parser, QueryParseContext context) throws IOException {
+    public SerialDiffPipelineAggregator.SerialDiffPipelineAggregatorBuilder parse(String reducerName, XContentParser parser,
+            QueryParseContext context) throws IOException {
         XContentParser.Token token;
         String currentFieldName = null;
         String[] bucketsPaths = null;
@@ -116,7 +115,7 @@ public class SerialDiffParser implements PipelineAggregator.Parser {
     }
 
     @Override
-    public PipelineAggregatorBuilder getFactoryPrototype() {
+    public SerialDiffPipelineAggregator.SerialDiffPipelineAggregatorBuilder getFactoryPrototype() {
         return SerialDiffPipelineAggregator.SerialDiffPipelineAggregatorBuilder.PROTOTYPE;
     }
 

+ 9 - 1
core/src/main/java/org/elasticsearch/search/aggregations/support/ValuesSourceAggregatorBuilder.java

@@ -88,6 +88,7 @@ public abstract class ValuesSourceAggregatorBuilder<VS extends ValuesSource, AB
     /**
      * Sets the field to use for this aggregation.
      */
+    @SuppressWarnings("unchecked")
     public AB field(String field) {
         if (field == null) {
             throw new IllegalArgumentException("[field] must not be null: [" + name + "]");
@@ -106,6 +107,7 @@ public abstract class ValuesSourceAggregatorBuilder<VS extends ValuesSource, AB
     /**
      * Sets the script to use for this aggregation.
      */
+    @SuppressWarnings("unchecked")
     public AB script(Script script) {
         if (script == null) {
             throw new IllegalArgumentException("[script] must not be null: [" + name + "]");
@@ -124,6 +126,7 @@ public abstract class ValuesSourceAggregatorBuilder<VS extends ValuesSource, AB
     /**
      * Sets the {@link ValueType} for the value produced by this aggregation
      */
+    @SuppressWarnings("unchecked")
     public AB valueType(ValueType valueType) {
         if (valueType == null) {
             throw new IllegalArgumentException("[valueType] must not be null: [" + name + "]");
@@ -142,6 +145,7 @@ public abstract class ValuesSourceAggregatorBuilder<VS extends ValuesSource, AB
     /**
      * Sets the format to use for the output of the aggregation.
      */
+    @SuppressWarnings("unchecked")
     public AB format(String format) {
         if (format == null) {
             throw new IllegalArgumentException("[format] must not be null: [" + name + "]");
@@ -161,6 +165,7 @@ public abstract class ValuesSourceAggregatorBuilder<VS extends ValuesSource, AB
      * Sets the value to use when the aggregation finds a missing value in a
      * document
      */
+    @SuppressWarnings("unchecked")
     public AB missing(Object missing) {
         if (missing == null) {
             throw new IllegalArgumentException("[missing] must not be null: [" + name + "]");
@@ -180,6 +185,7 @@ public abstract class ValuesSourceAggregatorBuilder<VS extends ValuesSource, AB
     /**
      * Sets the time zone to use for this aggregation
      */
+    @SuppressWarnings("unchecked")
     public AB timeZone(DateTimeZone timeZone) {
         if (timeZone == null) {
             throw new IllegalArgumentException("[timeZone] must not be null: [" + name + "]");
@@ -217,6 +223,7 @@ public abstract class ValuesSourceAggregatorBuilder<VS extends ValuesSource, AB
 
         if (field == null) {
             if (script == null) {
+                @SuppressWarnings("unchecked")
                 ValuesSourceConfig<VS> config = new ValuesSourceConfig(ValuesSourceType.ANY);
                 config.format = resolveFormat(null, valueType);
                 return config;
@@ -255,7 +262,7 @@ public abstract class ValuesSourceAggregatorBuilder<VS extends ValuesSource, AB
 
         IndexFieldData<?> indexFieldData = context.searchContext().fieldData().getForField(fieldType);
 
-        ValuesSourceConfig config;
+        ValuesSourceConfig<VS> config;
         if (valuesSourceType == ValuesSourceType.ANY) {
             if (indexFieldData instanceof IndexNumericFieldData) {
                 config = new ValuesSourceConfig<>(ValuesSourceType.NUMERIC);
@@ -340,6 +347,7 @@ public abstract class ValuesSourceAggregatorBuilder<VS extends ValuesSource, AB
 
     protected abstract void innerWriteTo(StreamOutput out) throws IOException;
 
+    @SuppressWarnings("unchecked")
     @Override
     protected final AB doReadFrom(String name, StreamInput in) throws IOException {
         ValuesSourceType valuesSourceType = ValuesSourceType.ANY.readFrom(in);