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

Side by Side Diff: packages/analyzer/lib/src/generated/resolver.dart

Issue 1521693002: Roll Observatory deps (charted -> ^0.3.0) (Closed) Base URL: https://chromium.googlesource.com/external/github.com/dart-lang/observatory_pub_packages.git@master
Patch Set: Created 5 years 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 engine.resolver; 5 library engine.resolver;
6 6
7 import 'dart:collection'; 7 import 'dart:collection';
8 8
9 import 'ast.dart'; 9 import 'ast.dart';
10 import 'constant.dart'; 10 import 'constant.dart';
(...skipping 1503 matching lines...) Expand 10 before | Expand all | Expand 10 after
1514 @override 1514 @override
1515 Object visitBinaryExpression(BinaryExpression node) { 1515 Object visitBinaryExpression(BinaryExpression node) {
1516 sc.Token operator = node.operator; 1516 sc.Token operator = node.operator;
1517 bool isAmpAmp = operator.type == sc.TokenType.AMPERSAND_AMPERSAND; 1517 bool isAmpAmp = operator.type == sc.TokenType.AMPERSAND_AMPERSAND;
1518 bool isBarBar = operator.type == sc.TokenType.BAR_BAR; 1518 bool isBarBar = operator.type == sc.TokenType.BAR_BAR;
1519 if (isAmpAmp || isBarBar) { 1519 if (isAmpAmp || isBarBar) {
1520 Expression lhsCondition = node.leftOperand; 1520 Expression lhsCondition = node.leftOperand;
1521 if (!_isDebugConstant(lhsCondition)) { 1521 if (!_isDebugConstant(lhsCondition)) {
1522 EvaluationResultImpl lhsResult = _getConstantBooleanValue(lhsCondition); 1522 EvaluationResultImpl lhsResult = _getConstantBooleanValue(lhsCondition);
1523 if (lhsResult != null) { 1523 if (lhsResult != null) {
1524 if (lhsResult.value.isTrue && isBarBar) { 1524 if (lhsResult.value.toBoolValue() == true && isBarBar) {
1525 // report error on else block: true || !e! 1525 // report error on else block: true || !e!
1526 _errorReporter.reportErrorForNode( 1526 _errorReporter.reportErrorForNode(
1527 HintCode.DEAD_CODE, node.rightOperand); 1527 HintCode.DEAD_CODE, node.rightOperand);
1528 // only visit the LHS: 1528 // only visit the LHS:
1529 _safelyVisit(lhsCondition); 1529 _safelyVisit(lhsCondition);
1530 return null; 1530 return null;
1531 } else if (lhsResult.value.isFalse && isAmpAmp) { 1531 } else if (lhsResult.value.toBoolValue() == false && isAmpAmp) {
1532 // report error on if block: false && !e! 1532 // report error on if block: false && !e!
1533 _errorReporter.reportErrorForNode( 1533 _errorReporter.reportErrorForNode(
1534 HintCode.DEAD_CODE, node.rightOperand); 1534 HintCode.DEAD_CODE, node.rightOperand);
1535 // only visit the LHS: 1535 // only visit the LHS:
1536 _safelyVisit(lhsCondition); 1536 _safelyVisit(lhsCondition);
1537 return null; 1537 return null;
1538 } 1538 }
1539 } 1539 }
1540 } 1540 }
1541 // How do we want to handle the RHS? It isn't dead code, but "pointless" 1541 // How do we want to handle the RHS? It isn't dead code, but "pointless"
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
1575 } 1575 }
1576 1576
1577 @override 1577 @override
1578 Object visitConditionalExpression(ConditionalExpression node) { 1578 Object visitConditionalExpression(ConditionalExpression node) {
1579 Expression conditionExpression = node.condition; 1579 Expression conditionExpression = node.condition;
1580 _safelyVisit(conditionExpression); 1580 _safelyVisit(conditionExpression);
1581 if (!_isDebugConstant(conditionExpression)) { 1581 if (!_isDebugConstant(conditionExpression)) {
1582 EvaluationResultImpl result = 1582 EvaluationResultImpl result =
1583 _getConstantBooleanValue(conditionExpression); 1583 _getConstantBooleanValue(conditionExpression);
1584 if (result != null) { 1584 if (result != null) {
1585 if (result.value.isTrue) { 1585 if (result.value.toBoolValue() == true) {
1586 // report error on else block: true ? 1 : !2! 1586 // report error on else block: true ? 1 : !2!
1587 _errorReporter.reportErrorForNode( 1587 _errorReporter.reportErrorForNode(
1588 HintCode.DEAD_CODE, node.elseExpression); 1588 HintCode.DEAD_CODE, node.elseExpression);
1589 _safelyVisit(node.thenExpression); 1589 _safelyVisit(node.thenExpression);
1590 return null; 1590 return null;
1591 } else { 1591 } else {
1592 // report error on if block: false ? !1! : 2 1592 // report error on if block: false ? !1! : 2
1593 _errorReporter.reportErrorForNode( 1593 _errorReporter.reportErrorForNode(
1594 HintCode.DEAD_CODE, node.thenExpression); 1594 HintCode.DEAD_CODE, node.thenExpression);
1595 _safelyVisit(node.elseExpression); 1595 _safelyVisit(node.elseExpression);
1596 return null; 1596 return null;
1597 } 1597 }
1598 } 1598 }
1599 } 1599 }
1600 return super.visitConditionalExpression(node); 1600 return super.visitConditionalExpression(node);
1601 } 1601 }
1602 1602
1603 @override 1603 @override
1604 Object visitIfStatement(IfStatement node) { 1604 Object visitIfStatement(IfStatement node) {
1605 Expression conditionExpression = node.condition; 1605 Expression conditionExpression = node.condition;
1606 _safelyVisit(conditionExpression); 1606 _safelyVisit(conditionExpression);
1607 if (!_isDebugConstant(conditionExpression)) { 1607 if (!_isDebugConstant(conditionExpression)) {
1608 EvaluationResultImpl result = 1608 EvaluationResultImpl result =
1609 _getConstantBooleanValue(conditionExpression); 1609 _getConstantBooleanValue(conditionExpression);
1610 if (result != null) { 1610 if (result != null) {
1611 if (result.value.isTrue) { 1611 if (result.value.toBoolValue() == true) {
1612 // report error on else block: if(true) {} else {!} 1612 // report error on else block: if(true) {} else {!}
1613 Statement elseStatement = node.elseStatement; 1613 Statement elseStatement = node.elseStatement;
1614 if (elseStatement != null) { 1614 if (elseStatement != null) {
1615 _errorReporter.reportErrorForNode( 1615 _errorReporter.reportErrorForNode(
1616 HintCode.DEAD_CODE, elseStatement); 1616 HintCode.DEAD_CODE, elseStatement);
1617 _safelyVisit(node.thenStatement); 1617 _safelyVisit(node.thenStatement);
1618 return null; 1618 return null;
1619 } 1619 }
1620 } else { 1620 } else {
1621 // report error on if block: if (false) {!} else {} 1621 // report error on if block: if (false) {!} else {}
(...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after
1710 } 1710 }
1711 1711
1712 @override 1712 @override
1713 Object visitWhileStatement(WhileStatement node) { 1713 Object visitWhileStatement(WhileStatement node) {
1714 Expression conditionExpression = node.condition; 1714 Expression conditionExpression = node.condition;
1715 _safelyVisit(conditionExpression); 1715 _safelyVisit(conditionExpression);
1716 if (!_isDebugConstant(conditionExpression)) { 1716 if (!_isDebugConstant(conditionExpression)) {
1717 EvaluationResultImpl result = 1717 EvaluationResultImpl result =
1718 _getConstantBooleanValue(conditionExpression); 1718 _getConstantBooleanValue(conditionExpression);
1719 if (result != null) { 1719 if (result != null) {
1720 if (result.value.isFalse) { 1720 if (result.value.toBoolValue() == false) {
1721 // report error on if block: while (false) {!} 1721 // report error on if block: while (false) {!}
1722 _errorReporter.reportErrorForNode(HintCode.DEAD_CODE, node.body); 1722 _errorReporter.reportErrorForNode(HintCode.DEAD_CODE, node.body);
1723 return null; 1723 return null;
1724 } 1724 }
1725 } 1725 }
1726 } 1726 }
1727 _safelyVisit(node.body); 1727 _safelyVisit(node.body);
1728 return null; 1728 return null;
1729 } 1729 }
1730 1730
(...skipping 1496 matching lines...) Expand 10 before | Expand all | Expand 10 after
3227 variableName.staticElement = element; 3227 variableName.staticElement = element;
3228 } else { 3228 } else {
3229 SimpleIdentifier variableName = node.name; 3229 SimpleIdentifier variableName = node.name;
3230 TopLevelVariableElementImpl variable; 3230 TopLevelVariableElementImpl variable;
3231 if (isConst && hasInitializer) { 3231 if (isConst && hasInitializer) {
3232 variable = new ConstTopLevelVariableElementImpl(variableName); 3232 variable = new ConstTopLevelVariableElementImpl(variableName);
3233 } else { 3233 } else {
3234 variable = new TopLevelVariableElementImpl.forNode(variableName); 3234 variable = new TopLevelVariableElementImpl.forNode(variableName);
3235 } 3235 }
3236 element = variable; 3236 element = variable;
3237 if (node.parent.parent is TopLevelVariableDeclaration) {
3238 _setDocRange(element, node.parent.parent);
3239 }
3237 if ((node.parent as VariableDeclarationList).type == null) { 3240 if ((node.parent as VariableDeclarationList).type == null) {
3238 variable.hasImplicitType = true; 3241 variable.hasImplicitType = true;
3239 } 3242 }
3240 _currentHolder.addTopLevelVariable(variable); 3243 _currentHolder.addTopLevelVariable(variable);
3241 variableName.staticElement = element; 3244 variableName.staticElement = element;
3242 } 3245 }
3243 element.const3 = isConst; 3246 element.const3 = isConst;
3244 element.final2 = isFinal; 3247 element.final2 = isFinal;
3245 if (hasInitializer) { 3248 if (hasInitializer) {
3246 ElementHolder holder = new ElementHolder(); 3249 ElementHolder holder = new ElementHolder();
(...skipping 11165 matching lines...) Expand 10 before | Expand all | Expand 10 after
14412 element.getAncestor((element) => element is ClassElement); 14415 element.getAncestor((element) => element is ClassElement);
14413 if (definingClass != null) { 14416 if (definingClass != null) {
14414 type.typeArguments = definingClass.type.typeArguments; 14417 type.typeArguments = definingClass.type.typeArguments;
14415 } 14418 }
14416 element.type = type; 14419 element.type = type;
14417 if (element is PropertyAccessorElement) { 14420 if (element is PropertyAccessorElement) {
14418 PropertyAccessorElement accessor = element as PropertyAccessorElement; 14421 PropertyAccessorElement accessor = element as PropertyAccessorElement;
14419 PropertyInducingElementImpl variable = 14422 PropertyInducingElementImpl variable =
14420 accessor.variable as PropertyInducingElementImpl; 14423 accessor.variable as PropertyInducingElementImpl;
14421 if (accessor.isGetter) { 14424 if (accessor.isGetter) {
14422 variable.type = type.returnType; 14425 variable.type = type.baseReturnType;
14423 } else if (variable.type == null) { 14426 } else if (variable.type == null) {
14424 List<DartType> parameterTypes = type.normalParameterTypes; 14427 List<ParameterElement> parameters = type.baseParameters;
14425 if (parameterTypes != null && parameterTypes.length > 0) { 14428 if (parameters != null && parameters.length > 0) {
14426 variable.type = parameterTypes[0]; 14429 variable.type = parameters[0].type;
14427 } 14430 }
14428 } 14431 }
14429 } 14432 }
14430 return null; 14433 return null;
14431 } 14434 }
14432 14435
14433 @override 14436 @override
14434 Object visitSimpleFormalParameter(SimpleFormalParameter node) { 14437 Object visitSimpleFormalParameter(SimpleFormalParameter node) {
14435 super.visitSimpleFormalParameter(node); 14438 super.visitSimpleFormalParameter(node);
14436 DartType declaredType; 14439 DartType declaredType;
(...skipping 1277 matching lines...) Expand 10 before | Expand all | Expand 10 after
15714 _enclosingFunction = node.element; 15717 _enclosingFunction = node.element;
15715 return super.visitMethodDeclaration(node); 15718 return super.visitMethodDeclaration(node);
15716 } finally { 15719 } finally {
15717 _enclosingFunction = outerFunction; 15720 _enclosingFunction = outerFunction;
15718 } 15721 }
15719 } 15722 }
15720 15723
15721 @override 15724 @override
15722 Object visitSimpleIdentifier(SimpleIdentifier node) { 15725 Object visitSimpleIdentifier(SimpleIdentifier node) {
15723 // Ignore if already resolved - declaration or type. 15726 // Ignore if already resolved - declaration or type.
15724 if (node.staticElement != null) { 15727 if (node.inDeclarationContext()) {
15728 return null;
15729 }
15730 // Ignore if it cannot be a reference to a local variable.
15731 AstNode parent = node.parent;
15732 if (parent is FieldFormalParameter) {
15733 return null;
15734 } else if (parent is ConstructorDeclaration && parent.returnType == node) {
15735 return null;
15736 } else if (parent is ConstructorFieldInitializer &&
15737 parent.fieldName == node) {
15725 return null; 15738 return null;
15726 } 15739 }
15727 // Ignore if qualified. 15740 // Ignore if qualified.
15728 AstNode parent = node.parent;
15729 if (parent is PrefixedIdentifier && identical(parent.identifier, node)) { 15741 if (parent is PrefixedIdentifier && identical(parent.identifier, node)) {
15730 return null; 15742 return null;
15731 } 15743 }
15732 if (parent is PropertyAccess && identical(parent.propertyName, node)) { 15744 if (parent is PropertyAccess && identical(parent.propertyName, node)) {
15733 return null; 15745 return null;
15734 } 15746 }
15735 if (parent is MethodInvocation && 15747 if (parent is MethodInvocation &&
15736 identical(parent.methodName, node) && 15748 identical(parent.methodName, node) &&
15737 parent.realTarget != null) { 15749 parent.realTarget != null) {
15738 return null; 15750 return null;
(...skipping 29 matching lines...) Expand all
15768 // If we are in some closure, check if it is not the same as where 15780 // If we are in some closure, check if it is not the same as where
15769 // variable is declared. 15781 // variable is declared.
15770 if (_enclosingFunction != null && 15782 if (_enclosingFunction != null &&
15771 (element.enclosingElement != _enclosingFunction)) { 15783 (element.enclosingElement != _enclosingFunction)) {
15772 parameterImpl.markPotentiallyMutatedInClosure(); 15784 parameterImpl.markPotentiallyMutatedInClosure();
15773 } 15785 }
15774 } 15786 }
15775 } 15787 }
15776 return null; 15788 return null;
15777 } 15789 }
15790
15791 @override
15792 Object visitTypeName(TypeName node) {
15793 return null;
15794 }
15778 } 15795 }
15779 15796
15780 class _ConstantVerifier_validateInitializerExpression extends ConstantVisitor { 15797 class _ConstantVerifier_validateInitializerExpression extends ConstantVisitor {
15781 final ConstantVerifier verifier; 15798 final ConstantVerifier verifier;
15782 15799
15783 List<ParameterElement> parameterElements; 15800 List<ParameterElement> parameterElements;
15784 15801
15785 TypeSystem _typeSystem; 15802 TypeSystem _typeSystem;
15786 15803
15787 _ConstantVerifier_validateInitializerExpression( 15804 _ConstantVerifier_validateInitializerExpression(
(...skipping 158 matching lines...) Expand 10 before | Expand all | Expand 10 after
15946 nonFields.add(node); 15963 nonFields.add(node);
15947 return null; 15964 return null;
15948 } 15965 }
15949 15966
15950 @override 15967 @override
15951 Object visitNode(AstNode node) => node.accept(TypeResolverVisitor_this); 15968 Object visitNode(AstNode node) => node.accept(TypeResolverVisitor_this);
15952 15969
15953 @override 15970 @override
15954 Object visitWithClause(WithClause node) => null; 15971 Object visitWithClause(WithClause node) => null;
15955 } 15972 }
OLDNEW
« no previous file with comments | « packages/analyzer/lib/src/generated/parser.dart ('k') | packages/analyzer/lib/src/generated/sdk.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698