27
27
import java .util .regex .Matcher ;
28
28
import java .util .regex .Pattern ;
29
29
30
+ import org .springframework .data .repository .query .SpelQueryContext ;
31
+ import org .springframework .data .repository .query .SpelQueryContext .SpelExtractor ;
30
32
import org .springframework .data .repository .query .parser .Part .Type ;
31
- import org .springframework .data .repository .query .parser .QuotationMap ;
32
- import org .springframework .data .repository .query .parser .SpelQueryContext ;
33
33
import org .springframework .lang .Nullable ;
34
34
import org .springframework .util .Assert ;
35
35
import org .springframework .util .ObjectUtils ;
@@ -202,26 +202,22 @@ enum ParameterBindingParser {
202
202
private String parseParameterBindingsOfQueryIntoBindingsAndReturnCleanedQuery (String query ,
203
203
List <ParameterBinding > bindings ) {
204
204
205
- SpelQueryContext . SpelExtractor spelExtractor = createSpelExtractor (query );
205
+ SpelExtractor spelExtractor = createSpelExtractor (query );
206
206
207
- String resultingQuery = spelExtractor .query ();
208
-
209
- Matcher matcher = PARAMETER_BINDING_PATTERN .matcher (spelExtractor .query ());
210
-
211
- QuotationMap quotationMap = new QuotationMap (spelExtractor .query ());
207
+ String resultingQuery = spelExtractor .getQueryString ();
208
+ Matcher matcher = PARAMETER_BINDING_PATTERN .matcher (resultingQuery );
212
209
213
210
while (matcher .find ()) {
214
211
215
- if (quotationMap .isQuoted (matcher .start ())) {
212
+ if (spelExtractor .isQuoted (matcher .start ())) {
216
213
continue ;
217
214
}
218
215
219
216
String parameterIndexString = matcher .group (INDEXED_PARAMETER_GROUP );
220
217
String parameterName = parameterIndexString != null ? null : matcher .group (NAMED_PARAMETER_GROUP );
221
218
Integer parameterIndex = parameterIndexString == null ? null : Integer .valueOf (parameterIndexString );
222
219
String typeSource = matcher .group (COMPARISION_TYPE_GROUP );
223
- String expression = spelExtractor .parameterNameToSpelMap ()
224
- .get (parameterName == null ? parameterIndexString : parameterName );
220
+ String expression = spelExtractor .getParameter (parameterName == null ? parameterIndexString : parameterName );
225
221
String replacement = null ;
226
222
227
223
Assert .isTrue (parameterIndex != null || parameterName != null , "We need either a name or an index." );
@@ -269,7 +265,8 @@ private String parseParameterBindingsOfQueryIntoBindingsAndReturnCleanedQuery(St
269
265
return resultingQuery ;
270
266
}
271
267
272
- private SpelQueryContext .SpelExtractor createSpelExtractor (String queryWithSpel ) {
268
+ private SpelExtractor createSpelExtractor (String queryWithSpel ) {
269
+
273
270
int greatestParameterIndex = tryFindGreatestParameterIndexIn (queryWithSpel );
274
271
275
272
boolean parametersShouldBeAccessedByIndex = greatestParameterIndex != -1 ;
@@ -296,7 +293,7 @@ private SpelQueryContext.SpelExtractor createSpelExtractor(String queryWithSpel)
296
293
297
294
BiFunction <String , String , String > parameterNameToReplacement = (prefix , name ) -> fixedPrefix + name ;
298
295
299
- return new SpelQueryContext (indexToParameterName , parameterNameToReplacement ).parse (queryWithSpel );
296
+ return SpelQueryContext . of (indexToParameterName , parameterNameToReplacement ).parse (queryWithSpel );
300
297
}
301
298
302
299
private String replaceFirst (String text , String substring , String replacement ) {
@@ -322,13 +319,11 @@ private int tryFindGreatestParameterIndexIn(String query) {
322
319
return greatestParameterIndex ;
323
320
}
324
321
325
- private void checkAndRegister (ParameterBinding binding , List <ParameterBinding > bindings ) {
322
+ private static void checkAndRegister (ParameterBinding binding , List <ParameterBinding > bindings ) {
326
323
327
- for (ParameterBinding existing : bindings ) {
328
- if (existing .hasName (binding .getName ()) || existing .hasPosition (binding .getPosition ())) {
329
- Assert .isTrue (existing .equals (binding ), String .format (MESSAGE , existing , binding ));
330
- }
331
- }
324
+ bindings .stream () //
325
+ .filter (it -> it .hasName (binding .getName ()) || it .hasPosition (binding .getPosition ())) //
326
+ .forEach (it -> Assert .isTrue (it .equals (binding ), String .format (MESSAGE , it , binding )));
332
327
333
328
if (!bindings .contains (binding )) {
334
329
bindings .add (binding );
0 commit comments