OLD | NEW |
1 // Copyright (c) 2017, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2017, 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 import 'package:analyzer/dart/ast/ast.dart'; | 5 import 'package:analyzer/dart/ast/ast.dart'; |
6 import 'package:analyzer/dart/ast/standard_ast_factory.dart'; | 6 import 'package:analyzer/dart/ast/standard_ast_factory.dart'; |
7 import 'package:analyzer/dart/ast/token.dart'; | 7 import 'package:analyzer/dart/ast/token.dart'; |
8 import 'package:analyzer/dart/element/element.dart'; | 8 import 'package:analyzer/dart/element/element.dart'; |
9 import 'package:analyzer/dart/element/type.dart'; | 9 import 'package:analyzer/dart/element/type.dart'; |
10 import 'package:analyzer/src/dart/element/element.dart'; | 10 import 'package:analyzer/src/dart/element/element.dart'; |
(...skipping 619 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
630 CompilationUnitElementImpl unitImpl = unit; | 630 CompilationUnitElementImpl unitImpl = unit; |
631 ElementImpl child = unitImpl.getChild(name.name); | 631 ElementImpl child = unitImpl.getChild(name.name); |
632 if (child != null) { | 632 if (child != null) { |
633 return child; | 633 return child; |
634 } | 634 } |
635 } | 635 } |
636 return null; | 636 return null; |
637 } | 637 } |
638 | 638 |
639 // Search in the class. | 639 // Search in the class. |
640 if (parentElement is ClassElementImpl) { | 640 if (parentElement is AbstractClassElementImpl) { |
641 if (isGetter) { | 641 if (isGetter) { |
642 return parentElement.getGetter(name.name) as ElementImpl; | 642 return parentElement.getGetter(name.name) as ElementImpl; |
643 } else if (isSetter) { | 643 } else if (isSetter) { |
644 return parentElement.getSetter(name.name) as ElementImpl; | 644 return parentElement.getSetter(name.name) as ElementImpl; |
645 } else if (isField) { | 645 } else if (isField) { |
646 return parentElement.getField(name.name) as ElementImpl; | 646 return parentElement.getField(name.name) as ElementImpl; |
647 } else if (isConstructor) { | 647 } else if (isConstructor) { |
648 if (name.name.isEmpty) { | 648 if (name.name.isEmpty) { |
649 return parentElement.unnamedConstructor as ConstructorElementImpl; | 649 return parentElement.unnamedConstructor as ConstructorElementImpl; |
650 } | 650 } |
651 return parentElement.getNamedConstructor(name.name) as ElementImpl; | 651 return parentElement.getNamedConstructor(name.name) as ElementImpl; |
652 } else if (isMethod) { | 652 } else if (isMethod) { |
653 return parentElement.getMethod(name.name) as ElementImpl; | 653 return parentElement.getMethod(name.name) as ElementImpl; |
654 } | 654 } |
655 return null; | 655 return null; |
656 } | 656 } |
657 | 657 |
658 throw new UnimplementedError('Should not be reached.'); | 658 throw new UnimplementedError('Should not be reached.'); |
659 } | 659 } |
660 | 660 |
661 InterfaceType _getInterfaceType(ElementImpl context, | 661 InterfaceType _getInterfaceType(ElementImpl context, |
662 kernel.CanonicalName className, List<kernel.DartType> kernelArguments) { | 662 kernel.CanonicalName className, List<kernel.DartType> kernelArguments) { |
663 var libraryName = className.parent; | 663 var libraryName = className.parent; |
664 var libraryElement = _resynthesizer.getLibrary(libraryName.name); | 664 var libraryElement = _resynthesizer.getLibrary(libraryName.name); |
665 ClassElementImpl classElement = libraryElement.getType(className.name); | 665 ClassElement classElement = libraryElement.getType(className.name); |
| 666 classElement ??= libraryElement.getEnum(className.name); |
666 | 667 |
667 if (kernelArguments.isEmpty) { | 668 if (kernelArguments.isEmpty) { |
668 return classElement.type; | 669 return classElement.type; |
669 } | 670 } |
670 | 671 |
671 return new InterfaceTypeImpl.elementWithNameAndArgs( | 672 return new InterfaceTypeImpl.elementWithNameAndArgs( |
672 classElement, classElement.name, () { | 673 classElement, classElement.name, () { |
673 List<DartType> arguments = kernelArguments | 674 List<DartType> arguments = kernelArguments |
674 .map((kernel.DartType k) => getType(context, k)) | 675 .map((kernel.DartType k) => getType(context, k)) |
675 .toList(growable: false); | 676 .toList(growable: false); |
(...skipping 10 matching lines...) Expand all Loading... |
686 for (var typeParameter in ctx.typeParameters) { | 687 for (var typeParameter in ctx.typeParameters) { |
687 if (typeParameter.name == name) { | 688 if (typeParameter.name == name) { |
688 return typeParameter; | 689 return typeParameter; |
689 } | 690 } |
690 } | 691 } |
691 } | 692 } |
692 } | 693 } |
693 throw new StateError('Not found $kernelTypeParameter in $context'); | 694 throw new StateError('Not found $kernelTypeParameter in $context'); |
694 } | 695 } |
695 } | 696 } |
OLD | NEW |