4545import java .util .function .Consumer ;
4646import java .util .function .Function ;
4747import java .util .function .Supplier ;
48+ import java .util .stream .Collectors ;
4849
4950/**
5051 * Transform a record using a {@link Fix}.
@@ -112,33 +113,20 @@ private void processDo(final Do expression, final Params params, final Options o
112113 }
113114
114115 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 ();
116117 final Else elseExpression = ifExpression .getElse ();
117118
118- final Supplier <String > elseIfMessageSupplier = ( ) -> executionExceptionMessage (elseIfExpression , elseIfExpression .eResource ());
119+ final List < Supplier <String >> elseIfMessageSuppliers = mapList ( elseIfExpressions , e -> ( ) -> executionExceptionMessage (e , e .eResource () ));
119120 final Supplier <String > elseMessageSupplier = () -> executionExceptionMessage (elseExpression , elseExpression .eResource ());
120121
121122 processFix (() -> executionExceptionMessage (ifExpression , ifExpression .eResource ()), () -> {
122123 final FixPredicate ifPredicate = getInstance (ifExpression .getName (), FixPredicate .class , FixConditional ::valueOf );
123124 final RecordTransformer ifTransformer = new RecordTransformer (metafix , ifExpression .getElements ());
124125
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 ()));
142130
143131 final RecordTransformer elseTransformer = elseExpression != null ? new RecordTransformer (metafix , elseExpression .getElements ()) : null ;
144132
@@ -147,8 +135,15 @@ private void processIf(final If ifExpression, final Params ifParams, final Optio
147135 ifTransformer .transform (record );
148136 }
149137 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 );
152147
153148 if (elseIfPredicate .test (metafix , record , elseIfParams .resolve (), elseIfOptions .resolve ())) {
154149 elseIfTransformer .transform (record );
@@ -189,6 +184,10 @@ private <T> T getInstance(final String name, final Class<T> baseType, final Func
189184 return name .contains ("." ) ? ReflectionUtil .loadClass (name , baseType ).newInstance () : enumFunction .apply (name );
190185 }
191186
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+
192191 private void processFix (final Supplier <String > messageSupplier , final Supplier <Consumer <Record >> consumerSupplier ) {
193192 currentMessageSupplier = messageSupplier ;
194193
0 commit comments