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

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

Issue 1306313002: Implement instance member inference (Closed) Base URL: https://github.com/dart-lang/sdk.git@master
Patch Set: Address comments Created 5 years, 3 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 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 10688 matching lines...) Expand 10 before | Expand all | Expand 10 after
10699 // of the statement. 10699 // of the statement.
10700 // 10700 //
10701 node.accept(elementResolver); 10701 node.accept(elementResolver);
10702 node.accept(typeAnalyzer); 10702 node.accept(typeAnalyzer);
10703 return null; 10703 return null;
10704 } 10704 }
10705 10705
10706 @override 10706 @override
10707 Object visitDefaultFormalParameter(DefaultFormalParameter node) { 10707 Object visitDefaultFormalParameter(DefaultFormalParameter node) {
10708 super.visitDefaultFormalParameter(node); 10708 super.visitDefaultFormalParameter(node);
10709 ParameterElement element = node.element;
10710 if (element.initializer != null && node.defaultValue != null) {
10711 (element.initializer as FunctionElementImpl).returnType =
10712 node.defaultValue.staticType;
10713 }
10709 FormalParameterList parent = node.parent; 10714 FormalParameterList parent = node.parent;
10710 AstNode grandparent = parent.parent; 10715 AstNode grandparent = parent.parent;
10711 if (grandparent is ConstructorDeclaration && 10716 if (grandparent is ConstructorDeclaration &&
10712 grandparent.constKeyword != null) { 10717 grandparent.constKeyword != null) {
10713 // For const constructors, we need to clone the ASTs for default formal 10718 // For const constructors, we need to clone the ASTs for default formal
10714 // parameters, so that we can use them during constant evaluation. 10719 // parameters, so that we can use them during constant evaluation.
10715 ParameterElement element = node.element; 10720 ParameterElement element = node.element;
10716 (element as ConstVariableElement).constantInitializer = 10721 (element as ConstVariableElement).constantInitializer =
10717 new ConstantAstCloner().cloneNode(node.defaultValue); 10722 new ConstantAstCloner().cloneNode(node.defaultValue);
10718 } 10723 }
(...skipping 405 matching lines...) Expand 10 before | Expand all | Expand 10 after
11124 return null; 11129 return null;
11125 } 11130 }
11126 11131
11127 @override 11132 @override
11128 Object visitTypeName(TypeName node) => null; 11133 Object visitTypeName(TypeName node) => null;
11129 11134
11130 @override 11135 @override
11131 Object visitVariableDeclaration(VariableDeclaration node) { 11136 Object visitVariableDeclaration(VariableDeclaration node) {
11132 super.visitVariableDeclaration(node); 11137 super.visitVariableDeclaration(node);
11133 VariableElement element = node.element; 11138 VariableElement element = node.element;
11139 if (element.initializer != null && node.initializer != null) {
11140 (element.initializer as FunctionElementImpl).returnType =
11141 node.initializer.staticType;
11142 }
11134 // Note: in addition to cloning the initializers for const variables, we 11143 // Note: in addition to cloning the initializers for const variables, we
11135 // have to clone the initializers for non-static final fields (because if 11144 // have to clone the initializers for non-static final fields (because if
11136 // they occur in a class with a const constructor, they will be needed to 11145 // they occur in a class with a const constructor, they will be needed to
11137 // evaluate the const constructor). 11146 // evaluate the const constructor).
11138 if ((element.isConst || 11147 if ((element.isConst ||
11139 (element is FieldElement && 11148 (element is FieldElement &&
11140 element.isFinal && 11149 element.isFinal &&
11141 !element.isStatic)) && 11150 !element.isStatic)) &&
11142 node.initializer != null) { 11151 node.initializer != null) {
11143 (element as ConstVariableElement).constantInitializer = 11152 (element as ConstVariableElement).constantInitializer =
(...skipping 3522 matching lines...) Expand 10 before | Expand all | Expand 10 after
14666 abstract class TypeSystem { 14675 abstract class TypeSystem {
14667 /** 14676 /**
14668 * Return the [TypeProvider] associated with this [TypeSystem]. 14677 * Return the [TypeProvider] associated with this [TypeSystem].
14669 */ 14678 */
14670 TypeProvider get typeProvider; 14679 TypeProvider get typeProvider;
14671 14680
14672 /** 14681 /**
14673 * Compute the least upper bound of two types. 14682 * Compute the least upper bound of two types.
14674 */ 14683 */
14675 DartType getLeastUpperBound(DartType type1, DartType type2); 14684 DartType getLeastUpperBound(DartType type1, DartType type2);
14685
14686 /**
14687 * Return `true` if the [leftType] is a subtype of the [rightType] (that is,
14688 * if leftType <: rightType).
14689 */
14690 bool isSubtypeOf(DartType leftType, DartType rightType);
14676 } 14691 }
14677 14692
14678 /** 14693 /**
14679 * Implementation of [TypeSystem] using the rules in the Dart specification. 14694 * Implementation of [TypeSystem] using the rules in the Dart specification.
14680 */ 14695 */
14681 class TypeSystemImpl implements TypeSystem { 14696 class TypeSystemImpl implements TypeSystem {
14682 @override 14697 @override
14683 final TypeProvider typeProvider; 14698 final TypeProvider typeProvider;
14684 14699
14685 TypeSystemImpl(this.typeProvider); 14700 TypeSystemImpl(this.typeProvider);
(...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after
14755 if (result == null) { 14770 if (result == null) {
14756 return typeProvider.functionType; 14771 return typeProvider.functionType;
14757 } 14772 }
14758 return result; 14773 return result;
14759 } else { 14774 } else {
14760 // Should never happen. As a defensive measure, return the dynamic type. 14775 // Should never happen. As a defensive measure, return the dynamic type.
14761 assert(false); 14776 assert(false);
14762 return typeProvider.dynamicType; 14777 return typeProvider.dynamicType;
14763 } 14778 }
14764 } 14779 }
14780
14781 @override
14782 bool isSubtypeOf(DartType leftType, DartType rightType) {
14783 return leftType.isSubtypeOf(rightType);
14784 }
14765 } 14785 }
14766 14786
14767 /** 14787 /**
14768 * Instances of the class [UnusedLocalElementsVerifier] traverse an element 14788 * Instances of the class [UnusedLocalElementsVerifier] traverse an element
14769 * structure looking for cases of [HintCode.UNUSED_ELEMENT], 14789 * structure looking for cases of [HintCode.UNUSED_ELEMENT],
14770 * [HintCode.UNUSED_FIELD], [HintCode.UNUSED_LOCAL_VARIABLE], etc. 14790 * [HintCode.UNUSED_FIELD], [HintCode.UNUSED_LOCAL_VARIABLE], etc.
14771 */ 14791 */
14772 class UnusedLocalElementsVerifier extends RecursiveElementVisitor { 14792 class UnusedLocalElementsVerifier extends RecursiveElementVisitor {
14773 /** 14793 /**
14774 * The error listener to which errors will be reported. 14794 * The error listener to which errors will be reported.
(...skipping 548 matching lines...) Expand 10 before | Expand all | Expand 10 after
15323 nonFields.add(node); 15343 nonFields.add(node);
15324 return null; 15344 return null;
15325 } 15345 }
15326 15346
15327 @override 15347 @override
15328 Object visitNode(AstNode node) => node.accept(TypeResolverVisitor_this); 15348 Object visitNode(AstNode node) => node.accept(TypeResolverVisitor_this);
15329 15349
15330 @override 15350 @override
15331 Object visitWithClause(WithClause node) => null; 15351 Object visitWithClause(WithClause node) => null;
15332 } 15352 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698