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

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

Issue 2644543005: Element model support for covariant (Closed)
Patch Set: Created 3 years, 11 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 218 matching lines...) Expand 10 before | Expand all | Expand 10 after
229 @override 229 @override
230 Object visitFieldFormalParameter(FieldFormalParameter node) { 230 Object visitFieldFormalParameter(FieldFormalParameter node) {
231 if (node.parent is! DefaultFormalParameter) { 231 if (node.parent is! DefaultFormalParameter) {
232 SimpleIdentifier parameterName = node.identifier; 232 SimpleIdentifier parameterName = node.identifier;
233 FieldElement field = 233 FieldElement field =
234 _fieldMap == null ? null : _fieldMap[parameterName.name]; 234 _fieldMap == null ? null : _fieldMap[parameterName.name];
235 FieldFormalParameterElementImpl parameter = 235 FieldFormalParameterElementImpl parameter =
236 new FieldFormalParameterElementImpl.forNode(parameterName); 236 new FieldFormalParameterElementImpl.forNode(parameterName);
237 _setCodeRange(parameter, node); 237 _setCodeRange(parameter, node);
238 parameter.isConst = node.isConst; 238 parameter.isConst = node.isConst;
239 parameter.isExplicitlyCovariant = node.covariantKeyword != null;
239 parameter.isFinal = node.isFinal; 240 parameter.isFinal = node.isFinal;
240 parameter.parameterKind = node.kind; 241 parameter.parameterKind = node.kind;
241 if (field != null) { 242 if (field != null) {
242 parameter.field = field; 243 parameter.field = field;
243 } 244 }
244 _currentHolder.addParameter(parameter); 245 _currentHolder.addParameter(parameter);
245 parameterName.staticElement = parameter; 246 parameterName.staticElement = parameter;
246 } 247 }
247 // 248 //
248 // The children of this parameter include any parameters defined on the type 249 // The children of this parameter include any parameters defined on the type
(...skipping 365 matching lines...) Expand 10 before | Expand all | Expand 10 after
614 VariableElementImpl element; 615 VariableElementImpl element;
615 if (fieldNode != null) { 616 if (fieldNode != null) {
616 SimpleIdentifier fieldName = node.name; 617 SimpleIdentifier fieldName = node.name;
617 FieldElementImpl field; 618 FieldElementImpl field;
618 if ((isConst || isFinal && !fieldNode.isStatic) && hasInitializer) { 619 if ((isConst || isFinal && !fieldNode.isStatic) && hasInitializer) {
619 field = new ConstFieldElementImpl.forNode(fieldName); 620 field = new ConstFieldElementImpl.forNode(fieldName);
620 } else { 621 } else {
621 field = new FieldElementImpl.forNode(fieldName); 622 field = new FieldElementImpl.forNode(fieldName);
622 } 623 }
623 element = field; 624 element = field;
625 field.isCovariant = fieldNode.covariantKeyword != null;
624 field.isStatic = fieldNode.isStatic; 626 field.isStatic = fieldNode.isStatic;
625 _setCodeRange(element, node); 627 _setCodeRange(element, node);
626 setElementDocumentationComment(element, fieldNode); 628 setElementDocumentationComment(element, fieldNode);
627 field.hasImplicitType = varList.type == null; 629 field.hasImplicitType = varList.type == null;
628 _currentHolder.addField(field); 630 _currentHolder.addField(field);
629 fieldName.staticElement = field; 631 fieldName.staticElement = field;
630 } else { 632 } else {
631 SimpleIdentifier variableName = node.name; 633 SimpleIdentifier variableName = node.name;
632 TopLevelVariableElementImpl variable; 634 TopLevelVariableElementImpl variable;
633 if (isConst && hasInitializer) { 635 if (isConst && hasInitializer) {
(...skipping 12 matching lines...) Expand all
646 } 648 }
647 element.isConst = isConst; 649 element.isConst = isConst;
648 element.isFinal = isFinal; 650 element.isFinal = isFinal;
649 if (element is PropertyInducingElementImpl) { 651 if (element is PropertyInducingElementImpl) {
650 PropertyAccessorElementImpl_ImplicitGetter getter = 652 PropertyAccessorElementImpl_ImplicitGetter getter =
651 new PropertyAccessorElementImpl_ImplicitGetter(element); 653 new PropertyAccessorElementImpl_ImplicitGetter(element);
652 _currentHolder.addAccessor(getter); 654 _currentHolder.addAccessor(getter);
653 if (!isConst && !isFinal) { 655 if (!isConst && !isFinal) {
654 PropertyAccessorElementImpl_ImplicitSetter setter = 656 PropertyAccessorElementImpl_ImplicitSetter setter =
655 new PropertyAccessorElementImpl_ImplicitSetter(element); 657 new PropertyAccessorElementImpl_ImplicitSetter(element);
658 if (fieldNode != null) {
659 (setter.parameters[0] as ParameterElementImpl).isExplicitlyCovariant =
660 fieldNode.covariantKeyword != null;
661 }
656 _currentHolder.addAccessor(setter); 662 _currentHolder.addAccessor(setter);
657 } 663 }
658 } 664 }
659 return null; 665 return null;
660 } 666 }
661 667
662 @override 668 @override
663 Object visitVariableDeclarationList(VariableDeclarationList node) { 669 Object visitVariableDeclarationList(VariableDeclarationList node) {
664 super.visitVariableDeclarationList(node); 670 super.visitVariableDeclarationList(node);
665 AstNode parent = node.parent; 671 AstNode parent = node.parent;
(...skipping 716 matching lines...) Expand 10 before | Expand all | Expand 10 after
1382 if (normalParameter is FieldFormalParameter) { 1388 if (normalParameter is FieldFormalParameter) {
1383 DefaultFieldFormalParameterElementImpl fieldParameter = 1389 DefaultFieldFormalParameterElementImpl fieldParameter =
1384 new DefaultFieldFormalParameterElementImpl.forNode(parameterName); 1390 new DefaultFieldFormalParameterElementImpl.forNode(parameterName);
1385 _setFieldParameterField(fieldParameter); 1391 _setFieldParameterField(fieldParameter);
1386 parameter = fieldParameter; 1392 parameter = fieldParameter;
1387 } else { 1393 } else {
1388 parameter = new DefaultParameterElementImpl.forNode(parameterName); 1394 parameter = new DefaultParameterElementImpl.forNode(parameterName);
1389 } 1395 }
1390 _setCodeRange(parameter, node); 1396 _setCodeRange(parameter, node);
1391 parameter.isConst = node.isConst; 1397 parameter.isConst = node.isConst;
1398 parameter.isExplicitlyCovariant = node.parameter.covariantKeyword != null;
1392 parameter.isFinal = node.isFinal; 1399 parameter.isFinal = node.isFinal;
1393 parameter.parameterKind = node.kind; 1400 parameter.parameterKind = node.kind;
1394 // visible range 1401 // visible range
1395 _setParameterVisibleRange(node, parameter); 1402 _setParameterVisibleRange(node, parameter);
1396 if (normalParameter is SimpleFormalParameter && 1403 if (normalParameter is SimpleFormalParameter &&
1397 normalParameter.type == null) { 1404 normalParameter.type == null) {
1398 parameter.hasImplicitType = true; 1405 parameter.hasImplicitType = true;
1399 } 1406 }
1400 _currentHolder.addParameter(parameter); 1407 _currentHolder.addParameter(parameter);
1401 parameterName.staticElement = parameter; 1408 parameterName.staticElement = parameter;
1402 normalParameter.accept(this); 1409 normalParameter.accept(this);
1403 return null; 1410 return null;
1404 } 1411 }
1405 1412
1406 @override 1413 @override
1407 Object visitFunctionTypedFormalParameter(FunctionTypedFormalParameter node) { 1414 Object visitFunctionTypedFormalParameter(FunctionTypedFormalParameter node) {
1408 if (node.parent is! DefaultFormalParameter) { 1415 if (node.parent is! DefaultFormalParameter) {
1409 SimpleIdentifier parameterName = node.identifier; 1416 SimpleIdentifier parameterName = node.identifier;
1410 ParameterElementImpl parameter = 1417 ParameterElementImpl parameter =
1411 new ParameterElementImpl.forNode(parameterName); 1418 new ParameterElementImpl.forNode(parameterName);
1412 _setCodeRange(parameter, node); 1419 _setCodeRange(parameter, node);
1420 parameter.isConst = node.isConst;
1421 parameter.isExplicitlyCovariant = node.covariantKeyword != null;
1422 parameter.isFinal = node.isFinal;
1413 parameter.parameterKind = node.kind; 1423 parameter.parameterKind = node.kind;
1414 _setParameterVisibleRange(node, parameter); 1424 _setParameterVisibleRange(node, parameter);
1415 _currentHolder.addParameter(parameter); 1425 _currentHolder.addParameter(parameter);
1416 parameterName.staticElement = parameter; 1426 parameterName.staticElement = parameter;
1417 } 1427 }
1418 // 1428 //
1419 // The children of this parameter include any parameters defined on the type 1429 // The children of this parameter include any parameters defined on the type
1420 //of this parameter. 1430 //of this parameter.
1421 // 1431 //
1422 ElementHolder holder = new ElementHolder(); 1432 ElementHolder holder = new ElementHolder();
1423 _visitChildren(holder, node); 1433 _visitChildren(holder, node);
1424 ParameterElementImpl element = node.element; 1434 ParameterElementImpl element = node.element;
1425 element.metadata = _createElementAnnotations(node.metadata); 1435 element.metadata = _createElementAnnotations(node.metadata);
1426 element.parameters = holder.parameters; 1436 element.parameters = holder.parameters;
1427 element.typeParameters = holder.typeParameters; 1437 element.typeParameters = holder.typeParameters;
1428 holder.validate(); 1438 holder.validate();
1429 return null; 1439 return null;
1430 } 1440 }
1431 1441
1432 @override 1442 @override
1433 Object visitSimpleFormalParameter(SimpleFormalParameter node) { 1443 Object visitSimpleFormalParameter(SimpleFormalParameter node) {
1434 if (node.parent is! DefaultFormalParameter) { 1444 if (node.parent is! DefaultFormalParameter) {
1435 SimpleIdentifier parameterName = node.identifier; 1445 SimpleIdentifier parameterName = node.identifier;
1436 ParameterElementImpl parameter = 1446 ParameterElementImpl parameter =
1437 new ParameterElementImpl.forNode(parameterName); 1447 new ParameterElementImpl.forNode(parameterName);
1438 _setCodeRange(parameter, node); 1448 _setCodeRange(parameter, node);
1439 parameter.isConst = node.isConst; 1449 parameter.isConst = node.isConst;
1450 parameter.isExplicitlyCovariant = node.covariantKeyword != null;
1440 parameter.isFinal = node.isFinal; 1451 parameter.isFinal = node.isFinal;
1441 parameter.parameterKind = node.kind; 1452 parameter.parameterKind = node.kind;
1442 _setParameterVisibleRange(node, parameter); 1453 _setParameterVisibleRange(node, parameter);
1443 if (node.type == null) { 1454 if (node.type == null) {
1444 parameter.hasImplicitType = true; 1455 parameter.hasImplicitType = true;
1445 } 1456 }
1446 _currentHolder.addParameter(parameter); 1457 _currentHolder.addParameter(parameter);
1447 parameterName.staticElement = parameter; 1458 parameterName.staticElement = parameter;
1448 } 1459 }
1449 super.visitSimpleFormalParameter(node); 1460 super.visitSimpleFormalParameter(node);
(...skipping 164 matching lines...) Expand 10 before | Expand all | Expand 10 after
1614 return null; 1625 return null;
1615 } 1626 }
1616 1627
1617 /** 1628 /**
1618 * Return the lexical identifiers associated with the given [identifiers]. 1629 * Return the lexical identifiers associated with the given [identifiers].
1619 */ 1630 */
1620 static List<String> _getIdentifiers(NodeList<SimpleIdentifier> identifiers) { 1631 static List<String> _getIdentifiers(NodeList<SimpleIdentifier> identifiers) {
1621 return identifiers.map((identifier) => identifier.name).toList(); 1632 return identifiers.map((identifier) => identifier.name).toList();
1622 } 1633 }
1623 } 1634 }
OLDNEW
« no previous file with comments | « no previous file | pkg/analyzer/lib/src/dart/element/element.dart » ('j') | pkg/analyzer/test/src/summary/resynthesize_common.dart » ('J')

Powered by Google App Engine
This is Rietveld 408576698