Index: pkg/compiler/lib/src/tree/nodes.dart |
diff --git a/pkg/compiler/lib/src/tree/nodes.dart b/pkg/compiler/lib/src/tree/nodes.dart |
index 744bdfe62a7ba6005864941db4dbab9f54016db4..216b51cb26890ce297327b1059aee58f9f48f8a1 100644 |
--- a/pkg/compiler/lib/src/tree/nodes.dart |
+++ b/pkg/compiler/lib/src/tree/nodes.dart |
@@ -6,8 +6,6 @@ import 'dart:collection' show IterableMixin; |
import '../common.dart'; |
import '../elements/elements.dart' show MetadataAnnotation; |
-import '../resolution/secret_tree_element.dart' |
- show NullTreeElementMixin, StoredTreeElementMixin; |
import 'package:front_end/src/fasta/scanner/precedence.dart' as Precedence |
show FUNCTION_INFO; |
import 'package:front_end/src/fasta/scanner.dart' show BeginGroupToken, Token; |
@@ -3224,3 +3222,62 @@ class ErrorNode extends Node |
get formals => null; |
get typedefKeyword => null; |
} |
+ |
+/** |
+ * Encapsulates the field [TreeElementMixin._element]. |
+ * |
+ * This library is an implementation detail of dart2js, and should not |
+ * be imported except by resolution and tree node libraries, or for |
+ * testing. |
+ * |
+ * We have taken great care to ensure AST nodes can be cached between |
+ * compiler instances. Part of this requires that we always access |
+ * resolution results through TreeElements. |
+ * |
+ * So please, do not add additional elements to this library, and do |
+ * not import it. |
+ */ |
+/// Interface for associating |
+abstract class TreeElementMixin { |
+ Object get _element; |
+ void set _element(Object value); |
+} |
+ |
+/// Null implementation of [TreeElementMixin] which does not allow association |
+/// of elements. |
+/// |
+/// This class is the superclass of all AST nodes. |
+abstract class NullTreeElementMixin implements TreeElementMixin, Spannable { |
+ // Deliberately using [Object] here to thwart code completion. |
+ // You're not really supposed to access this field anyways. |
+ Object get _element => null; |
+ set _element(_) { |
+ assert(invariant(this, false, |
+ message: "Elements cannot be associated with ${runtimeType}.")); |
+ } |
+} |
+ |
+/// Actual implementation of [TreeElementMixin] which stores the associated |
+/// element in the private field [_element]. |
+/// |
+/// This class is mixed into the node classes that are actually associated with |
+/// elements. |
+abstract class StoredTreeElementMixin implements TreeElementMixin { |
+ Object _element; |
+} |
+ |
+/** |
+ * Do not call this method directly. Instead, use an instance of |
+ * TreeElements. |
+ * |
+ * Using [Object] as return type to thwart code completion. |
+ */ |
+Object getTreeElement(TreeElementMixin node) => node._element; |
+ |
+/** |
+ * Do not call this method directly. Instead, use an instance of |
+ * TreeElements. |
+ */ |
+void setTreeElement(TreeElementMixin node, Object value) { |
+ node._element = value; |
+} |