| OLD | NEW | 
|---|
| 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  Loading... | 
| 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   /// Whether this is a synthesized class for a closurized method or local | 
|  | 39   /// function. | 
| 33   bool get isClosure; | 40   bool get isClosure; | 
| 34 } | 41 } | 
| 35 | 42 | 
| 36 abstract class TypeVariableEntity extends Entity { | 43 abstract class TypeVariableEntity extends Entity { | 
|  | 44   /// The class or generic method that declared this type variable. | 
| 37   Entity get typeDeclaration; | 45   Entity get typeDeclaration; | 
|  | 46 | 
|  | 47   /// The index of this type variable in the type variables of its | 
|  | 48   /// [typeDeclaration]. | 
| 38   int get index; | 49   int get index; | 
| 39 } | 50 } | 
| 40 | 51 | 
| 41 /// Stripped down super interface for member like entities, that is, | 52 /// Stripped down super interface for member like entities, that is, | 
| 42 /// constructors, methods, fields etc. | 53 /// constructors, methods, fields etc. | 
| 43 /// | 54 /// | 
| 44 /// Currently only [MemberElement] but later also kernel based Dart members | 55 /// Currently only [MemberElement] but later also kernel based Dart members | 
| 45 /// and/or Dart-in-JS properties. | 56 /// and/or Dart-in-JS properties. | 
| 46 abstract class MemberEntity extends Entity { | 57 abstract class MemberEntity extends Entity { | 
|  | 58   /// Whether this is a member of a library. | 
| 47   bool get isTopLevel; | 59   bool get isTopLevel; | 
|  | 60 | 
|  | 61   /// Whether this is a static member of a class. | 
| 48   bool get isStatic; | 62   bool get isStatic; | 
|  | 63 | 
|  | 64   /// Whether this is an instance member of a class. | 
| 49   bool get isInstanceMember; | 65   bool get isInstanceMember; | 
|  | 66 | 
|  | 67   /// Whether this is a constructor. | 
| 50   bool get isConstructor; | 68   bool get isConstructor; | 
|  | 69 | 
|  | 70   /// Whether this is a field. | 
| 51   bool get isField; | 71   bool get isField; | 
|  | 72 | 
|  | 73   /// Whether this is a normal method (neither constructor, getter or setter) | 
|  | 74   /// or operator method. | 
| 52   bool get isFunction; | 75   bool get isFunction; | 
|  | 76 | 
|  | 77   /// Whether this is a getter. | 
| 53   bool get isGetter; | 78   bool get isGetter; | 
|  | 79 | 
|  | 80   /// Whether this is a setter. | 
| 54   bool get isSetter; | 81   bool get isSetter; | 
|  | 82 | 
|  | 83   /// Whether this member is assignable, i.e. a non-final field. | 
| 55   bool get isAssignable; | 84   bool get isAssignable; | 
|  | 85 | 
|  | 86   /// The enclosing class if this is a constuctor, instance member or | 
|  | 87   /// static member of a class. | 
| 56   ClassEntity get enclosingClass; | 88   ClassEntity get enclosingClass; | 
|  | 89 | 
|  | 90   /// The enclosing library if this is a library member, otherwise the | 
|  | 91   /// enclosing library of the [enclosingClass]. | 
|  | 92   LibraryEntity get library; | 
| 57 } | 93 } | 
| 58 | 94 | 
| 59 /// Stripped down super interface for field like entities. | 95 /// Stripped down super interface for field like entities. | 
| 60 /// | 96 /// | 
| 61 /// Currently only [FieldElement] but later also kernel based Dart fields | 97 /// Currently only [FieldElement] but later also kernel based Dart fields | 
| 62 /// and/or Dart-in-JS field-like properties. | 98 /// and/or Dart-in-JS field-like properties. | 
| 63 abstract class FieldEntity extends MemberEntity {} | 99 abstract class FieldEntity extends MemberEntity {} | 
| 64 | 100 | 
| 65 /// Stripped down super interface for function like entities. | 101 /// Stripped down super interface for function like entities. | 
| 66 /// | 102 /// | 
| 67 /// Currently only [MethodElement] but later also kernel based Dart constructors | 103 /// Currently only [MethodElement] but later also kernel based Dart constructors | 
| 68 /// and methods and/or Dart-in-JS function-like properties. | 104 /// and methods and/or Dart-in-JS function-like properties. | 
| 69 abstract class FunctionEntity extends MemberEntity {} | 105 abstract class FunctionEntity extends MemberEntity { | 
|  | 106   /// Whether this function is external, i.e. the body is not defined in terms | 
|  | 107   /// of Dart code. | 
|  | 108   bool get isExternal; | 
|  | 109 } | 
| 70 | 110 | 
| 71 /// Stripped down super interface for constructor like entities. | 111 /// Stripped down super interface for constructor like entities. | 
| 72 /// | 112 /// | 
| 73 /// Currently only [ConstructorElement] but later also kernel based Dart | 113 /// Currently only [ConstructorElement] but later also kernel based Dart | 
| 74 /// constructors and/or Dart-in-JS constructor-like properties. | 114 /// constructors and/or Dart-in-JS constructor-like properties. | 
| 75 // TODO(johnniwinther): Remove factory constructors from the set of | 115 // TODO(johnniwinther): Remove factory constructors from the set of | 
| 76 // constructors. | 116 // constructors. | 
| 77 abstract class ConstructorEntity extends FunctionEntity { | 117 abstract class ConstructorEntity extends FunctionEntity { | 
|  | 118   /// Whether this is a generative constructor, possibly redirecting. | 
| 78   bool get isGenerativeConstructor; | 119   bool get isGenerativeConstructor; | 
|  | 120 | 
|  | 121   /// Whether this is a factory constructor, possibly redirecting. | 
| 79   bool get isFactoryConstructor; | 122   bool get isFactoryConstructor; | 
| 80 } | 123 } | 
| 81 | 124 | 
| 82 /// An entity that defines a local entity (memory slot) in generated code. | 125 /// An entity that defines a local entity (memory slot) in generated code. | 
| 83 /// | 126 /// | 
| 84 /// Parameters, local variables and local functions (can) define local entity | 127 /// Parameters, local variables and local functions (can) define local entity | 
| 85 /// and thus implement [Local] through [LocalElement]. For non-element locals, | 128 /// and thus implement [Local] through [LocalElement]. For non-element locals, | 
| 86 /// like `this` and boxes, specialized [Local] classes are created. | 129 /// like `this` and boxes, specialized [Local] classes are created. | 
| 87 /// | 130 /// | 
| 88 /// Type variables can introduce locals in factories and constructors | 131 /// Type variables can introduce locals in factories and constructors | 
| 89 /// but since one type variable can introduce different locals in different | 132 /// but since one type variable can introduce different locals in different | 
| 90 /// factories and constructors it is not itself a [Local] but instead | 133 /// factories and constructors it is not itself a [Local] but instead | 
| 91 /// a non-element [Local] is created through a specialized class. | 134 /// a non-element [Local] is created through a specialized class. | 
| 92 // TODO(johnniwinther): Should [Local] have `isAssignable` or `type`? | 135 // TODO(johnniwinther): Should [Local] have `isAssignable` or `type`? | 
| 93 abstract class Local extends Entity { | 136 abstract class Local extends Entity { | 
| 94   /// The context in which this local is defined. | 137   /// The context in which this local is defined. | 
| 95   Entity get executableContext; | 138   Entity get executableContext; | 
| 96 | 139 | 
| 97   /// The outermost member that contains this element. | 140   /// The outermost member that contains this element. | 
| 98   /// | 141   /// | 
| 99   /// For top level, static or instance members, the member context is the | 142   /// For top level, static or instance members, the member context is the | 
| 100   /// element itself. For parameters, local variables and nested closures, the | 143   /// 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 | 144   /// member context is the top level, static or instance member in which it is | 
| 102   /// defined. | 145   /// defined. | 
| 103   MemberEntity get memberContext; | 146   MemberEntity get memberContext; | 
| 104 } | 147 } | 
| OLD | NEW | 
|---|