33import io .swagger .v3 .oas .models .Components ;
44import io .swagger .v3 .oas .models .parameters .Parameter ;
55import java .util .ArrayList ;
6+ import java .util .Collections ;
67import java .util .List ;
78import java .util .Objects ;
89import java .util .Optional ;
@@ -28,6 +29,7 @@ public ParametersDiffResult(
2829}
2930/** compare two parameter */
3031public class ParametersDiff {
32+
3133 private static final RefPointer <Parameter > refPointer = new RefPointer <>(RefType .PARAMETERS );
3234
3335 private final Components leftComponents ;
@@ -59,28 +61,28 @@ public static boolean same(Parameter left, Parameter right) {
5961 }
6062
6163 public ParametersDiffResult diff (
62- List <Parameter > left , List <Parameter > right , DiffContext context ) {
63- DeferredBuilder <Changed > builder = new DeferredBuilder <>();
64- ChangedParameters changedParameters =
65- new ChangedParameters ( left , right != null ? new ArrayList <>( right ) : null , context );
66- if ( null == left ) left = new ArrayList <>( );
67- if ( null == right ) right = new ArrayList <>();
68-
69- for ( Parameter leftPara : left ) {
70- leftPara = refPointer . resolveRef ( leftComponents , leftPara , leftPara . get$ref ());
71-
72- Optional <Parameter > rightParam = contains (rightComponents , right , leftPara );
73- if (!rightParam .isPresent ()) {
74- changedParameters .getMissing ().add (leftPara );
64+ final List <Parameter > left , final List <Parameter > right , final DiffContext context ) {
65+ final DeferredBuilder <Changed > builder = new DeferredBuilder <>();
66+ final List < Parameter > wLeft = Optional . ofNullable ( left ). orElseGet ( Collections :: emptyList );
67+ final List < Parameter > wRight =
68+ Optional . ofNullable ( right ). map ( ArrayList :: new ). orElseGet ( ArrayList :: new );
69+
70+ final ChangedParameters changedParameters = new ChangedParameters ( wLeft , wRight , context );
71+
72+ for ( Parameter leftParam : wLeft ) {
73+ leftParam = refPointer . resolveRef ( leftComponents , leftParam , leftParam . get$ref ());
74+ Optional <Parameter > rightParamOpt = contains (rightComponents , wRight , leftParam );
75+ if (!rightParamOpt .isPresent ()) {
76+ changedParameters .getMissing ().add (leftParam );
7577 } else {
76- Parameter rightPara = rightParam .get ();
77- right .remove (rightPara );
78+ Parameter rightParam = rightParamOpt .get ();
79+ wRight .remove (rightParam );
7880 builder
79- .with (openApiDiff .getParameterDiff ().diff (leftPara , rightPara , context ))
81+ .with (openApiDiff .getParameterDiff ().diff (leftParam , rightParam , context ))
8082 .ifPresent (changedParameters .getChanged ()::add );
8183 }
8284 }
83- changedParameters .getIncreased ().addAll (right );
85+ changedParameters .getIncreased ().addAll (wRight );
8486 return new ParametersDiffResult (
8587 builder .buildIsChanged (changedParameters ),
8688 pathUnchangedParametersChanged (changedParameters , context ));
0 commit comments