45
45
import java .util .function .Consumer ;
46
46
import java .util .function .Function ;
47
47
import java .util .function .Supplier ;
48
+ import java .util .stream .Collectors ;
48
49
49
50
/**
50
51
* Transform a record using a {@link Fix}.
@@ -112,33 +113,20 @@ private void processDo(final Do expression, final Params params, final Options o
112
113
}
113
114
114
115
private void processIf (final If ifExpression , final Params ifParams , final Options ifOptions ) {
115
- final ElsIf elseIfExpression = ifExpression .getElseIf ();
116
+ final List < ElsIf > elseIfExpressions = ifExpression .getElseIf ();
116
117
final Else elseExpression = ifExpression .getElse ();
117
118
118
- final Supplier <String > elseIfMessageSupplier = ( ) -> executionExceptionMessage (elseIfExpression , elseIfExpression .eResource ());
119
+ final List < Supplier <String >> elseIfMessageSuppliers = mapList ( elseIfExpressions , e -> ( ) -> executionExceptionMessage (e , e .eResource () ));
119
120
final Supplier <String > elseMessageSupplier = () -> executionExceptionMessage (elseExpression , elseExpression .eResource ());
120
121
121
122
processFix (() -> executionExceptionMessage (ifExpression , ifExpression .eResource ()), () -> {
122
123
final FixPredicate ifPredicate = getInstance (ifExpression .getName (), FixPredicate .class , FixConditional ::valueOf );
123
124
final RecordTransformer ifTransformer = new RecordTransformer (metafix , ifExpression .getElements ());
124
125
125
- final FixPredicate elseIfPredicate ;
126
- final Params elseIfParams ;
127
- final Options elseIfOptions ;
128
- final RecordTransformer elseIfTransformer ;
129
-
130
- if (elseIfExpression != null ) {
131
- elseIfPredicate = getInstance (elseIfExpression .getName (), FixPredicate .class , FixConditional ::valueOf );
132
- elseIfParams = new Params (elseIfExpression .getParams (), vars );
133
- elseIfOptions = new Options (elseIfExpression .getOptions (), vars );
134
- elseIfTransformer = new RecordTransformer (metafix , elseIfExpression .getElements ());
135
- }
136
- else {
137
- elseIfPredicate = null ;
138
- elseIfParams = null ;
139
- elseIfOptions = null ;
140
- elseIfTransformer = null ;
141
- }
126
+ final List <FixPredicate > elseIfPredicates = mapList (elseIfExpressions , e -> getInstance (e .getName (), FixPredicate .class , FixConditional ::valueOf ));
127
+ final List <Params > elseIfParamsList = mapList (elseIfExpressions , e -> new Params (e .getParams (), vars ));
128
+ final List <Options > elseIfOptionsList = mapList (elseIfExpressions , e -> new Options (e .getOptions (), vars ));
129
+ final List <RecordTransformer > elseIfTransformers = mapList (elseIfExpressions , e -> new RecordTransformer (metafix , e .getElements ()));
142
130
143
131
final RecordTransformer elseTransformer = elseExpression != null ? new RecordTransformer (metafix , elseExpression .getElements ()) : null ;
144
132
@@ -147,8 +135,15 @@ private void processIf(final If ifExpression, final Params ifParams, final Optio
147
135
ifTransformer .transform (record );
148
136
}
149
137
else {
150
- if (elseIfExpression != null ) {
151
- currentMessageSupplier = elseIfMessageSupplier ;
138
+ for (int i = 0 ; i < elseIfExpressions .size (); ++i ) {
139
+ currentMessageSupplier = elseIfMessageSuppliers .get (i );
140
+
141
+ final ElsIf elseIfExpression = elseIfExpressions .get (i );
142
+
143
+ final FixPredicate elseIfPredicate = elseIfPredicates .get (i );
144
+ final Params elseIfParams = elseIfParamsList .get (i );
145
+ final Options elseIfOptions = elseIfOptionsList .get (i );
146
+ final RecordTransformer elseIfTransformer = elseIfTransformers .get (i );
152
147
153
148
if (elseIfPredicate .test (metafix , record , elseIfParams .resolve (), elseIfOptions .resolve ())) {
154
149
elseIfTransformer .transform (record );
@@ -189,6 +184,10 @@ private <T> T getInstance(final String name, final Class<T> baseType, final Func
189
184
return name .contains ("." ) ? ReflectionUtil .loadClass (name , baseType ).newInstance () : enumFunction .apply (name );
190
185
}
191
186
187
+ private <T , R > List <R > mapList (final List <T > list , final Function <T , R > function ) {
188
+ return list .stream ().map (function ).collect (Collectors .toList ());
189
+ }
190
+
192
191
private void processFix (final Supplier <String > messageSupplier , final Supplier <Consumer <Record >> consumerSupplier ) {
193
192
currentMessageSupplier = messageSupplier ;
194
193
0 commit comments