| OLD | NEW |
| 1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2013, 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 elements.modelx; | 5 library elements.modelx; |
| 6 | 6 |
| 7 import '../common.dart'; | 7 import '../common.dart'; |
| 8 import '../common/names.dart' show Identifiers; | 8 import '../common/names.dart' show Identifiers; |
| 9 import '../common/resolution.dart' show Resolution, ParsingContext; | 9 import '../common/resolution.dart' show Resolution, ParsingContext; |
| 10 import '../compiler.dart' show Compiler; | 10 import '../compiler.dart' show Compiler; |
| (...skipping 232 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 243 Iterable<MetadataAnnotation> get metadata => unsupported(); | 243 Iterable<MetadataAnnotation> get metadata => unsupported(); |
| 244 bool get hasNode => false; | 244 bool get hasNode => false; |
| 245 get node => unsupported(); | 245 get node => unsupported(); |
| 246 get hasResolvedAst => false; | 246 get hasResolvedAst => false; |
| 247 get resolvedAst => unsupported(); | 247 get resolvedAst => unsupported(); |
| 248 get type => unsupported(); | 248 get type => unsupported(); |
| 249 get cachedNode => unsupported(); | 249 get cachedNode => unsupported(); |
| 250 get functionSignature => unsupported(); | 250 get functionSignature => unsupported(); |
| 251 get parameterStructure => unsupported(); | 251 get parameterStructure => unsupported(); |
| 252 get parameters => unsupported(); | 252 get parameters => unsupported(); |
| 253 get patch => null; | 253 Element get patch => null; |
| 254 get origin => this; | 254 Element get origin => this; |
| 255 get immediateRedirectionTarget => unsupported(); | 255 get immediateRedirectionTarget => unsupported(); |
| 256 get nestedClosures => unsupported(); | 256 get nestedClosures => unsupported(); |
| 257 get memberContext => unsupported(); | 257 get memberContext => unsupported(); |
| 258 get executableContext => unsupported(); | 258 get executableContext => unsupported(); |
| 259 get isExternal => unsupported(); | 259 get isExternal => unsupported(); |
| 260 get constantConstructor => null; | 260 get constantConstructor => null; |
| 261 | 261 |
| 262 bool get isRedirectingGenerative => unsupported(); | 262 bool get isRedirectingGenerative => unsupported(); |
| 263 bool get isRedirectingFactory => unsupported(); | 263 bool get isRedirectingFactory => unsupported(); |
| 264 | 264 |
| (...skipping 109 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 374 set _isEffectiveTargetMalformed(_) { | 374 set _isEffectiveTargetMalformed(_) { |
| 375 throw new UnsupportedError("_isEffectiveTargetMalformed="); | 375 throw new UnsupportedError("_isEffectiveTargetMalformed="); |
| 376 } | 376 } |
| 377 | 377 |
| 378 @override | 378 @override |
| 379 get isEffectiveTargetMalformed { | 379 get isEffectiveTargetMalformed { |
| 380 throw new UnsupportedError("isEffectiveTargetMalformed"); | 380 throw new UnsupportedError("isEffectiveTargetMalformed"); |
| 381 } | 381 } |
| 382 | 382 |
| 383 @override | 383 @override |
| 384 void setEffectiveTarget( | 384 void setEffectiveTarget(ConstructorElement target, ResolutionDartType type, |
| 385 ConstructorElement target, ResolutionInterfaceType type, | |
| 386 {bool isMalformed: false}) { | 385 {bool isMalformed: false}) { |
| 387 throw new UnsupportedError("setEffectiveTarget"); | 386 throw new UnsupportedError("setEffectiveTarget"); |
| 388 } | 387 } |
| 389 | 388 |
| 390 @override | 389 @override |
| 391 void _computeSignature(Resolution resolution) { | 390 void _computeSignature(Resolution resolution) { |
| 392 throw new UnsupportedError("_computeSignature"); | 391 throw new UnsupportedError("_computeSignature"); |
| 393 } | 392 } |
| 394 | 393 |
| 395 @override | 394 @override |
| (...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 454 | 453 |
| 455 @override | 454 @override |
| 456 get _redirectionDeferredPrefix { | 455 get _redirectionDeferredPrefix { |
| 457 throw new UnsupportedError("_redirectionDeferredPrefix"); | 456 throw new UnsupportedError("_redirectionDeferredPrefix"); |
| 458 } | 457 } |
| 459 | 458 |
| 460 @override | 459 @override |
| 461 set _redirectionDeferredPrefix(_) { | 460 set _redirectionDeferredPrefix(_) { |
| 462 throw new UnsupportedError("_redirectionDeferredPrefix="); | 461 throw new UnsupportedError("_redirectionDeferredPrefix="); |
| 463 } | 462 } |
| 463 |
| 464 // TODO(johnniwinther): Remove this. |
| 465 ConstructorElementX get declaration => super.declaration; |
| 466 |
| 467 // TODO(johnniwinther): Remove this. |
| 468 ConstructorElementX get implementation => super.implementation; |
| 469 |
| 470 // TODO(johnniwinther): Remove this. |
| 471 ConstructorElementX get origin => super.origin; |
| 472 |
| 473 // TODO(johnniwinther): Remove this. |
| 474 ConstructorElementX get patch => super.patch; |
| 475 |
| 476 ResolutionFunctionType computeType(Resolution resolution) => |
| 477 super.computeType(resolution); |
| 464 } | 478 } |
| 465 | 479 |
| 466 /// A message attached to a [WarnOnUseElementX]. | 480 /// A message attached to a [WarnOnUseElementX]. |
| 467 class WrappedMessage { | 481 class WrappedMessage { |
| 468 /// The message position. If [:null:] the position of the reference to the | 482 /// The message position. If [:null:] the position of the reference to the |
| 469 /// [WarnOnUseElementX] is used. | 483 /// [WarnOnUseElementX] is used. |
| 470 final SourceSpan sourceSpan; | 484 final SourceSpan sourceSpan; |
| 471 | 485 |
| 472 /** | 486 /** |
| 473 * The message to report on resolving a wrapped element. | 487 * The message to report on resolving a wrapped element. |
| (...skipping 333 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 807 {'libraryName': actualName}), | 821 {'libraryName': actualName}), |
| 808 <DiagnosticMessage>[ | 822 <DiagnosticMessage>[ |
| 809 reporter.createMessage( | 823 reporter.createMessage( |
| 810 tag.name, MessageKind.THIS_IS_THE_PART_OF_TAG), | 824 tag.name, MessageKind.THIS_IS_THE_PART_OF_TAG), |
| 811 ]); | 825 ]); |
| 812 } | 826 } |
| 813 } | 827 } |
| 814 | 828 |
| 815 bool get hasMembers => !localMembers.isEmpty; | 829 bool get hasMembers => !localMembers.isEmpty; |
| 816 | 830 |
| 817 Element get analyzableElement => library; | 831 AnalyzableElement get analyzableElement => library; |
| 818 | 832 |
| 819 accept(ElementVisitor visitor, arg) { | 833 accept(ElementVisitor visitor, arg) { |
| 820 return visitor.visitCompilationUnitElement(this, arg); | 834 return visitor.visitCompilationUnitElement(this, arg); |
| 821 } | 835 } |
| 822 } | 836 } |
| 823 | 837 |
| 824 /// Map from [Element] to the [ImportElement]s throught which it was imported. | 838 /// Map from [Element] to the [ImportElement]s throught which it was imported. |
| 825 /// | 839 /// |
| 826 /// This is used for error reporting and deferred loading. | 840 /// This is used for error reporting and deferred loading. |
| 827 class Importers { | 841 class Importers { |
| (...skipping 241 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1069 return const <MetadataAnnotation>[]; | 1083 return const <MetadataAnnotation>[]; |
| 1070 } | 1084 } |
| 1071 | 1085 |
| 1072 void set metadata(value) { | 1086 void set metadata(value) { |
| 1073 // The metadata is stored on [libraryTag]. | 1087 // The metadata is stored on [libraryTag]. |
| 1074 throw new SpannableAssertionFailure(this, 'Cannot set metadata on Library'); | 1088 throw new SpannableAssertionFailure(this, 'Cannot set metadata on Library'); |
| 1075 } | 1089 } |
| 1076 | 1090 |
| 1077 CompilationUnitElement get compilationUnit => entryCompilationUnit; | 1091 CompilationUnitElement get compilationUnit => entryCompilationUnit; |
| 1078 | 1092 |
| 1079 Element get analyzableElement => this; | 1093 AnalyzableElement get analyzableElement => this; |
| 1080 | 1094 |
| 1081 void addCompilationUnit(CompilationUnitElement element) { | 1095 void addCompilationUnit(CompilationUnitElement element) { |
| 1082 compilationUnits = compilationUnits.prepend(element); | 1096 compilationUnits = compilationUnits.prepend(element); |
| 1083 } | 1097 } |
| 1084 | 1098 |
| 1085 void addTag(LibraryTag tag, DiagnosticReporter reporter) { | 1099 void addTag(LibraryTag tag, DiagnosticReporter reporter) { |
| 1086 if (tagsCache != null) { | 1100 if (tagsCache != null) { |
| 1087 reporter.internalError( | 1101 reporter.internalError( |
| 1088 tag, "Library tags for $this have already been computed."); | 1102 tag, "Library tags for $this have already been computed."); |
| 1089 } | 1103 } |
| (...skipping 167 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1257 return 'origin library(${canonicalUri})'; | 1271 return 'origin library(${canonicalUri})'; |
| 1258 } else { | 1272 } else { |
| 1259 return 'library(${canonicalUri})'; | 1273 return 'library(${canonicalUri})'; |
| 1260 } | 1274 } |
| 1261 } | 1275 } |
| 1262 | 1276 |
| 1263 accept(ElementVisitor visitor, arg) { | 1277 accept(ElementVisitor visitor, arg) { |
| 1264 return visitor.visitLibraryElement(this, arg); | 1278 return visitor.visitLibraryElement(this, arg); |
| 1265 } | 1279 } |
| 1266 | 1280 |
| 1267 // TODO(johnniwinther): Remove these when issue 18630 is fixed. | 1281 // TODO(johnniwinther): Remove this. |
| 1282 LibraryElementX get declaration => super.declaration; |
| 1283 |
| 1284 // TODO(johnniwinther): Remove this. |
| 1285 LibraryElementX get implementation => super.implementation; |
| 1286 |
| 1287 // TODO(johnniwinther): Remove this. |
| 1288 LibraryElementX get origin => super.origin; |
| 1289 |
| 1290 // TODO(johnniwinther): Remove this. |
| 1268 LibraryElementX get patch => super.patch; | 1291 LibraryElementX get patch => super.patch; |
| 1269 LibraryElementX get origin => super.origin; | |
| 1270 } | 1292 } |
| 1271 | 1293 |
| 1272 class PrefixElementX extends ElementX implements PrefixElement { | 1294 class PrefixElementX extends ElementX implements PrefixElement { |
| 1273 Token firstPosition; | 1295 Token firstPosition; |
| 1274 | 1296 |
| 1275 final ImportScope importScope = new ImportScope(); | 1297 final ImportScope importScope = new ImportScope(); |
| 1276 | 1298 |
| 1277 bool get isDeferred => deferredImport != null; | 1299 bool get isDeferred => deferredImport != null; |
| 1278 | 1300 |
| 1279 // Only needed for deferred imports. | 1301 // Only needed for deferred imports. |
| (...skipping 25 matching lines...) Expand all Loading... |
| 1305 | 1327 |
| 1306 @override | 1328 @override |
| 1307 GetterElement get loadLibrary { | 1329 GetterElement get loadLibrary { |
| 1308 return isDeferred ? lookupLocalMember(Identifiers.loadLibrary) : null; | 1330 return isDeferred ? lookupLocalMember(Identifiers.loadLibrary) : null; |
| 1309 } | 1331 } |
| 1310 | 1332 |
| 1311 String toString() => '$kind($name)'; | 1333 String toString() => '$kind($name)'; |
| 1312 } | 1334 } |
| 1313 | 1335 |
| 1314 class TypedefElementX extends ElementX | 1336 class TypedefElementX extends ElementX |
| 1315 with | 1337 with AstElementMixin, AnalyzableElementX, TypeDeclarationElementX |
| 1316 AstElementMixin, | |
| 1317 AnalyzableElementX, | |
| 1318 TypeDeclarationElementX<ResolutionTypedefType> | |
| 1319 implements TypedefElement { | 1338 implements TypedefElement { |
| 1320 Typedef cachedNode; | 1339 Typedef cachedNode; |
| 1321 | 1340 |
| 1322 /** | 1341 /** |
| 1323 * The type annotation which defines this typedef. | 1342 * The type annotation which defines this typedef. |
| 1324 */ | 1343 */ |
| 1325 ResolutionDartType aliasCache; | 1344 ResolutionDartType aliasCache; |
| 1326 | 1345 |
| 1327 ResolutionDartType get alias { | 1346 ResolutionDartType get alias { |
| 1328 assert(hasBeenCheckedForCycles, | 1347 assert(hasBeenCheckedForCycles, |
| (...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1385 computeType(resolution).accept(visitor, null); | 1404 computeType(resolution).accept(visitor, null); |
| 1386 hasBeenCheckedForCycles = true; | 1405 hasBeenCheckedForCycles = true; |
| 1387 } | 1406 } |
| 1388 | 1407 |
| 1389 accept(ElementVisitor visitor, arg) { | 1408 accept(ElementVisitor visitor, arg) { |
| 1390 return visitor.visitTypedefElement(this, arg); | 1409 return visitor.visitTypedefElement(this, arg); |
| 1391 } | 1410 } |
| 1392 | 1411 |
| 1393 // A typedef cannot be patched therefore defines itself. | 1412 // A typedef cannot be patched therefore defines itself. |
| 1394 AstElement get definingElement => this; | 1413 AstElement get definingElement => this; |
| 1414 |
| 1415 ResolutionTypedefType get thisType => super.thisType; |
| 1416 |
| 1417 ResolutionTypedefType get rawType => super.rawType; |
| 1395 } | 1418 } |
| 1396 | 1419 |
| 1397 // This class holds common information for a list of variable or field | 1420 // This class holds common information for a list of variable or field |
| 1398 // declarations. It contains the node, and the type. A [VariableElementX] | 1421 // declarations. It contains the node, and the type. A [VariableElementX] |
| 1399 // forwards its [computeType] and [parseNode] methods to this class. | 1422 // forwards its [computeType] and [parseNode] methods to this class. |
| 1400 class VariableList implements DeclarationSite { | 1423 class VariableList implements DeclarationSite { |
| 1401 VariableDefinitions definitions; | 1424 VariableDefinitions definitions; |
| 1402 ResolutionDartType type; | 1425 ResolutionDartType type; |
| 1403 final Modifiers modifiers; | 1426 final Modifiers modifiers; |
| 1404 List<MetadataAnnotation> metadataInternal; | 1427 List<MetadataAnnotation> metadataInternal; |
| (...skipping 495 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1900 return visitor.visitFieldParameterElement(this, arg); | 1923 return visitor.visitFieldParameterElement(this, arg); |
| 1901 } | 1924 } |
| 1902 | 1925 |
| 1903 MemberElement get memberContext => enclosingElement; | 1926 MemberElement get memberContext => enclosingElement; |
| 1904 | 1927 |
| 1905 @override | 1928 @override |
| 1906 bool get isFinal => true; | 1929 bool get isFinal => true; |
| 1907 | 1930 |
| 1908 @override | 1931 @override |
| 1909 bool get isLocal => true; | 1932 bool get isLocal => true; |
| 1933 |
| 1934 ConstructorElement get functionDeclaration => super.functionDeclaration; |
| 1910 } | 1935 } |
| 1911 | 1936 |
| 1912 class ErroneousInitializingFormalElementX extends ParameterElementX | 1937 class ErroneousInitializingFormalElementX extends ParameterElementX |
| 1913 implements InitializingFormalElementX { | 1938 implements InitializingFormalElementX { |
| 1914 final ErroneousFieldElementX fieldElement; | 1939 final ErroneousFieldElementX fieldElement; |
| 1915 | 1940 |
| 1916 ErroneousInitializingFormalElementX( | 1941 ErroneousInitializingFormalElementX( |
| 1917 Identifier identifier, Element enclosingElement) | 1942 Identifier identifier, Element enclosingElement) |
| 1918 : this.fieldElement = | 1943 : this.fieldElement = |
| 1919 new ErroneousFieldElementX(identifier, enclosingElement), | 1944 new ErroneousFieldElementX(identifier, enclosingElement), |
| 1920 super(ElementKind.INITIALIZING_FORMAL, enclosingElement, null, | 1945 super(ElementKind.INITIALIZING_FORMAL, enclosingElement, null, |
| 1921 identifier, null); | 1946 identifier, null); |
| 1922 | 1947 |
| 1923 VariableDefinitions get definitions => fieldElement.node; | 1948 VariableDefinitions get definitions => fieldElement.node; |
| 1924 | 1949 |
| 1925 MemberElement get memberContext => enclosingElement; | 1950 MemberElement get memberContext => enclosingElement; |
| 1926 | 1951 |
| 1927 bool get isLocal => false; | 1952 bool get isLocal => false; |
| 1928 | 1953 |
| 1929 bool get isMalformed => true; | 1954 bool get isMalformed => true; |
| 1930 | 1955 |
| 1931 ResolutionDynamicType get type => const ResolutionDynamicType(); | 1956 ResolutionDynamicType get type => const ResolutionDynamicType(); |
| 1957 |
| 1958 ConstructorElement get functionDeclaration => super.functionDeclaration; |
| 1932 } | 1959 } |
| 1933 | 1960 |
| 1934 class AbstractFieldElementX extends ElementX | 1961 class AbstractFieldElementX extends ElementX |
| 1935 with AbstractFieldElementCommon | 1962 with AbstractFieldElementCommon |
| 1936 implements AbstractFieldElement { | 1963 implements AbstractFieldElement { |
| 1937 GetterElementX getter; | 1964 GetterElementX getter; |
| 1938 SetterElementX setter; | 1965 SetterElementX setter; |
| 1939 | 1966 |
| 1940 AbstractFieldElementX(String name, Element enclosing) | 1967 AbstractFieldElementX(String name, Element enclosing) |
| 1941 : super(name, ElementKind.ABSTRACT_FIELD, enclosing); | 1968 : super(name, ElementKind.ABSTRACT_FIELD, enclosing); |
| (...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1976 } | 2003 } |
| 1977 } | 2004 } |
| 1978 | 2005 |
| 1979 accept(ElementVisitor visitor, arg) { | 2006 accept(ElementVisitor visitor, arg) { |
| 1980 return visitor.visitAbstractFieldElement(this, arg); | 2007 return visitor.visitAbstractFieldElement(this, arg); |
| 1981 } | 2008 } |
| 1982 } | 2009 } |
| 1983 | 2010 |
| 1984 // TODO(johnniwinther): [FunctionSignature] should be merged with | 2011 // TODO(johnniwinther): [FunctionSignature] should be merged with |
| 1985 // [FunctionType]. | 2012 // [FunctionType]. |
| 1986 // TODO(karlklose): all these lists should have element type [FormalElement]. | |
| 1987 class FunctionSignatureX extends FunctionSignatureCommon | 2013 class FunctionSignatureX extends FunctionSignatureCommon |
| 1988 implements FunctionSignature { | 2014 implements FunctionSignature { |
| 1989 final List<ResolutionDartType> typeVariables; | 2015 final List<ResolutionDartType> typeVariables; |
| 1990 final List<Element> requiredParameters; | 2016 final List<FormalElement> requiredParameters; |
| 1991 final List<Element> optionalParameters; | 2017 final List<FormalElement> optionalParameters; |
| 1992 final int requiredParameterCount; | 2018 final int requiredParameterCount; |
| 1993 final int optionalParameterCount; | 2019 final int optionalParameterCount; |
| 1994 final bool optionalParametersAreNamed; | 2020 final bool optionalParametersAreNamed; |
| 1995 final List<Element> orderedOptionalParameters; | 2021 final List<FormalElement> orderedOptionalParameters; |
| 1996 final ResolutionFunctionType type; | 2022 final ResolutionFunctionType type; |
| 1997 final bool hasOptionalParameters; | 2023 final bool hasOptionalParameters; |
| 1998 | 2024 |
| 1999 FunctionSignatureX( | 2025 FunctionSignatureX( |
| 2000 {this.typeVariables: const <ResolutionDartType>[], | 2026 {this.typeVariables: const <ResolutionDartType>[], |
| 2001 this.requiredParameters: const <Element>[], | 2027 this.requiredParameters: const <FormalElement>[], |
| 2002 this.requiredParameterCount: 0, | 2028 this.requiredParameterCount: 0, |
| 2003 List<Element> optionalParameters: const <Element>[], | 2029 List<Element> optionalParameters: const <FormalElement>[], |
| 2004 this.optionalParameterCount: 0, | 2030 this.optionalParameterCount: 0, |
| 2005 this.optionalParametersAreNamed: false, | 2031 this.optionalParametersAreNamed: false, |
| 2006 this.orderedOptionalParameters: const <Element>[], | 2032 this.orderedOptionalParameters: const <FormalElement>[], |
| 2007 this.type}) | 2033 this.type}) |
| 2008 : optionalParameters = optionalParameters, | 2034 : optionalParameters = optionalParameters, |
| 2009 hasOptionalParameters = !optionalParameters.isEmpty; | 2035 hasOptionalParameters = !optionalParameters.isEmpty; |
| 2010 } | 2036 } |
| 2011 | 2037 |
| 2012 abstract class BaseFunctionElementX extends ElementX | 2038 abstract class BaseFunctionElementX extends ElementX |
| 2013 with PatchMixin<FunctionElement>, AstElementMixin | 2039 with PatchMixin<FunctionElement>, AstElementMixin |
| 2014 implements FunctionElement { | 2040 implements FunctionElement { |
| 2015 ResolutionDartType typeCache; | 2041 ResolutionDartType typeCache; |
| 2016 final Modifiers modifiers; | 2042 final Modifiers modifiers; |
| (...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2097 } | 2123 } |
| 2098 } | 2124 } |
| 2099 | 2125 |
| 2100 bool get isAbstract => false; | 2126 bool get isAbstract => false; |
| 2101 | 2127 |
| 2102 // A function is defined by the implementation element. | 2128 // A function is defined by the implementation element. |
| 2103 AstElement get definingElement => implementation; | 2129 AstElement get definingElement => implementation; |
| 2104 | 2130 |
| 2105 @override | 2131 @override |
| 2106 List<ResolutionDartType> get typeVariables => functionSignature.typeVariables; | 2132 List<ResolutionDartType> get typeVariables => functionSignature.typeVariables; |
| 2133 |
| 2134 // TODO(johnniwinther): Remove this. |
| 2135 FunctionElement get declaration => super.declaration; |
| 2136 |
| 2137 // TODO(johnniwinther): Remove this. |
| 2138 FunctionElement get implementation => super.implementation; |
| 2139 |
| 2140 // TODO(johnniwinther): Remove this. |
| 2141 FunctionElement get origin => super.origin; |
| 2142 |
| 2143 // TODO(johnniwinther): Remove this. |
| 2144 FunctionElement get patch => super.patch; |
| 2107 } | 2145 } |
| 2108 | 2146 |
| 2109 abstract class FunctionElementX extends BaseFunctionElementX | 2147 abstract class FunctionElementX extends BaseFunctionElementX |
| 2110 with AnalyzableElementX | 2148 with AnalyzableElementX |
| 2111 implements MethodElement { | 2149 implements MethodElement { |
| 2112 FunctionElementX( | 2150 FunctionElementX( |
| 2113 String name, ElementKind kind, Modifiers modifiers, Element enclosing) | 2151 String name, ElementKind kind, Modifiers modifiers, Element enclosing) |
| 2114 : super(name, kind, modifiers, enclosing); | 2152 : super(name, kind, modifiers, enclosing); |
| 2115 | 2153 |
| 2116 MemberElement get memberContext => this; | 2154 MemberElement get memberContext => this; |
| (...skipping 155 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2272 implements ConstructorElement { | 2310 implements ConstructorElement { |
| 2273 bool isRedirectingGenerativeInternal = false; | 2311 bool isRedirectingGenerativeInternal = false; |
| 2274 | 2312 |
| 2275 ConstructorElementX( | 2313 ConstructorElementX( |
| 2276 String name, ElementKind kind, Modifiers modifiers, Element enclosing) | 2314 String name, ElementKind kind, Modifiers modifiers, Element enclosing) |
| 2277 : super(name, kind, modifiers, enclosing); | 2315 : super(name, kind, modifiers, enclosing); |
| 2278 | 2316 |
| 2279 ConstructorElement _immediateRedirectionTarget; | 2317 ConstructorElement _immediateRedirectionTarget; |
| 2280 PrefixElement _redirectionDeferredPrefix; | 2318 PrefixElement _redirectionDeferredPrefix; |
| 2281 | 2319 |
| 2282 ConstructorElementX get patch => super.patch; | |
| 2283 | |
| 2284 bool get isRedirectingGenerative { | 2320 bool get isRedirectingGenerative { |
| 2285 if (isPatched) return patch.isRedirectingGenerative; | 2321 if (isPatched) return patch.isRedirectingGenerative; |
| 2286 return isRedirectingGenerativeInternal; | 2322 return isRedirectingGenerativeInternal; |
| 2287 } | 2323 } |
| 2288 | 2324 |
| 2289 bool get isRedirectingFactory => immediateRedirectionTarget != null; | 2325 bool get isRedirectingFactory => immediateRedirectionTarget != null; |
| 2290 | 2326 |
| 2291 // TODO(johnniwinther): This should also return true for cyclic redirecting | 2327 // TODO(johnniwinther): This should also return true for cyclic redirecting |
| 2292 // generative constructors. | 2328 // generative constructors. |
| 2293 bool get isCyclicRedirection => effectiveTarget.isRedirectingFactory; | 2329 bool get isCyclicRedirection => effectiveTarget.isRedirectingFactory; |
| (...skipping 110 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2404 return _isEffectiveTargetMalformed == true; | 2440 return _isEffectiveTargetMalformed == true; |
| 2405 } | 2441 } |
| 2406 | 2442 |
| 2407 accept(ElementVisitor visitor, arg) { | 2443 accept(ElementVisitor visitor, arg) { |
| 2408 return visitor.visitConstructorElement(this, arg); | 2444 return visitor.visitConstructorElement(this, arg); |
| 2409 } | 2445 } |
| 2410 | 2446 |
| 2411 ConstructorElement get definingConstructor => null; | 2447 ConstructorElement get definingConstructor => null; |
| 2412 | 2448 |
| 2413 ClassElement get enclosingClass => enclosingElement.declaration; | 2449 ClassElement get enclosingClass => enclosingElement.declaration; |
| 2450 |
| 2451 // TODO(johnniwinther): Remove this. |
| 2452 ConstructorElementX get declaration => super.declaration; |
| 2453 |
| 2454 // TODO(johnniwinther): Remove this. |
| 2455 ConstructorElementX get implementation => super.implementation; |
| 2456 |
| 2457 // TODO(johnniwinther): Remove this. |
| 2458 ConstructorElementX get origin => super.origin; |
| 2459 |
| 2460 // TODO(johnniwinther): Remove this. |
| 2461 ConstructorElementX get patch => super.patch; |
| 2414 } | 2462 } |
| 2415 | 2463 |
| 2416 class DeferredLoaderGetterElementX extends GetterElementX | 2464 class DeferredLoaderGetterElementX extends GetterElementX { |
| 2417 implements GetterElement { | |
| 2418 final PrefixElement prefix; | 2465 final PrefixElement prefix; |
| 2419 | 2466 |
| 2420 DeferredLoaderGetterElementX(PrefixElement prefix) | 2467 DeferredLoaderGetterElementX(PrefixElement prefix) |
| 2421 : this.prefix = prefix, | 2468 : this.prefix = prefix, |
| 2422 super(Identifiers.loadLibrary, Modifiers.EMPTY, prefix, false) { | 2469 super(Identifiers.loadLibrary, Modifiers.EMPTY, prefix, false) { |
| 2423 functionSignature = | 2470 functionSignature = |
| 2424 new FunctionSignatureX(type: new ResolutionFunctionType(this)); | 2471 new FunctionSignatureX(type: new ResolutionFunctionType(this)); |
| 2425 } | 2472 } |
| 2426 | 2473 |
| 2427 bool get isClassMember => false; | 2474 bool get isClassMember => false; |
| (...skipping 105 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2533 reporter.internalError(this, '$this.computeType.'); | 2580 reporter.internalError(this, '$this.computeType.'); |
| 2534 return null; | 2581 return null; |
| 2535 } | 2582 } |
| 2536 | 2583 |
| 2537 int get sourceOffset => constructor.sourceOffset; | 2584 int get sourceOffset => constructor.sourceOffset; |
| 2538 | 2585 |
| 2539 Token get position => constructor.position; | 2586 Token get position => constructor.position; |
| 2540 | 2587 |
| 2541 Element get outermostEnclosingMemberOrTopLevel => constructor; | 2588 Element get outermostEnclosingMemberOrTopLevel => constructor; |
| 2542 | 2589 |
| 2543 Element get analyzableElement => constructor.analyzableElement; | 2590 AnalyzableElement get analyzableElement => constructor.analyzableElement; |
| 2544 | 2591 |
| 2545 accept(ElementVisitor visitor, arg) { | 2592 accept(ElementVisitor visitor, arg) { |
| 2546 return visitor.visitConstructorBodyElement(this, arg); | 2593 return visitor.visitConstructorBodyElement(this, arg); |
| 2547 } | 2594 } |
| 2548 | 2595 |
| 2549 MemberElement get memberContext => constructor; | 2596 MemberElement get memberContext => constructor; |
| 2550 } | 2597 } |
| 2551 | 2598 |
| 2552 /** | 2599 /** |
| 2553 * A constructor that is not defined in the source code but rather implied by | 2600 * A constructor that is not defined in the source code but rather implied by |
| (...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2589 FunctionExpression get node => null; | 2636 FunctionExpression get node => null; |
| 2590 | 2637 |
| 2591 Token get position => enclosingElement.position; | 2638 Token get position => enclosingElement.position; |
| 2592 | 2639 |
| 2593 bool get isSynthesized => true; | 2640 bool get isSynthesized => true; |
| 2594 | 2641 |
| 2595 bool get hasResolvedAst => true; | 2642 bool get hasResolvedAst => true; |
| 2596 | 2643 |
| 2597 ResolvedAst get resolvedAst => _resolvedAst; | 2644 ResolvedAst get resolvedAst => _resolvedAst; |
| 2598 | 2645 |
| 2599 ResolutionDartType get type { | 2646 ResolutionFunctionType get type { |
| 2600 if (isDefaultConstructor) { | 2647 if (isDefaultConstructor) { |
| 2601 return super.type; | 2648 return super.type; |
| 2602 } else { | 2649 } else { |
| 2603 // TODO(johnniwinther): Ensure that the function type substitutes type | 2650 // TODO(johnniwinther): Ensure that the function type substitutes type |
| 2604 // variables correctly. | 2651 // variables correctly. |
| 2605 return definingConstructor.type; | 2652 return definingConstructor.type; |
| 2606 } | 2653 } |
| 2607 } | 2654 } |
| 2608 | 2655 |
| 2609 void _computeSignature(Resolution resolution) { | 2656 void _computeSignature(Resolution resolution) { |
| 2610 if (hasFunctionSignature) return; | 2657 if (hasFunctionSignature) return; |
| 2611 if (definingConstructor.isMalformed) { | 2658 if (definingConstructor.isMalformed) { |
| 2612 functionSignature = new FunctionSignatureX( | 2659 functionSignature = new FunctionSignatureX( |
| 2613 type: | 2660 type: |
| 2614 new ResolutionFunctionType.synthesized(enclosingClass.thisType)); | 2661 new ResolutionFunctionType.synthesized(enclosingClass.thisType)); |
| 2615 } | 2662 } |
| 2616 // TODO(johnniwinther): Ensure that the function signature (and with it the | 2663 // TODO(johnniwinther): Ensure that the function signature (and with it the |
| 2617 // function type) substitutes type variables correctly. | 2664 // function type) substitutes type variables correctly. |
| 2618 definingConstructor.computeType(resolution); | 2665 definingConstructor.computeType(resolution); |
| 2619 functionSignature = definingConstructor.functionSignature; | 2666 functionSignature = definingConstructor.functionSignature; |
| 2620 } | 2667 } |
| 2621 | 2668 |
| 2622 accept(ElementVisitor visitor, arg) { | 2669 accept(ElementVisitor visitor, arg) { |
| 2623 return visitor.visitConstructorElement(this, arg); | 2670 return visitor.visitConstructorElement(this, arg); |
| 2624 } | 2671 } |
| 2625 } | 2672 } |
| 2626 | 2673 |
| 2627 abstract class TypeDeclarationElementX<T extends GenericType> | 2674 abstract class TypeDeclarationElementX implements TypeDeclarationElement { |
| 2628 implements TypeDeclarationElement { | |
| 2629 /** | 2675 /** |
| 2630 * The `this type` for this type declaration. | 2676 * The `this type` for this type declaration. |
| 2631 * | 2677 * |
| 2632 * The type of [:this:] is the generic type based on this element in which | 2678 * The type of [:this:] is the generic type based on this element in which |
| 2633 * the type arguments are the declared type variables. For instance, | 2679 * the type arguments are the declared type variables. For instance, |
| 2634 * [:List<E>:] for [:List:] and [:Map<K,V>:] for [:Map:]. | 2680 * [:List<E>:] for [:List:] and [:Map<K,V>:] for [:Map:]. |
| 2635 * | 2681 * |
| 2636 * For a class declaration this is the type of [:this:]. | 2682 * For a class declaration this is the type of [:this:]. |
| 2637 * | 2683 * |
| 2638 * This type is computed in [computeType]. | 2684 * This type is computed in [computeType]. |
| 2639 */ | 2685 */ |
| 2640 T thisTypeCache; | 2686 GenericType thisTypeCache; |
| 2641 | 2687 |
| 2642 /** | 2688 /** |
| 2643 * The raw type for this type declaration. | 2689 * The raw type for this type declaration. |
| 2644 * | 2690 * |
| 2645 * The raw type is the generic type base on this element in which the type | 2691 * The raw type is the generic type base on this element in which the type |
| 2646 * arguments are all [dynamic]. For instance [:List<dynamic>:] for [:List:] | 2692 * arguments are all [dynamic]. For instance [:List<dynamic>:] for [:List:] |
| 2647 * and [:Map<dynamic,dynamic>:] for [:Map:]. For non-generic classes [rawType] | 2693 * and [:Map<dynamic,dynamic>:] for [:Map:]. For non-generic classes [rawType] |
| 2648 * is the same as [thisType]. | 2694 * is the same as [thisType]. |
| 2649 * | 2695 * |
| 2650 * The [rawType] field is a canonicalization of the raw type and should be | 2696 * The [rawType] field is a canonicalization of the raw type and should be |
| 2651 * used to distinguish explicit and implicit uses of the [dynamic] | 2697 * used to distinguish explicit and implicit uses of the [dynamic] |
| 2652 * type arguments. For instance should [:List:] be the [rawType] of the | 2698 * type arguments. For instance should [:List:] be the [rawType] of the |
| 2653 * [:List:] class element whereas [:List<dynamic>:] should be its own | 2699 * [:List:] class element whereas [:List<dynamic>:] should be its own |
| 2654 * instantiation of [ResolutionInterfaceType] with [:dynamic:] as type | 2700 * instantiation of [ResolutionInterfaceType] with [:dynamic:] as type |
| 2655 * argument. Using this distinction, we can print the raw type with type | 2701 * argument. Using this distinction, we can print the raw type with type |
| 2656 * arguments only when the input source has used explicit type arguments. | 2702 * arguments only when the input source has used explicit type arguments. |
| 2657 * | 2703 * |
| 2658 * This type is computed together with [thisType] in [computeType]. | 2704 * This type is computed together with [thisType] in [computeType]. |
| 2659 */ | 2705 */ |
| 2660 T rawTypeCache; | 2706 GenericType rawTypeCache; |
| 2661 | 2707 |
| 2662 T get thisType { | 2708 GenericType get thisType { |
| 2663 assert(thisTypeCache != null, | 2709 assert(thisTypeCache != null, |
| 2664 failedAt(this, 'This type has not been computed for $this')); | 2710 failedAt(this, 'This type has not been computed for $this')); |
| 2665 return thisTypeCache; | 2711 return thisTypeCache; |
| 2666 } | 2712 } |
| 2667 | 2713 |
| 2668 T get rawType { | 2714 GenericType get rawType { |
| 2669 assert(rawTypeCache != null, | 2715 assert(rawTypeCache != null, |
| 2670 failedAt(this, 'Raw type has not been computed for $this')); | 2716 failedAt(this, 'Raw type has not been computed for $this')); |
| 2671 return rawTypeCache; | 2717 return rawTypeCache; |
| 2672 } | 2718 } |
| 2673 | 2719 |
| 2674 T createType(List<ResolutionDartType> typeArguments); | 2720 GenericType createType(List<ResolutionDartType> typeArguments); |
| 2675 | 2721 |
| 2676 void setThisAndRawTypes(List<ResolutionDartType> typeParameters) { | 2722 void setThisAndRawTypes(List<ResolutionDartType> typeParameters) { |
| 2677 assert(thisTypeCache == null, | 2723 assert(thisTypeCache == null, |
| 2678 failedAt(this, "This type has already been set on $this.")); | 2724 failedAt(this, "This type has already been set on $this.")); |
| 2679 assert(rawTypeCache == null, | 2725 assert(rawTypeCache == null, |
| 2680 failedAt(this, "Raw type has already been set on $this.")); | 2726 failedAt(this, "Raw type has already been set on $this.")); |
| 2681 thisTypeCache = createType(typeParameters); | 2727 thisTypeCache = createType(typeParameters); |
| 2682 if (typeParameters.isEmpty) { | 2728 if (typeParameters.isEmpty) { |
| 2683 rawTypeCache = thisTypeCache; | 2729 rawTypeCache = thisTypeCache; |
| 2684 } else { | 2730 } else { |
| (...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2718 bool get isResolved => resolutionState == STATE_DONE; | 2764 bool get isResolved => resolutionState == STATE_DONE; |
| 2719 | 2765 |
| 2720 int get resolutionState; | 2766 int get resolutionState; |
| 2721 } | 2767 } |
| 2722 | 2768 |
| 2723 abstract class BaseClassElementX extends ElementX | 2769 abstract class BaseClassElementX extends ElementX |
| 2724 with | 2770 with |
| 2725 AstElementMixin, | 2771 AstElementMixin, |
| 2726 AnalyzableElementX, | 2772 AnalyzableElementX, |
| 2727 ClassElementCommon, | 2773 ClassElementCommon, |
| 2728 TypeDeclarationElementX<ResolutionInterfaceType>, | 2774 TypeDeclarationElementX, |
| 2729 PatchMixin<ClassElement>, | 2775 PatchMixin<ClassElement>, |
| 2730 ClassMemberMixin | 2776 ClassMemberMixin |
| 2731 implements ClassElement { | 2777 implements ClassElement { |
| 2732 final int id; | 2778 final int id; |
| 2733 | 2779 |
| 2734 ResolutionInterfaceType supertype; | 2780 ResolutionInterfaceType supertype; |
| 2735 Link<ResolutionDartType> interfaces; | 2781 Link<ResolutionDartType> interfaces; |
| 2736 int supertypeLoadState; | 2782 int supertypeLoadState; |
| 2737 int resolutionState; | 2783 int resolutionState; |
| 2738 bool isProxy = false; | 2784 bool isProxy = false; |
| (...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2816 * Returns the super class, if any. | 2862 * Returns the super class, if any. |
| 2817 * | 2863 * |
| 2818 * The returned element may not be resolved yet. | 2864 * The returned element may not be resolved yet. |
| 2819 */ | 2865 */ |
| 2820 ClassElement get superclass { | 2866 ClassElement get superclass { |
| 2821 assert(supertypeLoadState == STATE_DONE, | 2867 assert(supertypeLoadState == STATE_DONE, |
| 2822 failedAt(this, "Superclass has not been computed for $this.")); | 2868 failedAt(this, "Superclass has not been computed for $this.")); |
| 2823 return supertype == null ? null : supertype.element; | 2869 return supertype == null ? null : supertype.element; |
| 2824 } | 2870 } |
| 2825 | 2871 |
| 2826 // TODO(johnniwinther): Remove these when issue 18630 is fixed. | 2872 // A class declaration is defined by the declaration element. |
| 2827 ClassElement get patch => super.patch; | 2873 AstElement get definingElement => declaration; |
| 2874 |
| 2875 ResolutionInterfaceType get thisType => super.thisType; |
| 2876 |
| 2877 ResolutionInterfaceType get rawType => super.rawType; |
| 2878 |
| 2879 // TODO(johnniwinther): Remove this. |
| 2880 ClassElement get declaration => super.declaration; |
| 2881 |
| 2882 // TODO(johnniwinther): Remove this. |
| 2883 ClassElement get implementation => super.implementation; |
| 2884 |
| 2885 // TODO(johnniwinther): Remove this. |
| 2828 ClassElement get origin => super.origin; | 2886 ClassElement get origin => super.origin; |
| 2829 | 2887 |
| 2830 // A class declaration is defined by the declaration element. | 2888 // TODO(johnniwinther): Remove this. |
| 2831 AstElement get definingElement => declaration; | 2889 ClassElement get patch => super.patch; |
| 2832 } | 2890 } |
| 2833 | 2891 |
| 2834 abstract class ClassElementX extends BaseClassElementX { | 2892 abstract class ClassElementX extends BaseClassElementX { |
| 2835 Link<Element> localMembersReversed = const Link<Element>(); | 2893 Link<Element> localMembersReversed = const Link<Element>(); |
| 2836 final ScopeX localScope = new ScopeX(); | 2894 final ScopeX localScope = new ScopeX(); |
| 2837 | 2895 |
| 2838 Link<Element> localMembersCache; | 2896 Link<Element> localMembersCache; |
| 2839 | 2897 |
| 2840 Link<Element> get localMembers { | 2898 Link<Element> get localMembers { |
| 2841 if (localMembersCache == null) { | 2899 if (localMembersCache == null) { |
| (...skipping 86 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2928 /// static const A c = const A(1); | 2986 /// static const A c = const A(1); |
| 2929 /// | 2987 /// |
| 2930 /// static const List<A> values = const <A>[b, c]; | 2988 /// static const List<A> values = const <A>[b, c]; |
| 2931 /// } | 2989 /// } |
| 2932 /// | 2990 /// |
| 2933 /// where the `A` class is encoded using this element. | 2991 /// where the `A` class is encoded using this element. |
| 2934 /// | 2992 /// |
| 2935 class EnumClassElementX extends ClassElementX | 2993 class EnumClassElementX extends ClassElementX |
| 2936 implements EnumClassElement, DeclarationSite { | 2994 implements EnumClassElement, DeclarationSite { |
| 2937 final Enum node; | 2995 final Enum node; |
| 2938 List<FieldElement> _enumValues; | 2996 List<EnumConstantElement> _enumValues; |
| 2939 | 2997 |
| 2940 EnumClassElementX(String name, Element enclosing, int id, this.node) | 2998 EnumClassElementX(String name, Element enclosing, int id, this.node) |
| 2941 : super(name, enclosing, id, STATE_NOT_STARTED); | 2999 : super(name, enclosing, id, STATE_NOT_STARTED); |
| 2942 | 3000 |
| 2943 @override | 3001 @override |
| 2944 bool get hasNode => true; | 3002 bool get hasNode => true; |
| 2945 | 3003 |
| 2946 @override | 3004 @override |
| 2947 Token get position => node.name.token; | 3005 Token get position => node.name.token; |
| 2948 | 3006 |
| 2949 @override | 3007 @override |
| 2950 bool get isEnumClass => true; | 3008 bool get isEnumClass => true; |
| 2951 | 3009 |
| 2952 @override | 3010 @override |
| 2953 Node parseNode(ParsingContext parsing) => node; | 3011 Node parseNode(ParsingContext parsing) => node; |
| 2954 | 3012 |
| 2955 @override | 3013 @override |
| 2956 accept(ElementVisitor visitor, arg) { | 3014 accept(ElementVisitor visitor, arg) { |
| 2957 return visitor.visitEnumClassElement(this, arg); | 3015 return visitor.visitEnumClassElement(this, arg); |
| 2958 } | 3016 } |
| 2959 | 3017 |
| 2960 List<ResolutionDartType> computeTypeParameters(ParsingContext parsing) => | 3018 List<ResolutionDartType> computeTypeParameters(ParsingContext parsing) => |
| 2961 const <ResolutionDartType>[]; | 3019 const <ResolutionDartType>[]; |
| 2962 | 3020 |
| 2963 List<FieldElement> get enumValues { | 3021 List<EnumConstantElement> get enumValues { |
| 2964 assert(_enumValues != null, | 3022 assert(_enumValues != null, |
| 2965 failedAt(this, "enumValues has not been computed for $this.")); | 3023 failedAt(this, "enumValues has not been computed for $this.")); |
| 2966 return _enumValues; | 3024 return _enumValues; |
| 2967 } | 3025 } |
| 2968 | 3026 |
| 2969 void set enumValues(List<FieldElement> values) { | 3027 void set enumValues(List<EnumConstantElement> values) { |
| 2970 assert(_enumValues == null, | 3028 assert(_enumValues == null, |
| 2971 failedAt(this, "enumValues has already been computed for $this.")); | 3029 failedAt(this, "enumValues has already been computed for $this.")); |
| 2972 _enumValues = values; | 3030 _enumValues = values; |
| 2973 } | 3031 } |
| 2974 | 3032 |
| 2975 @override | 3033 @override |
| 2976 DeclarationSite get declarationSite => this; | 3034 DeclarationSite get declarationSite => this; |
| 2977 } | 3035 } |
| 2978 | 3036 |
| 2979 /// This element is used to encode the implicit constructor in an enum class. | 3037 /// This element is used to encode the implicit constructor in an enum class. |
| (...skipping 200 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3180 Node definition, | 3238 Node definition, |
| 3181 Expression initializer, | 3239 Expression initializer, |
| 3182 this.index) | 3240 this.index) |
| 3183 : super(name, enumClass, variableList, definition, initializer); | 3241 : super(name, enumClass, variableList, definition, initializer); |
| 3184 | 3242 |
| 3185 @override | 3243 @override |
| 3186 SourceSpan get sourcePosition { | 3244 SourceSpan get sourcePosition { |
| 3187 return new SourceSpan(enclosingClass.sourcePosition.uri, | 3245 return new SourceSpan(enclosingClass.sourcePosition.uri, |
| 3188 position.charOffset, position.charEnd); | 3246 position.charOffset, position.charEnd); |
| 3189 } | 3247 } |
| 3248 |
| 3249 EnumClassElement get enclosingClass => super.enclosingClass; |
| 3190 } | 3250 } |
| 3191 | 3251 |
| 3192 abstract class MixinApplicationElementX extends BaseClassElementX | 3252 abstract class MixinApplicationElementX extends BaseClassElementX |
| 3193 with MixinApplicationElementCommon | 3253 with MixinApplicationElementCommon |
| 3194 implements MixinApplicationElement { | 3254 implements MixinApplicationElement { |
| 3195 Link<ConstructorElement> constructors = new Link<ConstructorElement>(); | 3255 Link<ConstructorElement> constructors = new Link<ConstructorElement>(); |
| 3196 | 3256 |
| 3197 ResolutionInterfaceType mixinType; | 3257 ResolutionInterfaceType mixinType; |
| 3198 | 3258 |
| 3199 MixinApplicationElementX(String name, Element enclosing, int id) | 3259 MixinApplicationElementX(String name, Element enclosing, int id) |
| (...skipping 256 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3456 | 3516 |
| 3457 Token get endToken => metadata.getEndToken(); | 3517 Token get endToken => metadata.getEndToken(); |
| 3458 | 3518 |
| 3459 bool get hasNode => true; | 3519 bool get hasNode => true; |
| 3460 | 3520 |
| 3461 Metadata get node => metadata; | 3521 Metadata get node => metadata; |
| 3462 } | 3522 } |
| 3463 | 3523 |
| 3464 /// Mixin for the implementation of patched elements. | 3524 /// Mixin for the implementation of patched elements. |
| 3465 /// | 3525 /// |
| 3466 /// See [:patch_parser.dart:] for a description of the terminology. | 3526 /// See `patch_parser.dart` for a description of the terminology. |
| 3467 abstract class PatchMixin<E extends Element> implements Element { | 3527 abstract class PatchMixin<E extends Element> implements Element { |
| 3468 // TODO(johnniwinther): Use type variables when issue 18630 is fixed. | 3528 // TODO(johnniwinther): Use type variables. |
| 3469 Element /*E*/ patch = null; | 3529 Element /* E */ patch = null; |
| 3470 Element /*E*/ origin = null; | 3530 Element /* E */ origin = null; |
| 3471 | 3531 |
| 3472 bool get isPatch => origin != null; | 3532 bool get isPatch => origin != null; |
| 3473 bool get isPatched => patch != null; | 3533 bool get isPatched => patch != null; |
| 3474 | 3534 |
| 3475 bool get isImplementation => !isPatched; | 3535 bool get isImplementation => !isPatched; |
| 3476 bool get isDeclaration => !isPatch; | 3536 bool get isDeclaration => !isPatch; |
| 3477 | 3537 |
| 3478 Element /*E*/ get implementation => isPatched ? patch : this; | 3538 Element /* E */ get implementation => isPatched ? patch : this; |
| 3479 Element /*E*/ get declaration => isPatch ? origin : this; | 3539 Element /* E */ get declaration => isPatch ? origin : this; |
| 3480 | 3540 |
| 3481 /// Applies a patch to this element. This method must be called at most once. | 3541 /// Applies a patch to this element. This method must be called at most once. |
| 3482 void applyPatch(PatchMixin<E> patch) { | 3542 void applyPatch(PatchMixin<E> patch) { |
| 3483 assert(this.patch == null, failedAt(this, "Element is patched twice.")); | 3543 assert(this.patch == null, failedAt(this, "Element is patched twice.")); |
| 3484 assert(this.origin == null, failedAt(this, "Origin element is a patch.")); | 3544 assert(this.origin == null, failedAt(this, "Origin element is a patch.")); |
| 3485 assert(patch.origin == null, failedAt(patch, "Element is patched twice.")); | 3545 assert(patch.origin == null, failedAt(patch, "Element is patched twice.")); |
| 3486 assert(patch.patch == null, failedAt(patch, "Patch element is patched.")); | 3546 assert(patch.patch == null, failedAt(patch, "Patch element is patched.")); |
| 3487 this.patch = patch; | 3547 this.patch = patch; |
| 3488 patch.origin = this; | 3548 patch.origin = this; |
| 3489 } | 3549 } |
| (...skipping 25 matching lines...) Expand all Loading... |
| 3515 body = node.asFunctionExpression().body; | 3575 body = node.asFunctionExpression().body; |
| 3516 } | 3576 } |
| 3517 return new ParsedResolvedAst( | 3577 return new ParsedResolvedAst( |
| 3518 declaration, | 3578 declaration, |
| 3519 node, | 3579 node, |
| 3520 body, | 3580 body, |
| 3521 definingElement.treeElements, | 3581 definingElement.treeElements, |
| 3522 definingElement.compilationUnit.script.resourceUri); | 3582 definingElement.compilationUnit.script.resourceUri); |
| 3523 } | 3583 } |
| 3524 } | 3584 } |
| OLD | NEW |