List _buildDeps()

in lib/src/pkg_resolution.dart [230:320]


List<PkgDependency> _buildDeps(Pubspec pubspec,
    Map<String, Version> pkgVersions, Map<String, Version> availVersions) {
  var deps = <PkgDependency>[];

  void addDetail(
      String package, Dependency? dependency, String dependencyType) {
    String constraintType;
    final errors = <String>[];
    VersionConstraint? constraint;
    if (dependencyType == DependencyTypes.transitive) {
      constraintType = ConstraintTypes.inherited;
    } else {
      if (dependency is SdkDependency) {
        constraintType = ConstraintTypes.sdk;
        if (dependency.sdk != 'flutter') {
          errors.add('Unsupported SDK for package $package: ${dependency.sdk}');
        }
      } else if (dependency is GitDependency) {
        constraintType = ConstraintTypes.git;
        if (dependencyType != DependencyTypes.dev) {
          errors.add('Git constraint for package $package: ${dependency.url}');
        }
      } else if (dependency is PathDependency) {
        constraintType = ConstraintTypes.path;
        errors.add('Path constraint for package $package: ${dependency.path}');
      } else if (dependency is HostedDependency) {
        constraintType = ConstraintTypes.normal;
        constraint = dependency.version;
      } else {
        constraintType = ConstraintTypes.unknown;
        errors.add('Unknown constraint for package $package: $dependency');
      }
    }

    var resolved = pkgVersions[package];
    var available = availVersions[package];
    if (resolved == null && dependencyType != DependencyTypes.dev) {
      errors.add('No resolved version for package $package');
    }

    if (resolved != null &&
        constraint != null &&
        !constraint.allows(resolved)) {
      errors.add(
          'Package $package has version $resolved but $constraint does not allow it!');
    }

    for (final error in errors) {
      log.info('Weird: $error');
    }

    deps.add(PkgDependency(
      package: package,
      dependencyType: dependencyType,
      constraintType: constraintType,
      constraint: constraint,
      resolved: resolved,
      available: available,
      errors: errors.isEmpty ? null : errors,
    ));
  }

  final packageNames = <String>{};

  pubspec.dependencies.forEach((k, v) {
    if (packageNames.add(k)) {
      addDetail(k, v, DependencyTypes.direct);
    }
  });

  pubspec.devDependencies.forEach((k, v) {
    if (packageNames.add(k)) {
      addDetail(k, v, DependencyTypes.dev);
    }
  });

  pkgVersions.forEach((k, v) {
    if (packageNames.add(k)) {
      addDetail(k, null, DependencyTypes.transitive);
    }
  });

  availVersions.forEach((k, v) {
    if (packageNames.add(k)) {
      addDetail(k, null, DependencyTypes.transitive);
    }
  });

  deps.sort((a, b) => a.package.compareTo(b.package));
  return deps;
}