Index: pkg/meta/lib/meta.dart |
diff --git a/pkg/meta/lib/meta.dart b/pkg/meta/lib/meta.dart |
index 984287546f6558dfa0ef1395c7950449d28d840d..7fa20e1d177dd76a92e4914ab2d3088e252ab536 100644 |
--- a/pkg/meta/lib/meta.dart |
+++ b/pkg/meta/lib/meta.dart |
@@ -18,6 +18,14 @@ |
/// in the language tour. |
library meta; |
+/// Used to annotate a parameter of an instance method that overrides another |
+/// method. |
+/// |
+/// Indicates that this parameter may have a tighter type than the parameter on |
+/// its superclass. The actual argument will be checked at runtime to ensure it |
+/// is a subtype of the overridden parameter type. |
+const _Checked checked = const _Checked(); |
+ |
/// Used to annotate an instance or static method `m`. Indicates that `m` must |
/// either be abstract or must return a newly allocated object or `null`. In |
/// addition, every method that either implements or overrides `m` is implicitly |
@@ -30,6 +38,18 @@ library meta; |
/// can return anything other than a newly allocated object or `null`. |
const _Factory factory = const _Factory(); |
+/// Used to annotate a class `C`. Indicates that `C` and all subtypes of `C` |
+/// must be immutable. |
+/// |
+/// A class is immutable if all of the instance fields of the class, whether |
+/// defined directly or inherited, are `final`. |
+/// |
+/// Tools, such as the analyzer, can provide feedback if |
+/// * the annotation is associated with anything other than a class, or |
+/// * a class that has this annotation or extends, implements or mixes in a |
+/// class that has this annotation is not immutable. |
+const Immutable immutable = const Immutable(); |
+ |
/// Used to annotate a const constructor `c`. Indicates that any invocation of |
/// the constructor must use the keyword `const` unless one or more of the |
/// arguments to the constructor is not a compile-time constant. |
@@ -97,6 +117,9 @@ const _Protected protected = const _Protected(); |
/// corresponding to a named parameter that has this annotation. |
const Required required = const Required(); |
+/// Used to annotate a field is allowed to be overridden in Strong Mode. |
+const _Virtual virtual = const _Virtual(); |
+ |
/// Used to annotate a declaration was made public, so that it is more visible |
/// than otherwise necessary, to make code testable. |
/// |
@@ -109,6 +132,17 @@ const Required required = const Required(); |
/// library which is in the `test` folder of the defining package. |
const _VisibleForTesting visibleForTesting = const _VisibleForTesting(); |
+/// Used to annotate a class. |
+/// |
+/// See [immutable] for more details. |
+class Immutable { |
+ /// A human-readable explanation of the reason why the class is immutable. |
+ final String reason; |
+ |
+ /// Initialize a newly created instance to have the given [reason]. |
+ const Immutable([this.reason]); |
+} |
+ |
/// Used to annotate a named parameter `p` in a method or function `f`. |
/// |
/// See [required] for more details. |
@@ -128,17 +162,6 @@ class Required { |
const Required([this.reason]); |
} |
-/// Used to annotate a parameter of an instance method that overrides another |
-/// method. |
-/// |
-/// Indicates that this parameter may have a tighter type than the parameter on |
-/// its superclass. The actual argument will be checked at runtime to ensure it |
-/// is a subtype of the overridden parameter type. |
-const _Checked checked = const _Checked(); |
- |
-/// Used to annotate a field is allowed to be overridden in Strong Mode. |
-const _Virtual virtual = const _Virtual(); |
- |
class _Checked { |
const _Checked(); |
} |