| 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 /// Implementation of the element model used for deserialiation. | 5 /// Implementation of the element model used for deserialiation. |
| 6 /// | 6 /// |
| 7 /// These classes are created by [ElementDeserializer] triggered by the | 7 /// These classes are created by [ElementDeserializer] triggered by the |
| 8 /// [Deserializer]. | 8 /// [Deserializer]. |
| 9 | 9 |
| 10 library dart2js.serialization.modelz; | 10 library dart2js.serialization.modelz; |
| (...skipping 283 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 294 if (members == null) return; | 294 if (members == null) return; |
| 295 members.forEachKey((String key) { | 295 members.forEachKey((String key) { |
| 296 Element member = members.getElement(key); | 296 Element member = members.getElement(key); |
| 297 if (member != null) { | 297 if (member != null) { |
| 298 f(member); | 298 f(member); |
| 299 } | 299 } |
| 300 }); | 300 }); |
| 301 } | 301 } |
| 302 } | 302 } |
| 303 | 303 |
| 304 class AbstractFieldElementZ extends ElementZ implements AbstractFieldElement { | 304 class AbstractFieldElementZ extends ElementZ |
| 305 with AbstractFieldElementCommon |
| 306 implements AbstractFieldElement { |
| 305 final String name; | 307 final String name; |
| 306 final GetterElementZ getter; | 308 final GetterElementZ getter; |
| 307 final SetterElementZ setter; | 309 final SetterElementZ setter; |
| 308 | 310 |
| 309 AbstractFieldElementZ(this.name, this.getter, this.setter) { | 311 AbstractFieldElementZ(this.name, this.getter, this.setter) { |
| 310 if (getter != null) { | 312 if (getter != null) { |
| 311 getter.abstractField = this; | 313 getter.abstractField = this; |
| 312 getter.setter = setter; | 314 getter.setter = setter; |
| 313 } | 315 } |
| 314 if (setter != null) { | 316 if (setter != null) { |
| (...skipping 24 matching lines...) Expand all Loading... |
| 339 Element get enclosingElement => _canonicalElement.enclosingElement; | 341 Element get enclosingElement => _canonicalElement.enclosingElement; |
| 340 | 342 |
| 341 @override | 343 @override |
| 342 int get sourceOffset => _canonicalElement.sourceOffset; | 344 int get sourceOffset => _canonicalElement.sourceOffset; |
| 343 | 345 |
| 344 @override | 346 @override |
| 345 SourceSpan get sourcePosition => _canonicalElement.sourcePosition; | 347 SourceSpan get sourcePosition => _canonicalElement.sourcePosition; |
| 346 | 348 |
| 347 @override | 349 @override |
| 348 ClassElement get enclosingClass => _canonicalElement.enclosingClass; | 350 ClassElement get enclosingClass => _canonicalElement.enclosingClass; |
| 351 |
| 352 @override |
| 353 bool get isClassMember => _canonicalElement.isClassMember; |
| 354 |
| 355 @override |
| 356 bool get isInstanceMember => _canonicalElement.isInstanceMember; |
| 357 |
| 358 @override |
| 359 bool get isStatic => _canonicalElement.isStatic; |
| 360 |
| 361 @override |
| 362 bool get isTopLevel => _canonicalElement.isTopLevel; |
| 349 } | 363 } |
| 350 | 364 |
| 351 class LibraryElementZ extends DeserializedElementZ | 365 class LibraryElementZ extends DeserializedElementZ |
| 352 with AnalyzableElementMixin, ContainerMixin, LibraryElementCommon | 366 with AnalyzableElementMixin, ContainerMixin, LibraryElementCommon |
| 353 implements LibraryElement { | 367 implements LibraryElement { |
| 354 Uri _canonicalUri; | 368 Uri _canonicalUri; |
| 355 CompilationUnitElement _entryCompilationUnit; | 369 CompilationUnitElement _entryCompilationUnit; |
| 356 Link<CompilationUnitElement> _compilationUnits; | 370 Link<CompilationUnitElement> _compilationUnits; |
| 357 List<ImportElement> _imports; | 371 List<ImportElement> _imports; |
| 358 List<ExportElement> _exports; | 372 List<ExportElement> _exports; |
| (...skipping 202 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 561 @override | 575 @override |
| 562 CompilationUnitElement get compilationUnit => this; | 576 CompilationUnitElement get compilationUnit => this; |
| 563 | 577 |
| 564 @override | 578 @override |
| 565 Element get enclosingElement => library; | 579 Element get enclosingElement => library; |
| 566 | 580 |
| 567 @override | 581 @override |
| 568 SourceSpan get sourcePosition => new SourceSpan(script.resourceUri, 0, 0); | 582 SourceSpan get sourcePosition => new SourceSpan(script.resourceUri, 0, 0); |
| 569 | 583 |
| 570 @override | 584 @override |
| 585 bool get isTopLevel => false; |
| 586 |
| 587 @override |
| 571 accept(ElementVisitor visitor, arg) { | 588 accept(ElementVisitor visitor, arg) { |
| 572 return visitor.visitCompilationUnitElement(this, arg); | 589 return visitor.visitCompilationUnitElement(this, arg); |
| 573 } | 590 } |
| 574 | 591 |
| 575 @override | 592 @override |
| 576 void forEachLocalMember(f(Element element)) { | 593 void forEachLocalMember(f(Element element)) { |
| 577 if (_members == null) { | 594 if (_members == null) { |
| 578 _members = _decoder.getElements(Key.ELEMENTS, isOptional: true); | 595 _members = _decoder.getElements(Key.ELEMENTS, isOptional: true); |
| 579 } | 596 } |
| 580 _members.forEach(f); | 597 _members.forEach(f); |
| (...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 662 | 679 |
| 663 abstract class InstanceMemberMixin implements DeserializedElementZ { | 680 abstract class InstanceMemberMixin implements DeserializedElementZ { |
| 664 @override | 681 @override |
| 665 bool get isTopLevel => false; | 682 bool get isTopLevel => false; |
| 666 | 683 |
| 667 @override | 684 @override |
| 668 bool get isStatic => false; | 685 bool get isStatic => false; |
| 669 | 686 |
| 670 @override | 687 @override |
| 671 bool get isInstanceMember => true; | 688 bool get isInstanceMember => true; |
| 689 |
| 690 @override |
| 691 bool get isClassMember => true; |
| 672 } | 692 } |
| 673 | 693 |
| 674 abstract class StaticMemberMixin implements DeserializedElementZ { | 694 abstract class StaticMemberMixin implements DeserializedElementZ { |
| 675 @override | 695 @override |
| 676 bool get isTopLevel => false; | 696 bool get isTopLevel => false; |
| 677 | 697 |
| 678 @override | 698 @override |
| 679 bool get isStatic => true; | 699 bool get isStatic => true; |
| 700 |
| 701 @override |
| 702 bool get isClassMember => true; |
| 680 } | 703 } |
| 681 | 704 |
| 682 abstract class TypedElementMixin implements DeserializedElementZ, TypedElement { | 705 abstract class TypedElementMixin implements DeserializedElementZ, TypedElement { |
| 683 DartType _type; | 706 DartType _type; |
| 684 | 707 |
| 685 @override | 708 @override |
| 686 DartType get type { | 709 DartType get type { |
| 687 if (_type == null) { | 710 if (_type == null) { |
| 688 _type = _decoder.getType(Key.TYPE); | 711 _type = _decoder.getType(Key.TYPE); |
| 689 } | 712 } |
| (...skipping 263 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 953 ClassElementCommon, | 976 ClassElementCommon, |
| 954 ClassElementMixin, | 977 ClassElementMixin, |
| 955 class_members.ClassMemberMixin, | 978 class_members.ClassMemberMixin, |
| 956 TypeDeclarationMixin<InterfaceType>, | 979 TypeDeclarationMixin<InterfaceType>, |
| 957 AnalyzableElementMixin, | 980 AnalyzableElementMixin, |
| 958 AstElementMixinZ, | 981 AstElementMixinZ, |
| 959 MixinApplicationElementCommon, | 982 MixinApplicationElementCommon, |
| 960 MixinApplicationElementMixin { | 983 MixinApplicationElementMixin { |
| 961 final String name; | 984 final String name; |
| 962 final ClassElement _subclass; | 985 final ClassElement _subclass; |
| 963 final InterfaceType supertype; | 986 final InterfaceType _supertypeBase; |
| 964 final Link<DartType> interfaces; | 987 final InterfaceType _mixinBase; |
| 988 InterfaceType _supertype; |
| 989 Link<DartType> _interfaces; |
| 965 OrderedTypeSet _allSupertypesAndSelf; | 990 OrderedTypeSet _allSupertypesAndSelf; |
| 966 Link<ConstructorElement> _constructors; | 991 Link<ConstructorElement> _constructors; |
| 967 | 992 |
| 968 UnnamedMixinApplicationElementZ( | 993 UnnamedMixinApplicationElementZ( |
| 969 ClassElement subclass, InterfaceType supertype, InterfaceType mixin) | 994 ClassElement subclass, InterfaceType supertype, InterfaceType mixin) |
| 970 : this._subclass = subclass, | 995 : this._subclass = subclass, |
| 971 this.supertype = supertype, | 996 this._supertypeBase = supertype, |
| 972 this.interfaces = const Link<DartType>().prepend(mixin), | 997 this._mixinBase = mixin, |
| 973 this.name = "${supertype.name}+${mixin.name}"; | 998 this.name = "${supertype.name}+${mixin.name}"; |
| 974 | 999 |
| 975 @override | 1000 @override |
| 976 CompilationUnitElement get compilationUnit => _subclass.compilationUnit; | 1001 CompilationUnitElement get compilationUnit => _subclass.compilationUnit; |
| 977 | 1002 |
| 978 @override | 1003 @override |
| 979 bool get isTopLevel => true; | 1004 bool get isTopLevel => true; |
| 980 | 1005 |
| 981 @override | 1006 @override |
| 1007 bool get isAbstract => true; |
| 1008 |
| 1009 @override |
| 982 bool get isUnnamedMixinApplication => true; | 1010 bool get isUnnamedMixinApplication => true; |
| 983 | 1011 |
| 984 Link<ConstructorElement> get constructors { | 1012 Link<ConstructorElement> get constructors { |
| 985 if (_constructors == null) { | 1013 if (_constructors == null) { |
| 986 LinkBuilder<ConstructorElement> builder = | 1014 LinkBuilder<ConstructorElement> builder = |
| 987 new LinkBuilder<ConstructorElement>(); | 1015 new LinkBuilder<ConstructorElement>(); |
| 988 for (ConstructorElement definingConstructor in superclass.constructors) { | 1016 for (ConstructorElement definingConstructor in superclass.constructors) { |
| 989 if (definingConstructor.isGenerativeConstructor && | 1017 if (definingConstructor.isGenerativeConstructor && |
| 990 definingConstructor.memberName.isAccessibleFrom(library)) { | 1018 definingConstructor.memberName.isAccessibleFrom(library)) { |
| 991 ForwardingConstructorElementZ constructor = | 1019 ForwardingConstructorElementZ constructor = |
| (...skipping 25 matching lines...) Expand all Loading... |
| 1017 TypeVariableType typeVariable = typeVariables[type.element.index]; | 1045 TypeVariableType typeVariable = typeVariables[type.element.index]; |
| 1018 SyntheticTypeVariableElementZ typeVariableElement = typeVariable.element; | 1046 SyntheticTypeVariableElementZ typeVariableElement = typeVariable.element; |
| 1019 typeVariableElement._type = typeVariable; | 1047 typeVariableElement._type = typeVariable; |
| 1020 typeVariableElement._bound = | 1048 typeVariableElement._bound = |
| 1021 type.element.bound.subst(typeVariables, _subclass.typeVariables); | 1049 type.element.bound.subst(typeVariables, _subclass.typeVariables); |
| 1022 } | 1050 } |
| 1023 return typeVariables; | 1051 return typeVariables; |
| 1024 } | 1052 } |
| 1025 | 1053 |
| 1026 @override | 1054 @override |
| 1055 InterfaceType get supertype { |
| 1056 if (_supertype == null) { |
| 1057 // Substitute the type variables in [_supertypeBase] provided by |
| 1058 // [_subclass] with the type variables in this unnamed mixin application. |
| 1059 // |
| 1060 // For instance |
| 1061 // class S<S.T> {} |
| 1062 // class M<M.T> {} |
| 1063 // class C<C.T> extends S<C.T> with M<C.T> {} |
| 1064 // the unnamed mixin application should be |
| 1065 // abstract class S+M<S+M.T> extends S<S+M.T> implements M<S+M.T> {} |
| 1066 // but the supertype is provided as S<C.T> and we need to substitute S+M.T |
| 1067 // for C.T. |
| 1068 _supertype = _supertypeBase.subst(typeVariables, _subclass.typeVariables); |
| 1069 } |
| 1070 return _supertype; |
| 1071 } |
| 1072 |
| 1073 @override |
| 1074 Link<DartType> get interfaces { |
| 1075 if (_interfaces == null) { |
| 1076 // Substitute the type variables in [_mixinBase] provided by |
| 1077 // [_subclass] with the type variables in this unnamed mixin application. |
| 1078 // |
| 1079 // For instance |
| 1080 // class S<S.T> {} |
| 1081 // class M<M.T> {} |
| 1082 // class C<C.T> extends S<C.T> with M<C.T> {} |
| 1083 // the unnamed mixin application should be |
| 1084 // abstract class S+M<S+M.T> extends S<S+M.T> implements M<S+M.T> {} |
| 1085 // but the mixin is provided as M<C.T> and we need to substitute S+M.T |
| 1086 // for C.T. |
| 1087 _interfaces = const Link<DartType>() |
| 1088 .prepend(_mixinBase.subst(typeVariables, _subclass.typeVariables)); |
| 1089 } |
| 1090 return _interfaces; |
| 1091 } |
| 1092 |
| 1093 @override |
| 1027 accept(ElementVisitor visitor, arg) { | 1094 accept(ElementVisitor visitor, arg) { |
| 1028 return visitor.visitMixinApplicationElement(this, arg); | 1095 return visitor.visitMixinApplicationElement(this, arg); |
| 1029 } | 1096 } |
| 1030 | 1097 |
| 1031 @override | 1098 @override |
| 1032 OrderedTypeSet get allSupertypesAndSelf { | 1099 OrderedTypeSet get allSupertypesAndSelf { |
| 1033 if (_allSupertypesAndSelf == null) { | 1100 if (_allSupertypesAndSelf == null) { |
| 1034 _allSupertypesAndSelf = new OrderedTypeSetBuilder(this) | 1101 _allSupertypesAndSelf = new OrderedTypeSetBuilder(this) |
| 1035 .createOrderedTypeSet(supertype, interfaces); | 1102 .createOrderedTypeSet(supertype, interfaces); |
| 1036 } | 1103 } |
| (...skipping 249 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1286 return enclosingClass.thisType.substByContext(newType); | 1353 return enclosingClass.thisType.substByContext(newType); |
| 1287 } | 1354 } |
| 1288 | 1355 |
| 1289 @override | 1356 @override |
| 1290 DartType computeType(Resolution resolution) => type; | 1357 DartType computeType(Resolution resolution) => type; |
| 1291 | 1358 |
| 1292 @override | 1359 @override |
| 1293 bool get isConst => false; | 1360 bool get isConst => false; |
| 1294 | 1361 |
| 1295 @override | 1362 @override |
| 1363 bool get isClassMember => true; |
| 1364 |
| 1365 @override |
| 1296 ConstantConstructor get constantConstructor => null; | 1366 ConstantConstructor get constantConstructor => null; |
| 1297 | 1367 |
| 1298 @override | 1368 @override |
| 1299 bool get hasEffectiveTarget => true; | 1369 bool get hasEffectiveTarget => true; |
| 1300 | 1370 |
| 1301 @override | 1371 @override |
| 1302 ConstructorElement get effectiveTarget => this; | 1372 ConstructorElement get effectiveTarget => this; |
| 1303 | 1373 |
| 1304 @override | 1374 @override |
| 1305 Element get enclosingElement => enclosingClass; | 1375 Element get enclosingElement => enclosingClass; |
| (...skipping 180 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1486 accept(ElementVisitor visitor, arg) { | 1556 accept(ElementVisitor visitor, arg) { |
| 1487 return visitor.visitMethodElement(this, arg); | 1557 return visitor.visitMethodElement(this, arg); |
| 1488 } | 1558 } |
| 1489 | 1559 |
| 1490 @override | 1560 @override |
| 1491 AsyncMarker get asyncMarker { | 1561 AsyncMarker get asyncMarker { |
| 1492 return _decoder.getEnum(Key.ASYNC_MARKER, AsyncMarker.values); | 1562 return _decoder.getEnum(Key.ASYNC_MARKER, AsyncMarker.values); |
| 1493 } | 1563 } |
| 1494 | 1564 |
| 1495 @override | 1565 @override |
| 1566 bool get isAbstract => _decoder.getBool(Key.IS_ABSTRACT); |
| 1567 |
| 1568 @override |
| 1496 bool get isOperator => _decoder.getBool(Key.IS_OPERATOR); | 1569 bool get isOperator => _decoder.getBool(Key.IS_OPERATOR); |
| 1497 } | 1570 } |
| 1498 | 1571 |
| 1499 class TopLevelFunctionElementZ extends FunctionElementZ | 1572 class TopLevelFunctionElementZ extends FunctionElementZ |
| 1500 with LibraryMemberMixin { | 1573 with LibraryMemberMixin { |
| 1501 TopLevelFunctionElementZ(ObjectDecoder decoder) : super(decoder); | 1574 TopLevelFunctionElementZ(ObjectDecoder decoder) : super(decoder); |
| 1502 } | 1575 } |
| 1503 | 1576 |
| 1504 class StaticFunctionElementZ extends FunctionElementZ | 1577 class StaticFunctionElementZ extends FunctionElementZ |
| 1505 with ClassMemberMixin, StaticMemberMixin { | 1578 with ClassMemberMixin, StaticMemberMixin { |
| (...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1587 | 1660 |
| 1588 @override | 1661 @override |
| 1589 ElementKind get kind => ElementKind.GETTER; | 1662 ElementKind get kind => ElementKind.GETTER; |
| 1590 | 1663 |
| 1591 @override | 1664 @override |
| 1592 accept(ElementVisitor visitor, arg) { | 1665 accept(ElementVisitor visitor, arg) { |
| 1593 return visitor.visitGetterElement(this, arg); | 1666 return visitor.visitGetterElement(this, arg); |
| 1594 } | 1667 } |
| 1595 | 1668 |
| 1596 @override | 1669 @override |
| 1670 bool get isAbstract => _decoder.getBool(Key.IS_ABSTRACT); |
| 1671 |
| 1672 @override |
| 1597 AsyncMarker get asyncMarker => AsyncMarker.SYNC; | 1673 AsyncMarker get asyncMarker => AsyncMarker.SYNC; |
| 1598 } | 1674 } |
| 1599 | 1675 |
| 1600 class TopLevelGetterElementZ extends GetterElementZ with LibraryMemberMixin { | 1676 class TopLevelGetterElementZ extends GetterElementZ with LibraryMemberMixin { |
| 1601 TopLevelGetterElementZ(ObjectDecoder decoder) : super(decoder); | 1677 TopLevelGetterElementZ(ObjectDecoder decoder) : super(decoder); |
| 1602 } | 1678 } |
| 1603 | 1679 |
| 1604 class StaticGetterElementZ extends GetterElementZ | 1680 class StaticGetterElementZ extends GetterElementZ |
| 1605 with ClassMemberMixin, StaticMemberMixin { | 1681 with ClassMemberMixin, StaticMemberMixin { |
| 1606 StaticGetterElementZ(ObjectDecoder decoder) : super(decoder); | 1682 StaticGetterElementZ(ObjectDecoder decoder) : super(decoder); |
| (...skipping 20 matching lines...) Expand all Loading... |
| 1627 | 1703 |
| 1628 @override | 1704 @override |
| 1629 ElementKind get kind => ElementKind.SETTER; | 1705 ElementKind get kind => ElementKind.SETTER; |
| 1630 | 1706 |
| 1631 @override | 1707 @override |
| 1632 accept(ElementVisitor visitor, arg) { | 1708 accept(ElementVisitor visitor, arg) { |
| 1633 return visitor.visitSetterElement(this, arg); | 1709 return visitor.visitSetterElement(this, arg); |
| 1634 } | 1710 } |
| 1635 | 1711 |
| 1636 @override | 1712 @override |
| 1713 bool get isAbstract => _decoder.getBool(Key.IS_ABSTRACT); |
| 1714 |
| 1715 @override |
| 1637 AsyncMarker get asyncMarker => AsyncMarker.SYNC; | 1716 AsyncMarker get asyncMarker => AsyncMarker.SYNC; |
| 1638 } | 1717 } |
| 1639 | 1718 |
| 1640 class TopLevelSetterElementZ extends SetterElementZ with LibraryMemberMixin { | 1719 class TopLevelSetterElementZ extends SetterElementZ with LibraryMemberMixin { |
| 1641 TopLevelSetterElementZ(ObjectDecoder decoder) : super(decoder); | 1720 TopLevelSetterElementZ(ObjectDecoder decoder) : super(decoder); |
| 1642 } | 1721 } |
| 1643 | 1722 |
| 1644 class StaticSetterElementZ extends SetterElementZ | 1723 class StaticSetterElementZ extends SetterElementZ |
| 1645 with ClassMemberMixin, StaticMemberMixin { | 1724 with ClassMemberMixin, StaticMemberMixin { |
| 1646 StaticSetterElementZ(ObjectDecoder decoder) : super(decoder); | 1725 StaticSetterElementZ(ObjectDecoder decoder) : super(decoder); |
| (...skipping 513 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2160 } | 2239 } |
| 2161 | 2240 |
| 2162 @override | 2241 @override |
| 2163 ElementKind get kind => ElementKind.PREFIX; | 2242 ElementKind get kind => ElementKind.PREFIX; |
| 2164 | 2243 |
| 2165 @override | 2244 @override |
| 2166 Element lookupLocalMember(String memberName) { | 2245 Element lookupLocalMember(String memberName) { |
| 2167 return _unsupported('lookupLocalMember'); | 2246 return _unsupported('lookupLocalMember'); |
| 2168 } | 2247 } |
| 2169 } | 2248 } |
| OLD | NEW |