3
3
import io .swagger .v3 .oas .models .Components ;
4
4
import io .swagger .v3 .oas .models .parameters .Parameter ;
5
5
import java .util .ArrayList ;
6
+ import java .util .Collections ;
6
7
import java .util .List ;
7
8
import java .util .Objects ;
8
9
import java .util .Optional ;
@@ -28,6 +29,7 @@ public ParametersDiffResult(
28
29
}
29
30
/** compare two parameter */
30
31
public class ParametersDiff {
32
+
31
33
private static final RefPointer <Parameter > refPointer = new RefPointer <>(RefType .PARAMETERS );
32
34
33
35
private final Components leftComponents ;
@@ -59,28 +61,28 @@ public static boolean same(Parameter left, Parameter right) {
59
61
}
60
62
61
63
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 );
75
77
} else {
76
- Parameter rightPara = rightParam .get ();
77
- right .remove (rightPara );
78
+ Parameter rightParam = rightParamOpt .get ();
79
+ wRight .remove (rightParam );
78
80
builder
79
- .with (openApiDiff .getParameterDiff ().diff (leftPara , rightPara , context ))
81
+ .with (openApiDiff .getParameterDiff ().diff (leftParam , rightParam , context ))
80
82
.ifPresent (changedParameters .getChanged ()::add );
81
83
}
82
84
}
83
- changedParameters .getIncreased ().addAll (right );
85
+ changedParameters .getIncreased ().addAll (wRight );
84
86
return new ParametersDiffResult (
85
87
builder .buildIsChanged (changedParameters ),
86
88
pathUnchangedParametersChanged (changedParameters , context ));
0 commit comments