Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(218)

Side by Side Diff: pkg/analyzer/lib/src/dart/element/builder.dart

Issue 2038153003: Create ClassElement.type lazily in ClassElementImpl and EnumElementImpl. (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: Created 4 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2014, 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 analyzer.src.dart.element.builder; 5 library analyzer.src.dart.element.builder;
6 6
7 import 'dart:collection'; 7 import 'dart:collection';
8 8
9 import 'package:analyzer/dart/ast/ast.dart'; 9 import 'package:analyzer/dart/ast/ast.dart';
10 import 'package:analyzer/dart/ast/token.dart'; 10 import 'package:analyzer/dart/ast/token.dart';
(...skipping 403 matching lines...) Expand 10 before | Expand all | Expand 10 after
414 for (int i = 0; i < count; i++) { 414 for (int i = 0; i < count; i++) {
415 nonFields[i].accept(this); 415 nonFields[i].accept(this);
416 } 416 }
417 } finally { 417 } finally {
418 _currentHolder = previousHolder; 418 _currentHolder = previousHolder;
419 } 419 }
420 SimpleIdentifier className = node.name; 420 SimpleIdentifier className = node.name;
421 ClassElementImpl element = new ClassElementImpl.forNode(className); 421 ClassElementImpl element = new ClassElementImpl.forNode(className);
422 _setCodeRange(element, node); 422 _setCodeRange(element, node);
423 element.metadata = _createElementAnnotations(node.metadata); 423 element.metadata = _createElementAnnotations(node.metadata);
424 List<TypeParameterElement> typeParameters = holder.typeParameters; 424 element.typeParameters = holder.typeParameters;
425 List<DartType> typeArguments = _createTypeParameterTypes(typeParameters);
426 InterfaceTypeImpl interfaceType = new InterfaceTypeImpl(element);
427 interfaceType.typeArguments = typeArguments;
428 element.type = interfaceType;
429 element.typeParameters = typeParameters;
430 setElementDocumentationComment(element, node); 425 setElementDocumentationComment(element, node);
431 element.abstract = node.isAbstract; 426 element.abstract = node.isAbstract;
432 element.accessors = holder.accessors; 427 element.accessors = holder.accessors;
433 List<ConstructorElement> constructors = holder.constructors; 428 List<ConstructorElement> constructors = holder.constructors;
434 if (constructors.isEmpty) { 429 if (constructors.isEmpty) {
435 constructors = _createDefaultConstructors(element); 430 constructors = _createDefaultConstructors(element);
436 } 431 }
437 element.constructors = constructors; 432 element.constructors = constructors;
438 element.fields = holder.fields; 433 element.fields = holder.fields;
439 element.methods = holder.methods; 434 element.methods = holder.methods;
(...skipping 26 matching lines...) Expand all
466 @override 461 @override
467 Object visitClassTypeAlias(ClassTypeAlias node) { 462 Object visitClassTypeAlias(ClassTypeAlias node) {
468 ElementHolder holder = new ElementHolder(); 463 ElementHolder holder = new ElementHolder();
469 _visitChildren(holder, node); 464 _visitChildren(holder, node);
470 SimpleIdentifier className = node.name; 465 SimpleIdentifier className = node.name;
471 ClassElementImpl element = new ClassElementImpl.forNode(className); 466 ClassElementImpl element = new ClassElementImpl.forNode(className);
472 _setCodeRange(element, node); 467 _setCodeRange(element, node);
473 element.metadata = _createElementAnnotations(node.metadata); 468 element.metadata = _createElementAnnotations(node.metadata);
474 element.abstract = node.abstractKeyword != null; 469 element.abstract = node.abstractKeyword != null;
475 element.mixinApplication = true; 470 element.mixinApplication = true;
476 List<TypeParameterElement> typeParameters = holder.typeParameters; 471 element.typeParameters = holder.typeParameters;
477 element.typeParameters = typeParameters;
478 List<DartType> typeArguments = _createTypeParameterTypes(typeParameters);
479 InterfaceTypeImpl interfaceType = new InterfaceTypeImpl(element);
480 interfaceType.typeArguments = typeArguments;
481 element.type = interfaceType;
482 setElementDocumentationComment(element, node); 472 setElementDocumentationComment(element, node);
483 _currentHolder.addType(element); 473 _currentHolder.addType(element);
484 className.staticElement = element; 474 className.staticElement = element;
485 holder.validate(); 475 holder.validate();
486 return null; 476 return null;
487 } 477 }
488 478
489 @override 479 @override
490 Object visitCompilationUnit(CompilationUnit node) { 480 Object visitCompilationUnit(CompilationUnit node) {
491 if (compilationUnitElement is ElementImpl) { 481 if (compilationUnitElement is ElementImpl) {
(...skipping 122 matching lines...) Expand 10 before | Expand all | Expand 10 after
614 return null; 604 return null;
615 } 605 }
616 606
617 @override 607 @override
618 Object visitEnumDeclaration(EnumDeclaration node) { 608 Object visitEnumDeclaration(EnumDeclaration node) {
619 SimpleIdentifier enumName = node.name; 609 SimpleIdentifier enumName = node.name;
620 EnumElementImpl enumElement = new EnumElementImpl.forNode(enumName); 610 EnumElementImpl enumElement = new EnumElementImpl.forNode(enumName);
621 _setCodeRange(enumElement, node); 611 _setCodeRange(enumElement, node);
622 enumElement.metadata = _createElementAnnotations(node.metadata); 612 enumElement.metadata = _createElementAnnotations(node.metadata);
623 setElementDocumentationComment(enumElement, node); 613 setElementDocumentationComment(enumElement, node);
624 InterfaceTypeImpl enumType = new InterfaceTypeImpl(enumElement); 614 InterfaceTypeImpl enumType = enumElement.type;
625 enumElement.type = enumType;
626 // 615 //
627 // Build the elements for the constants. These are minimal elements; the 616 // Build the elements for the constants. These are minimal elements; the
628 // rest of the constant elements (and elements for other fields) must be 617 // rest of the constant elements (and elements for other fields) must be
629 // built later after we can access the type provider. 618 // built later after we can access the type provider.
630 // 619 //
631 List<FieldElement> fields = new List<FieldElement>(); 620 List<FieldElement> fields = new List<FieldElement>();
632 NodeList<EnumConstantDeclaration> constants = node.constants; 621 NodeList<EnumConstantDeclaration> constants = node.constants;
633 for (EnumConstantDeclaration constant in constants) { 622 for (EnumConstantDeclaration constant in constants) {
634 SimpleIdentifier constantName = constant.name; 623 SimpleIdentifier constantName = constant.name;
635 FieldElementImpl constantField = 624 FieldElementImpl constantField =
(...skipping 838 matching lines...) Expand 10 before | Expand all | Expand 10 after
1474 return null; 1463 return null;
1475 } 1464 }
1476 1465
1477 /** 1466 /**
1478 * Return the lexical identifiers associated with the given [identifiers]. 1467 * Return the lexical identifiers associated with the given [identifiers].
1479 */ 1468 */
1480 static List<String> _getIdentifiers(NodeList<SimpleIdentifier> identifiers) { 1469 static List<String> _getIdentifiers(NodeList<SimpleIdentifier> identifiers) {
1481 return identifiers.map((identifier) => identifier.name).toList(); 1470 return identifiers.map((identifier) => identifier.name).toList();
1482 } 1471 }
1483 } 1472 }
OLDNEW
« no previous file with comments | « pkg/analyzer/lib/src/context/context.dart ('k') | pkg/analyzer/lib/src/dart/element/element.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698