Index: pkg/expect/lib/expect.dart |
diff --git a/pkg/expect/lib/expect.dart b/pkg/expect/lib/expect.dart |
index ed094ddb49ce8378181f8fc3b40e3c225d807b08..2ca6ed3e9dae2d22875d20d085d97d1f71dd5add 100644 |
--- a/pkg/expect/lib/expect.dart |
+++ b/pkg/expect/lib/expect.dart |
@@ -406,14 +406,21 @@ class NoInlining { |
/// Annotation class for testing of dart2js. Use this as metadata on method |
/// declarations to make the type inferrer trust the parameter and return types, |
/// effectively asserting the runtime values will (at least) be subtypes of the |
-/// annotated types. |
+/// annotated types. |
+/// |
+/// While the actually inferred type is guaranteed to be a subtype of the |
+/// annotation, it often is more precise. In particular, if a method is only |
+/// called with `null`, the inferrer will still infer null. To ensure that |
+/// the annotated type is also the inferred type, additionally use |
+/// [AssumeDynamic]. |
class TrustTypeAnnotations { |
const TrustTypeAnnotations(); |
} |
/// Annotation class for testing of dart2js. Use this as metadata on method |
/// declarations to disable closed world assumptions on parameters, effectively |
-/// assuming that the runtime arguments could be any value. |
+/// assuming that the runtime arguments could be any value. Note that the |
+/// constraints due to [TrustTypeAnnotations] still apply. |
class AssumeDynamic { |
const AssumeDynamic(); |
-} |
+} |