Index: sdk/lib/core/annotations.dart |
diff --git a/sdk/lib/core/annotations.dart b/sdk/lib/core/annotations.dart |
index 68ba572554f14954dccaeee6cd2721b138dc9520..7b8462f457efa242f6f75cc8d7e5cf90bfeeb9e6 100644 |
--- a/sdk/lib/core/annotations.dart |
+++ b/sdk/lib/core/annotations.dart |
@@ -113,21 +113,30 @@ class _Proxy { |
} |
/** |
- * The annotation `@proxy` marks a class as implementing members through |
- * `noSuchMethod`. |
+ * The annotation `@proxy` marks a class as implementing interfaces and members |
+ * dynamically through `noSuchMethod`. |
* |
- * The annotation applies to concrete classes. It is not inherited by |
- * subclasses. |
+ * The annotation applies to any class. It is inherited by subclasses from both |
+ * superclass and interfaces. |
* |
- * The marked class is considerer to implement any method, getter or setter |
- * declared by its interface, even if there is no implementation in the |
- * class. It will not generate the warning that is otherwise specified for an |
- * unimplemented method in a non-abstract class. |
+ * If a class is annotated with `@proxy`, or it implements any class that is |
+ * annotated, then the class is considered to implement any interface and |
+ * any member with regard to static type analysis. As such, it is not a static |
+ * type warning to assign the object to a variable of any type, and it is not |
+ * a static type warning to access any member of the object. |
+ * |
+ * This only applies to static type warnings. The runtime type of the object |
+ * is unaffected. It is not considered to implement any special interfaces at |
+ * runtime, so assigning it to a typed variable may fail in checked mode, and |
+ * testing it with the `is` operator will not work for any type except the |
+ * ones it actually implements. |
* |
* Tools that understand `@proxy` should tell the user if a class using `@proxy` |
* does not override the `noSuchMethod` declared on [Object]. |
* |
- * The intent of the `@proxy` notation is to avoid irrelevant warnings when |
- * a class implements its interface through `noSuchMethod`. |
+ * The intent of the `@proxy` notation is to create objects that implement a |
+ * type (or multiple types) that are not known at compile time. If the types |
+ * are known at compile time, a class can be written that implements these |
+ * types. |
*/ |
const Object proxy = const _Proxy(); |