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 ;
@@ -224,26 +224,22 @@ enum ParameterBindingParser {
224
224
private String parseParameterBindingsOfQueryIntoBindingsAndReturnCleanedQuery (String query ,
225
225
List <ParameterBinding > bindings ) {
226
226
227
- SpelQueryContext . SpelExtractor spelExtractor = createSpelExtractor (query );
227
+ SpelExtractor spelExtractor = createSpelExtractor (query );
228
228
229
- String resultingQuery = spelExtractor .query ();
230
-
231
- Matcher matcher = PARAMETER_BINDING_PATTERN .matcher (spelExtractor .query ());
232
-
233
- QuotationMap quotationMap = new QuotationMap (spelExtractor .query ());
229
+ String resultingQuery = spelExtractor .getQueryString ();
230
+ Matcher matcher = PARAMETER_BINDING_PATTERN .matcher (resultingQuery );
234
231
235
232
while (matcher .find ()) {
236
233
237
- if (quotationMap .isQuoted (matcher .start ())) {
234
+ if (spelExtractor .isQuoted (matcher .start ())) {
238
235
continue ;
239
236
}
240
237
241
238
String parameterIndexString = matcher .group (INDEXED_PARAMETER_GROUP );
242
239
String parameterName = parameterIndexString != null ? null : matcher .group (NAMED_PARAMETER_GROUP );
243
240
Integer parameterIndex = parameterIndexString == null ? null : Integer .valueOf (parameterIndexString );
244
241
String typeSource = matcher .group (COMPARISION_TYPE_GROUP );
245
- String expression = spelExtractor .parameterNameToSpelMap ()
246
- .get (parameterName == null ? parameterIndexString : parameterName );
242
+ String expression = spelExtractor .getParameter (parameterName == null ? parameterIndexString : parameterName );
247
243
String replacement = null ;
248
244
249
245
Assert .isTrue (parameterIndex != null || parameterName != null , "We need either a name or an index." );
@@ -291,7 +287,8 @@ private String parseParameterBindingsOfQueryIntoBindingsAndReturnCleanedQuery(St
291
287
return resultingQuery ;
292
288
}
293
289
294
- private SpelQueryContext .SpelExtractor createSpelExtractor (String queryWithSpel ) {
290
+ private SpelExtractor createSpelExtractor (String queryWithSpel ) {
291
+
295
292
int greatestParameterIndex = tryFindGreatestParameterIndexIn (queryWithSpel );
296
293
297
294
boolean parametersShouldBeAccessedByIndex = greatestParameterIndex != -1 ;
@@ -318,7 +315,7 @@ private SpelQueryContext.SpelExtractor createSpelExtractor(String queryWithSpel)
318
315
319
316
BiFunction <String , String , String > parameterNameToReplacement = (prefix , name ) -> fixedPrefix + name ;
320
317
321
- return new SpelQueryContext (indexToParameterName , parameterNameToReplacement ).parse (queryWithSpel );
318
+ return SpelQueryContext . of (indexToParameterName , parameterNameToReplacement ).parse (queryWithSpel );
322
319
}
323
320
324
321
private String replaceFirst (String text , String substring , String replacement ) {
@@ -344,13 +341,11 @@ private int tryFindGreatestParameterIndexIn(String query) {
344
341
return greatestParameterIndex ;
345
342
}
346
343
347
- private void checkAndRegister (ParameterBinding binding , List <ParameterBinding > bindings ) {
344
+ private static void checkAndRegister (ParameterBinding binding , List <ParameterBinding > bindings ) {
348
345
349
- for (ParameterBinding existing : bindings ) {
350
- if (existing .hasName (binding .getName ()) || existing .hasPosition (binding .getPosition ())) {
351
- Assert .isTrue (existing .equals (binding ), String .format (MESSAGE , existing , binding ));
352
- }
353
- }
346
+ bindings .stream () //
347
+ .filter (it -> it .hasName (binding .getName ()) || it .hasPosition (binding .getPosition ())) //
348
+ .forEach (it -> Assert .isTrue (it .equals (binding ), String .format (MESSAGE , it , binding )));
354
349
355
350
if (!bindings .contains (binding )) {
356
351
bindings .add (binding );
0 commit comments