Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(4)

Side by Side Diff: pkg/compiler/lib/src/elements/entities.dart

Issue 2731173002: Add ClassEntity.library, MemberEntity.library and FunctionEntity.isExternal (Closed)
Patch Set: Created 3 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright (c) 2016, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2016, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a 2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file. 3 // BSD-style license that can be found in the LICENSE file.
4 4
5 library entities; 5 library entities;
6 6
7 import '../common.dart'; 7 import '../common.dart';
8 8
9 /// Abstract interface for entities. 9 /// Abstract interface for entities.
10 /// 10 ///
(...skipping 12 matching lines...) Expand all
23 /// 23 ///
24 /// Currently only [LibraryElement] but later also kernel based Dart classes 24 /// Currently only [LibraryElement] but later also kernel based Dart classes
25 /// and/or Dart-in-JS classes. 25 /// and/or Dart-in-JS classes.
26 abstract class LibraryEntity extends Entity {} 26 abstract class LibraryEntity extends Entity {}
27 27
28 /// Stripped down super interface for class like entities. 28 /// Stripped down super interface for class like entities.
29 /// 29 ///
30 /// Currently only [ClassElement] but later also kernel based Dart classes 30 /// Currently only [ClassElement] but later also kernel based Dart classes
31 /// and/or Dart-in-JS classes. 31 /// and/or Dart-in-JS classes.
32 abstract class ClassEntity extends Entity { 32 abstract class ClassEntity extends Entity {
33 /// If this is a normal class, the enclosing library for this class. If this
34 /// is a closure class, the enclosing class of the closure for which it was
35 /// created.
36 LibraryEntity get library;
37
38 /// `true` if a synthesized class for a closurized method or local function.
Siggi Cherem (dart-lang) 2017/03/14 04:54:59 nit: if a => if this is a ?
Johnni Winther 2017/03/15 12:07:09 Done.
33 bool get isClosure; 39 bool get isClosure;
34 } 40 }
35 41
36 abstract class TypeVariableEntity extends Entity { 42 abstract class TypeVariableEntity extends Entity {
43 /// The class or generic method that declared this type variable.
37 Entity get typeDeclaration; 44 Entity get typeDeclaration;
45
46 /// The index of this type variable in the type variables of its
47 /// [typeDeclaration].
38 int get index; 48 int get index;
39 } 49 }
40 50
41 /// Stripped down super interface for member like entities, that is, 51 /// Stripped down super interface for member like entities, that is,
42 /// constructors, methods, fields etc. 52 /// constructors, methods, fields etc.
43 /// 53 ///
44 /// Currently only [MemberElement] but later also kernel based Dart members 54 /// Currently only [MemberElement] but later also kernel based Dart members
45 /// and/or Dart-in-JS properties. 55 /// and/or Dart-in-JS properties.
46 abstract class MemberEntity extends Entity { 56 abstract class MemberEntity extends Entity {
57 /// `true` if this is a member of a library.
Siggi Cherem (dart-lang) 2017/03/14 04:54:59 (optional) I tend to use the form "Whether ..." in
Johnni Winther 2017/03/15 12:07:09 Done.
47 bool get isTopLevel; 58 bool get isTopLevel;
59
60 /// `true` if this is a static member of a class.
48 bool get isStatic; 61 bool get isStatic;
62
63 /// `true` if this is an instance member of a class.
49 bool get isInstanceMember; 64 bool get isInstanceMember;
65
66 /// `true` if this is a constructor.
50 bool get isConstructor; 67 bool get isConstructor;
68
69 /// `true` if this is a field.
51 bool get isField; 70 bool get isField;
71
72 /// `true` if this is a normal method (neither constructor, getter or setter)
73 /// or operator method.
52 bool get isFunction; 74 bool get isFunction;
75
76 /// `true` if this is a getter.
53 bool get isGetter; 77 bool get isGetter;
78
79 /// `true` if this is a setter.
54 bool get isSetter; 80 bool get isSetter;
81
82 /// `true` if this member is assignable, i.e. a non-final field.
55 bool get isAssignable; 83 bool get isAssignable;
84
85 /// The enclosing class if this is a constuctor, instance member or
86 /// static member of a class.
56 ClassEntity get enclosingClass; 87 ClassEntity get enclosingClass;
88
89 /// The enclosing library if this is a library member, other wise the
Siggi Cherem (dart-lang) 2017/03/14 04:54:59 other wise => otherwise
Johnni Winther 2017/03/15 12:07:09 Done.
90 /// enclosing library of the [enclosingClass].
91 LibraryEntity get library;
57 } 92 }
58 93
59 /// Stripped down super interface for field like entities. 94 /// Stripped down super interface for field like entities.
60 /// 95 ///
61 /// Currently only [FieldElement] but later also kernel based Dart fields 96 /// Currently only [FieldElement] but later also kernel based Dart fields
62 /// and/or Dart-in-JS field-like properties. 97 /// and/or Dart-in-JS field-like properties.
63 abstract class FieldEntity extends MemberEntity {} 98 abstract class FieldEntity extends MemberEntity {}
64 99
65 /// Stripped down super interface for function like entities. 100 /// Stripped down super interface for function like entities.
66 /// 101 ///
67 /// Currently only [MethodElement] but later also kernel based Dart constructors 102 /// Currently only [MethodElement] but later also kernel based Dart constructors
68 /// and methods and/or Dart-in-JS function-like properties. 103 /// and methods and/or Dart-in-JS function-like properties.
69 abstract class FunctionEntity extends MemberEntity {} 104 abstract class FunctionEntity extends MemberEntity {
105 /// `true` if this function is external, i.e. the body is not defined in terms
106 /// of Dart code.
Siggi Cherem (dart-lang) 2017/03/14 04:54:59 ... and it is marked with the 'external' modifier
Johnni Winther 2017/03/15 12:07:09 That should be only one way to define it. A JEleme
107 bool get isExternal;
108 }
70 109
71 /// Stripped down super interface for constructor like entities. 110 /// Stripped down super interface for constructor like entities.
72 /// 111 ///
73 /// Currently only [ConstructorElement] but later also kernel based Dart 112 /// Currently only [ConstructorElement] but later also kernel based Dart
74 /// constructors and/or Dart-in-JS constructor-like properties. 113 /// constructors and/or Dart-in-JS constructor-like properties.
75 // TODO(johnniwinther): Remove factory constructors from the set of 114 // TODO(johnniwinther): Remove factory constructors from the set of
76 // constructors. 115 // constructors.
77 abstract class ConstructorEntity extends FunctionEntity { 116 abstract class ConstructorEntity extends FunctionEntity {
117 /// `true` if this is a generative constructor, possibly redirecting.
78 bool get isGenerativeConstructor; 118 bool get isGenerativeConstructor;
119
120 /// `true` if this is a factory constructor, possibly redirecting.
79 bool get isFactoryConstructor; 121 bool get isFactoryConstructor;
80 } 122 }
81 123
82 /// An entity that defines a local entity (memory slot) in generated code. 124 /// An entity that defines a local entity (memory slot) in generated code.
83 /// 125 ///
84 /// Parameters, local variables and local functions (can) define local entity 126 /// Parameters, local variables and local functions (can) define local entity
85 /// and thus implement [Local] through [LocalElement]. For non-element locals, 127 /// and thus implement [Local] through [LocalElement]. For non-element locals,
86 /// like `this` and boxes, specialized [Local] classes are created. 128 /// like `this` and boxes, specialized [Local] classes are created.
87 /// 129 ///
88 /// Type variables can introduce locals in factories and constructors 130 /// Type variables can introduce locals in factories and constructors
89 /// but since one type variable can introduce different locals in different 131 /// but since one type variable can introduce different locals in different
90 /// factories and constructors it is not itself a [Local] but instead 132 /// factories and constructors it is not itself a [Local] but instead
91 /// a non-element [Local] is created through a specialized class. 133 /// a non-element [Local] is created through a specialized class.
92 // TODO(johnniwinther): Should [Local] have `isAssignable` or `type`? 134 // TODO(johnniwinther): Should [Local] have `isAssignable` or `type`?
93 abstract class Local extends Entity { 135 abstract class Local extends Entity {
94 /// The context in which this local is defined. 136 /// The context in which this local is defined.
95 Entity get executableContext; 137 Entity get executableContext;
96 138
97 /// The outermost member that contains this element. 139 /// The outermost member that contains this element.
98 /// 140 ///
99 /// For top level, static or instance members, the member context is the 141 /// For top level, static or instance members, the member context is the
100 /// element itself. For parameters, local variables and nested closures, the 142 /// element itself. For parameters, local variables and nested closures, the
101 /// member context is the top level, static or instance member in which it is 143 /// member context is the top level, static or instance member in which it is
102 /// defined. 144 /// defined.
103 MemberEntity get memberContext; 145 MemberEntity get memberContext;
104 } 146 }
OLDNEW
« no previous file with comments | « pkg/compiler/lib/src/elements/common.dart ('k') | pkg/compiler/lib/src/inferrer/type_graph_nodes.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698