[cfe] Emit deprecation info for dartext: in 2.14

Closes #45758

Change-Id: I05384487ef1ef9f718a3123f8217c9aa3d4d8f32
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/200879
Reviewed-by: Jens Johansen <jensj@google.com>
Commit-Queue: Johnni Winther <johnniwinther@google.com>
diff --git a/pkg/_fe_analyzer_shared/lib/src/messages/codes_generated.dart b/pkg/_fe_analyzer_shared/lib/src/messages/codes_generated.dart
index ed754b3..73824a7 100644
--- a/pkg/_fe_analyzer_shared/lib/src/messages/codes_generated.dart
+++ b/pkg/_fe_analyzer_shared/lib/src/messages/codes_generated.dart
@@ -2162,6 +2162,18 @@
 }
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+const Code<Null> codeDeprecateDartExt = messageDeprecateDartExt;
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+const MessageCode messageDeprecateDartExt = const MessageCode(
+    "DeprecateDartExt",
+    severity: Severity.info,
+    message:
+        r"""Dart native extensions are deprecated and will be removed in the 2.15 release of Dart SDK.""",
+    tip:
+        r"""Migrate to using FFI instead (https://dart.dev/guides/libraries/c-interop)""");
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Template<
         Message Function(
             int count, int count2, num _num1, num _num2, num _num3)>
