| OLD | NEW |
| 1 // Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2015, 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 /** | 5 /** |
| 6 * This file is an "idl" style description of the summary format. It is not | 6 * This file is an "idl" style description of the summary format. It is not |
| 7 * executed directly; instead it is parsed and transformed into code that | 7 * executed directly; instead it is parsed and transformed into code that |
| 8 * implements the summary format. | 8 * implements the summary format. |
| 9 * | 9 * |
| 10 * The code generation process introduces the following non-typical semantics: | 10 * The code generation process introduces the following non-typical semantics: |
| 11 * - Fields of type List are never null, and have a default value of the empty | 11 * - Fields of type List are never null, and have a default value of the empty |
| 12 * list. | 12 * list. |
| 13 * - Fields of type int are never null, and have a default value of zero. | 13 * - Fields of type int are never null, and have a default value of zero. |
| 14 * - Fields of type String are never null, and have a default value of ''. | 14 * - Fields of type String are never null, and have a default value of ''. |
| 15 * - Fields of type bool are never null, and have a default value of false. | 15 * - Fields of type bool are never null, and have a default value of false. |
| 16 * - Fields whose type is an enum are never null, and have a default value of | 16 * - Fields whose type is an enum are never null, and have a default value of |
| 17 * the first value declared in the enum. | 17 * the first value declared in the enum. |
| 18 * | 18 * |
| 19 * Terminology used in this document: | 19 * Terminology used in this document: |
| 20 * - "Unlinked" refers to information that can be determined from reading the | 20 * - "Unlinked" refers to information that can be determined from reading a |
| 21 * .dart file for the library itself (including all parts) and no other | 21 * single .dart file in isolation. |
| 22 * files. | 22 * - "Prelinked" refers to information that can be determined from the defining |
| 23 * - "Prelinked" refers to information that can be determined from reading the | 23 * compilation unit of a library, plus direct imports, plus the transitive |
| 24 * unlinked information for the library itself and the unlinked information | 24 * closure of exports reachable from those libraries, plus all part files |
| 25 * for all direct imports (plus the transitive closure of exports reachable | 25 * constituting those libraries. |
| 26 * from those direct imports). | 26 * - "Linked" refers to all other information; in theory, this information may |
| 27 * - "Linked" refers to information that can be determined only from reading | 27 * depend on all files in the transitive import/export closure. However, in |
| 28 * the unlinked and prelinked information for the library itself and the | 28 * practice we expect that the number of additional dependencies will usually |
| 29 * transitive closure of its imports. | 29 * be small, since the additional dependencies only need to be consulted for |
| 30 * type propagation, type inference, and constant evaluation, which typically |
| 31 * have short dependency chains. |
| 30 * | 32 * |
| 31 * TODO(paulberry): currently the summary format only contains unlinked and | 33 * Since we expect "linked" and "prelinked" dependencies to be similar, we only |
| 32 * prelinked information. | 34 * rarely distinguish between them; most information is that is not "unlinked" |
| 35 * is typically considered "linked" for simplicity. |
| 33 * | 36 * |
| 34 * Except as otherwise noted, synthetic elements are not stored in the summary; | 37 * Except as otherwise noted, synthetic elements are not stored in the summary; |
| 35 * they are re-synthesized at the time the summary is read. | 38 * they are re-synthesized at the time the summary is read. |
| 36 */ | 39 */ |
| 37 library analyzer.tool.summary.idl; | 40 library analyzer.tool.summary.idl; |
| 38 | 41 |
| 39 /** | 42 /** |
| 40 * Annotation describing information which is not part of Dart semantics; in | 43 * Annotation describing information which is not part of Dart semantics; in |
| 41 * other words, if this information (or any information it refers to) changes, | 44 * other words, if this information (or any information it refers to) changes, |
| 42 * static analysis and runtime behavior of the library are unaffected. | 45 * static analysis and runtime behavior of the library are unaffected. |
| (...skipping 16 matching lines...) Expand all Loading... |
| 59 /** | 62 /** |
| 60 * Annotation describing a class which can be the top level object in an | 63 * Annotation describing a class which can be the top level object in an |
| 61 * encoded summary. | 64 * encoded summary. |
| 62 */ | 65 */ |
| 63 const topLevel = null; | 66 const topLevel = null; |
| 64 | 67 |
| 65 /** | 68 /** |
| 66 * Information about a dependency that exists between one library and another | 69 * Information about a dependency that exists between one library and another |
| 67 * due to an "import" declaration. | 70 * due to an "import" declaration. |
| 68 */ | 71 */ |
| 69 class PrelinkedDependency { | 72 class LinkedDependency { |
| 70 /** | 73 /** |
| 71 * The relative URI of the dependent library. This URI is relative to the | 74 * The relative URI of the dependent library. This URI is relative to the |
| 72 * importing library, even if there are intervening `export` declarations. | 75 * importing library, even if there are intervening `export` declarations. |
| 73 * So, for example, if `a.dart` imports `b/c.dart` and `b/c.dart` exports | 76 * So, for example, if `a.dart` imports `b/c.dart` and `b/c.dart` exports |
| 74 * `d/e.dart`, the URI listed for `a.dart`'s dependency on `e.dart` will be | 77 * `d/e.dart`, the URI listed for `a.dart`'s dependency on `e.dart` will be |
| 75 * `b/d/e.dart`. | 78 * `b/d/e.dart`. |
| 76 */ | 79 */ |
| 77 String uri; | 80 String uri; |
| 78 | 81 |
| 79 /** | 82 /** |
| 80 * URI for the compilation units listed in the library's `part` declarations. | 83 * URI for the compilation units listed in the library's `part` declarations. |
| 81 * These URIs are relative to the importing library. | 84 * These URIs are relative to the importing library. |
| 82 */ | 85 */ |
| 83 List<String> parts; | 86 List<String> parts; |
| 84 } | 87 } |
| 85 | 88 |
| 86 /** | 89 /** |
| 87 * Information about a single name in the export namespace of the library that | 90 * Information about a single name in the export namespace of the library that |
| 88 * is not in the public namespace. | 91 * is not in the public namespace. |
| 89 */ | 92 */ |
| 90 class PrelinkedExportName { | 93 class LinkedExportName { |
| 91 /** | 94 /** |
| 92 * Name of the exported entity. TODO(paulberry): do we include the trailing | 95 * Name of the exported entity. TODO(paulberry): do we include the trailing |
| 93 * '=' for a setter? | 96 * '=' for a setter? |
| 94 */ | 97 */ |
| 95 String name; | 98 String name; |
| 96 | 99 |
| 97 /** | 100 /** |
| 98 * Index into [PrelinkedLibrary.dependencies] for the library in which the | 101 * Index into [LinkedLibrary.dependencies] for the library in which the |
| 99 * entity is defined. | 102 * entity is defined. |
| 100 */ | 103 */ |
| 101 int dependency; | 104 int dependency; |
| 102 | 105 |
| 103 /** | 106 /** |
| 104 * Integer index indicating which unit in the exported library contains the | 107 * Integer index indicating which unit in the exported library contains the |
| 105 * definition of the entity. As with indices into [PrelinkedLibrary.units], | 108 * definition of the entity. As with indices into [LinkedLibrary.units], |
| 106 * zero represents the defining compilation unit, and nonzero values | 109 * zero represents the defining compilation unit, and nonzero values |
| 107 * represent parts in the order of the corresponding `part` declarations. | 110 * represent parts in the order of the corresponding `part` declarations. |
| 108 */ | 111 */ |
| 109 int unit; | 112 int unit; |
| 110 | 113 |
| 111 /** | 114 /** |
| 112 * The kind of the entity being referred to. | 115 * The kind of the entity being referred to. |
| 113 */ | 116 */ |
| 114 PrelinkedReferenceKind kind; | 117 ReferenceKind kind; |
| 115 } | 118 } |
| 116 | 119 |
| 117 /** | 120 /** |
| 118 * Pre-linked summary of a library. | 121 * Linked summary of a library. |
| 119 */ | 122 */ |
| 120 @topLevel | 123 @topLevel |
| 121 class PrelinkedLibrary { | 124 class LinkedLibrary { |
| 122 /** | 125 /** |
| 123 * The pre-linked summary of all the compilation units constituting the | 126 * The linked summary of all the compilation units constituting the |
| 124 * library. The summary of the defining compilation unit is listed first, | 127 * library. The summary of the defining compilation unit is listed first, |
| 125 * followed by the summary of each part, in the order of the `part` | 128 * followed by the summary of each part, in the order of the `part` |
| 126 * declarations in the defining compilation unit. | 129 * declarations in the defining compilation unit. |
| 127 */ | 130 */ |
| 128 List<PrelinkedUnit> units; | 131 List<LinkedUnit> units; |
| 129 | 132 |
| 130 /** | 133 /** |
| 131 * The libraries that this library depends on (either via an explicit import | 134 * The libraries that this library depends on (either via an explicit import |
| 132 * statement or via the implicit dependencies on `dart:core` and | 135 * statement or via the implicit dependencies on `dart:core` and |
| 133 * `dart:async`). The first element of this array is a pseudo-dependency | 136 * `dart:async`). The first element of this array is a pseudo-dependency |
| 134 * representing the library itself (it is also used for "dynamic"). | 137 * representing the library itself (it is also used for "dynamic"). |
| 135 * | 138 * |
| 136 * TODO(paulberry): consider removing this entirely and just using | 139 * TODO(paulberry): consider removing this entirely and just using |
| 137 * [UnlinkedLibrary.imports]. | 140 * [UnlinkedLibrary.imports]. |
| 138 */ | 141 */ |
| 139 List<PrelinkedDependency> dependencies; | 142 List<LinkedDependency> dependencies; |
| 140 | 143 |
| 141 /** | 144 /** |
| 142 * For each import in [UnlinkedUnit.imports], an index into [dependencies] | 145 * For each import in [UnlinkedUnit.imports], an index into [dependencies] |
| 143 * of the library being imported. | 146 * of the library being imported. |
| 144 * | 147 * |
| 145 * TODO(paulberry): if [dependencies] is removed, this can be removed as | 148 * TODO(paulberry): if [dependencies] is removed, this can be removed as |
| 146 * well, since there will effectively be a one-to-one mapping. | 149 * well, since there will effectively be a one-to-one mapping. |
| 147 */ | 150 */ |
| 148 List<int> importDependencies; | 151 List<int> importDependencies; |
| 149 | 152 |
| 150 /** | 153 /** |
| 151 * Information about entities in the export namespace of the library that are | 154 * Information about entities in the export namespace of the library that are |
| 152 * not in the public namespace of the library (that is, entities that are | 155 * not in the public namespace of the library (that is, entities that are |
| 153 * brought into the namespace via `export` directives). | 156 * brought into the namespace via `export` directives). |
| 154 * | 157 * |
| 155 * Sorted by name. | 158 * Sorted by name. |
| 156 */ | 159 */ |
| 157 List<PrelinkedExportName> exportNames; | 160 List<LinkedExportName> exportNames; |
| 158 } | 161 } |
| 159 | 162 |
| 160 /** | 163 /** |
| 161 * Information about the resolution of an [UnlinkedReference]. | 164 * Information about the resolution of an [UnlinkedReference]. |
| 162 */ | 165 */ |
| 163 class PrelinkedReference { | 166 class LinkedReference { |
| 164 /** | 167 /** |
| 165 * Index into [PrelinkedLibrary.dependencies] indicating which imported librar
y | 168 * Index into [LinkedLibrary.dependencies] indicating which imported library |
| 166 * declares the entity being referred to. | 169 * declares the entity being referred to. |
| 167 */ | 170 */ |
| 168 int dependency; | 171 int dependency; |
| 169 | 172 |
| 170 /** | 173 /** |
| 171 * The kind of the entity being referred to. For the pseudo-type `dynamic`, | 174 * The kind of the entity being referred to. For the pseudo-type `dynamic`, |
| 172 * the kind is [PrelinkedReferenceKind.classOrEnum]. | 175 * the kind is [ReferenceKind.classOrEnum]. |
| 173 */ | 176 */ |
| 174 PrelinkedReferenceKind kind; | 177 ReferenceKind kind; |
| 175 | 178 |
| 176 /** | 179 /** |
| 177 * Integer index indicating which unit in the imported library contains the | 180 * Integer index indicating which unit in the imported library contains the |
| 178 * definition of the entity. As with indices into [PrelinkedLibrary.units], | 181 * definition of the entity. As with indices into [LinkedLibrary.units], |
| 179 * zero represents the defining compilation unit, and nonzero values | 182 * zero represents the defining compilation unit, and nonzero values |
| 180 * represent parts in the order of the corresponding `part` declarations. | 183 * represent parts in the order of the corresponding `part` declarations. |
| 181 */ | 184 */ |
| 182 int unit; | 185 int unit; |
| 183 | 186 |
| 184 /** | 187 /** |
| 185 * If the entity being referred to is generic, the number of type parameters | 188 * If the entity being referred to is generic, the number of type parameters |
| 186 * it accepts. Otherwise zero. | 189 * it accepts. Otherwise zero. |
| 187 */ | 190 */ |
| 188 int numTypeParameters; | 191 int numTypeParameters; |
| 189 } | 192 } |
| 190 | 193 |
| 191 /** | 194 /** |
| 195 * Linked summary of a compilation unit. |
| 196 */ |
| 197 class LinkedUnit { |
| 198 /** |
| 199 * For each reference in [UnlinkedUnit.references], information about how |
| 200 * that reference is resolved. |
| 201 */ |
| 202 List<LinkedReference> references; |
| 203 } |
| 204 |
| 205 /** |
| 192 * Enum used to indicate the kind of entity referred to by a | 206 * Enum used to indicate the kind of entity referred to by a |
| 193 * [PrelinkedReference]. | 207 * [LinkedReference]. |
| 194 */ | 208 */ |
| 195 enum PrelinkedReferenceKind { | 209 enum ReferenceKind { |
| 196 /** | 210 /** |
| 197 * The entity is a class or enum. | 211 * The entity is a class or enum. |
| 198 */ | 212 */ |
| 199 classOrEnum, | 213 classOrEnum, |
| 200 | 214 |
| 201 /** | 215 /** |
| 202 * The entity is a typedef. | 216 * The entity is a typedef. |
| 203 */ | 217 */ |
| 204 typedef, | 218 typedef, |
| 205 | 219 |
| (...skipping 12 matching lines...) Expand all Loading... |
| 218 */ | 232 */ |
| 219 prefix, | 233 prefix, |
| 220 | 234 |
| 221 /** | 235 /** |
| 222 * The entity being referred to does not exist. | 236 * The entity being referred to does not exist. |
| 223 */ | 237 */ |
| 224 unresolved | 238 unresolved |
| 225 } | 239 } |
| 226 | 240 |
| 227 /** | 241 /** |
| 228 * Pre-linked summary of a compilation unit. | |
| 229 */ | |
| 230 class PrelinkedUnit { | |
| 231 /** | |
| 232 * For each reference in [UnlinkedUnit.references], information about how | |
| 233 * that reference is resolved. | |
| 234 */ | |
| 235 List<PrelinkedReference> references; | |
| 236 } | |
| 237 | |
| 238 /** | |
| 239 * Information about SDK. | 242 * Information about SDK. |
| 240 */ | 243 */ |
| 241 @topLevel | 244 @topLevel |
| 242 class SdkBundle { | 245 class SdkBundle { |
| 243 /** | 246 /** |
| 244 * The list of URIs of items in [prelinkedLibraries], e.g. `dart:core`. | 247 * The list of URIs of items in [linkedLibraries], e.g. `dart:core`. |
| 245 */ | 248 */ |
| 246 List<String> prelinkedLibraryUris; | 249 List<String> linkedLibraryUris; |
| 247 | 250 |
| 248 /** | 251 /** |
| 249 * Pre-linked libraries. | 252 * Linked libraries. |
| 250 */ | 253 */ |
| 251 List<PrelinkedLibrary> prelinkedLibraries; | 254 List<LinkedLibrary> linkedLibraries; |
| 252 | 255 |
| 253 /** | 256 /** |
| 254 * The list of URIs of items in [unlinkedUnits], e.g. `dart:core/bool.dart`. | 257 * The list of URIs of items in [unlinkedUnits], e.g. `dart:core/bool.dart`. |
| 255 */ | 258 */ |
| 256 List<String> unlinkedUnitUris; | 259 List<String> unlinkedUnitUris; |
| 257 | 260 |
| 258 /** | 261 /** |
| 259 * Unlinked information for the compilation units constituting the SDK. | 262 * Unlinked information for the compilation units constituting the SDK. |
| 260 */ | 263 */ |
| 261 List<UnlinkedUnit> unlinkedUnits; | 264 List<UnlinkedUnit> unlinkedUnits; |
| (...skipping 487 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 749 */ | 752 */ |
| 750 class UnlinkedPublicName { | 753 class UnlinkedPublicName { |
| 751 /** | 754 /** |
| 752 * The name itself. | 755 * The name itself. |
| 753 */ | 756 */ |
| 754 String name; | 757 String name; |
| 755 | 758 |
| 756 /** | 759 /** |
| 757 * The kind of object referred to by the name. | 760 * The kind of object referred to by the name. |
| 758 */ | 761 */ |
| 759 PrelinkedReferenceKind kind; | 762 ReferenceKind kind; |
| 760 | 763 |
| 761 /** | 764 /** |
| 762 * If the entity being referred to is generic, the number of type parameters | 765 * If the entity being referred to is generic, the number of type parameters |
| 763 * it accepts. Otherwise zero. | 766 * it accepts. Otherwise zero. |
| 764 */ | 767 */ |
| 765 int numTypeParameters; | 768 int numTypeParameters; |
| 766 } | 769 } |
| 767 | 770 |
| 768 /** | 771 /** |
| 769 * Unlinked summary information about what a compilation unit contributes to a | 772 * Unlinked summary information about what a compilation unit contributes to a |
| (...skipping 278 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1048 /** | 1051 /** |
| 1049 * Indicates whether the variable is declared using the `const` keyword. | 1052 * Indicates whether the variable is declared using the `const` keyword. |
| 1050 */ | 1053 */ |
| 1051 bool isConst; | 1054 bool isConst; |
| 1052 | 1055 |
| 1053 /** | 1056 /** |
| 1054 * Indicates whether this variable lacks an explicit type declaration. | 1057 * Indicates whether this variable lacks an explicit type declaration. |
| 1055 */ | 1058 */ |
| 1056 bool hasImplicitType; | 1059 bool hasImplicitType; |
| 1057 } | 1060 } |
| OLD | NEW |