Info when publishing <3.0.0 constraint that is interpreted as <4.0.0 (#3752)

diff --git a/lib/src/pubspec.dart b/lib/src/pubspec.dart
index fba6887..a1f84c1 100644
--- a/lib/src/pubspec.dart
+++ b/lib/src/pubspec.dart
@@ -201,9 +201,7 @@
     var yaml = parent['environment'];
     final VersionConstraint originalDartSdkConstraint;
     if (yaml == null) {
-      originalDartSdkConstraint = _includeDefaultSdkConstraint
-          ? _defaultUpperBoundSdkConstraint
-          : VersionConstraint.any;
+      originalDartSdkConstraint = VersionConstraint.any;
     } else if (yaml is! YamlMap) {
       _error(
         '"environment" field must be a map.',
@@ -216,7 +214,6 @@
         _FileType.pubspec,
       );
     }
-
     var constraints = {
       'dart': _interpretDartSdkConstraint(
         originalDartSdkConstraint,
diff --git a/lib/src/validator/sdk_constraint.dart b/lib/src/validator/sdk_constraint.dart
index a14d179..729981e 100644
--- a/lib/src/validator/sdk_constraint.dart
+++ b/lib/src/validator/sdk_constraint.dart
@@ -17,25 +17,13 @@
 /// * is not depending on a prerelease, unless the package itself is a
 /// prerelease.
 class SdkConstraintValidator extends Validator {
-  /// Get SDK version constraint from `pubspec.yaml` without any defaults or
-  /// overrides.
-  VersionConstraint _sdkConstraintFromPubspecYaml() {
-    final env = entrypoint.root.pubspec.fields['environment'];
-    if (env is Map && env['sdk'] is String) {
-      try {
-        return VersionConstraint.parse(env['sdk']);
-      } on FormatException {
-        // ignore
-      }
-    }
-    return VersionConstraint.any;
-  }
-
   @override
   Future validate() async {
-    final dartConstraint = _sdkConstraintFromPubspecYaml();
-    if (dartConstraint is VersionRange) {
-      if (dartConstraint.max == null) {
+    final dartConstraint = entrypoint.root.pubspec.dartSdkConstraint;
+    final originalConstraint = dartConstraint.originalConstraint;
+    final effectiveConstraint = dartConstraint.effectiveConstraint;
+    if (originalConstraint is VersionRange) {
+      if (originalConstraint.max == null) {
         errors.add(
             'Published packages should have an upper bound constraint on the '
             'Dart SDK (typically this should restrict to less than the next '
@@ -44,7 +32,7 @@
             'instructions on setting an sdk version constraint.');
       }
 
-      final constraintMin = dartConstraint.min;
+      final constraintMin = originalConstraint.min;
       final packageVersion = entrypoint.root.version;
 
       if (constraintMin != null &&
@@ -58,6 +46,21 @@
             'See https://dart.dev/tools/pub/publishing#publishing-prereleases '
             'For more information on pre-releases.');
       }
+      if (
+          // We only want to give this hint if there was no other problems with
+          // the sdk constraint.
+          warnings.isEmpty &&
+              errors.isEmpty &&
+              originalConstraint != effectiveConstraint) {
+        hints.add('''
+The declared SDK constraint is '$originalConstraint', this is interpreted as '$effectiveConstraint'.
+
+Consider updating the SDK constraint to:
+
+environment:
+  sdk: '$effectiveConstraint'
+''');
+      }
     }
 
     for (var sdk in sdks.values) {
diff --git a/test/validator/sdk_constraint_test.dart b/test/validator/sdk_constraint_test.dart
index 0a0703a..4fb8f35 100644
--- a/test/validator/sdk_constraint_test.dart
+++ b/test/validator/sdk_constraint_test.dart
@@ -167,5 +167,30 @@
         ),
       );
     });
+
+    test(
+        'Gives a hint if package has a <3.0.0 constraint that is interpreted as <4.0.0',
+        () async {
+      await d.dir(appPath, [
+        d.rawPubspec({
+          'name': 'test_pkg',
+          'version': '1.0.0',
+          'environment': {'sdk': '^2.19.0'}
+        })
+      ]).create();
+      await expectValidation(
+        sdkConstraint,
+        hints: anyElement(
+          '''
+The declared SDK constraint is '^2.19.0', this is interpreted as '>=2.19.0 <4.0.0'.
+
+Consider updating the SDK constraint to:
+
+environment:
+  sdk: '>=2.19.0 <4.0.0'
+''',
+        ),
+      );
+    });
   });
 }