Skip to content

Commit fd88ab1

Browse files
authored
Correct type parametrization in geo mappers. (#59583)
Previously the concrete type parameters for the MappedFieldType didn't always match those for the FieldMapper. This PR updates the mappers so that the type parameters always match, which makes the design easier to follow.
1 parent c51d765 commit fd88ab1

File tree

4 files changed

+25
-25
lines changed

4 files changed

+25
-25
lines changed

server/src/main/java/org/elasticsearch/index/mapper/AbstractGeometryFieldMapper.java

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -266,8 +266,9 @@ protected void mergeOptions(FieldMapper other, List<String> conflicts) {
266266
}
267267

268268
@Override
269-
public AbstractGeometryFieldType fieldType() {
270-
return (AbstractGeometryFieldType)mappedFieldType;
269+
@SuppressWarnings("unchecked")
270+
public AbstractGeometryFieldType<Parsed, Processed> fieldType() {
271+
return (AbstractGeometryFieldType<Parsed, Processed>) mappedFieldType;
271272
}
272273

273274
@Override
@@ -282,10 +283,10 @@ protected void parseCreateField(ParseContext context) throws IOException {
282283
/** parsing logic for geometry indexing */
283284
@Override
284285
public void parse(ParseContext context) throws IOException {
285-
AbstractGeometryFieldMapper.AbstractGeometryFieldType mappedFieldType = fieldType();
286+
AbstractGeometryFieldType<Parsed, Processed> mappedFieldType = fieldType();
286287

287-
@SuppressWarnings("unchecked") Indexer<Parsed, Processed> geometryIndexer = mappedFieldType.geometryIndexer();
288-
@SuppressWarnings("unchecked") Parser<Parsed> geometryParser = mappedFieldType.geometryParser();
288+
Indexer<Parsed, Processed> geometryIndexer = mappedFieldType.geometryIndexer();
289+
Parser<Parsed> geometryParser = mappedFieldType.geometryParser();
289290
try {
290291
Processed shape = context.parseExternalValue(geometryIndexer.processedClass());
291292
if (shape == null) {

server/src/main/java/org/elasticsearch/index/mapper/GeoPointFieldMapper.java

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@
3232
import org.elasticsearch.index.fielddata.IndexFieldData;
3333
import org.elasticsearch.index.fielddata.plain.AbstractLatLonPointIndexFieldData;
3434
import org.elasticsearch.index.query.VectorGeoPointShapeQueryProcessor;
35+
import org.elasticsearch.index.mapper.GeoPointFieldMapper.ParsedGeoPoint;
3536
import org.elasticsearch.search.aggregations.support.CoreValuesSourceType;
3637

3738
import java.io.IOException;
@@ -45,7 +46,7 @@
4546
*
4647
* Uses lucene 6 LatLonPoint encoding
4748
*/
48-
public class GeoPointFieldMapper extends AbstractPointGeometryFieldMapper<List<? extends GeoPoint>, List<? extends GeoPoint>> {
49+
public class GeoPointFieldMapper extends AbstractPointGeometryFieldMapper<List<ParsedGeoPoint>, List<? extends GeoPoint>> {
4950
public static final String CONTENT_TYPE = "geo_point";
5051
public static final FieldType FIELD_TYPE = new FieldType();
5152
static {
@@ -163,7 +164,7 @@ protected ParsedPoint newParsedPoint() {
163164
return new ParsedGeoPoint();
164165
}
165166

166-
public static class GeoPointFieldType extends AbstractPointGeometryFieldType<List<ParsedGeoPoint>, List<ParsedGeoPoint>> {
167+
public static class GeoPointFieldType extends AbstractPointGeometryFieldType<List<ParsedGeoPoint>, List<? extends GeoPoint>> {
167168
public GeoPointFieldType(String name, boolean indexed, boolean hasDocValues, Map<String, String> meta) {
168169
super(name, indexed, hasDocValues, meta);
169170
}
@@ -242,7 +243,7 @@ public int hashCode() {
242243
}
243244
}
244245

245-
protected static class GeoPointIndexer implements Indexer<List<ParsedGeoPoint>, List<ParsedGeoPoint>> {
246+
protected static class GeoPointIndexer implements Indexer<List<ParsedGeoPoint>, List<? extends GeoPoint>> {
246247

247248
protected final GeoPointFieldType fieldType;
248249

@@ -251,20 +252,20 @@ protected static class GeoPointIndexer implements Indexer<List<ParsedGeoPoint>,
251252
}
252253

253254
@Override
254-
public List<ParsedGeoPoint> prepareForIndexing(List<ParsedGeoPoint> geoPoints) {
255+
public List<? extends GeoPoint> prepareForIndexing(List<ParsedGeoPoint> geoPoints) {
255256
if (geoPoints == null || geoPoints.isEmpty()) {
256257
return Collections.emptyList();
257258
}
258259
return geoPoints;
259260
}
260261

261262
@Override
262-
public Class<List<ParsedGeoPoint>> processedClass() {
263-
return (Class<List<ParsedGeoPoint>>)(Object)List.class;
263+
public Class<List<? extends GeoPoint>> processedClass() {
264+
return (Class<List<? extends GeoPoint>>)(Object)List.class;
264265
}
265266

266267
@Override
267-
public List<IndexableField> indexShape(ParseContext context, List<ParsedGeoPoint> points) {
268+
public List<IndexableField> indexShape(ParseContext context, List<? extends GeoPoint> points) {
268269
ArrayList<IndexableField> fields = new ArrayList<>(points.size());
269270
for (GeoPoint point : points) {
270271
fields.add(new LatLonPoint(fieldType.name(), point.lat(), point.lon()));

x-pack/plugin/spatial/src/main/java/org/elasticsearch/xpack/spatial/index/mapper/PointFieldMapper.java

Lines changed: 10 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
import org.elasticsearch.index.mapper.ParseContext;
1818
import org.elasticsearch.xpack.spatial.common.CartesianPoint;
1919
import org.elasticsearch.xpack.spatial.index.query.ShapeQueryPointProcessor;
20+
import org.elasticsearch.xpack.spatial.index.mapper.PointFieldMapper.ParsedCartesianPoint;
2021

2122
import java.io.IOException;
2223
import java.util.ArrayList;
@@ -29,7 +30,7 @@
2930
*
3031
* Uses lucene 8 XYPoint encoding
3132
*/
32-
public class PointFieldMapper extends AbstractPointGeometryFieldMapper<List<? extends CartesianPoint>, List<? extends CartesianPoint>> {
33+
public class PointFieldMapper extends AbstractPointGeometryFieldMapper<List<ParsedCartesianPoint>, List<? extends CartesianPoint>> {
3334
public static final String CONTENT_TYPE = "point";
3435

3536
public static class Builder extends AbstractPointGeometryFieldMapper.Builder<Builder, PointFieldType> {
@@ -95,15 +96,13 @@ public PointFieldMapper(String simpleName, FieldType fieldType, MappedFieldType
9596
}
9697

9798
@Override
98-
@SuppressWarnings("unchecked")
9999
protected void addStoredFields(ParseContext context, List<? extends CartesianPoint> points) {
100100
for (CartesianPoint point : points) {
101101
context.doc().add(new StoredField(fieldType().name(), point.toString()));
102102
}
103103
}
104104

105105
@Override
106-
@SuppressWarnings("unchecked")
107106
protected void addDocValuesFields(String name, List<? extends CartesianPoint> points, List<IndexableField> fields,
108107
ParseContext context) {
109108
for (CartesianPoint point : points) {
@@ -123,10 +122,10 @@ protected String contentType() {
123122

124123
@Override
125124
public PointFieldType fieldType() {
126-
return (PointFieldType)mappedFieldType;
125+
return (PointFieldType) mappedFieldType;
127126
}
128127

129-
public static class PointFieldType extends AbstractPointGeometryFieldType<List<ParsedCartesianPoint>, List<ParsedCartesianPoint>> {
128+
public static class PointFieldType extends AbstractPointGeometryFieldType<List<ParsedCartesianPoint>, List<? extends CartesianPoint>> {
130129
public PointFieldType(String name, boolean indexed, boolean hasDocValues, Map<String, String> meta) {
131130
super(name, indexed, hasDocValues, meta);
132131
}
@@ -190,15 +189,15 @@ public int hashCode() {
190189
}
191190
}
192191

193-
protected static class PointIndexer implements Indexer<List<ParsedCartesianPoint>, List<ParsedCartesianPoint>> {
192+
protected static class PointIndexer implements Indexer<List<ParsedCartesianPoint>, List<? extends CartesianPoint>> {
194193
protected final PointFieldType fieldType;
195194

196195
PointIndexer(PointFieldType fieldType) {
197196
this.fieldType = fieldType;
198197
}
199198

200199
@Override
201-
public List<ParsedCartesianPoint> prepareForIndexing(List<ParsedCartesianPoint> points) {
200+
public List<? extends CartesianPoint> prepareForIndexing(List<ParsedCartesianPoint> points) {
202201
if (points == null || points.isEmpty()) {
203202
return Collections.emptyList();
204203
}
@@ -207,14 +206,14 @@ public List<ParsedCartesianPoint> prepareForIndexing(List<ParsedCartesianPoint>
207206

208207
@Override
209208
@SuppressWarnings("unchecked")
210-
public Class<List<ParsedCartesianPoint>> processedClass() {
211-
return (Class<List<ParsedCartesianPoint>>)(Object)List.class;
209+
public Class<List<? extends CartesianPoint>> processedClass() {
210+
return (Class<List<? extends CartesianPoint>>)(Object)List.class;
212211
}
213212

214213
@Override
215-
public List<IndexableField> indexShape(ParseContext context, List<ParsedCartesianPoint> points) {
214+
public List<IndexableField> indexShape(ParseContext context, List<? extends CartesianPoint> points) {
216215
ArrayList<IndexableField> fields = new ArrayList<>(1);
217-
for (ParsedCartesianPoint point : points) {
216+
for (CartesianPoint point : points) {
218217
fields.add(new XYPointField(fieldType.name(), point.getX(), point.getY()));
219218
}
220219
return fields;

x-pack/plugin/spatial/src/main/java/org/elasticsearch/xpack/spatial/index/mapper/ShapeFieldMapper.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -75,8 +75,7 @@ public Builder newBuilder(String name, Map<String, Object> params) {
7575
}
7676
}
7777

78-
@SuppressWarnings({"unchecked", "rawtypes"})
79-
public static final class ShapeFieldType extends AbstractShapeGeometryFieldType {
78+
public static final class ShapeFieldType extends AbstractShapeGeometryFieldType<Geometry, Geometry> {
8079
public ShapeFieldType(String name, boolean indexed, boolean hasDocValues, Map<String, String> meta) {
8180
super(name, indexed, hasDocValues, meta);
8281
}

0 commit comments

Comments
 (0)