From 61540cce72db5ca2f6243a58494075af0f393370 Mon Sep 17 00:00:00 2001 From: Sanne Grinovero Date: Tue, 9 May 2017 16:00:36 +0100 Subject: [PATCH] HSEARCH-2208 Make our custom DistanceQuery actually immutable --- .../search/spatial/impl/DistanceQuery.java | 31 ++++++++----------- 1 file changed, 13 insertions(+), 18 deletions(-) diff --git a/engine/src/main/java/org/hibernate/search/spatial/impl/DistanceQuery.java b/engine/src/main/java/org/hibernate/search/spatial/impl/DistanceQuery.java index dfc94a69417..f85d775598a 100644 --- a/engine/src/main/java/org/hibernate/search/spatial/impl/DistanceQuery.java +++ b/engine/src/main/java/org/hibernate/search/spatial/impl/DistanceQuery.java @@ -38,12 +38,12 @@ */ public final class DistanceQuery extends Query { - private Query approximationQuery; - private Point center; - private double radius; - private String coordinatesField; - private String latitudeField; - private String longitudeField; + private final Query approximationQuery; + private final Point center; + private final double radius; + private final String coordinatesField; + private final String latitudeField; + private final String longitudeField; /** * Construct a distance query to match document distant at most of radius from center Point @@ -58,15 +58,7 @@ public final class DistanceQuery extends Query { * @see org.hibernate.search.spatial.Coordinates */ public DistanceQuery(Query approximationQuery, Coordinates centerCoordinates, double radius, String coordinatesField) { - if ( approximationQuery == null ) { - this.approximationQuery = new MatchAllDocsQuery(); - } - else { - this.approximationQuery = approximationQuery; - } - this.center = Point.fromCoordinates( centerCoordinates ); - this.radius = radius; - this.coordinatesField = coordinatesField; + this( approximationQuery, centerCoordinates, radius, coordinatesField, null, null ); } /** @@ -83,6 +75,10 @@ public DistanceQuery(Query approximationQuery, Coordinates centerCoordinates, do * @see org.hibernate.search.spatial.Coordinates */ public DistanceQuery(Query approximationQuery, Coordinates centerCoordinates, double radius, String latitudeField, String longitudeField) { + this( approximationQuery, centerCoordinates, radius, null, latitudeField, longitudeField ); + } + + private DistanceQuery(Query approximationQuery, Coordinates centerCoordinates, double radius, String coordinatesField, String latitudeField, String longitudeField) { if ( approximationQuery == null ) { this.approximationQuery = new MatchAllDocsQuery(); } @@ -91,7 +87,7 @@ public DistanceQuery(Query approximationQuery, Coordinates centerCoordinates, do } this.center = Point.fromCoordinates( centerCoordinates ); this.radius = radius; - this.coordinatesField = null; + this.coordinatesField = coordinatesField; this.latitudeField = latitudeField; this.longitudeField = longitudeField; } @@ -104,8 +100,7 @@ public Query rewrite(IndexReader reader) throws IOException { } Query rewrittenApproximationQuery = approximationQuery.rewrite( reader ); if ( rewrittenApproximationQuery != approximationQuery ) { - DistanceQuery clone = (DistanceQuery) clone(); - clone.approximationQuery = rewrittenApproximationQuery; + DistanceQuery clone = new DistanceQuery( rewrittenApproximationQuery, this.center, this.radius, this.coordinatesField, this.latitudeField, this.longitudeField ); return clone; } return this;