[cfe] Add FileUriConstantExpression

This adds FileUriConstantExpression, a subclass of ConstantExpression, to support correct file offset of annotations for augmentations and patches.
The FileUriExpression is used to carry the file uri of the expression
before constant evaluation.

TEST=general/patch_annotations

Change-Id: I0dc8a0cb97dd530fd1960785d38c2d5e4883c3dd
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/311660
Commit-Queue: Johnni Winther <johnniwinther@google.com>
Reviewed-by: Jens Johansen <jensj@google.com>
Reviewed-by: Alexander Markov <alexmarkov@google.com>
diff --git a/pkg/front_end/lib/src/fasta/builder/metadata_builder.dart b/pkg/front_end/lib/src/fasta/builder/metadata_builder.dart
index f0e52a4..20a0b7e 100644
--- a/pkg/front_end/lib/src/fasta/builder/metadata_builder.dart
+++ b/pkg/front_end/lib/src/fasta/builder/metadata_builder.dart
@@ -25,15 +25,22 @@
       BodyBuilderContext bodyBuilderContext,
       SourceLibraryBuilder library,
       Uri fileUri,
-      Scope scope) {
+      Scope scope,
+      {bool createFileUriExpression = false}) {
     if (metadata == null) return;
     BodyBuilder bodyBuilder = library.loader
         .createBodyBuilderForOutlineExpression(
             library, bodyBuilderContext, scope, fileUri);
     for (int i = 0; i < metadata.length; ++i) {
       MetadataBuilder annotationBuilder = metadata[i];
-      parent.addAnnotation(
-          bodyBuilder.parseAnnotation(annotationBuilder.beginToken));
+      Expression annotation =
+          bodyBuilder.parseAnnotation(annotationBuilder.beginToken);
+      if (createFileUriExpression) {
+        parent.addAnnotation(new FileUriExpression(annotation, fileUri)
+          ..fileOffset = annotationBuilder.beginToken.charOffset);
+      } else {
+        parent.addAnnotation(annotation);
+      }
     }
     bodyBuilder.inferAnnotations(parent, parent.annotations);
     bodyBuilder.performBacklogComputations(allowFurtherDelays: false);
diff --git a/pkg/front_end/lib/src/fasta/kernel/constant_evaluator.dart b/pkg/front_end/lib/src/fasta/kernel/constant_evaluator.dart
index 762a9c7..9cccf59 100644
--- a/pkg/front_end/lib/src/fasta/kernel/constant_evaluator.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/constant_evaluator.dart
@@ -2225,9 +2225,15 @@
         constant.expression is InvalidExpression) {
       return constant.expression;
     }
-    return new ConstantExpression(
-        constant, node.getStaticType(staticTypeContext))
-      ..fileOffset = node.fileOffset;
+    ConstantExpression constantExpression =
+        new ConstantExpression(constant, node.getStaticType(staticTypeContext))
+          ..fileOffset = node.fileOffset;
+    if (node is FileUriExpression) {
+      return new FileUriConstantExpression(constantExpression.constant,
+          type: constantExpression.type, fileUri: node.fileUri)
+        ..fileOffset = node.fileOffset;
+    }
+    return constantExpression;
   }
 
   bool shouldInline(Expression initializer) {
diff --git a/pkg/front_end/lib/src/fasta/kernel/kernel_helper.dart b/pkg/front_end/lib/src/fasta/kernel/kernel_helper.dart
index 0d14819..b58a19c 100644
--- a/pkg/front_end/lib/src/fasta/kernel/kernel_helper.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/kernel_helper.dart
@@ -301,37 +301,51 @@
   }
 }
 
+/// Removes [FileUriExpression] nodes for annotations whose file URI is
+/// [annotatableFileUri], the file URI of the [annotatable].
+///
+/// This is an optimization to avoid unnecessary [FileUriConstantExpression]
+/// nodes in the generated AST.
+void adjustAnnotationFileUri(Annotatable annotatable, Uri annotatableFileUri) {
+  List<Expression> annotations = annotatable.annotations;
+  for (int i = 0; i < annotations.length; i++) {
+    Expression annotation = annotations[i];
+    if (annotation is FileUriExpression &&
+        annotation.fileUri == annotatableFileUri) {
+      annotations[i] = annotation.expression..parent = annotatable;
+    }
+  }
+}
+
 /// Copies properties, function parameters and body from the [patch] constructor
 /// to its [origin].
 void finishConstructorPatch(Constructor origin, Constructor patch) {
-  // TODO(ahe): restore file-offset once we track both origin and patch file
-  // URIs. See https://github.com/dart-lang/sdk/issues/31579
   origin.fileUri = patch.fileUri;
   origin.startFileOffset = patch.startFileOffset;
   origin.fileOffset = patch.fileOffset;
   origin.fileEndOffset = patch.fileEndOffset;
-  origin.annotations.forEach((m) => m.fileOffset = patch.fileOffset);
 
   origin.isExternal = patch.isExternal;
   origin.function = patch.function;
   origin.function.parent = origin;
   origin.initializers = patch.initializers;
   setParents(origin.initializers, origin);
+
+  adjustAnnotationFileUri(origin, origin.fileUri);
 }
 
 /// Copies properties, function parameters and body from the [patch] procedure
 /// to its [origin].
 void finishProcedurePatch(Procedure origin, Procedure patch) {
-  // TODO(ahe): restore file-offset once we track both origin and patch file
-  // URIs. See https://github.com/dart-lang/sdk/issues/31579
   origin.fileUri = patch.fileUri;
   origin.fileStartOffset = patch.fileStartOffset;
   origin.fileOffset = patch.fileOffset;
   origin.fileEndOffset = patch.fileEndOffset;
-  origin.annotations.forEach((m) => m.fileOffset = patch.fileOffset);
 
   origin.isAbstract = patch.isAbstract;
   origin.isExternal = patch.isExternal;
   origin.function = patch.function;
   origin.function.parent = origin;
+
+  adjustAnnotationFileUri(origin, origin.fileUri);
 }
