in lib/src/solver/incompatibility.dart [357:432]
String? _tryRequiresForbidden(Incompatibility other,
[Map<String, PackageDetail>? details, int? thisLine, int? otherLine]) {
if (terms.length != 1 && other.terms.length != 1) return null;
Incompatibility prior;
Incompatibility latter;
int? priorLine;
int? latterLine;
if (terms.length == 1) {
prior = other;
latter = this;
priorLine = otherLine;
latterLine = thisLine;
} else {
prior = this;
latter = other;
priorLine = thisLine;
latterLine = otherLine;
}
var negative = prior._singleTermWhere((term) => !term.isPositive);
if (negative == null) return null;
if (!negative.inverse.satisfies(latter.terms.first)) return null;
var positives = prior.terms.where((term) => term.isPositive);
var buffer = StringBuffer();
if (positives.length > 1) {
var priorString =
positives.map((term) => _terse(term, details)).join(' or ');
buffer.write('if $priorString then ');
} else {
buffer.write(_terse(positives.first, details, allowEvery: true));
buffer.write(prior.cause == IncompatibilityCause.dependency
? ' depends on '
: ' requires ');
}
if (latter.cause == IncompatibilityCause.unknownSource) {
var package = latter.terms.first.package;
buffer.write('${package.name} ');
if (priorLine != null) buffer.write('($priorLine) ');
buffer.write('from unknown source "${package.source}"');
if (latterLine != null) buffer.write(' ($latterLine)');
return buffer.toString();
}
buffer.write('${_terse(latter.terms.first, details)} ');
if (priorLine != null) buffer.write('($priorLine) ');
if (latter.cause == IncompatibilityCause.useLatest) {
var latest =
VersionConstraint.any.difference(latter.terms.single.constraint);
buffer.write('but the latest version ($latest) is required');
} else if (latter.cause is SdkCause) {
var cause = latter.cause as SdkCause;
buffer.write('which requires ');
if (!cause.sdk.isAvailable) {
buffer.write('the ${cause.sdk.name} SDK');
} else {
if (cause.sdk.name != 'Dart') buffer.write(cause.sdk.name + ' ');
buffer.write('SDK version ${cause.constraint}');
}
} else if (latter.cause == IncompatibilityCause.noVersions) {
buffer.write("which doesn't match any versions");
} else if (cause is PackageNotFoundCause) {
buffer.write("which doesn't exist "
'(${(cause as PackageNotFoundCause).exception.message})');
} else {
buffer.write('which is forbidden');
}
if (latterLine != null) buffer.write(' ($latterLine)');
return buffer.toString();
}