diff --git a/pkg/front_end/lib/src/fasta/source/source_library_builder.dart b/pkg/front_end/lib/src/fasta/source/source_library_builder.dart
index b09820a..91da0d0 100644
--- a/pkg/front_end/lib/src/fasta/source/source_library_builder.dart
+++ b/pkg/front_end/lib/src/fasta/source/source_library_builder.dart
@@ -722,6 +722,7 @@
     String nativePath;
     const String nativeExtensionScheme = "dart-ext:";
     if (uri.startsWith(nativeExtensionScheme)) {
+      addProblem(messageDeprecateDartExt, charOffset, noLength, fileUri);
       String strippedUri = uri.substring(nativeExtensionScheme.length);
       if (strippedUri.startsWith("package")) {
         resolvedUri = resolve(this.importUri, strippedUri,
diff --git a/pkg/front_end/messages.status b/pkg/front_end/messages.status
index c890c30..709f244 100644
--- a/pkg/front_end/messages.status
+++ b/pkg/front_end/messages.status
@@ -174,6 +174,8 @@
 DeferredExtensionImport/part_wrapped_script: Fail
 DeferredPrefixDuplicated/example: Fail
 DeferredTypeAnnotation/example: Fail
+DeprecateDartExt/analyzerCode: Fail
+DeprecateDartExt/part_wrapped_script: Fail # Example uses import declaration.
 DillOutlineSummary/analyzerCode: Fail
 DillOutlineSummary/example: Fail
 DirectiveAfterDeclaration/part_wrapped_script1: Fail
diff --git a/pkg/front_end/messages.yaml b/pkg/front_end/messages.yaml
index b00bab2..c411adb 100644
--- a/pkg/front_end/messages.yaml
+++ b/pkg/front_end/messages.yaml
@@ -5180,3 +5180,10 @@
   script: |
     // @dart=2.9
     main() {}
+
+DeprecateDartExt:
+  template: "Dart native extensions are deprecated and will be removed in the 2.15 release of Dart SDK."
+  tip: "Migrate to using FFI instead (https://dart.dev/guides/libraries/c-interop)"
+  severity: INFO
+  script: |
+    import 'dart-ext:foo.dart';
diff --git a/pkg/front_end/test/spell_checking_list_messages.txt b/pkg/front_end/test/spell_checking_list_messages.txt
index 4d51529..808f9f1 100644
--- a/pkg/front_end/test/spell_checking_list_messages.txt
+++ b/pkg/front_end/test/spell_checking_list_messages.txt
@@ -34,6 +34,7 @@
 ffi
 flutter_runner
 futureor
+guides
 h
 https
 interop
@@ -42,6 +43,7 @@
 libraries.json
 list.filled
 loadlibrary
+migrate
 name.#name
 name.stack
 nameokempty
diff --git a/pkg/front_end/testcases/general/external_import.dart.weak.expect b/pkg/front_end/testcases/general/external_import.dart.weak.expect
index 0a7d177..36d348d1 100644
--- a/pkg/front_end/testcases/general/external_import.dart.weak.expect
+++ b/pkg/front_end/testcases/general/external_import.dart.weak.expect
@@ -2,6 +2,24 @@
 @#C4
 @#C6
 library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/external_import.dart:7:1: Info: Dart native extensions are deprecated and will be removed in the 2.15 release of Dart SDK.
+// Migrate to using FFI instead (https://dart.dev/guides/libraries/c-interop)
+// import 'dart-ext:here';
+// ^
+//
+// pkg/front_end/testcases/general/external_import.dart:8:1: Info: Dart native extensions are deprecated and will be removed in the 2.15 release of Dart SDK.
+// Migrate to using FFI instead (https://dart.dev/guides/libraries/c-interop)
+// import 'dart-ext:foo/../there';
+// ^
+//
+// pkg/front_end/testcases/general/external_import.dart:9:1: Info: Dart native extensions are deprecated and will be removed in the 2.15 release of Dart SDK.
+// Migrate to using FFI instead (https://dart.dev/guides/libraries/c-interop)
+// import 'dart-ext:/usr/local/somewhere';
+// ^
+//
 import self as self;
 import "dart:_internal" as _in;
 
diff --git a/pkg/front_end/testcases/general/external_import.dart.weak.outline.expect b/pkg/front_end/testcases/general/external_import.dart.weak.outline.expect
index c82b9e6..046113e 100644
--- a/pkg/front_end/testcases/general/external_import.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/external_import.dart.weak.outline.expect
@@ -2,6 +2,24 @@
 @dart._internal::ExternalName::•("dart-ext:foo/../there")
 @dart._internal::ExternalName::•("dart-ext:/usr/local/somewhere")
 library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/external_import.dart:7:1: Info: Dart native extensions are deprecated and will be removed in the 2.15 release of Dart SDK.
+// Migrate to using FFI instead (https://dart.dev/guides/libraries/c-interop)
+// import 'dart-ext:here';
+// ^
+//
+// pkg/front_end/testcases/general/external_import.dart:8:1: Info: Dart native extensions are deprecated and will be removed in the 2.15 release of Dart SDK.
+// Migrate to using FFI instead (https://dart.dev/guides/libraries/c-interop)
+// import 'dart-ext:foo/../there';
+// ^
+//
+// pkg/front_end/testcases/general/external_import.dart:9:1: Info: Dart native extensions are deprecated and will be removed in the 2.15 release of Dart SDK.
+// Migrate to using FFI instead (https://dart.dev/guides/libraries/c-interop)
+// import 'dart-ext:/usr/local/somewhere';
+// ^
+//
 import self as self;
 import "dart:_internal" as _in;
 
diff --git a/pkg/front_end/testcases/general/external_import.dart.weak.transformed.expect b/pkg/front_end/testcases/general/external_import.dart.weak.transformed.expect
index 0a7d177..36d348d1 100644
--- a/pkg/front_end/testcases/general/external_import.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/external_import.dart.weak.transformed.expect
@@ -2,6 +2,24 @@
 @#C4
 @#C6
 library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/external_import.dart:7:1: Info: Dart native extensions are deprecated and will be removed in the 2.15 release of Dart SDK.
+// Migrate to using FFI instead (https://dart.dev/guides/libraries/c-interop)
+// import 'dart-ext:here';
+// ^
+//
+// pkg/front_end/testcases/general/external_import.dart:8:1: Info: Dart native extensions are deprecated and will be removed in the 2.15 release of Dart SDK.
+// Migrate to using FFI instead (https://dart.dev/guides/libraries/c-interop)
+// import 'dart-ext:foo/../there';
+// ^
+//
+// pkg/front_end/testcases/general/external_import.dart:9:1: Info: Dart native extensions are deprecated and will be removed in the 2.15 release of Dart SDK.
+// Migrate to using FFI instead (https://dart.dev/guides/libraries/c-interop)
+// import 'dart-ext:/usr/local/somewhere';
+// ^
+//
 import self as self;
 import "dart:_internal" as _in;