diff --git a/pkg/front_end/lib/src/fasta/source/source_class_builder.dart b/pkg/front_end/lib/src/fasta/source/source_class_builder.dart
index c60a2f6..e450ef3 100644
--- a/pkg/front_end/lib/src/fasta/source/source_class_builder.dart
+++ b/pkg/front_end/lib/src/fasta/source/source_class_builder.dart
@@ -372,7 +372,8 @@
     }
 
     MetadataBuilder.buildAnnotations(isPatch ? origin.cls : cls, metadata,
-        bodyBuilderContext, libraryBuilder, fileUri, libraryBuilder.scope);
+        bodyBuilderContext, libraryBuilder, fileUri, libraryBuilder.scope,
+        createFileUriExpression: isPatch);
     if (typeVariables != null) {
       for (int i = 0; i < typeVariables!.length; i++) {
         typeVariables![i].buildOutlineExpressions(
@@ -1116,11 +1117,7 @@
   }
 
   int buildBodyNodes() {
-    // TODO(ahe): restore file-offset once we track both origin and patch file
-    // URIs. See https://github.com/dart-lang/sdk/issues/31579
-    if (isPatch) {
-      cls.annotations.forEach((m) => m.fileOffset = origin.cls.fileOffset);
-    }
+    adjustAnnotationFileUri(cls, cls.fileUri);
 
     int count = 0;
 
diff --git a/pkg/front_end/lib/src/fasta/source/source_constructor_builder.dart b/pkg/front_end/lib/src/fasta/source/source_constructor_builder.dart
index 7754922..b7b38d7 100644
--- a/pkg/front_end/lib/src/fasta/source/source_constructor_builder.dart
+++ b/pkg/front_end/lib/src/fasta/source/source_constructor_builder.dart
@@ -932,6 +932,15 @@
   // TODO(johnniwinther): Add annotations to tear-offs.
   @override
   Iterable<Annotatable> get annotatables => [constructor];
+
+  @override
+  bool get isAugmented {
+    if (isPatch) {
+      return origin._patches!.last != this;
+    } else {
+      return _patches != null;
+    }
+  }
 }
 
 class SyntheticSourceConstructorBuilder extends DillConstructorBuilder
@@ -1293,6 +1302,9 @@
   // TODO(johnniwinther): Add annotations to tear-offs.
   @override
   Iterable<Annotatable> get annotatables => [_constructor];
+
+  @override
+  bool get isAugmented => false;
 }
 
 class InlineClassInitializerToStatementConverter
diff --git a/pkg/front_end/lib/src/fasta/source/source_factory_builder.dart b/pkg/front_end/lib/src/fasta/source/source_factory_builder.dart
index c32bcc2..c82006b 100644
--- a/pkg/front_end/lib/src/fasta/source/source_factory_builder.dart
+++ b/pkg/front_end/lib/src/fasta/source/source_factory_builder.dart
@@ -321,6 +321,15 @@
   // TODO(johnniwinther): Add annotations to tear-offs.
   @override
   Iterable<Annotatable> get annotatables => [_procedure];
+
+  @override
+  bool get isAugmented {
+    if (isPatch) {
+      return origin._patches!.last != this;
+    } else {
+      return _patches != null;
+    }
+  }
 }
 
 class RedirectingFactoryBuilder extends SourceFactoryBuilder {
diff --git a/pkg/front_end/lib/src/fasta/source/source_function_builder.dart b/pkg/front_end/lib/src/fasta/source/source_function_builder.dart
index 714546d..a38e589 100644
--- a/pkg/front_end/lib/src/fasta/source/source_function_builder.dart
+++ b/pkg/front_end/lib/src/fasta/source/source_function_builder.dart
@@ -206,6 +206,10 @@
   @override
   bool get isAssignable => false;
 
+  /// Returns `true` if this member is augmented, either by being the origin
+  /// of a augmented member or by not being the last among augmentations.
+  bool get isAugmented;
+
   @override
   Scope computeFormalParameterScope(Scope parent) {
     if (formals == null) return parent;
@@ -479,7 +483,8 @@
           classOrExtensionBuilder?.scope ?? libraryBuilder.scope;
       for (Annotatable annotatable in annotatables) {
         MetadataBuilder.buildAnnotations(annotatable, metadata,
-            bodyBuilderContext, libraryBuilder, fileUri, parentScope);
+            bodyBuilderContext, libraryBuilder, fileUri, parentScope,
+            createFileUriExpression: isAugmented);
       }
       if (typeVariables != null) {
         for (int i = 0; i < typeVariables!.length; i++) {
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 9303c97..56890d3 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
@@ -3343,7 +3343,8 @@
     }
 
     MetadataBuilder.buildAnnotations(
-        library, metadata, bodyBuilderContext, this, fileUri, scope);
+        library, metadata, bodyBuilderContext, this, fileUri, scope,
+        createFileUriExpression: isPatch);
 
     Iterator<Builder> iterator = localMembersIterator;
     while (iterator.moveNext()) {
diff --git a/pkg/front_end/lib/src/fasta/source/source_loader.dart b/pkg/front_end/lib/src/fasta/source/source_loader.dart
index acafdb2..490ca6c 100644
--- a/pkg/front_end/lib/src/fasta/source/source_loader.dart
+++ b/pkg/front_end/lib/src/fasta/source/source_loader.dart
@@ -933,6 +933,8 @@
         // and the VM does not support that. Also, what would, for instance,
         // setting a breakpoint on line 42 of some import uri mean, if the uri
         // represented several files?
+        // TODO(johnniwinther): Replace this with something that supports
+        // augmentation libraries.
         List<String> newPathSegments =
             new List<String>.of(importUri.pathSegments);
         newPathSegments.add(libraryBuilder.fileUri.pathSegments.last);
diff --git a/pkg/front_end/lib/src/fasta/source/source_procedure_builder.dart b/pkg/front_end/lib/src/fasta/source/source_procedure_builder.dart
index b29dd2f..a2332f2 100644
--- a/pkg/front_end/lib/src/fasta/source/source_procedure_builder.dart
+++ b/pkg/front_end/lib/src/fasta/source/source_procedure_builder.dart
@@ -640,6 +640,15 @@
   // TODO(johnniwinther): Add annotations to tear-offs.
   @override
   Iterable<Annotatable> get annotatables => [procedure];
+
+  @override
+  bool get isAugmented {
+    if (isPatch) {
+      return origin._patches!.last != this;
+    } else {
+      return _patches != null;
+    }
+  }
 }
 
 class SourceProcedureMember extends BuilderClassMember {
diff --git a/pkg/front_end/lib/src/fasta/type_inference/inference_visitor.dart b/pkg/front_end/lib/src/fasta/type_inference/inference_visitor.dart
index 03d8708..a6fa9d1 100644
--- a/pkg/front_end/lib/src/fasta/type_inference/inference_visitor.dart
+++ b/pkg/front_end/lib/src/fasta/type_inference/inference_visitor.dart
@@ -526,7 +526,10 @@
   @override
   ExpressionInferenceResult visitFileUriExpression(
       FileUriExpression node, DartType typeContext) {
-    return _unhandledExpression(node, typeContext);
+    ExpressionInferenceResult result =
+        inferExpression(node.expression, typeContext);
+    node.expression = result.expression..parent = node;
+    return new ExpressionInferenceResult(result.inferredType, node);
   }
 
   @override
diff --git a/pkg/front_end/test/utils/kernel_chain.dart b/pkg/front_end/test/utils/kernel_chain.dart
index 871318c..1e265d6 100644
--- a/pkg/front_end/test/utils/kernel_chain.dart
+++ b/pkg/front_end/test/utils/kernel_chain.dart
@@ -518,6 +518,7 @@
   }
 
   bool isUserLibraryImportUri(Uri? importUri) {
+    // TODO(johnniwinther): Support patch libraries user libraries.
     return userLibraries.contains(importUri);
   }
 
diff --git a/pkg/front_end/testcases/dart2js/tear_off_patch/main.dart.strong.expect b/pkg/front_end/testcases/dart2js/tear_off_patch/main.dart.strong.expect
index 93ce634..ff5639b 100644
--- a/pkg/front_end/testcases/dart2js/tear_off_patch/main.dart.strong.expect
+++ b/pkg/front_end/testcases/dart2js/tear_off_patch/main.dart.strong.expect
@@ -29,7 +29,7 @@
 
 typedef Alias<T extends core::num> = test::Class<T>;
 typedef AliasImpl<T extends core::num> = test::ClassImpl<T>;
-@#C13
+@/* from org-dartlang-testcase:///patch_lib.dart */ #C13
 class Class<T extends core::Object? = dynamic> extends core::Object {
   @#C13
   constructor •({core::bool defaultValue = #C14, required test::Class::T% value = #C15}) → test::Class<test::Class::T%>
@@ -54,7 +54,7 @@
   static method /* from org-dartlang-testcase:///patch_lib.dart */ _#redirect2#tearOff<T extends core::Object? = dynamic>({core::bool defaultValue = #C14, required test::Class::_#redirect2#tearOff::T% value = #C15}) → test::Class<test::Class::_#redirect2#tearOff::T%>
     return new test::ClassImpl::patched<test::Class::_#redirect2#tearOff::T%>(defaultValue: defaultValue, value: value);
 }
-@#C13
+@/* from org-dartlang-testcase:///patch_lib.dart */ #C13
 class ClassImpl<T extends core::Object? = dynamic> extends core::Object implements test::Class<test::ClassImpl::T%> {
   constructor •({core::bool defaultValue = #C14, required test::ClassImpl::T% value = #C15}) → test::ClassImpl<test::ClassImpl::T%>
     : super core::Object::•()
diff --git a/pkg/front_end/testcases/dart2js/tear_off_patch/main.dart.weak.expect b/pkg/front_end/testcases/dart2js/tear_off_patch/main.dart.weak.expect
index 93ce634..ff5639b 100644
--- a/pkg/front_end/testcases/dart2js/tear_off_patch/main.dart.weak.expect
+++ b/pkg/front_end/testcases/dart2js/tear_off_patch/main.dart.weak.expect
@@ -29,7 +29,7 @@
 
 typedef Alias<T extends core::num> = test::Class<T>;
 typedef AliasImpl<T extends core::num> = test::ClassImpl<T>;
-@#C13
+@/* from org-dartlang-testcase:///patch_lib.dart */ #C13
 class Class<T extends core::Object? = dynamic> extends core::Object {
   @#C13
   constructor •({core::bool defaultValue = #C14, required test::Class::T% value = #C15}) → test::Class<test::Class::T%>
@@ -54,7 +54,7 @@
   static method /* from org-dartlang-testcase:///patch_lib.dart */ _#redirect2#tearOff<T extends core::Object? = dynamic>({core::bool defaultValue = #C14, required test::Class::_#redirect2#tearOff::T% value = #C15}) → test::Class<test::Class::_#redirect2#tearOff::T%>
     return new test::ClassImpl::patched<test::Class::_#redirect2#tearOff::T%>(defaultValue: defaultValue, value: value);
 }
-@#C13
+@/* from org-dartlang-testcase:///patch_lib.dart */ #C13
 class ClassImpl<T extends core::Object? = dynamic> extends core::Object implements test::Class<test::ClassImpl::T%> {
   constructor •({core::bool defaultValue = #C14, required test::ClassImpl::T% value = #C15}) → test::ClassImpl<test::ClassImpl::T%>
     : super core::Object::•()
diff --git a/pkg/front_end/testcases/dart2js/tear_off_patch/main.dart.weak.modular.expect b/pkg/front_end/testcases/dart2js/tear_off_patch/main.dart.weak.modular.expect
index 93ce634..ff5639b 100644
--- a/pkg/front_end/testcases/dart2js/tear_off_patch/main.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/dart2js/tear_off_patch/main.dart.weak.modular.expect
@@ -29,7 +29,7 @@
 
 typedef Alias<T extends core::num> = test::Class<T>;
 typedef AliasImpl<T extends core::num> = test::ClassImpl<T>;
-@#C13
+@/* from org-dartlang-testcase:///patch_lib.dart */ #C13
 class Class<T extends core::Object? = dynamic> extends core::Object {
   @#C13
   constructor •({core::bool defaultValue = #C14, required test::Class::T% value = #C15}) → test::Class<test::Class::T%>
@@ -54,7 +54,7 @@
   static method /* from org-dartlang-testcase:///patch_lib.dart */ _#redirect2#tearOff<T extends core::Object? = dynamic>({core::bool defaultValue = #C14, required test::Class::_#redirect2#tearOff::T% value = #C15}) → test::Class<test::Class::_#redirect2#tearOff::T%>
     return new test::ClassImpl::patched<test::Class::_#redirect2#tearOff::T%>(defaultValue: defaultValue, value: value);
 }
-@#C13
+@/* from org-dartlang-testcase:///patch_lib.dart */ #C13
 class ClassImpl<T extends core::Object? = dynamic> extends core::Object implements test::Class<test::ClassImpl::T%> {
   constructor •({core::bool defaultValue = #C14, required test::ClassImpl::T% value = #C15}) → test::ClassImpl<test::ClassImpl::T%>
     : super core::Object::•()
diff --git a/pkg/front_end/testcases/dart2js/tear_off_patch/main.dart.weak.outline.expect b/pkg/front_end/testcases/dart2js/tear_off_patch/main.dart.weak.outline.expect
index a7e481e..2a40210 100644
--- a/pkg/front_end/testcases/dart2js/tear_off_patch/main.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/dart2js/tear_off_patch/main.dart.weak.outline.expect
@@ -62,11 +62,11 @@
 
 
 Extra constant evaluation status:
-Evaluated: StaticGet @ org-dartlang-testcase:///origin_lib.dart:6:46 -> InstanceConstant(const _Patch{})
+Evaluated: FileUriExpression @ org-dartlang-testcase:///patch_lib.dart:8:1 -> InstanceConstant(const _Patch{})
 Evaluated: StaticGet @ org-dartlang-testcase:///origin_lib.dart:7:8 -> InstanceConstant(const _Patch{})
 Evaluated: StaticGet @ org-dartlang-testcase:///origin_lib.dart:8:27 -> InstanceConstant(const _Patch{})
 Evaluated: StaticGet @ org-dartlang-testcase:///origin_lib.dart:12:21 -> InstanceConstant(const _Patch{})
 Evaluated: StaticGet @ org-dartlang-testcase:///origin_lib.dart:15:10 -> InstanceConstant(const _Patch{})
-Evaluated: StaticGet @ org-dartlang-testcase:///origin_lib.dart:18:36 -> InstanceConstant(const _Patch{})
+Evaluated: FileUriExpression @ org-dartlang-testcase:///patch_lib.dart:27:1 -> InstanceConstant(const _Patch{})
 Evaluated: StaticGet @ org-dartlang-testcase:///origin_lib.dart:19:45 -> InstanceConstant(const _Patch{})
 Extra constant evaluation: evaluated: 49, effectively constant: 7
diff --git a/pkg/front_end/testcases/dartdevc/factory_patch/main.dart.strong.expect b/pkg/front_end/testcases/dartdevc/factory_patch/main.dart.strong.expect
index c492c25..742c6c5 100644
--- a/pkg/front_end/testcases/dartdevc/factory_patch/main.dart.strong.expect
+++ b/pkg/front_end/testcases/dartdevc/factory_patch/main.dart.strong.expect
@@ -15,7 +15,7 @@
 
 import "dart:_internal";
 
-@#C1
+@/* from org-dartlang-testcase:///patch_lib.dart */ #C1
 class Class extends core::Object {
   final field core::bool defaultValue /* from org-dartlang-testcase:///patch_lib.dart */;
   const constructor _internal({core::bool defaultValue = #C2}) → test::Class
diff --git a/pkg/front_end/testcases/dartdevc/factory_patch/main.dart.weak.expect b/pkg/front_end/testcases/dartdevc/factory_patch/main.dart.weak.expect
index c492c25..742c6c5 100644
--- a/pkg/front_end/testcases/dartdevc/factory_patch/main.dart.weak.expect
+++ b/pkg/front_end/testcases/dartdevc/factory_patch/main.dart.weak.expect
@@ -15,7 +15,7 @@
 
 import "dart:_internal";
 
-@#C1
+@/* from org-dartlang-testcase:///patch_lib.dart */ #C1
 class Class extends core::Object {
   final field core::bool defaultValue /* from org-dartlang-testcase:///patch_lib.dart */;
   const constructor _internal({core::bool defaultValue = #C2}) → test::Class
diff --git a/pkg/front_end/testcases/dartdevc/factory_patch/main.dart.weak.modular.expect b/pkg/front_end/testcases/dartdevc/factory_patch/main.dart.weak.modular.expect
index c492c25..742c6c5 100644
--- a/pkg/front_end/testcases/dartdevc/factory_patch/main.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/dartdevc/factory_patch/main.dart.weak.modular.expect
@@ -15,7 +15,7 @@
 
 import "dart:_internal";
 
-@#C1
+@/* from org-dartlang-testcase:///patch_lib.dart */ #C1
 class Class extends core::Object {
   final field core::bool defaultValue /* from org-dartlang-testcase:///patch_lib.dart */;
   const constructor _internal({core::bool defaultValue = #C2}) → test::Class
diff --git a/pkg/front_end/testcases/dartdevc/factory_patch/main.dart.weak.outline.expect b/pkg/front_end/testcases/dartdevc/factory_patch/main.dart.weak.outline.expect
index 2d35f60..c309efe 100644
--- a/pkg/front_end/testcases/dartdevc/factory_patch/main.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/dartdevc/factory_patch/main.dart.weak.outline.expect
@@ -33,7 +33,7 @@
 
 
 Extra constant evaluation status:
-Evaluated: StaticGet @ org-dartlang-testcase:///origin_lib.dart:6:49 -> InstanceConstant(const _Patch{})
+Evaluated: FileUriExpression @ org-dartlang-testcase:///patch_lib.dart:8:1 -> InstanceConstant(const _Patch{})
 Evaluated: StaticGet @ org-dartlang-testcase:///origin_lib.dart:8:26 -> InstanceConstant(const _Patch{})
 Evaluated: StaticGet @ (unknown position in org-dartlang-testcase:///origin_lib.dart) -> InstanceConstant(const _Patch{})
 Extra constant evaluation: evaluated: 10, effectively constant: 3
diff --git a/pkg/front_end/testcases/general/constructor_patch/main.dart.strong.expect b/pkg/front_end/testcases/general/constructor_patch/main.dart.strong.expect
index 515ddfb..bbbf1ec 100644
--- a/pkg/front_end/testcases/general/constructor_patch/main.dart.strong.expect
+++ b/pkg/front_end/testcases/general/constructor_patch/main.dart.strong.expect
@@ -35,7 +35,7 @@
 
 import "dart:_internal";
 
-@#C3
+@/* from org-dartlang-testcase:///patch_lib.dart */ #C3
 class Class extends core::Object /*hasConstConstructor*/  {
   final field core::bool defaultValue /* from org-dartlang-testcase:///patch_lib.dart */;
   constructor _privateInjected() → test::Class
@@ -60,7 +60,7 @@
     : test::Class::defaultValue = true, super core::Object::•()
     ;
 }
-@#C3
+@/* from org-dartlang-testcase:///patch_lib.dart */ #C3
 class Class2 extends core::Object {
   final field core::int injectedField /* from org-dartlang-testcase:///patch_lib.dart */;
   field core::int field;
diff --git a/pkg/front_end/testcases/general/constructor_patch/main.dart.weak.expect b/pkg/front_end/testcases/general/constructor_patch/main.dart.weak.expect
index 515ddfb..bbbf1ec 100644
--- a/pkg/front_end/testcases/general/constructor_patch/main.dart.weak.expect
+++ b/pkg/front_end/testcases/general/constructor_patch/main.dart.weak.expect
@@ -35,7 +35,7 @@
 
 import "dart:_internal";
 
-@#C3
+@/* from org-dartlang-testcase:///patch_lib.dart */ #C3
 class Class extends core::Object /*hasConstConstructor*/  {
   final field core::bool defaultValue /* from org-dartlang-testcase:///patch_lib.dart */;
   constructor _privateInjected() → test::Class
@@ -60,7 +60,7 @@
     : test::Class::defaultValue = true, super core::Object::•()
     ;
 }
-@#C3
+@/* from org-dartlang-testcase:///patch_lib.dart */ #C3
 class Class2 extends core::Object {
   final field core::int injectedField /* from org-dartlang-testcase:///patch_lib.dart */;
   field core::int field;
diff --git a/pkg/front_end/testcases/general/constructor_patch/main.dart.weak.modular.expect b/pkg/front_end/testcases/general/constructor_patch/main.dart.weak.modular.expect
index 515ddfb..bbbf1ec 100644
--- a/pkg/front_end/testcases/general/constructor_patch/main.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/constructor_patch/main.dart.weak.modular.expect
@@ -35,7 +35,7 @@
 
 import "dart:_internal";
 
-@#C3
+@/* from org-dartlang-testcase:///patch_lib.dart */ #C3
 class Class extends core::Object /*hasConstConstructor*/  {
   final field core::bool defaultValue /* from org-dartlang-testcase:///patch_lib.dart */;
   constructor _privateInjected() → test::Class
@@ -60,7 +60,7 @@
     : test::Class::defaultValue = true, super core::Object::•()
     ;
 }
-@#C3
+@/* from org-dartlang-testcase:///patch_lib.dart */ #C3
 class Class2 extends core::Object {
   final field core::int injectedField /* from org-dartlang-testcase:///patch_lib.dart */;
   field core::int field;
diff --git a/pkg/front_end/testcases/general/constructor_patch/main.dart.weak.outline.expect b/pkg/front_end/testcases/general/constructor_patch/main.dart.weak.outline.expect
index c802b90..a591faf 100644
--- a/pkg/front_end/testcases/general/constructor_patch/main.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/constructor_patch/main.dart.weak.outline.expect
@@ -51,10 +51,10 @@
 
 
 Extra constant evaluation status:
-Evaluated: StaticGet @ org-dartlang-testcase:///origin_lib.dart:6:49 -> InstanceConstant(const _Patch{})
+Evaluated: FileUriExpression @ org-dartlang-testcase:///patch_lib.dart:8:1 -> InstanceConstant(const _Patch{})
 Evaluated: StaticGet @ org-dartlang-testcase:///origin_lib.dart:7:43 -> InstanceConstant(const _Patch{})
-Evaluated: StaticGet @ org-dartlang-testcase:///patch_lib.dart:16:9 -> InstanceConstant(const _Patch{})
+Evaluated: StaticGet @ org-dartlang-testcase:///patch_lib.dart:15:4 -> InstanceConstant(const _Patch{})
 Evaluated: StaticGet @ org-dartlang-testcase:///origin_lib.dart:17:8 -> InstanceConstant(const _Patch{})
-Evaluated: StaticGet @ org-dartlang-testcase:///origin_lib.dart:24:60 -> InstanceConstant(const _Patch{})
+Evaluated: FileUriExpression @ org-dartlang-testcase:///patch_lib.dart:28:1 -> InstanceConstant(const _Patch{})
 Evaluated: StaticGet @ (unknown position in org-dartlang-testcase:///origin_lib.dart) -> InstanceConstant(const _Patch{})
 Extra constant evaluation: evaluated: 7, effectively constant: 6
diff --git a/pkg/front_end/testcases/general/factory_patch/main.dart.strong.expect b/pkg/front_end/testcases/general/factory_patch/main.dart.strong.expect
index 4491cff..55092a2 100644
--- a/pkg/front_end/testcases/general/factory_patch/main.dart.strong.expect
+++ b/pkg/front_end/testcases/general/factory_patch/main.dart.strong.expect
@@ -23,7 +23,7 @@
 
 import "dart:_internal";
 
-@#C1
+@/* from org-dartlang-testcase:///patch_lib.dart */ #C1
 class Class extends core::Object {
   final field core::bool defaultValue /* from org-dartlang-testcase:///patch_lib.dart */;
   const constructor _internal({core::bool defaultValue = #C2}) → test::Class
diff --git a/pkg/front_end/testcases/general/factory_patch/main.dart.weak.expect b/pkg/front_end/testcases/general/factory_patch/main.dart.weak.expect
index 4491cff..55092a2 100644
--- a/pkg/front_end/testcases/general/factory_patch/main.dart.weak.expect
+++ b/pkg/front_end/testcases/general/factory_patch/main.dart.weak.expect
@@ -23,7 +23,7 @@
 
 import "dart:_internal";
 
-@#C1
+@/* from org-dartlang-testcase:///patch_lib.dart */ #C1
 class Class extends core::Object {
   final field core::bool defaultValue /* from org-dartlang-testcase:///patch_lib.dart */;
   const constructor _internal({core::bool defaultValue = #C2}) → test::Class
diff --git a/pkg/front_end/testcases/general/factory_patch/main.dart.weak.modular.expect b/pkg/front_end/testcases/general/factory_patch/main.dart.weak.modular.expect
index 4491cff..55092a2 100644
--- a/pkg/front_end/testcases/general/factory_patch/main.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/factory_patch/main.dart.weak.modular.expect
@@ -23,7 +23,7 @@
 
 import "dart:_internal";
 
-@#C1
+@/* from org-dartlang-testcase:///patch_lib.dart */ #C1
 class Class extends core::Object {
   final field core::bool defaultValue /* from org-dartlang-testcase:///patch_lib.dart */;
   const constructor _internal({core::bool defaultValue = #C2}) → test::Class
diff --git a/pkg/front_end/testcases/general/factory_patch/main.dart.weak.outline.expect b/pkg/front_end/testcases/general/factory_patch/main.dart.weak.outline.expect
index 4eacaec..b175e2a 100644
--- a/pkg/front_end/testcases/general/factory_patch/main.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/factory_patch/main.dart.weak.outline.expect
@@ -30,8 +30,8 @@
 
 
 Extra constant evaluation status:
-Evaluated: StaticGet @ org-dartlang-testcase:///origin_lib.dart:6:49 -> InstanceConstant(const _Patch{})
+Evaluated: FileUriExpression @ org-dartlang-testcase:///patch_lib.dart:8:1 -> InstanceConstant(const _Patch{})
 Evaluated: StaticGet @ org-dartlang-testcase:///origin_lib.dart:8:26 -> InstanceConstant(const _Patch{})
 Evaluated: StaticGet @ (unknown position in org-dartlang-testcase:///origin_lib.dart) -> InstanceConstant(const _Patch{})
-Evaluated: StaticGet @ org-dartlang-testcase:///patch_lib.dart:22:17 -> InstanceConstant(const _Patch{})
+Evaluated: StaticGet @ org-dartlang-testcase:///patch_lib.dart:21:4 -> InstanceConstant(const _Patch{})
 Extra constant evaluation: evaluated: 7, effectively constant: 4
diff --git a/pkg/front_end/testcases/general/inject_private_patch/main.dart.strong.expect b/pkg/front_end/testcases/general/inject_private_patch/main.dart.strong.expect
index 689f23c..0b8dfde 100644
--- a/pkg/front_end/testcases/general/inject_private_patch/main.dart.strong.expect
+++ b/pkg/front_end/testcases/general/inject_private_patch/main.dart.strong.expect
@@ -48,8 +48,8 @@
 import "dart:_internal";
 import "dart:_internal";
 
-@#C1
-@#C1
+@/* from org-dartlang-testcase:///patch_lib1.dart */ #C1
+@/* from org-dartlang-testcase:///patch_lib2.dart */ #C1
 class Class extends core::Object {
   synthetic constructor •() → self2::Class
     : super core::Object::•()
diff --git a/pkg/front_end/testcases/general/inject_private_patch/main.dart.weak.expect b/pkg/front_end/testcases/general/inject_private_patch/main.dart.weak.expect
index 689f23c..0b8dfde 100644
--- a/pkg/front_end/testcases/general/inject_private_patch/main.dart.weak.expect
+++ b/pkg/front_end/testcases/general/inject_private_patch/main.dart.weak.expect
@@ -48,8 +48,8 @@
 import "dart:_internal";
 import "dart:_internal";
 
-@#C1
-@#C1
+@/* from org-dartlang-testcase:///patch_lib1.dart */ #C1
+@/* from org-dartlang-testcase:///patch_lib2.dart */ #C1
 class Class extends core::Object {
   synthetic constructor •() → self2::Class
     : super core::Object::•()
diff --git a/pkg/front_end/testcases/general/inject_private_patch/main.dart.weak.modular.expect b/pkg/front_end/testcases/general/inject_private_patch/main.dart.weak.modular.expect
index 689f23c..0b8dfde 100644
--- a/pkg/front_end/testcases/general/inject_private_patch/main.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/inject_private_patch/main.dart.weak.modular.expect
@@ -48,8 +48,8 @@
 import "dart:_internal";
 import "dart:_internal";
 
-@#C1
-@#C1
+@/* from org-dartlang-testcase:///patch_lib1.dart */ #C1
+@/* from org-dartlang-testcase:///patch_lib2.dart */ #C1
 class Class extends core::Object {
   synthetic constructor •() → self2::Class
     : super core::Object::•()
diff --git a/pkg/front_end/testcases/general/inject_private_patch/main.dart.weak.outline.expect b/pkg/front_end/testcases/general/inject_private_patch/main.dart.weak.outline.expect
index e053383..c687cc2 100644
--- a/pkg/front_end/testcases/general/inject_private_patch/main.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/inject_private_patch/main.dart.weak.outline.expect
@@ -88,6 +88,6 @@
 
 
 Extra constant evaluation status:
-Evaluated: StaticGet @ org-dartlang-testcase:///origin_lib.dart:7:8 -> InstanceConstant(const _Patch{})
-Evaluated: StaticGet @ org-dartlang-testcase:///origin_lib.dart:7:8 -> InstanceConstant(const _Patch{})
+Evaluated: FileUriExpression @ org-dartlang-testcase:///patch_lib1.dart:8:1 -> InstanceConstant(const _Patch{})
+Evaluated: FileUriExpression @ org-dartlang-testcase:///patch_lib2.dart:8:1 -> InstanceConstant(const _Patch{})
 Extra constant evaluation: evaluated: 2, effectively constant: 2
diff --git a/pkg/front_end/testcases/general/inject_public/main.dart.strong.expect b/pkg/front_end/testcases/general/inject_public/main.dart.strong.expect
index 59234de..46edd73 100644
--- a/pkg/front_end/testcases/general/inject_public/main.dart.strong.expect
+++ b/pkg/front_end/testcases/general/inject_public/main.dart.strong.expect
@@ -38,7 +38,7 @@
     : super core::Object::•()
     ;
 }
-@#C1
+@/* from org-dartlang-testcase:///patch_lib.dart */ #C1
 class Class extends core::Object {
   synthetic constructor •() → test::Class
     : super core::Object::•()
diff --git a/pkg/front_end/testcases/general/inject_public/main.dart.weak.expect b/pkg/front_end/testcases/general/inject_public/main.dart.weak.expect
index 59234de..46edd73 100644
--- a/pkg/front_end/testcases/general/inject_public/main.dart.weak.expect
+++ b/pkg/front_end/testcases/general/inject_public/main.dart.weak.expect
@@ -38,7 +38,7 @@
     : super core::Object::•()
     ;
 }
-@#C1
+@/* from org-dartlang-testcase:///patch_lib.dart */ #C1
 class Class extends core::Object {
   synthetic constructor •() → test::Class
     : super core::Object::•()
diff --git a/pkg/front_end/testcases/general/inject_public/main.dart.weak.modular.expect b/pkg/front_end/testcases/general/inject_public/main.dart.weak.modular.expect
index 59234de..46edd73 100644
--- a/pkg/front_end/testcases/general/inject_public/main.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/inject_public/main.dart.weak.modular.expect
@@ -38,7 +38,7 @@
     : super core::Object::•()
     ;
 }
-@#C1
+@/* from org-dartlang-testcase:///patch_lib.dart */ #C1
 class Class extends core::Object {
   synthetic constructor •() → test::Class
     : super core::Object::•()
diff --git a/pkg/front_end/testcases/general/inject_public/main.dart.weak.outline.expect b/pkg/front_end/testcases/general/inject_public/main.dart.weak.outline.expect
index ecc25eb..f5b52c8 100644
--- a/pkg/front_end/testcases/general/inject_public/main.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/inject_public/main.dart.weak.outline.expect
@@ -44,5 +44,5 @@
 
 
 Extra constant evaluation status:
-Evaluated: StaticGet @ (unknown position in org-dartlang-testcase:///origin_lib.dart) -> InstanceConstant(const _Patch{})
+Evaluated: FileUriExpression @ org-dartlang-testcase:///patch_lib.dart:12:1 -> InstanceConstant(const _Patch{})
 Extra constant evaluation: evaluated: 1, effectively constant: 1
diff --git a/pkg/front_end/testcases/general/issue45101/main.dart.strong.expect b/pkg/front_end/testcases/general/issue45101/main.dart.strong.expect
index 550491b..375479e 100644
--- a/pkg/front_end/testcases/general/issue45101/main.dart.strong.expect
+++ b/pkg/front_end/testcases/general/issue45101/main.dart.strong.expect
@@ -18,8 +18,8 @@
     : self2::_ArraySize::foo = foo, super core::Object::•()
     ;
 }
-@#C1
-@#C4
+@/* from org-dartlang-testcase:///patch_lib.dart */ #C1
+@/* from org-dartlang-testcase:///patch_lib.dart */ #C4
 class Array<T extends core::Object? = dynamic> extends core::Object {
   @#C1
   static factory /* from org-dartlang-testcase:///patch_lib.dart */ •<T extends core::Object? = dynamic>(core::int foo) → self2::Array<self2::Array::•::T%> /* redirection-target: self2::_ArraySize::•<self2::Array::•::T%>*/
@@ -32,9 +32,3 @@
   #C3 = null
   #C4 = core::pragma {name:#C2, options:#C3}
 }
-
-
-Constructor coverage from constants:
-org-dartlang-testcase:///origin_lib.dart:
-- pragma._ (from org-dartlang-sdk:///sdk/lib/core/annotations.dart)
-- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart)
diff --git a/pkg/front_end/testcases/general/issue45101/main.dart.strong.transformed.expect b/pkg/front_end/testcases/general/issue45101/main.dart.strong.transformed.expect
index 550491b..c8d2f42 100644
--- a/pkg/front_end/testcases/general/issue45101/main.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/general/issue45101/main.dart.strong.transformed.expect
@@ -32,9 +32,3 @@
   #C3 = null
   #C4 = core::pragma {name:#C2, options:#C3}
 }
-
-
-Constructor coverage from constants:
-org-dartlang-testcase:///origin_lib.dart:
-- pragma._ (from org-dartlang-sdk:///sdk/lib/core/annotations.dart)
-- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart)
diff --git a/pkg/front_end/testcases/general/issue45101/main.dart.weak.expect b/pkg/front_end/testcases/general/issue45101/main.dart.weak.expect
index 550491b..375479e 100644
--- a/pkg/front_end/testcases/general/issue45101/main.dart.weak.expect
+++ b/pkg/front_end/testcases/general/issue45101/main.dart.weak.expect
@@ -18,8 +18,8 @@
     : self2::_ArraySize::foo = foo, super core::Object::•()
     ;
 }
-@#C1
-@#C4
+@/* from org-dartlang-testcase:///patch_lib.dart */ #C1
+@/* from org-dartlang-testcase:///patch_lib.dart */ #C4
 class Array<T extends core::Object? = dynamic> extends core::Object {
   @#C1
   static factory /* from org-dartlang-testcase:///patch_lib.dart */ •<T extends core::Object? = dynamic>(core::int foo) → self2::Array<self2::Array::•::T%> /* redirection-target: self2::_ArraySize::•<self2::Array::•::T%>*/
@@ -32,9 +32,3 @@
   #C3 = null
   #C4 = core::pragma {name:#C2, options:#C3}
 }
-
-
-Constructor coverage from constants:
-org-dartlang-testcase:///origin_lib.dart:
-- pragma._ (from org-dartlang-sdk:///sdk/lib/core/annotations.dart)
-- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart)
diff --git a/pkg/front_end/testcases/general/issue45101/main.dart.weak.modular.expect b/pkg/front_end/testcases/general/issue45101/main.dart.weak.modular.expect
index 550491b..375479e 100644
--- a/pkg/front_end/testcases/general/issue45101/main.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/issue45101/main.dart.weak.modular.expect
@@ -18,8 +18,8 @@
     : self2::_ArraySize::foo = foo, super core::Object::•()
     ;
 }
-@#C1
-@#C4
+@/* from org-dartlang-testcase:///patch_lib.dart */ #C1
+@/* from org-dartlang-testcase:///patch_lib.dart */ #C4
 class Array<T extends core::Object? = dynamic> extends core::Object {
   @#C1
   static factory /* from org-dartlang-testcase:///patch_lib.dart */ •<T extends core::Object? = dynamic>(core::int foo) → self2::Array<self2::Array::•::T%> /* redirection-target: self2::_ArraySize::•<self2::Array::•::T%>*/
@@ -32,9 +32,3 @@
   #C3 = null
   #C4 = core::pragma {name:#C2, options:#C3}
 }
-
-
-Constructor coverage from constants:
-org-dartlang-testcase:///origin_lib.dart:
-- pragma._ (from org-dartlang-sdk:///sdk/lib/core/annotations.dart)
-- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart)
diff --git a/pkg/front_end/testcases/general/issue45101/main.dart.weak.outline.expect b/pkg/front_end/testcases/general/issue45101/main.dart.weak.outline.expect
index 09219cb..cce9288 100644
--- a/pkg/front_end/testcases/general/issue45101/main.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/issue45101/main.dart.weak.outline.expect
@@ -20,7 +20,7 @@
     ;
 }
 @_in::patch
-@core::pragma::_("vm:entry-point")
+@const core::pragma::_("vm:entry-point")
 class Array<T extends core::Object? = dynamic> extends core::Object {
   @_in::patch
   static factory /* from org-dartlang-testcase:///patch_lib.dart */ •<T extends core::Object? = dynamic>(core::int foo) → self2::Array<self2::Array::•::T%> /* redirection-target: self2::_ArraySize::•<self2::Array::•::T%>*/
@@ -29,7 +29,7 @@
 
 
 Extra constant evaluation status:
-Evaluated: StaticGet @ (unknown position in org-dartlang-testcase:///origin_lib.dart) -> InstanceConstant(const _Patch{})
-Evaluated: ConstructorInvocation @ (unknown position in org-dartlang-testcase:///origin_lib.dart) -> InstanceConstant(const pragma{pragma.name: "vm:entry-point", pragma.options: null})
-Evaluated: StaticGet @ org-dartlang-testcase:///patch_lib.dart:14:17 -> InstanceConstant(const _Patch{})
+Evaluated: FileUriExpression @ org-dartlang-testcase:///patch_lib.dart:8:1 -> InstanceConstant(const _Patch{})
+Evaluated: FileUriExpression @ org-dartlang-testcase:///patch_lib.dart:9:1 -> InstanceConstant(const pragma{pragma.name: "vm:entry-point", pragma.options: null})
+Evaluated: StaticGet @ org-dartlang-testcase:///patch_lib.dart:13:4 -> InstanceConstant(const _Patch{})
 Extra constant evaluation: evaluated: 6, effectively constant: 3
diff --git a/pkg/front_end/testcases/general/issue45101/main.dart.weak.transformed.expect b/pkg/front_end/testcases/general/issue45101/main.dart.weak.transformed.expect
index 550491b..c8d2f42 100644
--- a/pkg/front_end/testcases/general/issue45101/main.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/issue45101/main.dart.weak.transformed.expect
@@ -32,9 +32,3 @@
   #C3 = null
   #C4 = core::pragma {name:#C2, options:#C3}
 }
-
-
-Constructor coverage from constants:
-org-dartlang-testcase:///origin_lib.dart:
-- pragma._ (from org-dartlang-sdk:///sdk/lib/core/annotations.dart)
-- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart)
diff --git a/pkg/front_end/testcases/general/mixin_from_patch/main.dart.strong.expect b/pkg/front_end/testcases/general/mixin_from_patch/main.dart.strong.expect
index 3861b7f..f808d0d 100644
--- a/pkg/front_end/testcases/general/mixin_from_patch/main.dart.strong.expect
+++ b/pkg/front_end/testcases/general/mixin_from_patch/main.dart.strong.expect
@@ -18,7 +18,7 @@
 
 import "dart:_internal";
 
-@#C1
+@/* from org-dartlang-testcase:///patch_lib.dart */ #C1
 class Class extends core::Object {
   constructor _internal({core::bool value = #C2}) → test::Class
     : super core::Object::•()
@@ -44,7 +44,7 @@
     : super test::Class::_internal(value: value)
     ;
 }
-@#C1
+@/* from org-dartlang-testcase:///patch_lib.dart */ #C1
 class SubClass extends test::_SubClass&Class&Mixin {
   constructor _internal() → test::SubClass
     : super test::_SubClass&Class&Mixin::_internal(value: true)
diff --git a/pkg/front_end/testcases/general/mixin_from_patch/main.dart.weak.expect b/pkg/front_end/testcases/general/mixin_from_patch/main.dart.weak.expect
index 3861b7f..f808d0d 100644
--- a/pkg/front_end/testcases/general/mixin_from_patch/main.dart.weak.expect
+++ b/pkg/front_end/testcases/general/mixin_from_patch/main.dart.weak.expect
@@ -18,7 +18,7 @@
 
 import "dart:_internal";
 
-@#C1
+@/* from org-dartlang-testcase:///patch_lib.dart */ #C1
 class Class extends core::Object {
   constructor _internal({core::bool value = #C2}) → test::Class
     : super core::Object::•()
@@ -44,7 +44,7 @@
     : super test::Class::_internal(value: value)
     ;
 }
-@#C1
+@/* from org-dartlang-testcase:///patch_lib.dart */ #C1
 class SubClass extends test::_SubClass&Class&Mixin {
   constructor _internal() → test::SubClass
     : super test::_SubClass&Class&Mixin::_internal(value: true)
diff --git a/pkg/front_end/testcases/general/mixin_from_patch/main.dart.weak.modular.expect b/pkg/front_end/testcases/general/mixin_from_patch/main.dart.weak.modular.expect
index 3861b7f..f808d0d 100644
--- a/pkg/front_end/testcases/general/mixin_from_patch/main.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/mixin_from_patch/main.dart.weak.modular.expect
@@ -18,7 +18,7 @@
 
 import "dart:_internal";
 
-@#C1
+@/* from org-dartlang-testcase:///patch_lib.dart */ #C1
 class Class extends core::Object {
   constructor _internal({core::bool value = #C2}) → test::Class
     : super core::Object::•()
@@ -44,7 +44,7 @@
     : super test::Class::_internal(value: value)
     ;
 }
-@#C1
+@/* from org-dartlang-testcase:///patch_lib.dart */ #C1
 class SubClass extends test::_SubClass&Class&Mixin {
   constructor _internal() → test::SubClass
     : super test::_SubClass&Class&Mixin::_internal(value: true)
diff --git a/pkg/front_end/testcases/general/mixin_from_patch/main.dart.weak.outline.expect b/pkg/front_end/testcases/general/mixin_from_patch/main.dart.weak.outline.expect
index ec56334..1bfb45f 100644
--- a/pkg/front_end/testcases/general/mixin_from_patch/main.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/mixin_from_patch/main.dart.weak.outline.expect
@@ -47,8 +47,8 @@
 
 
 Extra constant evaluation status:
-Evaluated: StaticGet @ org-dartlang-testcase:///origin_lib.dart:8:20 -> InstanceConstant(const _Patch{})
+Evaluated: FileUriExpression @ org-dartlang-testcase:///patch_lib.dart:8:1 -> InstanceConstant(const _Patch{})
 Evaluated: StaticGet @ org-dartlang-testcase:///origin_lib.dart:14:3 -> InstanceConstant(const _Patch{})
-Evaluated: StaticGet @ org-dartlang-testcase:///origin_lib.dart:16:19 -> InstanceConstant(const _Patch{})
+Evaluated: FileUriExpression @ org-dartlang-testcase:///patch_lib.dart:16:1 -> InstanceConstant(const _Patch{})
 Evaluated: StaticGet @ (unknown position in org-dartlang-testcase:///origin_lib.dart) -> InstanceConstant(const _Patch{})
 Extra constant evaluation: evaluated: 5, effectively constant: 4
diff --git a/pkg/front_end/testcases/general/multiple_class_patches/main.dart.strong.expect b/pkg/front_end/testcases/general/multiple_class_patches/main.dart.strong.expect
index 6b27aa1..01334f2 100644
--- a/pkg/front_end/testcases/general/multiple_class_patches/main.dart.strong.expect
+++ b/pkg/front_end/testcases/general/multiple_class_patches/main.dart.strong.expect
@@ -25,8 +25,8 @@
 import "dart:_internal";
 import "dart:_internal";
 
-@#C1
-@#C1
+@/* from org-dartlang-testcase:///patch_lib1.dart */ #C1
+@/* from org-dartlang-testcase:///patch_lib2.dart */ #C1
 class Class extends core::Object {
   synthetic constructor •() → test::Class
     : super core::Object::•()
@@ -37,7 +37,7 @@
   @#C1
   method /* from org-dartlang-testcase:///patch_lib2.dart */ method2() → core::int
     return 87;
-  @#C1
+  @/* from org-dartlang-testcase:///patch_lib1.dart */ #C1
   @#C1
   method /* from org-dartlang-testcase:///patch_lib2.dart */ method3() → core::int
     return 123;
diff --git a/pkg/front_end/testcases/general/multiple_class_patches/main.dart.weak.expect b/pkg/front_end/testcases/general/multiple_class_patches/main.dart.weak.expect
index 6b27aa1..01334f2 100644
--- a/pkg/front_end/testcases/general/multiple_class_patches/main.dart.weak.expect
+++ b/pkg/front_end/testcases/general/multiple_class_patches/main.dart.weak.expect
@@ -25,8 +25,8 @@
 import "dart:_internal";
 import "dart:_internal";
 
-@#C1
-@#C1
+@/* from org-dartlang-testcase:///patch_lib1.dart */ #C1
+@/* from org-dartlang-testcase:///patch_lib2.dart */ #C1
 class Class extends core::Object {
   synthetic constructor •() → test::Class
     : super core::Object::•()
@@ -37,7 +37,7 @@
   @#C1
   method /* from org-dartlang-testcase:///patch_lib2.dart */ method2() → core::int
     return 87;
-  @#C1
+  @/* from org-dartlang-testcase:///patch_lib1.dart */ #C1
   @#C1
   method /* from org-dartlang-testcase:///patch_lib2.dart */ method3() → core::int
     return 123;
diff --git a/pkg/front_end/testcases/general/multiple_class_patches/main.dart.weak.modular.expect b/pkg/front_end/testcases/general/multiple_class_patches/main.dart.weak.modular.expect
index 6b27aa1..01334f2 100644
--- a/pkg/front_end/testcases/general/multiple_class_patches/main.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/multiple_class_patches/main.dart.weak.modular.expect
@@ -25,8 +25,8 @@
 import "dart:_internal";
 import "dart:_internal";
 
-@#C1
-@#C1
+@/* from org-dartlang-testcase:///patch_lib1.dart */ #C1
+@/* from org-dartlang-testcase:///patch_lib2.dart */ #C1
 class Class extends core::Object {
   synthetic constructor •() → test::Class
     : super core::Object::•()
@@ -37,7 +37,7 @@
   @#C1
   method /* from org-dartlang-testcase:///patch_lib2.dart */ method2() → core::int
     return 87;
-  @#C1
+  @/* from org-dartlang-testcase:///patch_lib1.dart */ #C1
   @#C1
   method /* from org-dartlang-testcase:///patch_lib2.dart */ method3() → core::int
     return 123;
diff --git a/pkg/front_end/testcases/general/multiple_class_patches/main.dart.weak.outline.expect b/pkg/front_end/testcases/general/multiple_class_patches/main.dart.weak.outline.expect
index 57d4e2a..8c172ea 100644
--- a/pkg/front_end/testcases/general/multiple_class_patches/main.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/multiple_class_patches/main.dart.weak.outline.expect
@@ -32,10 +32,10 @@
 
 
 Extra constant evaluation status:
-Evaluated: StaticGet @ org-dartlang-testcase:///origin_lib.dart:7:23 -> InstanceConstant(const _Patch{})
-Evaluated: StaticGet @ org-dartlang-testcase:///origin_lib.dart:7:23 -> InstanceConstant(const _Patch{})
+Evaluated: FileUriExpression @ org-dartlang-testcase:///patch_lib1.dart:8:1 -> InstanceConstant(const _Patch{})
+Evaluated: FileUriExpression @ org-dartlang-testcase:///patch_lib2.dart:8:1 -> InstanceConstant(const _Patch{})
 Evaluated: StaticGet @ org-dartlang-testcase:///origin_lib.dart:8:20 -> InstanceConstant(const _Patch{})
 Evaluated: StaticGet @ org-dartlang-testcase:///origin_lib.dart:8:20 -> InstanceConstant(const _Patch{})
-Evaluated: StaticGet @ (unknown position in org-dartlang-testcase:///origin_lib.dart) -> InstanceConstant(const _Patch{})
+Evaluated: FileUriExpression @ org-dartlang-testcase:///patch_lib1.dart:13:3 -> InstanceConstant(const _Patch{})
 Evaluated: StaticGet @ (unknown position in org-dartlang-testcase:///origin_lib.dart) -> InstanceConstant(const _Patch{})
 Extra constant evaluation: evaluated: 6, effectively constant: 6
diff --git a/pkg/front_end/testcases/general/nested_lib_spec/main.dart.strong.expect b/pkg/front_end/testcases/general/nested_lib_spec/main.dart.strong.expect
index 20336b8..c834e45 100644
--- a/pkg/front_end/testcases/general/nested_lib_spec/main.dart.strong.expect
+++ b/pkg/front_end/testcases/general/nested_lib_spec/main.dart.strong.expect
@@ -33,7 +33,7 @@
 
 import "dart:_internal";
 
-@#C1
+@/* from org-dartlang-testcase:///patch_lib.dart */ #C1
 class Class extends core::Object {
   synthetic constructor •() → test::Class
     : super core::Object::•()
@@ -47,7 +47,7 @@
 
 import "dart:_internal";
 
-@#C1
+@/* from org-dartlang-testcase:///extra_patch_lib.dart */ #C1
 class Extra extends core::Object {
   synthetic constructor •() → ext::Extra
     : super core::Object::•()
diff --git a/pkg/front_end/testcases/general/nested_lib_spec/main.dart.weak.expect b/pkg/front_end/testcases/general/nested_lib_spec/main.dart.weak.expect
index 20336b8..c834e45 100644
--- a/pkg/front_end/testcases/general/nested_lib_spec/main.dart.weak.expect
+++ b/pkg/front_end/testcases/general/nested_lib_spec/main.dart.weak.expect
@@ -33,7 +33,7 @@
 
 import "dart:_internal";
 
-@#C1
+@/* from org-dartlang-testcase:///patch_lib.dart */ #C1
 class Class extends core::Object {
   synthetic constructor •() → test::Class
     : super core::Object::•()
@@ -47,7 +47,7 @@
 
 import "dart:_internal";
 
-@#C1
+@/* from org-dartlang-testcase:///extra_patch_lib.dart */ #C1
 class Extra extends core::Object {
   synthetic constructor •() → ext::Extra
     : super core::Object::•()
diff --git a/pkg/front_end/testcases/general/nested_lib_spec/main.dart.weak.modular.expect b/pkg/front_end/testcases/general/nested_lib_spec/main.dart.weak.modular.expect
index 20336b8..c834e45 100644
--- a/pkg/front_end/testcases/general/nested_lib_spec/main.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/nested_lib_spec/main.dart.weak.modular.expect
@@ -33,7 +33,7 @@
 
 import "dart:_internal";
 
-@#C1
+@/* from org-dartlang-testcase:///patch_lib.dart */ #C1
 class Class extends core::Object {
   synthetic constructor •() → test::Class
     : super core::Object::•()
@@ -47,7 +47,7 @@
 
 import "dart:_internal";
 
-@#C1
+@/* from org-dartlang-testcase:///extra_patch_lib.dart */ #C1
 class Extra extends core::Object {
   synthetic constructor •() → ext::Extra
     : super core::Object::•()
diff --git a/pkg/front_end/testcases/general/nested_lib_spec/main.dart.weak.outline.expect b/pkg/front_end/testcases/general/nested_lib_spec/main.dart.weak.outline.expect
index d82856a..d70d895 100644
--- a/pkg/front_end/testcases/general/nested_lib_spec/main.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/nested_lib_spec/main.dart.weak.outline.expect
@@ -85,6 +85,6 @@
 
 
 Extra constant evaluation status:
-Evaluated: StaticGet @ (unknown position in org-dartlang-testcase:///origin_lib.dart) -> InstanceConstant(const _Patch{})
-Evaluated: StaticGet @ (unknown position in org-dartlang-testcase:///extra_lib.dart) -> InstanceConstant(const _Patch{})
+Evaluated: FileUriExpression @ org-dartlang-testcase:///patch_lib.dart:8:1 -> InstanceConstant(const _Patch{})
+Evaluated: FileUriExpression @ org-dartlang-testcase:///extra_patch_lib.dart:8:1 -> InstanceConstant(const _Patch{})
 Extra constant evaluation: evaluated: 2, effectively constant: 2
diff --git a/pkg/front_end/testcases/general/patch_annotations/libraries.json b/pkg/front_end/testcases/general/patch_annotations/libraries.json
new file mode 100644
index 0000000..6b6fc26
--- /dev/null
+++ b/pkg/front_end/testcases/general/patch_annotations/libraries.json
@@ -0,0 +1,13 @@
+{
+  "none": {
+    "comment:0": "This adds to the default libraries found in the platform.",
+    "libraries": {
+      "test": {
+        "patches": [
+          "patch_lib.dart"
+        ],
+        "uri": "origin_lib.dart"
+      }
+    }
+  }
+}
diff --git a/pkg/front_end/testcases/general/patch_annotations/main.dart b/pkg/front_end/testcases/general/patch_annotations/main.dart
new file mode 100644
index 0000000..c0f0df1
--- /dev/null
+++ b/pkg/front_end/testcases/general/patch_annotations/main.dart
@@ -0,0 +1,7 @@
+// Copyright (c) 2023, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'dart:test';
+
+main() {}
diff --git a/pkg/front_end/testcases/general/patch_annotations/main.dart.strong.expect b/pkg/front_end/testcases/general/patch_annotations/main.dart.strong.expect
new file mode 100644
index 0000000..41ec652
--- /dev/null
+++ b/pkg/front_end/testcases/general/patch_annotations/main.dart.strong.expect
@@ -0,0 +1,62 @@
+library;
+import self as self;
+
+import "dart:test";
+
+static method main() → dynamic {}
+
+@/* from org-dartlang-testcase:///patch_lib.dart */ #C3
+@#C5
+library;
+import self as self2;
+import "dart:core" as core;
+import "dart:_internal" as _in;
+
+import "dart:_internal";
+
+@/* from org-dartlang-testcase:///patch_lib.dart */ #C6
+@/* from org-dartlang-testcase:///patch_lib.dart */ #C8
+@#C10
+class Class<@#C12 @#C14 T extends core::Object? = dynamic> extends core::Object {
+  @#C6
+  @#C16
+  @/* from org-dartlang-testcase:///origin_lib.dart */ #C18
+  external constructor •() → self2::Class<self2::Class::T%>;
+  @#C6
+  @#C20
+  @/* from org-dartlang-testcase:///origin_lib.dart */ #C22
+  external method /* from org-dartlang-testcase:///patch_lib.dart */ method<@#C24 S extends core::Object? = dynamic>() → void;
+}
+
+constants  {
+  #C1 = "patch-library"
+  #C2 = null
+  #C3 = core::pragma {name:#C1, options:#C2}
+  #C4 = "origin-library"
+  #C5 = core::pragma {name:#C4, options:#C2}
+  #C6 = _in::_Patch {}
+  #C7 = "patch-class"
+  #C8 = core::pragma {name:#C7, options:#C2}
+  #C9 = "origin-class"
+  #C10 = core::pragma {name:#C9, options:#C2}
+  #C11 = "patch-class-type-variable"
+  #C12 = core::pragma {name:#C11, options:#C2}
+  #C13 = "origin-class-type-variable"
+  #C14 = core::pragma {name:#C13, options:#C2}
+  #C15 = "patch-constructor"
+  #C16 = core::pragma {name:#C15, options:#C2}
+  #C17 = "origin-constructor"
+  #C18 = core::pragma {name:#C17, options:#C2}
+  #C19 = "patch-procedure"
+  #C20 = core::pragma {name:#C19, options:#C2}
+  #C21 = "origin-procedure"
+  #C22 = core::pragma {name:#C21, options:#C2}
+  #C23 = "patch-method-type-variable"
+  #C24 = core::pragma {name:#C23, options:#C2}
+}
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///origin_lib.dart:
+- pragma._ (from org-dartlang-sdk:///sdk/lib/core/annotations.dart)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart)
diff --git a/pkg/front_end/testcases/general/patch_annotations/main.dart.strong.transformed.expect b/pkg/front_end/testcases/general/patch_annotations/main.dart.strong.transformed.expect
new file mode 100644
index 0000000..6f2b2a4
--- /dev/null
+++ b/pkg/front_end/testcases/general/patch_annotations/main.dart.strong.transformed.expect
@@ -0,0 +1,62 @@
+library;
+import self as self;
+
+import "dart:test";
+
+static method main() → dynamic {}
+
+@#C3
+@#C5
+library;
+import self as self2;
+import "dart:core" as core;
+import "dart:_internal" as _in;
+
+import "dart:_internal";
+
+@#C6
+@#C8
+@#C10
+class Class<@#C12 @#C14 T extends core::Object? = dynamic> extends core::Object {
+  @#C6
+  @#C16
+  @#C18
+  external constructor •() → self2::Class<self2::Class::T%>;
+  @#C6
+  @#C20
+  @#C22
+  external method /* from org-dartlang-testcase:///patch_lib.dart */ method<@#C24 S extends core::Object? = dynamic>() → void;
+}
+
+constants  {
+  #C1 = "patch-library"
+  #C2 = null
+  #C3 = core::pragma {name:#C1, options:#C2}
+  #C4 = "origin-library"
+  #C5 = core::pragma {name:#C4, options:#C2}
+  #C6 = _in::_Patch {}
+  #C7 = "patch-class"
+  #C8 = core::pragma {name:#C7, options:#C2}
+  #C9 = "origin-class"
+  #C10 = core::pragma {name:#C9, options:#C2}
+  #C11 = "patch-class-type-variable"
+  #C12 = core::pragma {name:#C11, options:#C2}
+  #C13 = "origin-class-type-variable"
+  #C14 = core::pragma {name:#C13, options:#C2}
+  #C15 = "patch-constructor"
+  #C16 = core::pragma {name:#C15, options:#C2}
+  #C17 = "origin-constructor"
+  #C18 = core::pragma {name:#C17, options:#C2}
+  #C19 = "patch-procedure"
+  #C20 = core::pragma {name:#C19, options:#C2}
+  #C21 = "origin-procedure"
+  #C22 = core::pragma {name:#C21, options:#C2}
+  #C23 = "patch-method-type-variable"
+  #C24 = core::pragma {name:#C23, options:#C2}
+}
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///origin_lib.dart:
+- pragma._ (from org-dartlang-sdk:///sdk/lib/core/annotations.dart)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart)
diff --git a/pkg/front_end/testcases/general/patch_annotations/main.dart.textual_outline.expect b/pkg/front_end/testcases/general/patch_annotations/main.dart.textual_outline.expect
new file mode 100644
index 0000000..3c9c90e
--- /dev/null
+++ b/pkg/front_end/testcases/general/patch_annotations/main.dart.textual_outline.expect
@@ -0,0 +1,3 @@
+import 'dart:test';
+
+main() {}
diff --git a/pkg/front_end/testcases/general/patch_annotations/main.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/patch_annotations/main.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..3c9c90e
--- /dev/null
+++ b/pkg/front_end/testcases/general/patch_annotations/main.dart.textual_outline_modelled.expect
@@ -0,0 +1,3 @@
+import 'dart:test';
+
+main() {}
diff --git a/pkg/front_end/testcases/general/patch_annotations/main.dart.weak.expect b/pkg/front_end/testcases/general/patch_annotations/main.dart.weak.expect
new file mode 100644
index 0000000..41ec652
--- /dev/null
+++ b/pkg/front_end/testcases/general/patch_annotations/main.dart.weak.expect
@@ -0,0 +1,62 @@
+library;
+import self as self;
+
+import "dart:test";
+
+static method main() → dynamic {}
+
+@/* from org-dartlang-testcase:///patch_lib.dart */ #C3
+@#C5
+library;
+import self as self2;
+import "dart:core" as core;
+import "dart:_internal" as _in;
+
+import "dart:_internal";
+
+@/* from org-dartlang-testcase:///patch_lib.dart */ #C6
+@/* from org-dartlang-testcase:///patch_lib.dart */ #C8
+@#C10
+class Class<@#C12 @#C14 T extends core::Object? = dynamic> extends core::Object {
+  @#C6
+  @#C16
+  @/* from org-dartlang-testcase:///origin_lib.dart */ #C18
+  external constructor •() → self2::Class<self2::Class::T%>;
+  @#C6
+  @#C20
+  @/* from org-dartlang-testcase:///origin_lib.dart */ #C22
+  external method /* from org-dartlang-testcase:///patch_lib.dart */ method<@#C24 S extends core::Object? = dynamic>() → void;
+}
+
+constants  {
+  #C1 = "patch-library"
+  #C2 = null
+  #C3 = core::pragma {name:#C1, options:#C2}
+  #C4 = "origin-library"
+  #C5 = core::pragma {name:#C4, options:#C2}
+  #C6 = _in::_Patch {}
+  #C7 = "patch-class"
+  #C8 = core::pragma {name:#C7, options:#C2}
+  #C9 = "origin-class"
+  #C10 = core::pragma {name:#C9, options:#C2}
+  #C11 = "patch-class-type-variable"
+  #C12 = core::pragma {name:#C11, options:#C2}
+  #C13 = "origin-class-type-variable"
+  #C14 = core::pragma {name:#C13, options:#C2}
+  #C15 = "patch-constructor"
+  #C16 = core::pragma {name:#C15, options:#C2}
+  #C17 = "origin-constructor"
+  #C18 = core::pragma {name:#C17, options:#C2}
+  #C19 = "patch-procedure"
+  #C20 = core::pragma {name:#C19, options:#C2}
+  #C21 = "origin-procedure"
+  #C22 = core::pragma {name:#C21, options:#C2}
+  #C23 = "patch-method-type-variable"
+  #C24 = core::pragma {name:#C23, options:#C2}
+}
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///origin_lib.dart:
+- pragma._ (from org-dartlang-sdk:///sdk/lib/core/annotations.dart)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart)
diff --git a/pkg/front_end/testcases/general/patch_annotations/main.dart.weak.modular.expect b/pkg/front_end/testcases/general/patch_annotations/main.dart.weak.modular.expect
new file mode 100644
index 0000000..41ec652
--- /dev/null
+++ b/pkg/front_end/testcases/general/patch_annotations/main.dart.weak.modular.expect
@@ -0,0 +1,62 @@
+library;
+import self as self;
+
+import "dart:test";
+
+static method main() → dynamic {}
+
+@/* from org-dartlang-testcase:///patch_lib.dart */ #C3
+@#C5
+library;
+import self as self2;
+import "dart:core" as core;
+import "dart:_internal" as _in;
+
+import "dart:_internal";
+
+@/* from org-dartlang-testcase:///patch_lib.dart */ #C6
+@/* from org-dartlang-testcase:///patch_lib.dart */ #C8
+@#C10
+class Class<@#C12 @#C14 T extends core::Object? = dynamic> extends core::Object {
+  @#C6
+  @#C16
+  @/* from org-dartlang-testcase:///origin_lib.dart */ #C18
+  external constructor •() → self2::Class<self2::Class::T%>;
+  @#C6
+  @#C20
+  @/* from org-dartlang-testcase:///origin_lib.dart */ #C22
+  external method /* from org-dartlang-testcase:///patch_lib.dart */ method<@#C24 S extends core::Object? = dynamic>() → void;
+}
+
+constants  {
+  #C1 = "patch-library"
+  #C2 = null
+  #C3 = core::pragma {name:#C1, options:#C2}
+  #C4 = "origin-library"
+  #C5 = core::pragma {name:#C4, options:#C2}
+  #C6 = _in::_Patch {}
+  #C7 = "patch-class"
+  #C8 = core::pragma {name:#C7, options:#C2}
+  #C9 = "origin-class"
+  #C10 = core::pragma {name:#C9, options:#C2}
+  #C11 = "patch-class-type-variable"
+  #C12 = core::pragma {name:#C11, options:#C2}
+  #C13 = "origin-class-type-variable"
+  #C14 = core::pragma {name:#C13, options:#C2}
+  #C15 = "patch-constructor"
+  #C16 = core::pragma {name:#C15, options:#C2}
+  #C17 = "origin-constructor"
+  #C18 = core::pragma {name:#C17, options:#C2}
+  #C19 = "patch-procedure"
+  #C20 = core::pragma {name:#C19, options:#C2}
+  #C21 = "origin-procedure"
+  #C22 = core::pragma {name:#C21, options:#C2}
+  #C23 = "patch-method-type-variable"
+  #C24 = core::pragma {name:#C23, options:#C2}
+}
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///origin_lib.dart:
+- pragma._ (from org-dartlang-sdk:///sdk/lib/core/annotations.dart)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart)
diff --git a/pkg/front_end/testcases/general/patch_annotations/main.dart.weak.outline.expect b/pkg/front_end/testcases/general/patch_annotations/main.dart.weak.outline.expect
new file mode 100644
index 0000000..72884c4
--- /dev/null
+++ b/pkg/front_end/testcases/general/patch_annotations/main.dart.weak.outline.expect
@@ -0,0 +1,48 @@
+library;
+import self as self;
+
+import "dart:test";
+
+static method main() → dynamic
+  ;
+
+@const dart.core::pragma::_("patch-library")
+@dart.core::pragma::_("origin-library")
+library;
+import self as self2;
+import "dart:core" as core;
+import "dart:_internal" as _in;
+
+import "dart:_internal";
+
+@_in::patch
+@const core::pragma::_("patch-class")
+@core::pragma::_("origin-class")
+class Class<@core::pragma::_("patch-class-type-variable") @core::pragma::_("origin-class-type-variable") T extends core::Object? = dynamic> extends core::Object {
+  @_in::patch
+  @core::pragma::_("patch-constructor")
+  @const core::pragma::_("origin-constructor")
+  external constructor •() → self2::Class<self2::Class::T%>;
+  @_in::patch
+  @core::pragma::_("patch-procedure")
+  @const core::pragma::_("origin-procedure")
+  external method method<@core::pragma::_("origin-method-type-variable") S extends core::Object? = dynamic>() → void;
+}
+
+
+Extra constant evaluation status:
+Evaluated: FileUriExpression @ org-dartlang-testcase:///patch_lib.dart:5:1 -> InstanceConstant(const pragma{pragma.name: "patch-library", pragma.options: null})
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///origin_lib.dart:5:2 -> InstanceConstant(const pragma{pragma.name: "origin-library", pragma.options: null})
+Evaluated: FileUriExpression @ org-dartlang-testcase:///patch_lib.dart:11:1 -> InstanceConstant(const _Patch{})
+Evaluated: FileUriExpression @ org-dartlang-testcase:///patch_lib.dart:12:1 -> InstanceConstant(const pragma{pragma.name: "patch-class", pragma.options: null})
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///origin_lib.dart:8:2 -> InstanceConstant(const pragma{pragma.name: "origin-class", pragma.options: null})
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///origin_lib.dart:10:25 -> InstanceConstant(const pragma{pragma.name: "patch-class-type-variable", pragma.options: null})
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///origin_lib.dart:9:14 -> InstanceConstant(const pragma{pragma.name: "origin-class-type-variable", pragma.options: null})
+Evaluated: StaticGet @ org-dartlang-testcase:///origin_lib.dart:13:16 -> InstanceConstant(const _Patch{})
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///origin_lib.dart:13:25 -> InstanceConstant(const pragma{pragma.name: "patch-constructor", pragma.options: null})
+Evaluated: FileUriExpression @ org-dartlang-testcase:///origin_lib.dart:10:3 -> InstanceConstant(const pragma{pragma.name: "origin-constructor", pragma.options: null})
+Evaluated: StaticGet @ org-dartlang-testcase:///origin_lib.dart:14:47 -> InstanceConstant(const _Patch{})
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///origin_lib.dart:14:56 -> InstanceConstant(const pragma{pragma.name: "patch-procedure", pragma.options: null})
+Evaluated: FileUriExpression @ org-dartlang-testcase:///origin_lib.dart:13:3 -> InstanceConstant(const pragma{pragma.name: "origin-procedure", pragma.options: null})
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///origin_lib.dart:14:25 -> InstanceConstant(const pragma{pragma.name: "origin-method-type-variable", pragma.options: null})
+Extra constant evaluation: evaluated: 14, effectively constant: 14
diff --git a/pkg/front_end/testcases/general/patch_annotations/main.dart.weak.transformed.expect b/pkg/front_end/testcases/general/patch_annotations/main.dart.weak.transformed.expect
new file mode 100644
index 0000000..6f2b2a4
--- /dev/null
+++ b/pkg/front_end/testcases/general/patch_annotations/main.dart.weak.transformed.expect
@@ -0,0 +1,62 @@
+library;
+import self as self;
+
+import "dart:test";
+
+static method main() → dynamic {}
+
+@#C3
+@#C5
+library;
+import self as self2;
+import "dart:core" as core;
+import "dart:_internal" as _in;
+
+import "dart:_internal";
+
+@#C6
+@#C8
+@#C10
+class Class<@#C12 @#C14 T extends core::Object? = dynamic> extends core::Object {
+  @#C6
+  @#C16
+  @#C18
+  external constructor •() → self2::Class<self2::Class::T%>;
+  @#C6
+  @#C20
+  @#C22
+  external method /* from org-dartlang-testcase:///patch_lib.dart */ method<@#C24 S extends core::Object? = dynamic>() → void;
+}
+
+constants  {
+  #C1 = "patch-library"
+  #C2 = null
+  #C3 = core::pragma {name:#C1, options:#C2}
+  #C4 = "origin-library"
+  #C5 = core::pragma {name:#C4, options:#C2}
+  #C6 = _in::_Patch {}
+  #C7 = "patch-class"
+  #C8 = core::pragma {name:#C7, options:#C2}
+  #C9 = "origin-class"
+  #C10 = core::pragma {name:#C9, options:#C2}
+  #C11 = "patch-class-type-variable"
+  #C12 = core::pragma {name:#C11, options:#C2}
+  #C13 = "origin-class-type-variable"
+  #C14 = core::pragma {name:#C13, options:#C2}
+  #C15 = "patch-constructor"
+  #C16 = core::pragma {name:#C15, options:#C2}
+  #C17 = "origin-constructor"
+  #C18 = core::pragma {name:#C17, options:#C2}
+  #C19 = "patch-procedure"
+  #C20 = core::pragma {name:#C19, options:#C2}
+  #C21 = "origin-procedure"
+  #C22 = core::pragma {name:#C21, options:#C2}
+  #C23 = "patch-method-type-variable"
+  #C24 = core::pragma {name:#C23, options:#C2}
+}
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///origin_lib.dart:
+- pragma._ (from org-dartlang-sdk:///sdk/lib/core/annotations.dart)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart)
diff --git a/pkg/front_end/testcases/general/patch_annotations/origin_lib.dart b/pkg/front_end/testcases/general/patch_annotations/origin_lib.dart
new file mode 100644
index 0000000..810a394
--- /dev/null
+++ b/pkg/front_end/testcases/general/patch_annotations/origin_lib.dart
@@ -0,0 +1,15 @@
+// Copyright (c) 2023, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+@pragma('origin-library')
+library;
+
+@pragma('origin-class')
+class Class<@pragma('origin-class-type-variable') T> {
+  @pragma('origin-constructor')
+  external Class();
+
+  @pragma('origin-procedure')
+  external void method<@pragma('origin-method-type-variable') S>();
+}
diff --git a/pkg/front_end/testcases/general/patch_annotations/patch_lib.dart b/pkg/front_end/testcases/general/patch_annotations/patch_lib.dart
new file mode 100644
index 0000000..717ed23
--- /dev/null
+++ b/pkg/front_end/testcases/general/patch_annotations/patch_lib.dart
@@ -0,0 +1,21 @@
+// Copyright (c) 2023, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+@pragma('patch-library')
+library;
+
+// ignore: import_internal_library
+import 'dart:_internal';
+
+@patch
+@pragma('patch-class')
+class Class<@pragma('patch-class-type-variable') T> {
+  @patch
+  @pragma('patch-constructor')
+  external Class();
+
+  @patch
+  @pragma('patch-procedure')
+  external void method<@pragma('patch-method-type-variable') S>();
+}
diff --git a/pkg/front_end/testcases/general/patch_conflict/main.dart.strong.expect b/pkg/front_end/testcases/general/patch_conflict/main.dart.strong.expect
index fd33f3f..93c0fff 100644
--- a/pkg/front_end/testcases/general/patch_conflict/main.dart.strong.expect
+++ b/pkg/front_end/testcases/general/patch_conflict/main.dart.strong.expect
@@ -96,7 +96,7 @@
     : super core::Object::•()
     ;
 }
-@#C1
+@/* from org-dartlang-testcase:///patch_lib.dart */ #C1
 class Class extends core::Object {
   @#C1
   constructor missingOriginConstructor() → self2::Class
diff --git a/pkg/front_end/testcases/general/patch_conflict/main.dart.weak.expect b/pkg/front_end/testcases/general/patch_conflict/main.dart.weak.expect
index fd33f3f..93c0fff 100644
--- a/pkg/front_end/testcases/general/patch_conflict/main.dart.weak.expect
+++ b/pkg/front_end/testcases/general/patch_conflict/main.dart.weak.expect
@@ -96,7 +96,7 @@
     : super core::Object::•()
     ;
 }
-@#C1
+@/* from org-dartlang-testcase:///patch_lib.dart */ #C1
 class Class extends core::Object {
   @#C1
   constructor missingOriginConstructor() → self2::Class
diff --git a/pkg/front_end/testcases/general/patch_conflict/main.dart.weak.modular.expect b/pkg/front_end/testcases/general/patch_conflict/main.dart.weak.modular.expect
index fd33f3f..93c0fff 100644
--- a/pkg/front_end/testcases/general/patch_conflict/main.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/patch_conflict/main.dart.weak.modular.expect
@@ -96,7 +96,7 @@
     : super core::Object::•()
     ;
 }
-@#C1
+@/* from org-dartlang-testcase:///patch_lib.dart */ #C1
 class Class extends core::Object {
   @#C1
   constructor missingOriginConstructor() → self2::Class
diff --git a/pkg/front_end/testcases/general/patch_conflict/main.dart.weak.outline.expect b/pkg/front_end/testcases/general/patch_conflict/main.dart.weak.outline.expect
index c7784d6..60af488 100644
--- a/pkg/front_end/testcases/general/patch_conflict/main.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/patch_conflict/main.dart.weak.outline.expect
@@ -129,7 +129,7 @@
 
 Extra constant evaluation status:
 Evaluated: StaticGet @ org-dartlang-testcase:///patch_lib.dart:24:2 -> InstanceConstant(const _Patch{})
-Evaluated: StaticGet @ org-dartlang-testcase:///origin_lib.dart:8:37 -> InstanceConstant(const _Patch{})
+Evaluated: FileUriExpression @ org-dartlang-testcase:///patch_lib.dart:8:1 -> InstanceConstant(const _Patch{})
 Evaluated: StaticGet @ org-dartlang-testcase:///patch_lib.dart:10:4 -> InstanceConstant(const _Patch{})
 Evaluated: StaticGet @ org-dartlang-testcase:///patch_lib.dart:15:4 -> InstanceConstant(const _Patch{})
 Evaluated: StaticGet @ org-dartlang-testcase:///patch_lib.dart:27:2 -> InstanceConstant(const _Patch{})
diff --git a/pkg/front_end/testcases/general/patch_extends_implements/main.dart.strong.expect b/pkg/front_end/testcases/general/patch_extends_implements/main.dart.strong.expect
index 3361083..4031b34 100644
--- a/pkg/front_end/testcases/general/patch_extends_implements/main.dart.strong.expect
+++ b/pkg/front_end/testcases/general/patch_extends_implements/main.dart.strong.expect
@@ -118,37 +118,37 @@
     : super core::Object::•()
     ;
 }
-@#C1
+@/* from org-dartlang-testcase:///patch_lib.dart */ #C1
 abstract class Class1a extends core::Object {
   synthetic constructor •() → test::Class1a
     : super core::Object::•()
     ;
 }
-@#C1
+@/* from org-dartlang-testcase:///patch_lib.dart */ #C1
 class Class1b extends core::Object {
   synthetic constructor •() → test::Class1b
     : super core::Object::•()
     ;
 }
-@#C1
+@/* from org-dartlang-testcase:///patch_lib.dart */ #C1
 class Class2a extends test::SuperClass {
   synthetic constructor •() → test::Class2a
     : super test::SuperClass::•()
     ;
 }
-@#C1
+@/* from org-dartlang-testcase:///patch_lib.dart */ #C1
 class Class2b extends core::Object {
   synthetic constructor •() → test::Class2b
     : super core::Object::•()
     ;
 }
-@#C1
+@/* from org-dartlang-testcase:///patch_lib.dart */ #C1
 class Class3a extends core::Object implements test::Interface {
   synthetic constructor •() → test::Class3a
     : super core::Object::•()
     ;
 }
-@#C1
+@/* from org-dartlang-testcase:///patch_lib.dart */ #C1
 class Class3b extends core::Object {
   synthetic constructor •() → test::Class3b
     : super core::Object::•()
@@ -159,31 +159,31 @@
     : super core::Object::•()
     ;
 }
-@#C1
+@/* from org-dartlang-testcase:///patch_lib.dart */ #C1
 class Class4a extends test::_Class4a&Object&Mixin {
   synthetic constructor •() → test::Class4a
     : super test::_Class4a&Object&Mixin::•()
     ;
 }
-@#C1
+@/* from org-dartlang-testcase:///patch_lib.dart */ #C1
 class Class4b extends core::Object {
   synthetic constructor •() → test::Class4b
     : super core::Object::•()
     ;
 }
-@#C1
+@/* from org-dartlang-testcase:///patch_lib.dart */ #C1
 class Class5a extends core::Object {
   @#C1
   static factory /* from org-dartlang-testcase:///patch_lib.dart */ •() → test::Class5a /* redirection-target: test::Class5aImpl::• */
     return new test::Class5aImpl::•();
 }
-@#C1
+@/* from org-dartlang-testcase:///patch_lib.dart */ #C1
 class Class5aImpl extends core::Object implements test::Class5a {
   synthetic constructor •() → test::Class5aImpl
     : super core::Object::•()
     ;
 }
-@#C1
+@/* from org-dartlang-testcase:///patch_lib.dart */ #C1
 class Class5b extends core::Object {
   @#C1
   static factory /* from org-dartlang-testcase:///patch_lib.dart */ •() → test::Class5b /* redirection-target: test::Class5bImpl::• */
@@ -193,13 +193,13 @@
   factory Class5b() = Class5bImpl;
                       ^";
 }
-@#C1
+@/* from org-dartlang-testcase:///patch_lib.dart */ #C1
 class Class5bImpl extends core::Object {
   synthetic constructor •() → test::Class5bImpl
     : super core::Object::•()
     ;
 }
-@#C1
+@/* from org-dartlang-testcase:///patch_lib.dart */ #C1
 class Class5c extends core::Object {
   @#C1
   static factory /* from org-dartlang-testcase:///patch_lib.dart */ •() → test::Class5c /* redirection-target: test::Class5cImpl::• */
@@ -209,13 +209,13 @@
   factory Class5c() = Class5cImpl;
                       ^";
 }
-@#C1
+@/* from org-dartlang-testcase:///patch_lib.dart */ #C1
 class Class5cImpl extends core::Object {
   synthetic constructor •() → test::Class5cImpl
     : super core::Object::•()
     ;
 }
-@#C1
+@/* from org-dartlang-testcase:///patch_lib.dart */ #C1
 class Class6a<T extends core::Object? = dynamic> extends core::Object {
   @#C1
   static factory /* from org-dartlang-testcase:///patch_lib.dart */ •<T extends core::Object? = dynamic>((test::Class6a::•::T%) → void f) → test::Class6a<test::Class6a::•::T%> /* redirection-target: test::_Class6aImpl::•<test::Class6a::•::T%>*/
@@ -225,13 +225,13 @@
   factory Class6a(void Function(T) f) = _Class6aImpl<T>;
                                         ^";
 }
-@#C1
+@/* from org-dartlang-testcase:///patch_lib.dart */ #C1
 class Class6b<T extends core::Object? = dynamic> extends core::Object {
   @#C1
   static factory /* from org-dartlang-testcase:///patch_lib.dart */ •<T extends core::Object? = dynamic>((test::Class6b::•::T%) → void f) → test::Class6b<test::Class6b::•::T%> /* redirection-target: test::_Class6bImpl::•<test::Class6b::•::T%>*/
     return new test::_Class6bImpl::•<test::Class6b::•::T%>(f);
 }
-@#C1
+@/* from org-dartlang-testcase:///patch_lib.dart */ #C1
 class Class6c<T extends core::Object? = dynamic> extends core::Object {
   @#C1
   static factory /* from org-dartlang-testcase:///patch_lib.dart */ •<T extends core::Object? = dynamic>((test::Class6c::•::T%) → void f) → test::Class6c<test::Class6c::•::T%> /* redirection-target: test::_Class6cImpl::•<test::Class6c::•::T%>*/
diff --git a/pkg/front_end/testcases/general/patch_extends_implements/main.dart.weak.expect b/pkg/front_end/testcases/general/patch_extends_implements/main.dart.weak.expect
index 3361083..4031b34 100644
--- a/pkg/front_end/testcases/general/patch_extends_implements/main.dart.weak.expect
+++ b/pkg/front_end/testcases/general/patch_extends_implements/main.dart.weak.expect
@@ -118,37 +118,37 @@
     : super core::Object::•()
     ;
 }
-@#C1
+@/* from org-dartlang-testcase:///patch_lib.dart */ #C1
 abstract class Class1a extends core::Object {
   synthetic constructor •() → test::Class1a
     : super core::Object::•()
     ;
 }
-@#C1
+@/* from org-dartlang-testcase:///patch_lib.dart */ #C1
 class Class1b extends core::Object {
   synthetic constructor •() → test::Class1b
     : super core::Object::•()
     ;
 }
-@#C1
+@/* from org-dartlang-testcase:///patch_lib.dart */ #C1
 class Class2a extends test::SuperClass {
   synthetic constructor •() → test::Class2a
     : super test::SuperClass::•()
     ;
 }
-@#C1
+@/* from org-dartlang-testcase:///patch_lib.dart */ #C1
 class Class2b extends core::Object {
   synthetic constructor •() → test::Class2b
     : super core::Object::•()
     ;
 }
-@#C1
+@/* from org-dartlang-testcase:///patch_lib.dart */ #C1
 class Class3a extends core::Object implements test::Interface {
   synthetic constructor •() → test::Class3a
     : super core::Object::•()
     ;
 }
-@#C1
+@/* from org-dartlang-testcase:///patch_lib.dart */ #C1
 class Class3b extends core::Object {
   synthetic constructor •() → test::Class3b
     : super core::Object::•()
@@ -159,31 +159,31 @@
     : super core::Object::•()
     ;
 }
-@#C1
+@/* from org-dartlang-testcase:///patch_lib.dart */ #C1
 class Class4a extends test::_Class4a&Object&Mixin {
   synthetic constructor •() → test::Class4a
     : super test::_Class4a&Object&Mixin::•()
     ;
 }
-@#C1
+@/* from org-dartlang-testcase:///patch_lib.dart */ #C1
 class Class4b extends core::Object {
   synthetic constructor •() → test::Class4b
     : super core::Object::•()
     ;
 }
-@#C1
+@/* from org-dartlang-testcase:///patch_lib.dart */ #C1
 class Class5a extends core::Object {
   @#C1
   static factory /* from org-dartlang-testcase:///patch_lib.dart */ •() → test::Class5a /* redirection-target: test::Class5aImpl::• */
     return new test::Class5aImpl::•();
 }
-@#C1
+@/* from org-dartlang-testcase:///patch_lib.dart */ #C1
 class Class5aImpl extends core::Object implements test::Class5a {
   synthetic constructor •() → test::Class5aImpl
     : super core::Object::•()
     ;
 }
-@#C1
+@/* from org-dartlang-testcase:///patch_lib.dart */ #C1
 class Class5b extends core::Object {
   @#C1
   static factory /* from org-dartlang-testcase:///patch_lib.dart */ •() → test::Class5b /* redirection-target: test::Class5bImpl::• */
@@ -193,13 +193,13 @@
   factory Class5b() = Class5bImpl;
                       ^";
 }
-@#C1
+@/* from org-dartlang-testcase:///patch_lib.dart */ #C1
 class Class5bImpl extends core::Object {
   synthetic constructor •() → test::Class5bImpl
     : super core::Object::•()
     ;
 }
-@#C1
+@/* from org-dartlang-testcase:///patch_lib.dart */ #C1
 class Class5c extends core::Object {
   @#C1
   static factory /* from org-dartlang-testcase:///patch_lib.dart */ •() → test::Class5c /* redirection-target: test::Class5cImpl::• */
@@ -209,13 +209,13 @@
   factory Class5c() = Class5cImpl;
                       ^";
 }
-@#C1
+@/* from org-dartlang-testcase:///patch_lib.dart */ #C1
 class Class5cImpl extends core::Object {
   synthetic constructor •() → test::Class5cImpl
     : super core::Object::•()
     ;
 }
-@#C1
+@/* from org-dartlang-testcase:///patch_lib.dart */ #C1
 class Class6a<T extends core::Object? = dynamic> extends core::Object {
   @#C1
   static factory /* from org-dartlang-testcase:///patch_lib.dart */ •<T extends core::Object? = dynamic>((test::Class6a::•::T%) → void f) → test::Class6a<test::Class6a::•::T%> /* redirection-target: test::_Class6aImpl::•<test::Class6a::•::T%>*/
@@ -225,13 +225,13 @@
   factory Class6a(void Function(T) f) = _Class6aImpl<T>;
                                         ^";
 }
-@#C1
+@/* from org-dartlang-testcase:///patch_lib.dart */ #C1
 class Class6b<T extends core::Object? = dynamic> extends core::Object {
   @#C1
   static factory /* from org-dartlang-testcase:///patch_lib.dart */ •<T extends core::Object? = dynamic>((test::Class6b::•::T%) → void f) → test::Class6b<test::Class6b::•::T%> /* redirection-target: test::_Class6bImpl::•<test::Class6b::•::T%>*/
     return new test::_Class6bImpl::•<test::Class6b::•::T%>(f);
 }
-@#C1
+@/* from org-dartlang-testcase:///patch_lib.dart */ #C1
 class Class6c<T extends core::Object? = dynamic> extends core::Object {
   @#C1
   static factory /* from org-dartlang-testcase:///patch_lib.dart */ •<T extends core::Object? = dynamic>((test::Class6c::•::T%) → void f) → test::Class6c<test::Class6c::•::T%> /* redirection-target: test::_Class6cImpl::•<test::Class6c::•::T%>*/
diff --git a/pkg/front_end/testcases/general/patch_extends_implements/main.dart.weak.modular.expect b/pkg/front_end/testcases/general/patch_extends_implements/main.dart.weak.modular.expect
index 3361083..4031b34 100644
--- a/pkg/front_end/testcases/general/patch_extends_implements/main.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/patch_extends_implements/main.dart.weak.modular.expect
@@ -118,37 +118,37 @@
     : super core::Object::•()
     ;
 }
-@#C1
+@/* from org-dartlang-testcase:///patch_lib.dart */ #C1
 abstract class Class1a extends core::Object {
   synthetic constructor •() → test::Class1a
     : super core::Object::•()
     ;
 }
-@#C1
+@/* from org-dartlang-testcase:///patch_lib.dart */ #C1
 class Class1b extends core::Object {
   synthetic constructor •() → test::Class1b
     : super core::Object::•()
     ;
 }
-@#C1
+@/* from org-dartlang-testcase:///patch_lib.dart */ #C1
 class Class2a extends test::SuperClass {
   synthetic constructor •() → test::Class2a
     : super test::SuperClass::•()
     ;
 }
-@#C1
+@/* from org-dartlang-testcase:///patch_lib.dart */ #C1
 class Class2b extends core::Object {
   synthetic constructor •() → test::Class2b
     : super core::Object::•()
     ;
 }
-@#C1
+@/* from org-dartlang-testcase:///patch_lib.dart */ #C1
 class Class3a extends core::Object implements test::Interface {
   synthetic constructor •() → test::Class3a
     : super core::Object::•()
     ;
 }
-@#C1
+@/* from org-dartlang-testcase:///patch_lib.dart */ #C1
 class Class3b extends core::Object {
   synthetic constructor •() → test::Class3b
     : super core::Object::•()
@@ -159,31 +159,31 @@
     : super core::Object::•()
     ;
 }
-@#C1
+@/* from org-dartlang-testcase:///patch_lib.dart */ #C1
 class Class4a extends test::_Class4a&Object&Mixin {
   synthetic constructor •() → test::Class4a
     : super test::_Class4a&Object&Mixin::•()
     ;
 }
-@#C1
+@/* from org-dartlang-testcase:///patch_lib.dart */ #C1
 class Class4b extends core::Object {
   synthetic constructor •() → test::Class4b
     : super core::Object::•()
     ;
 }
-@#C1
+@/* from org-dartlang-testcase:///patch_lib.dart */ #C1
 class Class5a extends core::Object {
   @#C1
   static factory /* from org-dartlang-testcase:///patch_lib.dart */ •() → test::Class5a /* redirection-target: test::Class5aImpl::• */
     return new test::Class5aImpl::•();
 }
-@#C1
+@/* from org-dartlang-testcase:///patch_lib.dart */ #C1
 class Class5aImpl extends core::Object implements test::Class5a {
   synthetic constructor •() → test::Class5aImpl
     : super core::Object::•()
     ;
 }
-@#C1
+@/* from org-dartlang-testcase:///patch_lib.dart */ #C1
 class Class5b extends core::Object {
   @#C1
   static factory /* from org-dartlang-testcase:///patch_lib.dart */ •() → test::Class5b /* redirection-target: test::Class5bImpl::• */
@@ -193,13 +193,13 @@
   factory Class5b() = Class5bImpl;
                       ^";
 }
-@#C1
+@/* from org-dartlang-testcase:///patch_lib.dart */ #C1
 class Class5bImpl extends core::Object {
   synthetic constructor •() → test::Class5bImpl
     : super core::Object::•()
     ;
 }
-@#C1
+@/* from org-dartlang-testcase:///patch_lib.dart */ #C1
 class Class5c extends core::Object {
   @#C1
   static factory /* from org-dartlang-testcase:///patch_lib.dart */ •() → test::Class5c /* redirection-target: test::Class5cImpl::• */
@@ -209,13 +209,13 @@
   factory Class5c() = Class5cImpl;
                       ^";
 }
-@#C1
+@/* from org-dartlang-testcase:///patch_lib.dart */ #C1
 class Class5cImpl extends core::Object {
   synthetic constructor •() → test::Class5cImpl
     : super core::Object::•()
     ;
 }
-@#C1
+@/* from org-dartlang-testcase:///patch_lib.dart */ #C1
 class Class6a<T extends core::Object? = dynamic> extends core::Object {
   @#C1
   static factory /* from org-dartlang-testcase:///patch_lib.dart */ •<T extends core::Object? = dynamic>((test::Class6a::•::T%) → void f) → test::Class6a<test::Class6a::•::T%> /* redirection-target: test::_Class6aImpl::•<test::Class6a::•::T%>*/
@@ -225,13 +225,13 @@
   factory Class6a(void Function(T) f) = _Class6aImpl<T>;
                                         ^";
 }
-@#C1
+@/* from org-dartlang-testcase:///patch_lib.dart */ #C1
 class Class6b<T extends core::Object? = dynamic> extends core::Object {
   @#C1
   static factory /* from org-dartlang-testcase:///patch_lib.dart */ •<T extends core::Object? = dynamic>((test::Class6b::•::T%) → void f) → test::Class6b<test::Class6b::•::T%> /* redirection-target: test::_Class6bImpl::•<test::Class6b::•::T%>*/
     return new test::_Class6bImpl::•<test::Class6b::•::T%>(f);
 }
-@#C1
+@/* from org-dartlang-testcase:///patch_lib.dart */ #C1
 class Class6c<T extends core::Object? = dynamic> extends core::Object {
   @#C1
   static factory /* from org-dartlang-testcase:///patch_lib.dart */ •<T extends core::Object? = dynamic>((test::Class6c::•::T%) → void f) → test::Class6c<test::Class6c::•::T%> /* redirection-target: test::_Class6cImpl::•<test::Class6c::•::T%>*/
diff --git a/pkg/front_end/testcases/general/patch_extends_implements/main.dart.weak.outline.expect b/pkg/front_end/testcases/general/patch_extends_implements/main.dart.weak.outline.expect
index 0362a98..539032f 100644
--- a/pkg/front_end/testcases/general/patch_extends_implements/main.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/patch_extends_implements/main.dart.weak.outline.expect
@@ -166,27 +166,27 @@
 
 
 Extra constant evaluation status:
-Evaluated: StaticGet @ org-dartlang-testcase:///origin_lib.dart:9:18 -> InstanceConstant(const _Patch{})
-Evaluated: StaticGet @ org-dartlang-testcase:///origin_lib.dart:11:22 -> InstanceConstant(const _Patch{})
-Evaluated: StaticGet @ org-dartlang-testcase:///origin_lib.dart:15:11 -> InstanceConstant(const _Patch{})
-Evaluated: StaticGet @ org-dartlang-testcase:///origin_lib.dart:15:36 -> InstanceConstant(const _Patch{})
-Evaluated: StaticGet @ org-dartlang-testcase:///origin_lib.dart:19:25 -> InstanceConstant(const _Patch{})
-Evaluated: StaticGet @ org-dartlang-testcase:///origin_lib.dart:21:11 -> InstanceConstant(const _Patch{})
-Evaluated: StaticGet @ org-dartlang-testcase:///origin_lib.dart:25:10 -> InstanceConstant(const _Patch{})
-Evaluated: StaticGet @ org-dartlang-testcase:///origin_lib.dart:28:1 -> InstanceConstant(const _Patch{})
-Evaluated: StaticGet @ org-dartlang-testcase:///origin_lib.dart:31:4 -> InstanceConstant(const _Patch{})
+Evaluated: FileUriExpression @ org-dartlang-testcase:///patch_lib.dart:8:1 -> InstanceConstant(const _Patch{})
+Evaluated: FileUriExpression @ org-dartlang-testcase:///patch_lib.dart:11:1 -> InstanceConstant(const _Patch{})
+Evaluated: FileUriExpression @ org-dartlang-testcase:///patch_lib.dart:14:1 -> InstanceConstant(const _Patch{})
+Evaluated: FileUriExpression @ org-dartlang-testcase:///patch_lib.dart:17:1 -> InstanceConstant(const _Patch{})
+Evaluated: FileUriExpression @ org-dartlang-testcase:///patch_lib.dart:20:1 -> InstanceConstant(const _Patch{})
+Evaluated: FileUriExpression @ org-dartlang-testcase:///patch_lib.dart:23:1 -> InstanceConstant(const _Patch{})
+Evaluated: FileUriExpression @ org-dartlang-testcase:///patch_lib.dart:26:1 -> InstanceConstant(const _Patch{})
+Evaluated: FileUriExpression @ org-dartlang-testcase:///patch_lib.dart:29:1 -> InstanceConstant(const _Patch{})
+Evaluated: FileUriExpression @ org-dartlang-testcase:///patch_lib.dart:32:1 -> InstanceConstant(const _Patch{})
 Evaluated: StaticGet @ org-dartlang-testcase:///origin_lib.dart:31:29 -> InstanceConstant(const _Patch{})
-Evaluated: StaticGet @ org-dartlang-testcase:///origin_lib.dart:34:17 -> InstanceConstant(const _Patch{})
-Evaluated: StaticGet @ org-dartlang-testcase:///origin_lib.dart:37:13 -> InstanceConstant(const _Patch{})
+Evaluated: FileUriExpression @ org-dartlang-testcase:///patch_lib.dart:38:1 -> InstanceConstant(const _Patch{})
+Evaluated: FileUriExpression @ org-dartlang-testcase:///patch_lib.dart:41:1 -> InstanceConstant(const _Patch{})
 Evaluated: StaticGet @ org-dartlang-testcase:///origin_lib.dart:39:16 -> InstanceConstant(const _Patch{})
-Evaluated: StaticGet @ org-dartlang-testcase:///origin_lib.dart:43:12 -> InstanceConstant(const _Patch{})
-Evaluated: StaticGet @ org-dartlang-testcase:///origin_lib.dart:46:19 -> InstanceConstant(const _Patch{})
+Evaluated: FileUriExpression @ org-dartlang-testcase:///patch_lib.dart:47:1 -> InstanceConstant(const _Patch{})
+Evaluated: FileUriExpression @ org-dartlang-testcase:///patch_lib.dart:50:1 -> InstanceConstant(const _Patch{})
 Evaluated: StaticGet @ org-dartlang-testcase:///origin_lib.dart:46:44 -> InstanceConstant(const _Patch{})
-Evaluated: StaticGet @ org-dartlang-testcase:///origin_lib.dart:50:19 -> InstanceConstant(const _Patch{})
-Evaluated: StaticGet @ org-dartlang-testcase:///origin_lib.dart:50:48 -> InstanceConstant(const _Patch{})
+Evaluated: FileUriExpression @ org-dartlang-testcase:///patch_lib.dart:56:1 -> InstanceConstant(const _Patch{})
+Evaluated: FileUriExpression @ org-dartlang-testcase:///patch_lib.dart:59:1 -> InstanceConstant(const _Patch{})
 Evaluated: StaticGet @ org-dartlang-testcase:///origin_lib.dart:54:6 -> InstanceConstant(const _Patch{})
+Evaluated: FileUriExpression @ org-dartlang-testcase:///patch_lib.dart:69:1 -> InstanceConstant(const _Patch{})
 Evaluated: StaticGet @ (unknown position in org-dartlang-testcase:///origin_lib.dart) -> InstanceConstant(const _Patch{})
-Evaluated: StaticGet @ (unknown position in org-dartlang-testcase:///origin_lib.dart) -> InstanceConstant(const _Patch{})
-Evaluated: StaticGet @ (unknown position in org-dartlang-testcase:///origin_lib.dart) -> InstanceConstant(const _Patch{})
+Evaluated: FileUriExpression @ org-dartlang-testcase:///patch_lib.dart:79:1 -> InstanceConstant(const _Patch{})
 Evaluated: StaticGet @ (unknown position in org-dartlang-testcase:///origin_lib.dart) -> InstanceConstant(const _Patch{})
 Extra constant evaluation: evaluated: 32, effectively constant: 23
diff --git a/pkg/front_end/testcases/general/patch_extension_scope/main.dart.strong.expect b/pkg/front_end/testcases/general/patch_extension_scope/main.dart.strong.expect
index 0112b2d..e927982 100644
--- a/pkg/front_end/testcases/general/patch_extension_scope/main.dart.strong.expect
+++ b/pkg/front_end/testcases/general/patch_extension_scope/main.dart.strong.expect
@@ -138,8 +138,8 @@
 import "dart:_internal";
 import "dart:_internal";
 
-@#C1
-@#C1
+@/* from org-dartlang-testcase:///patch_lib1.dart */ #C1
+@/* from org-dartlang-testcase:///patch_lib2.dart */ #C1
 class Class extends core::Object {
   synthetic constructor •() → test::Class
     : super core::Object::•()
diff --git a/pkg/front_end/testcases/general/patch_extension_scope/main.dart.weak.expect b/pkg/front_end/testcases/general/patch_extension_scope/main.dart.weak.expect
index 0112b2d..e927982 100644
--- a/pkg/front_end/testcases/general/patch_extension_scope/main.dart.weak.expect
+++ b/pkg/front_end/testcases/general/patch_extension_scope/main.dart.weak.expect
@@ -138,8 +138,8 @@
 import "dart:_internal";
 import "dart:_internal";
 
-@#C1
-@#C1
+@/* from org-dartlang-testcase:///patch_lib1.dart */ #C1
+@/* from org-dartlang-testcase:///patch_lib2.dart */ #C1
 class Class extends core::Object {
   synthetic constructor •() → test::Class
     : super core::Object::•()
diff --git a/pkg/front_end/testcases/general/patch_extension_scope/main.dart.weak.modular.expect b/pkg/front_end/testcases/general/patch_extension_scope/main.dart.weak.modular.expect
index 0112b2d..e927982 100644
--- a/pkg/front_end/testcases/general/patch_extension_scope/main.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/patch_extension_scope/main.dart.weak.modular.expect
@@ -138,8 +138,8 @@
 import "dart:_internal";
 import "dart:_internal";
 
-@#C1
-@#C1
+@/* from org-dartlang-testcase:///patch_lib1.dart */ #C1
+@/* from org-dartlang-testcase:///patch_lib2.dart */ #C1
 class Class extends core::Object {
   synthetic constructor •() → test::Class
     : super core::Object::•()
diff --git a/pkg/front_end/testcases/general/patch_extension_scope/main.dart.weak.outline.expect b/pkg/front_end/testcases/general/patch_extension_scope/main.dart.weak.outline.expect
index 563f88e..9df2ebb 100644
--- a/pkg/front_end/testcases/general/patch_extension_scope/main.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/patch_extension_scope/main.dart.weak.outline.expect
@@ -137,6 +137,6 @@
 
 
 Extra constant evaluation status:
-Evaluated: StaticGet @ org-dartlang-testcase:///origin_lib.dart:7:30 -> InstanceConstant(const _Patch{})
-Evaluated: StaticGet @ org-dartlang-testcase:///origin_lib.dart:7:30 -> InstanceConstant(const _Patch{})
+Evaluated: FileUriExpression @ org-dartlang-testcase:///patch_lib1.dart:8:1 -> InstanceConstant(const _Patch{})
+Evaluated: FileUriExpression @ org-dartlang-testcase:///patch_lib2.dart:8:1 -> InstanceConstant(const _Patch{})
 Extra constant evaluation: evaluated: 38, effectively constant: 2
diff --git a/pkg/front_end/testcases/general/platform_invalid_uris/main.dart.strong.expect b/pkg/front_end/testcases/general/platform_invalid_uris/main.dart.strong.expect
index 281cd62..1e8bed4 100644
--- a/pkg/front_end/testcases/general/platform_invalid_uris/main.dart.strong.expect
+++ b/pkg/front_end/testcases/general/platform_invalid_uris/main.dart.strong.expect
@@ -58,7 +58,7 @@
 import "org-dartlang-malformed-uri:?%3Aa";
 export "org-dartlang-malformed-uri:?%3Ab";
 
-@#C1
+@/* from org-dartlang-testcase:///patch_lib.dart */ #C1
 class Class extends core::Object {
   synthetic constructor •() → test::Class
     : super core::Object::•()
diff --git a/pkg/front_end/testcases/general/platform_invalid_uris/main.dart.weak.expect b/pkg/front_end/testcases/general/platform_invalid_uris/main.dart.weak.expect
index 281cd62..1e8bed4 100644
--- a/pkg/front_end/testcases/general/platform_invalid_uris/main.dart.weak.expect
+++ b/pkg/front_end/testcases/general/platform_invalid_uris/main.dart.weak.expect
@@ -58,7 +58,7 @@
 import "org-dartlang-malformed-uri:?%3Aa";
 export "org-dartlang-malformed-uri:?%3Ab";
 
-@#C1
+@/* from org-dartlang-testcase:///patch_lib.dart */ #C1
 class Class extends core::Object {
   synthetic constructor •() → test::Class
     : super core::Object::•()
diff --git a/pkg/front_end/testcases/general/platform_invalid_uris/main.dart.weak.modular.expect b/pkg/front_end/testcases/general/platform_invalid_uris/main.dart.weak.modular.expect
index 281cd62..1e8bed4 100644
--- a/pkg/front_end/testcases/general/platform_invalid_uris/main.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/platform_invalid_uris/main.dart.weak.modular.expect
@@ -58,7 +58,7 @@
 import "org-dartlang-malformed-uri:?%3Aa";
 export "org-dartlang-malformed-uri:?%3Ab";
 
-@#C1
+@/* from org-dartlang-testcase:///patch_lib.dart */ #C1
 class Class extends core::Object {
   synthetic constructor •() → test::Class
     : super core::Object::•()
diff --git a/pkg/front_end/testcases/general/platform_invalid_uris/main.dart.weak.outline.expect b/pkg/front_end/testcases/general/platform_invalid_uris/main.dart.weak.outline.expect
index c348e23..4346feb 100644
--- a/pkg/front_end/testcases/general/platform_invalid_uris/main.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/platform_invalid_uris/main.dart.weak.outline.expect
@@ -80,5 +80,5 @@
 
 
 Extra constant evaluation status:
-Evaluated: StaticGet @ (unknown position in org-dartlang-testcase:///origin_lib.dart) -> InstanceConstant(const _Patch{})
+Evaluated: FileUriExpression @ org-dartlang-testcase:///patch_lib.dart:11:1 -> InstanceConstant(const _Patch{})
 Extra constant evaluation: evaluated: 1, effectively constant: 1
diff --git a/pkg/front_end/testcases/general/tear_off_patch/main.dart.strong.expect b/pkg/front_end/testcases/general/tear_off_patch/main.dart.strong.expect
index 3087029..e33d3ed 100644
--- a/pkg/front_end/testcases/general/tear_off_patch/main.dart.strong.expect
+++ b/pkg/front_end/testcases/general/tear_off_patch/main.dart.strong.expect
@@ -29,7 +29,7 @@
 
 typedef Alias<T extends core::num> = test::Class<T>;
 typedef AliasImpl<T extends core::num> = test::ClassImpl<T>;
-@#C13
+@/* from org-dartlang-testcase:///patch_lib.dart */ #C13
 class Class<T extends core::Object? = dynamic> extends core::Object {
   @#C13
   constructor •({core::bool defaultValue = #C14, required test::Class::T% value = #C15}) → test::Class<test::Class::T%>
@@ -46,7 +46,7 @@
   static factory /* from org-dartlang-testcase:///patch_lib.dart */ redirect2<T extends core::Object? = dynamic>({core::bool defaultValue = #C15, required test::Class::redirect2::T% value = #C15}) → test::Class<test::Class::redirect2::T%> /* redirection-target: test::ClassImpl::patched<test::Class::redirect2::T%>*/
     return new test::ClassImpl::patched<test::Class::redirect2::T%>(defaultValue: defaultValue, value: value);
 }
-@#C13
+@/* from org-dartlang-testcase:///patch_lib.dart */ #C13
 class ClassImpl<T extends core::Object? = dynamic> extends core::Object implements test::Class<test::ClassImpl::T%> {
   constructor •({core::bool defaultValue = #C14, required test::ClassImpl::T% value = #C15}) → test::ClassImpl<test::ClassImpl::T%>
     : super core::Object::•()
diff --git a/pkg/front_end/testcases/general/tear_off_patch/main.dart.weak.expect b/pkg/front_end/testcases/general/tear_off_patch/main.dart.weak.expect
index 3087029..e33d3ed 100644
--- a/pkg/front_end/testcases/general/tear_off_patch/main.dart.weak.expect
+++ b/pkg/front_end/testcases/general/tear_off_patch/main.dart.weak.expect
@@ -29,7 +29,7 @@
 
 typedef Alias<T extends core::num> = test::Class<T>;
 typedef AliasImpl<T extends core::num> = test::ClassImpl<T>;
-@#C13
+@/* from org-dartlang-testcase:///patch_lib.dart */ #C13
 class Class<T extends core::Object? = dynamic> extends core::Object {
   @#C13
   constructor •({core::bool defaultValue = #C14, required test::Class::T% value = #C15}) → test::Class<test::Class::T%>
@@ -46,7 +46,7 @@
   static factory /* from org-dartlang-testcase:///patch_lib.dart */ redirect2<T extends core::Object? = dynamic>({core::bool defaultValue = #C15, required test::Class::redirect2::T% value = #C15}) → test::Class<test::Class::redirect2::T%> /* redirection-target: test::ClassImpl::patched<test::Class::redirect2::T%>*/
     return new test::ClassImpl::patched<test::Class::redirect2::T%>(defaultValue: defaultValue, value: value);
 }
-@#C13
+@/* from org-dartlang-testcase:///patch_lib.dart */ #C13
 class ClassImpl<T extends core::Object? = dynamic> extends core::Object implements test::Class<test::ClassImpl::T%> {
   constructor •({core::bool defaultValue = #C14, required test::ClassImpl::T% value = #C15}) → test::ClassImpl<test::ClassImpl::T%>
     : super core::Object::•()
diff --git a/pkg/front_end/testcases/general/tear_off_patch/main.dart.weak.modular.expect b/pkg/front_end/testcases/general/tear_off_patch/main.dart.weak.modular.expect
index 3087029..e33d3ed 100644
--- a/pkg/front_end/testcases/general/tear_off_patch/main.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/tear_off_patch/main.dart.weak.modular.expect
@@ -29,7 +29,7 @@
 
 typedef Alias<T extends core::num> = test::Class<T>;
 typedef AliasImpl<T extends core::num> = test::ClassImpl<T>;
-@#C13
+@/* from org-dartlang-testcase:///patch_lib.dart */ #C13
 class Class<T extends core::Object? = dynamic> extends core::Object {
   @#C13
   constructor •({core::bool defaultValue = #C14, required test::Class::T% value = #C15}) → test::Class<test::Class::T%>
@@ -46,7 +46,7 @@
   static factory /* from org-dartlang-testcase:///patch_lib.dart */ redirect2<T extends core::Object? = dynamic>({core::bool defaultValue = #C15, required test::Class::redirect2::T% value = #C15}) → test::Class<test::Class::redirect2::T%> /* redirection-target: test::ClassImpl::patched<test::Class::redirect2::T%>*/
     return new test::ClassImpl::patched<test::Class::redirect2::T%>(defaultValue: defaultValue, value: value);
 }
-@#C13
+@/* from org-dartlang-testcase:///patch_lib.dart */ #C13
 class ClassImpl<T extends core::Object? = dynamic> extends core::Object implements test::Class<test::ClassImpl::T%> {
   constructor •({core::bool defaultValue = #C14, required test::ClassImpl::T% value = #C15}) → test::ClassImpl<test::ClassImpl::T%>
     : super core::Object::•()
diff --git a/pkg/front_end/testcases/general/tear_off_patch/main.dart.weak.outline.expect b/pkg/front_end/testcases/general/tear_off_patch/main.dart.weak.outline.expect
index 93081db..82211a2 100644
--- a/pkg/front_end/testcases/general/tear_off_patch/main.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/tear_off_patch/main.dart.weak.outline.expect
@@ -50,11 +50,11 @@
 
 
 Extra constant evaluation status:
-Evaluated: StaticGet @ org-dartlang-testcase:///origin_lib.dart:6:46 -> InstanceConstant(const _Patch{})
+Evaluated: FileUriExpression @ org-dartlang-testcase:///patch_lib.dart:8:1 -> InstanceConstant(const _Patch{})
 Evaluated: StaticGet @ org-dartlang-testcase:///origin_lib.dart:7:8 -> InstanceConstant(const _Patch{})
 Evaluated: StaticGet @ org-dartlang-testcase:///origin_lib.dart:8:27 -> InstanceConstant(const _Patch{})
 Evaluated: StaticGet @ org-dartlang-testcase:///origin_lib.dart:12:21 -> InstanceConstant(const _Patch{})
 Evaluated: StaticGet @ org-dartlang-testcase:///origin_lib.dart:15:10 -> InstanceConstant(const _Patch{})
-Evaluated: StaticGet @ org-dartlang-testcase:///origin_lib.dart:18:36 -> InstanceConstant(const _Patch{})
+Evaluated: FileUriExpression @ org-dartlang-testcase:///patch_lib.dart:27:1 -> InstanceConstant(const _Patch{})
 Evaluated: StaticGet @ org-dartlang-testcase:///origin_lib.dart:19:45 -> InstanceConstant(const _Patch{})
 Extra constant evaluation: evaluated: 31, effectively constant: 7
diff --git a/pkg/front_end/testcases/late_lowering/injected_late_field_checks/main.dart.strong.expect b/pkg/front_end/testcases/late_lowering/injected_late_field_checks/main.dart.strong.expect
index 0379b37..e946862 100644
--- a/pkg/front_end/testcases/late_lowering/injected_late_field_checks/main.dart.strong.expect
+++ b/pkg/front_end/testcases/late_lowering/injected_late_field_checks/main.dart.strong.expect
@@ -12,7 +12,7 @@
 
 import "dart:_internal";
 
-@#C1
+@/* from org-dartlang-testcase:///patch_lib.dart */ #C1
 class Class extends core::Object {
   field core::int? _#Class#foo = null /* from org-dartlang-testcase:///patch_lib.dart */;
   constructor bar() → self2::Class
diff --git a/pkg/front_end/testcases/late_lowering/injected_late_field_checks/main.dart.weak.expect b/pkg/front_end/testcases/late_lowering/injected_late_field_checks/main.dart.weak.expect
index c5e89e4..dc190a3 100644
--- a/pkg/front_end/testcases/late_lowering/injected_late_field_checks/main.dart.weak.expect
+++ b/pkg/front_end/testcases/late_lowering/injected_late_field_checks/main.dart.weak.expect
@@ -12,7 +12,7 @@
 
 import "dart:_internal";
 
-@#C1
+@/* from org-dartlang-testcase:///patch_lib.dart */ #C1
 class Class extends core::Object {
   field core::int? _#Class#foo = null /* from org-dartlang-testcase:///patch_lib.dart */;
   field core::bool _#Class#foo#isSet = false /* from org-dartlang-testcase:///patch_lib.dart */;
diff --git a/pkg/front_end/testcases/late_lowering/injected_late_field_checks/main.dart.weak.modular.expect b/pkg/front_end/testcases/late_lowering/injected_late_field_checks/main.dart.weak.modular.expect
index c5e89e4..dc190a3 100644
--- a/pkg/front_end/testcases/late_lowering/injected_late_field_checks/main.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/late_lowering/injected_late_field_checks/main.dart.weak.modular.expect
@@ -12,7 +12,7 @@
 
 import "dart:_internal";
 
-@#C1
+@/* from org-dartlang-testcase:///patch_lib.dart */ #C1
 class Class extends core::Object {
   field core::int? _#Class#foo = null /* from org-dartlang-testcase:///patch_lib.dart */;
   field core::bool _#Class#foo#isSet = false /* from org-dartlang-testcase:///patch_lib.dart */;
diff --git a/pkg/front_end/testcases/late_lowering/injected_late_field_checks/main.dart.weak.outline.expect b/pkg/front_end/testcases/late_lowering/injected_late_field_checks/main.dart.weak.outline.expect
index 1e68a11..761b05e 100644
--- a/pkg/front_end/testcases/late_lowering/injected_late_field_checks/main.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/late_lowering/injected_late_field_checks/main.dart.weak.outline.expect
@@ -27,5 +27,5 @@
 
 
 Extra constant evaluation status:
-Evaluated: StaticGet @ (unknown position in org-dartlang-testcase:///origin_lib.dart) -> InstanceConstant(const _Patch{})
+Evaluated: FileUriExpression @ org-dartlang-testcase:///patch_lib.dart:8:1 -> InstanceConstant(const _Patch{})
 Extra constant evaluation: evaluated: 1, effectively constant: 1
diff --git a/pkg/front_end/testcases/nnbd/injected_late_field_checks/main.dart.strong.expect b/pkg/front_end/testcases/nnbd/injected_late_field_checks/main.dart.strong.expect
index 2ed0e61..3a8af24 100644
--- a/pkg/front_end/testcases/nnbd/injected_late_field_checks/main.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/injected_late_field_checks/main.dart.strong.expect
@@ -12,7 +12,7 @@
 
 import "dart:_internal";
 
-@#C1
+@/* from org-dartlang-testcase:///patch_lib.dart */ #C1
 class Class extends core::Object {
   late field core::int foo /* from org-dartlang-testcase:///patch_lib.dart */;
   constructor bar() → self2::Class
diff --git a/pkg/front_end/testcases/nnbd/injected_late_field_checks/main.dart.weak.expect b/pkg/front_end/testcases/nnbd/injected_late_field_checks/main.dart.weak.expect
index 2ed0e61..3a8af24 100644
--- a/pkg/front_end/testcases/nnbd/injected_late_field_checks/main.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/injected_late_field_checks/main.dart.weak.expect
@@ -12,7 +12,7 @@
 
 import "dart:_internal";
 
-@#C1
+@/* from org-dartlang-testcase:///patch_lib.dart */ #C1
 class Class extends core::Object {
   late field core::int foo /* from org-dartlang-testcase:///patch_lib.dart */;
   constructor bar() → self2::Class
diff --git a/pkg/front_end/testcases/nnbd/injected_late_field_checks/main.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd/injected_late_field_checks/main.dart.weak.modular.expect
index 2ed0e61..3a8af24 100644
--- a/pkg/front_end/testcases/nnbd/injected_late_field_checks/main.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/nnbd/injected_late_field_checks/main.dart.weak.modular.expect
@@ -12,7 +12,7 @@
 
 import "dart:_internal";
 
-@#C1
+@/* from org-dartlang-testcase:///patch_lib.dart */ #C1
 class Class extends core::Object {
   late field core::int foo /* from org-dartlang-testcase:///patch_lib.dart */;
   constructor bar() → self2::Class
diff --git a/pkg/front_end/testcases/nnbd/injected_late_field_checks/main.dart.weak.outline.expect b/pkg/front_end/testcases/nnbd/injected_late_field_checks/main.dart.weak.outline.expect
index 4dd6717..9e6ae34 100644
--- a/pkg/front_end/testcases/nnbd/injected_late_field_checks/main.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/nnbd/injected_late_field_checks/main.dart.weak.outline.expect
@@ -24,5 +24,5 @@
 
 
 Extra constant evaluation status:
-Evaluated: StaticGet @ (unknown position in org-dartlang-testcase:///origin_lib.dart) -> InstanceConstant(const _Patch{})
+Evaluated: FileUriExpression @ org-dartlang-testcase:///patch_lib.dart:8:1 -> InstanceConstant(const _Patch{})
 Extra constant evaluation: evaluated: 1, effectively constant: 1
diff --git a/pkg/front_end/testcases/nnbd/platform_definite_assignment/main.dart.strong.expect b/pkg/front_end/testcases/nnbd/platform_definite_assignment/main.dart.strong.expect
index 08c9c20..4adb050 100644
--- a/pkg/front_end/testcases/nnbd/platform_definite_assignment/main.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/platform_definite_assignment/main.dart.strong.expect
@@ -51,7 +51,7 @@
 
 import "dart:_internal";
 
-@#C1
+@/* from org-dartlang-testcase:///patch_lib.dart */ #C1
 class Class<T extends core::num> extends core::Object /*hasConstConstructor*/  {
   final field core::int a;
   final field test::Class::T b;
diff --git a/pkg/front_end/testcases/nnbd/platform_definite_assignment/main.dart.weak.expect b/pkg/front_end/testcases/nnbd/platform_definite_assignment/main.dart.weak.expect
index 08c9c20..4adb050 100644
--- a/pkg/front_end/testcases/nnbd/platform_definite_assignment/main.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/platform_definite_assignment/main.dart.weak.expect
@@ -51,7 +51,7 @@
 
 import "dart:_internal";
 
-@#C1
+@/* from org-dartlang-testcase:///patch_lib.dart */ #C1
 class Class<T extends core::num> extends core::Object /*hasConstConstructor*/  {
   final field core::int a;
   final field test::Class::T b;
diff --git a/pkg/front_end/testcases/nnbd/platform_definite_assignment/main.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd/platform_definite_assignment/main.dart.weak.modular.expect
index 08c9c20..4adb050 100644
--- a/pkg/front_end/testcases/nnbd/platform_definite_assignment/main.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/nnbd/platform_definite_assignment/main.dart.weak.modular.expect
@@ -51,7 +51,7 @@
 
 import "dart:_internal";
 
-@#C1
+@/* from org-dartlang-testcase:///patch_lib.dart */ #C1
 class Class<T extends core::num> extends core::Object /*hasConstConstructor*/  {
   final field core::int a;
   final field test::Class::T b;
diff --git a/pkg/front_end/testcases/nnbd/platform_definite_assignment/main.dart.weak.outline.expect b/pkg/front_end/testcases/nnbd/platform_definite_assignment/main.dart.weak.outline.expect
index f41cb62..379ba5b 100644
--- a/pkg/front_end/testcases/nnbd/platform_definite_assignment/main.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/nnbd/platform_definite_assignment/main.dart.weak.outline.expect
@@ -40,7 +40,7 @@
 
 
 Extra constant evaluation status:
-Evaluated: StaticGet @ org-dartlang-testcase:///origin_lib.dart:9:5 -> InstanceConstant(const _Patch{})
+Evaluated: FileUriExpression @ org-dartlang-testcase:///patch_lib.dart:8:1 -> InstanceConstant(const _Patch{})
 Evaluated: StaticGet @ org-dartlang-testcase:///origin_lib.dart:9:43 -> InstanceConstant(const _Patch{})
 Evaluated: StaticGet @ org-dartlang-testcase:///origin_lib.dart:15:19 -> InstanceConstant(const _Patch{})
 Evaluated: StaticGet @ org-dartlang-testcase:///origin_lib.dart:28:17 -> InstanceConstant(const _Patch{})
diff --git a/pkg/front_end/testcases/nnbd/platform_nonnullable_fields/main.dart.strong.expect b/pkg/front_end/testcases/nnbd/platform_nonnullable_fields/main.dart.strong.expect
index e65cc0a..1123c64 100644
--- a/pkg/front_end/testcases/nnbd/platform_nonnullable_fields/main.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/platform_nonnullable_fields/main.dart.strong.expect
@@ -35,7 +35,7 @@
 import "dart:_internal";
 
 part patch_lib2.dart;
-@#C1
+@/* from org-dartlang-testcase:///patch_lib2.dart */ #C1
 class Class1 extends core::Object {
   field core::int _field = null /* from org-dartlang-testcase:///patch_lib2.dart */;
   static field core::int _staticField = null /* from org-dartlang-testcase:///patch_lib2.dart */;
@@ -43,7 +43,7 @@
     : super core::Object::•()
     ;
 }
-@#C1
+@/* from org-dartlang-testcase:///patch_lib2.dart */ #C1
 class Class2 extends core::Object {
   field core::int _field /* from org-dartlang-testcase:///patch_lib2.dart */;
   constructor constructor2(core::int _field) → test::Class2
diff --git a/pkg/front_end/testcases/nnbd/platform_nonnullable_fields/main.dart.weak.expect b/pkg/front_end/testcases/nnbd/platform_nonnullable_fields/main.dart.weak.expect
index e65cc0a..1123c64 100644
--- a/pkg/front_end/testcases/nnbd/platform_nonnullable_fields/main.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/platform_nonnullable_fields/main.dart.weak.expect
@@ -35,7 +35,7 @@
 import "dart:_internal";
 
 part patch_lib2.dart;
-@#C1
+@/* from org-dartlang-testcase:///patch_lib2.dart */ #C1
 class Class1 extends core::Object {
   field core::int _field = null /* from org-dartlang-testcase:///patch_lib2.dart */;
   static field core::int _staticField = null /* from org-dartlang-testcase:///patch_lib2.dart */;
@@ -43,7 +43,7 @@
     : super core::Object::•()
     ;
 }
-@#C1
+@/* from org-dartlang-testcase:///patch_lib2.dart */ #C1
 class Class2 extends core::Object {
   field core::int _field /* from org-dartlang-testcase:///patch_lib2.dart */;
   constructor constructor2(core::int _field) → test::Class2
diff --git a/pkg/front_end/testcases/nnbd/platform_nonnullable_fields/main.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd/platform_nonnullable_fields/main.dart.weak.modular.expect
index e65cc0a..1123c64 100644
--- a/pkg/front_end/testcases/nnbd/platform_nonnullable_fields/main.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/nnbd/platform_nonnullable_fields/main.dart.weak.modular.expect
@@ -35,7 +35,7 @@
 import "dart:_internal";
 
 part patch_lib2.dart;
-@#C1
+@/* from org-dartlang-testcase:///patch_lib2.dart */ #C1
 class Class1 extends core::Object {
   field core::int _field = null /* from org-dartlang-testcase:///patch_lib2.dart */;
   static field core::int _staticField = null /* from org-dartlang-testcase:///patch_lib2.dart */;
@@ -43,7 +43,7 @@
     : super core::Object::•()
     ;
 }
-@#C1
+@/* from org-dartlang-testcase:///patch_lib2.dart */ #C1
 class Class2 extends core::Object {
   field core::int _field /* from org-dartlang-testcase:///patch_lib2.dart */;
   constructor constructor2(core::int _field) → test::Class2
diff --git a/pkg/front_end/testcases/nnbd/platform_nonnullable_fields/main.dart.weak.outline.expect b/pkg/front_end/testcases/nnbd/platform_nonnullable_fields/main.dart.weak.outline.expect
index f403453..674052b 100644
--- a/pkg/front_end/testcases/nnbd/platform_nonnullable_fields/main.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/nnbd/platform_nonnullable_fields/main.dart.weak.outline.expect
@@ -39,6 +39,6 @@
 
 
 Extra constant evaluation status:
-Evaluated: StaticGet @ (unknown position in org-dartlang-testcase:///origin_lib.dart) -> InstanceConstant(const _Patch{})
-Evaluated: StaticGet @ (unknown position in org-dartlang-testcase:///origin_lib.dart) -> InstanceConstant(const _Patch{})
+Evaluated: FileUriExpression @ org-dartlang-testcase:///patch_lib2.dart:30:1 -> InstanceConstant(const _Patch{})
+Evaluated: FileUriExpression @ org-dartlang-testcase:///patch_lib2.dart:37:1 -> InstanceConstant(const _Patch{})
 Extra constant evaluation: evaluated: 2, effectively constant: 2
diff --git a/pkg/front_end/testcases/nnbd/platform_optional_parameters/main.dart.strong.expect b/pkg/front_end/testcases/nnbd/platform_optional_parameters/main.dart.strong.expect
index 9662183..ab03b8e 100644
--- a/pkg/front_end/testcases/nnbd/platform_optional_parameters/main.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/platform_optional_parameters/main.dart.strong.expect
@@ -48,7 +48,7 @@
 
 import "dart:_internal";
 
-@#C1
+@/* from org-dartlang-testcase:///patch_lib.dart */ #C1
 class Class extends core::Object {
   synthetic constructor •() → test::Class
     : super core::Object::•()
diff --git a/pkg/front_end/testcases/nnbd/platform_optional_parameters/main.dart.weak.expect b/pkg/front_end/testcases/nnbd/platform_optional_parameters/main.dart.weak.expect
index 9662183..ab03b8e 100644
--- a/pkg/front_end/testcases/nnbd/platform_optional_parameters/main.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/platform_optional_parameters/main.dart.weak.expect
@@ -48,7 +48,7 @@
 
 import "dart:_internal";
 
-@#C1
+@/* from org-dartlang-testcase:///patch_lib.dart */ #C1
 class Class extends core::Object {
   synthetic constructor •() → test::Class
     : super core::Object::•()
diff --git a/pkg/front_end/testcases/nnbd/platform_optional_parameters/main.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd/platform_optional_parameters/main.dart.weak.modular.expect
index 9662183..ab03b8e 100644
--- a/pkg/front_end/testcases/nnbd/platform_optional_parameters/main.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/nnbd/platform_optional_parameters/main.dart.weak.modular.expect
@@ -48,7 +48,7 @@
 
 import "dart:_internal";
 
-@#C1
+@/* from org-dartlang-testcase:///patch_lib.dart */ #C1
 class Class extends core::Object {
   synthetic constructor •() → test::Class
     : super core::Object::•()
diff --git a/pkg/front_end/testcases/nnbd/platform_optional_parameters/main.dart.weak.outline.expect b/pkg/front_end/testcases/nnbd/platform_optional_parameters/main.dart.weak.outline.expect
index c3a9cb3..ddbafe9 100644
--- a/pkg/front_end/testcases/nnbd/platform_optional_parameters/main.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/nnbd/platform_optional_parameters/main.dart.weak.outline.expect
@@ -66,7 +66,7 @@
 
 
 Extra constant evaluation status:
-Evaluated: StaticGet @ org-dartlang-testcase:///origin_lib.dart:8:22 -> InstanceConstant(const _Patch{})
+Evaluated: FileUriExpression @ org-dartlang-testcase:///patch_lib.dart:8:1 -> InstanceConstant(const _Patch{})
 Evaluated: StaticGet @ org-dartlang-testcase:///origin_lib.dart:11:2 -> InstanceConstant(const _Patch{})
 Evaluated: StaticGet @ (unknown position in org-dartlang-testcase:///origin_lib.dart) -> InstanceConstant(const _Patch{})
 Extra constant evaluation: evaluated: 3, effectively constant: 3
diff --git a/pkg/kernel/binary.md b/pkg/kernel/binary.md
index 292b41d..181dc6e 100644
--- a/pkg/kernel/binary.md
+++ b/pkg/kernel/binary.md
@@ -147,7 +147,7 @@
 
 type ComponentFile {
   UInt32 magic = 0x90ABCDEF;
-  UInt32 formatVersion = 105;
+  UInt32 formatVersion = 106;
   Byte[10] shortSdkHash;
   List<String> problemsAsJson; // Described in problems.md.
   Library[] libraries;
@@ -1192,6 +1192,14 @@
   ConstantReference constantReference;
 }
 
+type FileUriConstantExpression extends Expression {
+  Byte tag = 108;
+  FileOffset fileOffset;
+  UriReference fileUri;
+  DartType type;
+  ConstantReference constantReference;
+}
+
 abstract type Constant extends Node {
   Byte tag;
 }
diff --git a/pkg/kernel/lib/ast.dart b/pkg/kernel/lib/ast.dart
index 449f354..91e49c7 100644
--- a/pkg/kernel/lib/ast.dart
+++ b/pkg/kernel/lib/ast.dart
@@ -8683,6 +8683,16 @@
   }
 }
 
+class FileUriConstantExpression extends ConstantExpression
+    implements FileUriNode {
+  @override
+  Uri fileUri;
+
+  FileUriConstantExpression(Constant constant,
+      {DartType type = const DynamicType(), required this.fileUri})
+      : super(constant, type);
+}
+
 /// Synthetic expression of form `let v = x in y`
 class Let extends Expression {
   VariableDeclaration variable; // Must have an initializer.
diff --git a/pkg/kernel/lib/binary/ast_from_binary.dart b/pkg/kernel/lib/binary/ast_from_binary.dart
index 9dac20c..5c1e9d4 100644
--- a/pkg/kernel/lib/binary/ast_from_binary.dart
+++ b/pkg/kernel/lib/binary/ast_from_binary.dart
@@ -2323,6 +2323,8 @@
         return _readSwitchExpression();
       case Tag.PatternAssignment:
         return _readPatternAssignment();
+      case Tag.FileUriConstantExpression:
+        return _readFileUriConstantExpression();
       default:
         throw fail('unexpected expression tag: $tag');
     }
@@ -2903,6 +2905,15 @@
     return new ConstantExpression(constant, type)..fileOffset = offset;
   }
 
+  Expression _readFileUriConstantExpression() {
+    int offset = readOffset();
+    Uri fileUri = readUriReference();
+    DartType type = readDartType();
+    Constant constant = readConstantReference();
+    return new FileUriConstantExpression(constant, type: type, fileUri: fileUri)
+      ..fileOffset = offset;
+  }
+
   List<MapLiteralEntry> readMapLiteralEntryList() {
     int length = readUInt30();
     if (!useGrowableLists && length == 0) {
diff --git a/pkg/kernel/lib/binary/ast_to_binary.dart b/pkg/kernel/lib/binary/ast_to_binary.dart
index 2ceb70b..5716b8d 100644
--- a/pkg/kernel/lib/binary/ast_to_binary.dart
+++ b/pkg/kernel/lib/binary/ast_to_binary.dart
@@ -2200,10 +2200,18 @@
 
   @override
   void visitConstantExpression(ConstantExpression node) {
-    writeByte(Tag.ConstantExpression);
-    writeOffset(node.fileOffset);
-    writeDartType(node.type);
-    writeConstantReference(node.constant);
+    if (node is FileUriConstantExpression) {
+      writeByte(Tag.FileUriConstantExpression);
+      writeOffset(node.fileOffset);
+      writeUriReference(node.fileUri);
+      writeDartType(node.type);
+      writeConstantReference(node.constant);
+    } else {
+      writeByte(Tag.ConstantExpression);
+      writeOffset(node.fileOffset);
+      writeDartType(node.type);
+      writeConstantReference(node.constant);
+    }
   }
 
   @override
diff --git a/pkg/kernel/lib/binary/tag.dart b/pkg/kernel/lib/binary/tag.dart
index fde90d7..b97ca65 100644
--- a/pkg/kernel/lib/binary/tag.dart
+++ b/pkg/kernel/lib/binary/tag.dart
@@ -87,6 +87,8 @@
   static const int RecordLiteral = 104;
   static const int ConstRecordLiteral = 105;
   static const int ConstantExpression = 106;
+  // 107 is occupied by [FutureOrType] (type).
+  static const int FileUriConstantExpression = 108;
   static const int SetLiteral = 109;
   static const int ConstSetLiteral = 110;
   static const int ListConcatenation = 111;
@@ -159,7 +161,7 @@
   // 106 is occupied by [ConstantExpression].
   static const int FutureOrType = 107;
 
-  // 108 is occupied by [RedirectingFactory] (member).
+  // 108 is occupied by [FileUriConstantExpression] (expression).
   // 109 is occupied by [SetLiteral] (expression).
   // 110 is occupied by [ConstSetLiteral] (expression).
   // 111 is occupied by [ListConcatenation] (expression).
@@ -224,7 +226,7 @@
   /// Internal version of kernel binary format.
   /// Bump it when making incompatible changes in kernel binaries.
   /// Keep in sync with runtime/vm/kernel_binary.h, pkg/kernel/binary.md.
-  static const int BinaryFormatVersion = 105;
+  static const int BinaryFormatVersion = 106;
 }
 
 abstract class ConstantTag {
diff --git a/pkg/kernel/lib/text/ast_to_text.dart b/pkg/kernel/lib/text/ast_to_text.dart
index 39305f1..88a045f 100644
--- a/pkg/kernel/lib/text/ast_to_text.dart
+++ b/pkg/kernel/lib/text/ast_to_text.dart
@@ -1801,6 +1801,9 @@
 
   @override
   void visitFileUriExpression(FileUriExpression node) {
+    if (node is FileUriConstantExpression) {
+      writeWord('/* from ${node.fileUri} */');
+    }
     writeExpression(node.expression);
   }
 
@@ -2804,6 +2807,9 @@
 
   @override
   void visitConstantExpression(ConstantExpression node) {
+    if (node is FileUriConstantExpression) {
+      writeWord('/* from ${node.fileUri} */');
+    }
     writeConstantReference(node.constant);
   }
 
diff --git a/runtime/vm/compiler/frontend/constant_reader.cc b/runtime/vm/compiler/frontend/constant_reader.cc
index 8cd0f66..6dcaf58 100644
--- a/runtime/vm/compiler/frontend/constant_reader.cc
+++ b/runtime/vm/compiler/frontend/constant_reader.cc
@@ -119,6 +119,12 @@
       helper_->SkipDartType();
       result_ = ReadConstant(helper_->ReadUInt());
       break;
+    case kFileUriConstantExpression:
+      helper_->ReadPosition();
+      helper_->ReadUInt();
+      helper_->SkipDartType();
+      result_ = ReadConstant(helper_->ReadUInt());
+      break;
     case kInvalidExpression: {
       helper_->ReadPosition();  // Skip position.
       const String& message = H.DartString(helper_->ReadStringReference());
diff --git a/runtime/vm/compiler/frontend/kernel_binary_flowgraph.cc b/runtime/vm/compiler/frontend/kernel_binary_flowgraph.cc
index d71072b..9de53e4 100644
--- a/runtime/vm/compiler/frontend/kernel_binary_flowgraph.cc
+++ b/runtime/vm/compiler/frontend/kernel_binary_flowgraph.cc
@@ -1161,6 +1161,7 @@
     case kNullLiteral:
       return BuildNullLiteral(position);
     case kConstantExpression:
+    case kFileUriConstantExpression:
       return BuildConstantExpression(position, tag);
     case kInstantiation:
       return BuildPartialTearoffInstantiation(position);
@@ -1170,6 +1171,8 @@
       return BuildLibraryPrefixAction(position, Symbols::CheckLoaded());
     case kAwaitExpression:
       return BuildAwaitExpression(position);
+    case kFileUriExpression:
+      return BuildFileUriExpression(position);
     case kConstStaticInvocation:
     case kConstConstructorInvocation:
     case kConstListLiteral:
@@ -1180,7 +1183,6 @@
     case kSetConcatenation:
     case kMapConcatenation:
     case kInstanceCreation:
-    case kFileUriExpression:
     case kStaticTearOff:
     case kSwitchExpression:
     case kPatternAssignment:
@@ -4374,6 +4376,11 @@
   if (tag == kConstantExpression) {
     p = ReadPosition();
     SkipDartType();
+  } else if (tag == kFileUriConstantExpression) {
+    // TODO(alexmarkov): Use file offset together with file uri.
+    ReadPosition();
+    ReadUInt();
+    SkipDartType();
   }
   if (position != nullptr) *position = p;
   const intptr_t constant_index = ReadUInt();
@@ -4508,6 +4515,16 @@
   return instructions;
 }
 
+Fragment StreamingFlowGraphBuilder::BuildFileUriExpression(
+    TokenPosition* position) {
+  ReadUInt();  // read uri
+
+  const TokenPosition pos = ReadPosition();  // read position.
+  if (position != nullptr) *position = pos;
+
+  return BuildExpression(position);  // read expression.
+}
+
 Fragment StreamingFlowGraphBuilder::BuildExpressionStatement(
     TokenPosition* position) {
   Fragment instructions = BuildExpression(position);  // read expression.
@@ -5928,7 +5945,7 @@
     if (tag != kInvalidExpression) {
       has_valid_annotation = true;
     }
-    if (tag == kConstantExpression) {
+    if (tag == kConstantExpression || tag == kFileUriConstantExpression) {
       auto& instance = Instance::Handle();
       instance = constant_reader_.ReadConstantExpression();
       if (instance.clazz() == IG->object_store()->pragma_class()) {
diff --git a/runtime/vm/compiler/frontend/kernel_binary_flowgraph.h b/runtime/vm/compiler/frontend/kernel_binary_flowgraph.h
index 90d4f1f..740affc 100644
--- a/runtime/vm/compiler/frontend/kernel_binary_flowgraph.h
+++ b/runtime/vm/compiler/frontend/kernel_binary_flowgraph.h
@@ -339,6 +339,7 @@
   Fragment BuildLibraryPrefixAction(TokenPosition* position,
                                     const String& selector);
   Fragment BuildAwaitExpression(TokenPosition* position);
+  Fragment BuildFileUriExpression(TokenPosition* position);
 
   Fragment BuildExpressionStatement(TokenPosition* position);
   Fragment BuildBlock(TokenPosition* position);
diff --git a/runtime/vm/compiler/frontend/kernel_fingerprints.cc b/runtime/vm/compiler/frontend/kernel_fingerprints.cc
index 7c19af4..cc3c90a 100644
--- a/runtime/vm/compiler/frontend/kernel_fingerprints.cc
+++ b/runtime/vm/compiler/frontend/kernel_fingerprints.cc
@@ -670,6 +670,12 @@
       SkipDartType();
       SkipConstantReference();
       return;
+    case kFileUriConstantExpression:
+      ReadPosition();
+      ReadUInt();  // skip uri
+      SkipDartType();
+      SkipConstantReference();
+      return;
     case kLoadLibrary:
     case kCheckLibraryIsLoaded:
       ReadUInt();  // skip library index
@@ -681,6 +687,11 @@
         CalculateDartTypeFingerprint();  // read runtime check type.
       }
       return;
+    case kFileUriExpression:
+      ReadUInt();      // skip uri
+      ReadPosition();  // read position
+      CalculateExpressionFingerprint();
+      return;
     case kConstStaticInvocation:
     case kConstConstructorInvocation:
     case kConstListLiteral:
@@ -691,7 +702,6 @@
     case kSetConcatenation:
     case kMapConcatenation:
     case kInstanceCreation:
-    case kFileUriExpression:
     case kStaticTearOff:
     case kSwitchExpression:
     case kPatternAssignment:
diff --git a/runtime/vm/compiler/frontend/kernel_translation_helper.cc b/runtime/vm/compiler/frontend/kernel_translation_helper.cc
index 1ebee58..0e4b3ca 100644
--- a/runtime/vm/compiler/frontend/kernel_translation_helper.cc
+++ b/runtime/vm/compiler/frontend/kernel_translation_helper.cc
@@ -2754,6 +2754,12 @@
       SkipDartType();  // read type.
       SkipConstantReference();
       return;
+    case kFileUriConstantExpression:
+      ReadPosition();  // read position.
+      ReadUInt();      // skip uri
+      SkipDartType();  // read type.
+      SkipConstantReference();
+      return;
     case kLoadLibrary:
     case kCheckLibraryIsLoaded:
       ReadUInt();  // skip library index
@@ -2765,6 +2771,11 @@
         SkipDartType();  // read runtime check type.
       }
       return;
+    case kFileUriExpression:
+      ReadUInt();        // skip uri
+      ReadPosition();    // read position
+      SkipExpression();  // read expression
+      return;
     case kConstStaticInvocation:
     case kConstConstructorInvocation:
     case kConstListLiteral:
@@ -2775,7 +2786,6 @@
     case kSetConcatenation:
     case kMapConcatenation:
     case kInstanceCreation:
-    case kFileUriExpression:
     case kStaticTearOff:
     case kSwitchExpression:
     case kPatternAssignment:
diff --git a/runtime/vm/compiler/frontend/scope_builder.cc b/runtime/vm/compiler/frontend/scope_builder.cc
index c19e442..fe02792 100644
--- a/runtime/vm/compiler/frontend/scope_builder.cc
+++ b/runtime/vm/compiler/frontend/scope_builder.cc
@@ -966,6 +966,12 @@
       helper_.SkipDartType();
       helper_.SkipConstantReference();
       return;
+    case kFileUriConstantExpression:
+      helper_.ReadPosition();
+      helper_.ReadUInt();
+      helper_.SkipDartType();
+      helper_.SkipConstantReference();
+      return;
     case kInstantiation: {
       VisitExpression();
       const intptr_t list_length =
@@ -986,6 +992,11 @@
         VisitDartType();  // read runtime check type.
       }
       return;
+    case kFileUriExpression:
+      helper_.ReadUInt();      // read uri.
+      helper_.ReadPosition();  // read position.
+      VisitExpression();       // read expression.
+      return;
     case kConstStaticInvocation:
     case kConstConstructorInvocation:
     case kConstListLiteral:
@@ -996,7 +1007,6 @@
     case kSetConcatenation:
     case kMapConcatenation:
     case kInstanceCreation:
-    case kFileUriExpression:
     case kStaticTearOff:
     case kSwitchExpression:
     case kPatternAssignment:
diff --git a/runtime/vm/kernel_binary.h b/runtime/vm/kernel_binary.h
index 186b6e9b..88146d8 100644
--- a/runtime/vm/kernel_binary.h
+++ b/runtime/vm/kernel_binary.h
@@ -18,7 +18,7 @@
 // package:kernel/binary.md.
 
 static const uint32_t kMagicProgramFile = 0x90ABCDEFu;
-static const uint32_t kSupportedKernelFormatVersion = 105;
+static const uint32_t kSupportedKernelFormatVersion = 106;
 
 // Keep in sync with package:kernel/lib/binary/tag.dart
 #define KERNEL_TAG_LIST(V)                                                     \
@@ -136,6 +136,7 @@
   V(InlineType, 103)                                                           \
   V(ConstantExpression, 106)                                                   \
   V(FutureOrType, 107)                                                         \
+  V(FileUriConstantExpression, 108)                                            \
   V(InstanceGet, 118)                                                          \
   V(InstanceSet, 119)                                                          \
   V(InstanceInvocation, 120)                                                   \
diff --git a/runtime/vm/kernel_loader.cc b/runtime/vm/kernel_loader.cc
index ffdb9a2..d75eed4 100644
--- a/runtime/vm/kernel_loader.cc
+++ b/runtime/vm/kernel_loader.cc
@@ -1744,9 +1744,12 @@
 
   for (intptr_t i = 0; i < annotation_count; ++i) {
     const intptr_t tag = helper_.PeekTag();
-    if (tag == kConstantExpression) {
+    if (tag == kConstantExpression || tag == kFileUriConstantExpression) {
       helper_.ReadByte();      // Skip the tag.
       helper_.ReadPosition();  // Skip fileOffset.
+      if (tag == kFileUriConstantExpression) {
+        helper_.ReadUInt();  // Skip uri.
+      }
       helper_.SkipDartType();  // Skip type.
       const intptr_t index_in_constant_table = helper_.ReadUInt();