compareTo method
Compares this constructor with newConstructor and returns a list of
ApiChanges that have been detected between the two constructors.
Implementation
List<ApiChange> compareTo(
DocConstructor newConstructor, {
required String componentName,
}) {
final changes = <ApiChange>[];
_addChange(DocParameter parameter, ApiChangeOperation operation) {
changes.add(ConstructorParameterApiChange(
component: componentName,
constructor: this,
operation: operation,
parameter: parameter,
));
}
for (var i = 0; i < signature.length; i++) {
final oldParam = signature[i];
final newParam = newConstructor.signature
.firstWhereOrNull((element) => element.name == oldParam.name);
if (newParam == null) {
_addChange(oldParam, ApiChangeOperation.removed);
continue;
}
if (oldParam.required != newParam.required) {
_addChange(
oldParam,
oldParam.required
? ApiChangeOperation.becameOptional
: ApiChangeOperation.becameRequired,
);
}
if (oldParam.named != newParam.named) {
_addChange(
oldParam,
oldParam.named
? ApiChangeOperation.becamePositional
: ApiChangeOperation.becameNamed,
);
}
if (oldParam.type != newParam.type) {
_addChange(oldParam, ApiChangeOperation.typeChanged);
}
}
for (var i = 0; i < newConstructor.signature.length; i++) {
final newParam = newConstructor.signature[i];
final oldParam = signature
.firstWhereOrNull((element) => element.name == newParam.name);
if (oldParam == null) {
_addChange(newParam, ApiChangeOperation.added);
}
}
return changes;
}