| OLD | NEW |
| 1 // This code was auto-generated, is not intended to be edited, and is subject to | 1 // This code was auto-generated, is not intended to be edited, and is subject to |
| 2 // significant change. Please see the README file for more information. | 2 // significant change. Please see the README file for more information. |
| 3 library engine.element; | 3 library engine.element; |
| 4 import 'dart:collection'; | 4 import 'dart:collection'; |
| 5 import 'java_core.dart'; | 5 import 'java_core.dart'; |
| 6 import 'java_engine.dart'; | 6 import 'java_engine.dart'; |
| 7 import 'utilities_collection.dart'; | 7 import 'utilities_collection.dart'; |
| 8 import 'source.dart'; | 8 import 'source.dart'; |
| 9 import 'scanner.dart' show Keyword; | 9 import 'scanner.dart' show Keyword; |
| 10 import 'ast.dart' show Identifier, LibraryIdentifier; | 10 import 'ast.dart' show Identifier, LibraryIdentifier; |
| (...skipping 1301 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1312 | 1312 |
| 1313 /** | 1313 /** |
| 1314 * Return `true` if this accessor is abstract. Accessors are abstract if they
are not | 1314 * Return `true` if this accessor is abstract. Accessors are abstract if they
are not |
| 1315 * external and have no body. | 1315 * external and have no body. |
| 1316 * | 1316 * |
| 1317 * @return `true` if this accessor is abstract | 1317 * @return `true` if this accessor is abstract |
| 1318 */ | 1318 */ |
| 1319 bool get isAbstract; | 1319 bool get isAbstract; |
| 1320 | 1320 |
| 1321 /** | 1321 /** |
| 1322 * Return `true` if this setter for final variable, so it causes warning when
used. |
| 1323 * |
| 1324 * @return `true` if this accessor is excluded setter |
| 1325 */ |
| 1326 bool get isExcludedSetter; |
| 1327 |
| 1328 /** |
| 1322 * Return `true` if this accessor represents a getter. | 1329 * Return `true` if this accessor represents a getter. |
| 1323 * | 1330 * |
| 1324 * @return `true` if this accessor represents a getter | 1331 * @return `true` if this accessor represents a getter |
| 1325 */ | 1332 */ |
| 1326 bool get isGetter; | 1333 bool get isGetter; |
| 1327 | 1334 |
| 1328 /** | 1335 /** |
| 1329 * Return `true` if this accessor represents a setter. | 1336 * Return `true` if this accessor represents a setter. |
| 1330 * | 1337 * |
| 1331 * @return `true` if this accessor represents a setter | 1338 * @return `true` if this accessor represents a setter |
| (...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1381 } | 1388 } |
| 1382 /** | 1389 /** |
| 1383 * The interface `ShowElementCombinator` defines the behavior of combinators tha
t cause some | 1390 * The interface `ShowElementCombinator` defines the behavior of combinators tha
t cause some |
| 1384 * of the names in a namespace to be visible (and the rest hidden) when being im
ported. | 1391 * of the names in a namespace to be visible (and the rest hidden) when being im
ported. |
| 1385 * | 1392 * |
| 1386 * @coverage dart.engine.element | 1393 * @coverage dart.engine.element |
| 1387 */ | 1394 */ |
| 1388 abstract class ShowElementCombinator implements NamespaceCombinator { | 1395 abstract class ShowElementCombinator implements NamespaceCombinator { |
| 1389 | 1396 |
| 1390 /** | 1397 /** |
| 1398 * Return the offset of the character immediately following the last character
of this node. |
| 1399 * |
| 1400 * @return the offset of the character just past this node |
| 1401 */ |
| 1402 int get end; |
| 1403 |
| 1404 /** |
| 1405 * Return the offset of the 'show' keyword of this element. |
| 1406 * |
| 1407 * @return the offset of the 'show' keyword of this element |
| 1408 */ |
| 1409 int get offset; |
| 1410 |
| 1411 /** |
| 1391 * Return an array containing the names that are to be made visible in the imp
orting library if | 1412 * Return an array containing the names that are to be made visible in the imp
orting library if |
| 1392 * they are defined in the imported library. | 1413 * they are defined in the imported library. |
| 1393 * | 1414 * |
| 1394 * @return the names from the imported library that are visible in the importi
ng library | 1415 * @return the names from the imported library that are visible in the importi
ng library |
| 1395 */ | 1416 */ |
| 1396 List<String> get shownNames; | 1417 List<String> get shownNames; |
| 1397 } | 1418 } |
| 1398 /** | 1419 /** |
| 1399 * The interface `TopLevelVariableElement` defines the behavior of elements repr
esenting a | 1420 * The interface `TopLevelVariableElement` defines the behavior of elements repr
esenting a |
| 1400 * top-level variable. | 1421 * top-level variable. |
| (...skipping 3037 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4438 } | 4459 } |
| 4439 /** | 4460 /** |
| 4440 * Instances of the class `MultiplyDefinedElementImpl` represent a collection of
elements that | 4461 * Instances of the class `MultiplyDefinedElementImpl` represent a collection of
elements that |
| 4441 * have the same name within the same scope. | 4462 * have the same name within the same scope. |
| 4442 * | 4463 * |
| 4443 * @coverage dart.engine.element | 4464 * @coverage dart.engine.element |
| 4444 */ | 4465 */ |
| 4445 class MultiplyDefinedElementImpl implements MultiplyDefinedElement { | 4466 class MultiplyDefinedElementImpl implements MultiplyDefinedElement { |
| 4446 | 4467 |
| 4447 /** | 4468 /** |
| 4469 * Return an element that represents the given conflicting elements. |
| 4470 * |
| 4471 * @param context the analysis context in which the multiply defined elements
are defined |
| 4472 * @param firstElement the first element that conflicts |
| 4473 * @param secondElement the second element that conflicts |
| 4474 */ |
| 4475 static Element fromElements(AnalysisContext context, Element firstElement, Ele
ment secondElement) { |
| 4476 List<Element> conflictingElements = computeConflictingElements(firstElement,
secondElement); |
| 4477 int length = conflictingElements.length; |
| 4478 if (length == 0) { |
| 4479 return null; |
| 4480 } else if (length == 1) { |
| 4481 return conflictingElements[0]; |
| 4482 } |
| 4483 return new MultiplyDefinedElementImpl(context, conflictingElements); |
| 4484 } |
| 4485 |
| 4486 /** |
| 4487 * Add the given element to the list of elements. If the element is a multiply
-defined element, |
| 4488 * add all of the conflicting elements that it represents. |
| 4489 * |
| 4490 * @param elements the list to which the element(s) are to be added |
| 4491 * @param element the element(s) to be added |
| 4492 */ |
| 4493 static void add(Set<Element> elements, Element element) { |
| 4494 if (element is MultiplyDefinedElementImpl) { |
| 4495 for (Element conflictingElement in ((element as MultiplyDefinedElementImpl
))._conflictingElements) { |
| 4496 javaSetAdd(elements, conflictingElement); |
| 4497 } |
| 4498 } else { |
| 4499 javaSetAdd(elements, element); |
| 4500 } |
| 4501 } |
| 4502 |
| 4503 /** |
| 4504 * Use the given elements to construct an array of conflicting elements. If ei
ther of the given |
| 4505 * elements are multiply-defined elements then the conflicting elements they r
epresent will be |
| 4506 * included in the array. Otherwise, the element itself will be included. |
| 4507 * |
| 4508 * @param firstElement the first element to be included |
| 4509 * @param secondElement the second element to be included |
| 4510 * @return an array containing all of the conflicting elements |
| 4511 */ |
| 4512 static List<Element> computeConflictingElements(Element firstElement, Element
secondElement) { |
| 4513 Set<Element> elements = new Set<Element>(); |
| 4514 add(elements, firstElement); |
| 4515 add(elements, secondElement); |
| 4516 return new List.from(elements); |
| 4517 } |
| 4518 |
| 4519 /** |
| 4448 * The analysis context in which the multiply defined elements are defined. | 4520 * The analysis context in which the multiply defined elements are defined. |
| 4449 */ | 4521 */ |
| 4450 AnalysisContext _context; | 4522 AnalysisContext _context; |
| 4451 | 4523 |
| 4452 /** | 4524 /** |
| 4453 * The name of the conflicting elements. | 4525 * The name of the conflicting elements. |
| 4454 */ | 4526 */ |
| 4455 String _name; | 4527 String _name; |
| 4456 | 4528 |
| 4457 /** | 4529 /** |
| 4458 * A list containing all of the elements that conflict. | 4530 * A list containing all of the elements that conflict. |
| 4459 */ | 4531 */ |
| 4460 List<Element> _conflictingElements; | 4532 List<Element> _conflictingElements; |
| 4461 | 4533 |
| 4462 /** | 4534 /** |
| 4463 * Initialize a newly created element to represent a list of conflicting eleme
nts. | 4535 * Initialize a newly created element to represent a list of conflicting eleme
nts. |
| 4464 * | 4536 * |
| 4465 * @param context the analysis context in which the multiply defined elements
are defined | 4537 * @param context the analysis context in which the multiply defined elements
are defined |
| 4466 * @param firstElement the first element that conflicts | |
| 4467 * @param secondElement the second element that conflicts | |
| 4468 */ | |
| 4469 MultiplyDefinedElementImpl.con1(AnalysisContext context, Element firstElement,
Element secondElement) { | |
| 4470 this._context = context; | |
| 4471 _name = firstElement.name; | |
| 4472 _conflictingElements = computeConflictingElements(firstElement, secondElemen
t); | |
| 4473 } | |
| 4474 | |
| 4475 /** | |
| 4476 * Initialize a newly created element to represent a list of conflicting eleme
nts. | |
| 4477 * | |
| 4478 * @param context the analysis context in which the multiply defined elements
are defined | |
| 4479 * @param conflictingElements the elements that conflict | 4538 * @param conflictingElements the elements that conflict |
| 4480 */ | 4539 */ |
| 4481 MultiplyDefinedElementImpl.con2(AnalysisContext context, List<Element> conflic
tingElements) { | 4540 MultiplyDefinedElementImpl(AnalysisContext context, List<Element> conflictingE
lements) { |
| 4482 this._context = context; | 4541 this._context = context; |
| 4483 _name = conflictingElements[0].name; | 4542 _name = conflictingElements[0].name; |
| 4484 this._conflictingElements = conflictingElements; | 4543 this._conflictingElements = conflictingElements; |
| 4485 } | 4544 } |
| 4486 accept(ElementVisitor visitor) => visitor.visitMultiplyDefinedElement(this); | 4545 accept(ElementVisitor visitor) => visitor.visitMultiplyDefinedElement(this); |
| 4487 String computeDocumentationComment() => null; | 4546 String computeDocumentationComment() => null; |
| 4488 Element getAncestor(Type elementClass) => null; | 4547 Element getAncestor(Type elementClass) => null; |
| 4489 List<Element> get conflictingElements => _conflictingElements; | 4548 List<Element> get conflictingElements => _conflictingElements; |
| 4490 AnalysisContext get context => _context; | 4549 AnalysisContext get context => _context; |
| 4491 String get displayName => _name; | 4550 String get displayName => _name; |
| (...skipping 23 matching lines...) Expand all Loading... |
| 4515 if (i > 0) { | 4574 if (i > 0) { |
| 4516 builder.append(", "); | 4575 builder.append(", "); |
| 4517 } | 4576 } |
| 4518 ((_conflictingElements[i] as ElementImpl)).appendTo(builder); | 4577 ((_conflictingElements[i] as ElementImpl)).appendTo(builder); |
| 4519 } | 4578 } |
| 4520 builder.append("]"); | 4579 builder.append("]"); |
| 4521 return builder.toString(); | 4580 return builder.toString(); |
| 4522 } | 4581 } |
| 4523 void visitChildren(ElementVisitor visitor) { | 4582 void visitChildren(ElementVisitor visitor) { |
| 4524 } | 4583 } |
| 4525 | |
| 4526 /** | |
| 4527 * Add the given element to the list of elements. If the element is a multiply
-defined element, | |
| 4528 * add all of the conflicting elements that it represents. | |
| 4529 * | |
| 4530 * @param elements the list to which the element(s) are to be added | |
| 4531 * @param element the element(s) to be added | |
| 4532 */ | |
| 4533 void add(Set<Element> elements, Element element) { | |
| 4534 if (element is MultiplyDefinedElementImpl) { | |
| 4535 for (Element conflictingElement in ((element as MultiplyDefinedElementImpl
))._conflictingElements) { | |
| 4536 javaSetAdd(elements, conflictingElement); | |
| 4537 } | |
| 4538 } else { | |
| 4539 javaSetAdd(elements, element); | |
| 4540 } | |
| 4541 } | |
| 4542 | |
| 4543 /** | |
| 4544 * Use the given elements to construct an array of conflicting elements. If ei
ther of the given | |
| 4545 * elements are multiply-defined elements then the conflicting elements they r
epresent will be | |
| 4546 * included in the array. Otherwise, the element itself will be included. | |
| 4547 * | |
| 4548 * @param firstElement the first element to be included | |
| 4549 * @param secondElement the second element to be included | |
| 4550 * @return an array containing all of the conflicting elements | |
| 4551 */ | |
| 4552 List<Element> computeConflictingElements(Element firstElement, Element secondE
lement) { | |
| 4553 Set<Element> elements = new Set<Element>(); | |
| 4554 add(elements, firstElement); | |
| 4555 add(elements, secondElement); | |
| 4556 return new List.from(elements); | |
| 4557 } | |
| 4558 } | 4584 } |
| 4559 /** | 4585 /** |
| 4560 * Instances of the class `ParameterElementImpl` implement a `ParameterElement`. | 4586 * Instances of the class `ParameterElementImpl` implement a `ParameterElement`. |
| 4561 * | 4587 * |
| 4562 * @coverage dart.engine.element | 4588 * @coverage dart.engine.element |
| 4563 */ | 4589 */ |
| 4564 class ParameterElementImpl extends VariableElementImpl implements ParameterEleme
nt { | 4590 class ParameterElementImpl extends VariableElementImpl implements ParameterEleme
nt { |
| 4565 | 4591 |
| 4566 /** | 4592 /** |
| 4567 * An array containing all of the parameters defined by this parameter element
. There will only be | 4593 * An array containing all of the parameters defined by this parameter element
. There will only be |
| (...skipping 237 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4805 return ElementKind.SETTER; | 4831 return ElementKind.SETTER; |
| 4806 } | 4832 } |
| 4807 String get name { | 4833 String get name { |
| 4808 if (isSetter) { | 4834 if (isSetter) { |
| 4809 return "${super.name}="; | 4835 return "${super.name}="; |
| 4810 } | 4836 } |
| 4811 return super.name; | 4837 return super.name; |
| 4812 } | 4838 } |
| 4813 PropertyInducingElement get variable => _variable; | 4839 PropertyInducingElement get variable => _variable; |
| 4814 bool get isAbstract => hasModifier(Modifier.ABSTRACT); | 4840 bool get isAbstract => hasModifier(Modifier.ABSTRACT); |
| 4841 bool get isExcludedSetter => isSetter && _variable.isFinal; |
| 4815 bool get isGetter => hasModifier(Modifier.GETTER); | 4842 bool get isGetter => hasModifier(Modifier.GETTER); |
| 4816 bool get isSetter => hasModifier(Modifier.SETTER); | 4843 bool get isSetter => hasModifier(Modifier.SETTER); |
| 4817 bool get isStatic => hasModifier(Modifier.STATIC); | 4844 bool get isStatic => hasModifier(Modifier.STATIC); |
| 4818 | 4845 |
| 4819 /** | 4846 /** |
| 4820 * Set whether this accessor is abstract to correspond to the given value. | 4847 * Set whether this accessor is abstract to correspond to the given value. |
| 4821 * | 4848 * |
| 4822 * @param isAbstract `true` if the accessor is abstract | 4849 * @param isAbstract `true` if the accessor is abstract |
| 4823 */ | 4850 */ |
| 4824 void set abstract(bool isAbstract) { | 4851 void set abstract(bool isAbstract) { |
| (...skipping 107 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4932 * | 4959 * |
| 4933 * @coverage dart.engine.element | 4960 * @coverage dart.engine.element |
| 4934 */ | 4961 */ |
| 4935 class ShowElementCombinatorImpl implements ShowElementCombinator { | 4962 class ShowElementCombinatorImpl implements ShowElementCombinator { |
| 4936 | 4963 |
| 4937 /** | 4964 /** |
| 4938 * The names that are to be made visible in the importing library if they are
defined in the | 4965 * The names that are to be made visible in the importing library if they are
defined in the |
| 4939 * imported library. | 4966 * imported library. |
| 4940 */ | 4967 */ |
| 4941 List<String> _shownNames = StringUtilities.EMPTY_ARRAY; | 4968 List<String> _shownNames = StringUtilities.EMPTY_ARRAY; |
| 4969 |
| 4970 /** |
| 4971 * The offset of the character immediately following the last character of thi
s node. |
| 4972 */ |
| 4973 int _end = -1; |
| 4974 |
| 4975 /** |
| 4976 * The offset of the 'show' keyword of this element. |
| 4977 */ |
| 4978 int _offset = 0; |
| 4979 int get end => _end; |
| 4980 int get offset => _offset; |
| 4942 List<String> get shownNames => _shownNames; | 4981 List<String> get shownNames => _shownNames; |
| 4943 | 4982 |
| 4944 /** | 4983 /** |
| 4984 * Set the the offset of the character immediately following the last characte
r of this node. |
| 4985 */ |
| 4986 void set end(int endOffset) { |
| 4987 this._end = endOffset; |
| 4988 } |
| 4989 |
| 4990 /** |
| 4991 * Sets the offset of the 'show' keyword of this directive. |
| 4992 */ |
| 4993 void set offset(int offset) { |
| 4994 this._offset = offset; |
| 4995 } |
| 4996 |
| 4997 /** |
| 4945 * Set the names that are to be made visible in the importing library if they
are defined in the | 4998 * Set the names that are to be made visible in the importing library if they
are defined in the |
| 4946 * imported library to the given names. | 4999 * imported library to the given names. |
| 4947 * | 5000 * |
| 4948 * @param shownNames the names that are to be made visible in the importing li
brary | 5001 * @param shownNames the names that are to be made visible in the importing li
brary |
| 4949 */ | 5002 */ |
| 4950 void set shownNames(List<String> shownNames) { | 5003 void set shownNames(List<String> shownNames) { |
| 4951 this._shownNames = shownNames; | 5004 this._shownNames = shownNames; |
| 4952 } | 5005 } |
| 4953 String toString() { | 5006 String toString() { |
| 4954 JavaStringBuilder builder = new JavaStringBuilder(); | 5007 JavaStringBuilder builder = new JavaStringBuilder(); |
| (...skipping 570 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 5525 * | 5578 * |
| 5526 * @param baseParameter the base parameter for which a member might be created | 5579 * @param baseParameter the base parameter for which a member might be created |
| 5527 * @param definingType the type defining the parameters and arguments to be us
ed in the | 5580 * @param definingType the type defining the parameters and arguments to be us
ed in the |
| 5528 * substitution | 5581 * substitution |
| 5529 * @return the parameter element that will return the correctly substituted ty
pes | 5582 * @return the parameter element that will return the correctly substituted ty
pes |
| 5530 */ | 5583 */ |
| 5531 static ParameterElement from(ParameterElement baseParameter, ParameterizedType
definingType) { | 5584 static ParameterElement from(ParameterElement baseParameter, ParameterizedType
definingType) { |
| 5532 if (baseParameter == null || definingType.typeArguments.length == 0) { | 5585 if (baseParameter == null || definingType.typeArguments.length == 0) { |
| 5533 return baseParameter; | 5586 return baseParameter; |
| 5534 } | 5587 } |
| 5535 Type2 baseType = baseParameter.type; | 5588 if (baseParameter is! FieldFormalParameterElement) { |
| 5536 List<Type2> argumentTypes = definingType.typeArguments; | 5589 Type2 baseType = baseParameter.type; |
| 5537 List<Type2> parameterTypes = TypeParameterTypeImpl.getTypes(definingType.typ
eParameters); | 5590 List<Type2> argumentTypes = definingType.typeArguments; |
| 5538 Type2 substitutedType = baseType.substitute2(argumentTypes, parameterTypes); | 5591 List<Type2> parameterTypes = TypeParameterTypeImpl.getTypes(definingType.t
ypeParameters); |
| 5539 if (baseType == substitutedType) { | 5592 Type2 substitutedType = baseType.substitute2(argumentTypes, parameterTypes
); |
| 5540 return baseParameter; | 5593 if (baseType == substitutedType) { |
| 5594 return baseParameter; |
| 5595 } |
| 5541 } | 5596 } |
| 5542 return new ParameterMember(baseParameter, definingType); | 5597 return new ParameterMember(baseParameter, definingType); |
| 5543 } | 5598 } |
| 5544 | 5599 |
| 5545 /** | 5600 /** |
| 5546 * Initialize a newly created element to represent a parameter of the given pa
rameterized type. | 5601 * Initialize a newly created element to represent a parameter of the given pa
rameterized type. |
| 5547 * | 5602 * |
| 5548 * @param baseElement the element on which the parameterized element was creat
ed | 5603 * @param baseElement the element on which the parameterized element was creat
ed |
| 5549 * @param definingType the type in which the element is defined | 5604 * @param definingType the type in which the element is defined |
| 5550 */ | 5605 */ |
| (...skipping 104 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 5655 PropertyAccessorElement get correspondingSetter => from(baseElement.correspond
ingSetter, definingType); | 5710 PropertyAccessorElement get correspondingSetter => from(baseElement.correspond
ingSetter, definingType); |
| 5656 Element get enclosingElement => baseElement.enclosingElement; | 5711 Element get enclosingElement => baseElement.enclosingElement; |
| 5657 PropertyInducingElement get variable { | 5712 PropertyInducingElement get variable { |
| 5658 PropertyInducingElement variable = baseElement.variable; | 5713 PropertyInducingElement variable = baseElement.variable; |
| 5659 if (variable is FieldElement) { | 5714 if (variable is FieldElement) { |
| 5660 return FieldMember.from(variable as FieldElement, definingType); | 5715 return FieldMember.from(variable as FieldElement, definingType); |
| 5661 } | 5716 } |
| 5662 return variable; | 5717 return variable; |
| 5663 } | 5718 } |
| 5664 bool get isAbstract => baseElement.isAbstract; | 5719 bool get isAbstract => baseElement.isAbstract; |
| 5720 bool get isExcludedSetter => baseElement.isExcludedSetter; |
| 5665 bool get isGetter => baseElement.isGetter; | 5721 bool get isGetter => baseElement.isGetter; |
| 5666 bool get isSetter => baseElement.isSetter; | 5722 bool get isSetter => baseElement.isSetter; |
| 5667 String toString() { | 5723 String toString() { |
| 5668 PropertyAccessorElement baseElement = this.baseElement; | 5724 PropertyAccessorElement baseElement = this.baseElement; |
| 5669 List<ParameterElement> parameters = this.parameters; | 5725 List<ParameterElement> parameters = this.parameters; |
| 5670 FunctionType type = this.type; | 5726 FunctionType type = this.type; |
| 5671 JavaStringBuilder builder = new JavaStringBuilder(); | 5727 JavaStringBuilder builder = new JavaStringBuilder(); |
| 5672 if (isGetter) { | 5728 if (isGetter) { |
| 5673 builder.append("get "); | 5729 builder.append("get "); |
| 5674 } else { | 5730 } else { |
| (...skipping 1248 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 6923 /** | 6979 /** |
| 6924 * Initialize a newly created type parameter type to be declared by the given
element and to have | 6980 * Initialize a newly created type parameter type to be declared by the given
element and to have |
| 6925 * the given name. | 6981 * the given name. |
| 6926 * | 6982 * |
| 6927 * @param element the element representing the declaration of the type paramet
er | 6983 * @param element the element representing the declaration of the type paramet
er |
| 6928 */ | 6984 */ |
| 6929 TypeParameterTypeImpl(TypeParameterElement element) : super(element, element.n
ame); | 6985 TypeParameterTypeImpl(TypeParameterElement element) : super(element, element.n
ame); |
| 6930 bool operator ==(Object object) => object is TypeParameterTypeImpl && element
== ((object as TypeParameterTypeImpl)).element; | 6986 bool operator ==(Object object) => object is TypeParameterTypeImpl && element
== ((object as TypeParameterTypeImpl)).element; |
| 6931 TypeParameterElement get element => super.element as TypeParameterElement; | 6987 TypeParameterElement get element => super.element as TypeParameterElement; |
| 6932 int get hashCode => element.hashCode; | 6988 int get hashCode => element.hashCode; |
| 6933 bool isMoreSpecificThan(Type2 type) { | 6989 bool isMoreSpecificThan(Type2 s) { |
| 6934 Type2 upperBound = element.bound; | 6990 if (this == s) { |
| 6935 return type == upperBound; | 6991 return true; |
| 6992 } |
| 6993 if (s.isBottom) { |
| 6994 return true; |
| 6995 } |
| 6996 if (s.isDynamic) { |
| 6997 return true; |
| 6998 } |
| 6999 return isMoreSpecificThan3(s, new Set<Type2>()); |
| 6936 } | 7000 } |
| 6937 bool isSubtypeOf(Type2 type) => true; | 7001 bool isSubtypeOf(Type2 s) => isMoreSpecificThan(s); |
| 6938 Type2 substitute2(List<Type2> argumentTypes, List<Type2> parameterTypes) { | 7002 Type2 substitute2(List<Type2> argumentTypes, List<Type2> parameterTypes) { |
| 6939 int length = parameterTypes.length; | 7003 int length = parameterTypes.length; |
| 6940 for (int i = 0; i < length; i++) { | 7004 for (int i = 0; i < length; i++) { |
| 6941 if (parameterTypes[i] == this) { | 7005 if (parameterTypes[i] == this) { |
| 6942 return argumentTypes[i]; | 7006 return argumentTypes[i]; |
| 6943 } | 7007 } |
| 6944 } | 7008 } |
| 6945 return this; | 7009 return this; |
| 6946 } | 7010 } |
| 7011 bool isMoreSpecificThan3(Type2 s, Set<Type2> visitedTypes) { |
| 7012 Type2 bound = element.bound; |
| 7013 if (s == bound) { |
| 7014 return true; |
| 7015 } |
| 7016 if (s.isObject) { |
| 7017 return true; |
| 7018 } |
| 7019 if (bound == null) { |
| 7020 return false; |
| 7021 } |
| 7022 if (bound is TypeParameterTypeImpl) { |
| 7023 TypeParameterTypeImpl boundTypeParameter = bound as TypeParameterTypeImpl; |
| 7024 if (visitedTypes.contains(bound)) { |
| 7025 return false; |
| 7026 } |
| 7027 javaSetAdd(visitedTypes, bound); |
| 7028 return boundTypeParameter.isMoreSpecificThan3(s, visitedTypes); |
| 7029 } |
| 7030 return bound.isMoreSpecificThan(s); |
| 7031 } |
| 6947 } | 7032 } |
| 6948 /** | 7033 /** |
| 6949 * The unique instance of the class `VoidTypeImpl` implements the type `void`. | 7034 * The unique instance of the class `VoidTypeImpl` implements the type `void`. |
| 6950 * | 7035 * |
| 6951 * @coverage dart.engine.type | 7036 * @coverage dart.engine.type |
| 6952 */ | 7037 */ |
| 6953 class VoidTypeImpl extends TypeImpl implements VoidType { | 7038 class VoidTypeImpl extends TypeImpl implements VoidType { |
| 6954 | 7039 |
| 6955 /** | 7040 /** |
| 6956 * The unique instance of this class. | 7041 * The unique instance of this class. |
| (...skipping 614 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 7571 } | 7656 } |
| 7572 /** | 7657 /** |
| 7573 * The interface `VoidType` defines the behavior of the unique object representi
ng the type | 7658 * The interface `VoidType` defines the behavior of the unique object representi
ng the type |
| 7574 * `void`. | 7659 * `void`. |
| 7575 * | 7660 * |
| 7576 * @coverage dart.engine.type | 7661 * @coverage dart.engine.type |
| 7577 */ | 7662 */ |
| 7578 abstract class VoidType implements Type2 { | 7663 abstract class VoidType implements Type2 { |
| 7579 VoidType substitute2(List<Type2> argumentTypes, List<Type2> parameterTypes); | 7664 VoidType substitute2(List<Type2> argumentTypes, List<Type2> parameterTypes); |
| 7580 } | 7665 } |
| OLD | NEW |