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

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

Issue 960093004: Use node accessors to check for const/final/etc. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 5 years, 9 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 | Annotate | Revision Log
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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:math" as math; 7 import "dart:math" as math;
8 import 'dart:collection'; 8 import 'dart:collection';
9 9
10 import 'package:analyzer/src/generated/utilities_collection.dart'; 10 import 'package:analyzer/src/generated/utilities_collection.dart';
(...skipping 2606 matching lines...) Expand 10 before | Expand all | Expand 10 after
2617 element.periodOffset = node.period.offset; 2617 element.periodOffset = node.period.offset;
2618 element.nameEnd = constructorName.end; 2618 element.nameEnd = constructorName.end;
2619 } 2619 }
2620 holder.validate(); 2620 holder.validate();
2621 return null; 2621 return null;
2622 } 2622 }
2623 2623
2624 @override 2624 @override
2625 Object visitDeclaredIdentifier(DeclaredIdentifier node) { 2625 Object visitDeclaredIdentifier(DeclaredIdentifier node) {
2626 SimpleIdentifier variableName = node.identifier; 2626 SimpleIdentifier variableName = node.identifier;
2627 sc.Token keyword = node.keyword;
2628 LocalVariableElementImpl element = 2627 LocalVariableElementImpl element =
2629 new LocalVariableElementImpl.forNode(variableName); 2628 new LocalVariableElementImpl.forNode(variableName);
2630 ForEachStatement statement = node.parent as ForEachStatement; 2629 ForEachStatement statement = node.parent as ForEachStatement;
2631 int declarationEnd = node.offset + node.length; 2630 int declarationEnd = node.offset + node.length;
2632 int statementEnd = statement.offset + statement.length; 2631 int statementEnd = statement.offset + statement.length;
2633 element.setVisibleRange(declarationEnd, statementEnd - declarationEnd - 1); 2632 element.setVisibleRange(declarationEnd, statementEnd - declarationEnd - 1);
2634 element.const3 = _matches(keyword, sc.Keyword.CONST); 2633 element.const3 = node.isConst;
2635 element.final2 = _matches(keyword, sc.Keyword.FINAL); 2634 element.final2 = node.isFinal;
2636 _currentHolder.addLocalVariable(element); 2635 _currentHolder.addLocalVariable(element);
2637 variableName.staticElement = element; 2636 variableName.staticElement = element;
2638 return super.visitDeclaredIdentifier(node); 2637 return super.visitDeclaredIdentifier(node);
2639 } 2638 }
2640 2639
2641 @override 2640 @override
2642 Object visitDefaultFormalParameter(DefaultFormalParameter node) { 2641 Object visitDefaultFormalParameter(DefaultFormalParameter node) {
2643 ElementHolder holder = new ElementHolder(); 2642 ElementHolder holder = new ElementHolder();
2644 NormalFormalParameter normalParameter = node.parameter; 2643 NormalFormalParameter normalParameter = node.parameter;
2645 SimpleIdentifier parameterName = normalParameter.identifier; 2644 SimpleIdentifier parameterName = normalParameter.identifier;
(...skipping 133 matching lines...) Expand 10 before | Expand all | Expand 10 after
2779 } 2778 }
2780 String propertyName = propertyNameNode.name; 2779 String propertyName = propertyNameNode.name;
2781 TopLevelVariableElementImpl variable = 2780 TopLevelVariableElementImpl variable =
2782 _currentHolder.getTopLevelVariable(propertyName) as TopLevelVariable ElementImpl; 2781 _currentHolder.getTopLevelVariable(propertyName) as TopLevelVariable ElementImpl;
2783 if (variable == null) { 2782 if (variable == null) {
2784 variable = new TopLevelVariableElementImpl(node.name.name, -1); 2783 variable = new TopLevelVariableElementImpl(node.name.name, -1);
2785 variable.final2 = true; 2784 variable.final2 = true;
2786 variable.synthetic = true; 2785 variable.synthetic = true;
2787 _currentHolder.addTopLevelVariable(variable); 2786 _currentHolder.addTopLevelVariable(variable);
2788 } 2787 }
2789 if (_matches(property, sc.Keyword.GET)) { 2788 if (node.isGetter) {
2790 PropertyAccessorElementImpl getter = 2789 PropertyAccessorElementImpl getter =
2791 new PropertyAccessorElementImpl.forNode(propertyNameNode); 2790 new PropertyAccessorElementImpl.forNode(propertyNameNode);
2792 getter.functions = holder.functions; 2791 getter.functions = holder.functions;
2793 getter.labels = holder.labels; 2792 getter.labels = holder.labels;
2794 getter.localVariables = holder.localVariables; 2793 getter.localVariables = holder.localVariables;
2795 if (body.isAsynchronous) { 2794 if (body.isAsynchronous) {
2796 getter.asynchronous = true; 2795 getter.asynchronous = true;
2797 } 2796 }
2798 if (body.isGenerator) { 2797 if (body.isGenerator) {
2799 getter.generator = true; 2798 getter.generator = true;
(...skipping 172 matching lines...) Expand 10 before | Expand all | Expand 10 after
2972 String propertyName = propertyNameNode.name; 2971 String propertyName = propertyNameNode.name;
2973 FieldElementImpl field = 2972 FieldElementImpl field =
2974 _currentHolder.getField(propertyName) as FieldElementImpl; 2973 _currentHolder.getField(propertyName) as FieldElementImpl;
2975 if (field == null) { 2974 if (field == null) {
2976 field = new FieldElementImpl(node.name.name, -1); 2975 field = new FieldElementImpl(node.name.name, -1);
2977 field.final2 = true; 2976 field.final2 = true;
2978 field.static = isStatic; 2977 field.static = isStatic;
2979 field.synthetic = true; 2978 field.synthetic = true;
2980 _currentHolder.addField(field); 2979 _currentHolder.addField(field);
2981 } 2980 }
2982 if (_matches(property, sc.Keyword.GET)) { 2981 if (node.isGetter) {
2983 PropertyAccessorElementImpl getter = 2982 PropertyAccessorElementImpl getter =
2984 new PropertyAccessorElementImpl.forNode(propertyNameNode); 2983 new PropertyAccessorElementImpl.forNode(propertyNameNode);
2985 getter.functions = holder.functions; 2984 getter.functions = holder.functions;
2986 getter.labels = holder.labels; 2985 getter.labels = holder.labels;
2987 getter.localVariables = holder.localVariables; 2986 getter.localVariables = holder.localVariables;
2988 if (body.isAsynchronous) { 2987 if (body.isAsynchronous) {
2989 getter.asynchronous = true; 2988 getter.asynchronous = true;
2990 } 2989 }
2991 if (body.isGenerator) { 2990 if (body.isGenerator) {
2992 getter.generator = true; 2991 getter.generator = true;
2993 } 2992 }
2994 getter.variable = field; 2993 getter.variable = field;
2995 getter.abstract = 2994 getter.abstract = node.isAbstract;
2996 body is EmptyFunctionBody && node.externalKeyword == null;
2997 getter.getter = true; 2995 getter.getter = true;
2998 getter.static = isStatic; 2996 getter.static = isStatic;
2999 field.getter = getter; 2997 field.getter = getter;
3000 _currentHolder.addAccessor(getter); 2998 _currentHolder.addAccessor(getter);
3001 propertyNameNode.staticElement = getter; 2999 propertyNameNode.staticElement = getter;
3002 } else { 3000 } else {
3003 PropertyAccessorElementImpl setter = 3001 PropertyAccessorElementImpl setter =
3004 new PropertyAccessorElementImpl.forNode(propertyNameNode); 3002 new PropertyAccessorElementImpl.forNode(propertyNameNode);
3005 setter.functions = holder.functions; 3003 setter.functions = holder.functions;
3006 setter.labels = holder.labels; 3004 setter.labels = holder.labels;
3007 setter.localVariables = holder.localVariables; 3005 setter.localVariables = holder.localVariables;
3008 setter.parameters = holder.parameters; 3006 setter.parameters = holder.parameters;
3009 if (body.isAsynchronous) { 3007 if (body.isAsynchronous) {
3010 setter.asynchronous = true; 3008 setter.asynchronous = true;
3011 } 3009 }
3012 if (body.isGenerator) { 3010 if (body.isGenerator) {
3013 setter.generator = true; 3011 setter.generator = true;
3014 } 3012 }
3015 setter.variable = field; 3013 setter.variable = field;
3016 setter.abstract = body is EmptyFunctionBody && 3014 setter.abstract = node.isAbstract;
3017 !_matches(node.externalKeyword, sc.Keyword.EXTERNAL);
3018 setter.setter = true; 3015 setter.setter = true;
3019 setter.static = isStatic; 3016 setter.static = isStatic;
3020 field.setter = setter; 3017 field.setter = setter;
3021 field.final2 = false; 3018 field.final2 = false;
3022 _currentHolder.addAccessor(setter); 3019 _currentHolder.addAccessor(setter);
3023 propertyNameNode.staticElement = setter; 3020 propertyNameNode.staticElement = setter;
3024 } 3021 }
3025 } 3022 }
3026 holder.validate(); 3023 holder.validate();
3027 } catch (exception, stackTrace) { 3024 } catch (exception, stackTrace) {
(...skipping 86 matching lines...) Expand 10 before | Expand all | Expand 10 after
3114 TypeParameterTypeImpl typeParameterType = 3111 TypeParameterTypeImpl typeParameterType =
3115 new TypeParameterTypeImpl(typeParameter); 3112 new TypeParameterTypeImpl(typeParameter);
3116 typeParameter.type = typeParameterType; 3113 typeParameter.type = typeParameterType;
3117 _currentHolder.addTypeParameter(typeParameter); 3114 _currentHolder.addTypeParameter(typeParameter);
3118 parameterName.staticElement = typeParameter; 3115 parameterName.staticElement = typeParameter;
3119 return super.visitTypeParameter(node); 3116 return super.visitTypeParameter(node);
3120 } 3117 }
3121 3118
3122 @override 3119 @override
3123 Object visitVariableDeclaration(VariableDeclaration node) { 3120 Object visitVariableDeclaration(VariableDeclaration node) {
3124 sc.Token keyword = (node.parent as VariableDeclarationList).keyword; 3121 bool isConst = node.isConst;
3125 bool isConst = _matches(keyword, sc.Keyword.CONST); 3122 bool isFinal = node.isFinal;
3126 bool isFinal = _matches(keyword, sc.Keyword.FINAL);
3127 bool hasInitializer = node.initializer != null; 3123 bool hasInitializer = node.initializer != null;
3128 VariableElementImpl element; 3124 VariableElementImpl element;
3129 if (_inFieldContext) { 3125 if (_inFieldContext) {
3130 SimpleIdentifier fieldName = node.name; 3126 SimpleIdentifier fieldName = node.name;
3131 FieldElementImpl field; 3127 FieldElementImpl field;
3132 if (isConst && hasInitializer) { 3128 if (isConst && hasInitializer) {
3133 field = new ConstFieldElementImpl.con1(fieldName); 3129 field = new ConstFieldElementImpl.con1(fieldName);
3134 } else { 3130 } else {
3135 field = new FieldElementImpl.forNode(fieldName); 3131 field = new FieldElementImpl.forNode(fieldName);
3136 } 3132 }
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
3183 initializer.labels = holder.labels; 3179 initializer.labels = holder.labels;
3184 initializer.localVariables = holder.localVariables; 3180 initializer.localVariables = holder.localVariables;
3185 initializer.synthetic = true; 3181 initializer.synthetic = true;
3186 element.initializer = initializer; 3182 element.initializer = initializer;
3187 holder.validate(); 3183 holder.validate();
3188 } 3184 }
3189 if (element is PropertyInducingElementImpl) { 3185 if (element is PropertyInducingElementImpl) {
3190 PropertyInducingElementImpl variable = 3186 PropertyInducingElementImpl variable =
3191 element as PropertyInducingElementImpl; 3187 element as PropertyInducingElementImpl;
3192 if (_inFieldContext) { 3188 if (_inFieldContext) {
3193 (variable as FieldElementImpl).static = _matches( 3189 (variable as FieldElementImpl).static =
3194 (node.parent.parent as FieldDeclaration).staticKeyword, 3190 (node.parent.parent as FieldDeclaration).isStatic;
3195 sc.Keyword.STATIC);
3196 } 3191 }
3197 PropertyAccessorElementImpl getter = 3192 PropertyAccessorElementImpl getter =
3198 new PropertyAccessorElementImpl.forVariable(variable); 3193 new PropertyAccessorElementImpl.forVariable(variable);
3199 getter.getter = true; 3194 getter.getter = true;
3200 _currentHolder.addAccessor(getter); 3195 _currentHolder.addAccessor(getter);
3201 variable.getter = getter; 3196 variable.getter = getter;
3202 if (!isConst && !isFinal) { 3197 if (!isConst && !isFinal) {
3203 PropertyAccessorElementImpl setter = 3198 PropertyAccessorElementImpl setter =
3204 new PropertyAccessorElementImpl.forVariable(variable); 3199 new PropertyAccessorElementImpl.forVariable(variable);
3205 setter.setter = true; 3200 setter.setter = true;
(...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after
3286 return (parent as FunctionExpression).body; 3281 return (parent as FunctionExpression).body;
3287 } else if (parent is MethodDeclaration) { 3282 } else if (parent is MethodDeclaration) {
3288 return (parent as MethodDeclaration).body; 3283 return (parent as MethodDeclaration).body;
3289 } 3284 }
3290 parent = parent.parent; 3285 parent = parent.parent;
3291 } 3286 }
3292 return null; 3287 return null;
3293 } 3288 }
3294 3289
3295 /** 3290 /**
3296 * Return `true` if the given token is a token for the given keyword.
3297 *
3298 * @param token the token being tested
3299 * @param keyword the keyword being tested for
3300 * @return `true` if the given token is a token for the given keyword
3301 */
3302 bool _matches(sc.Token token, sc.Keyword keyword) =>
3303 token != null &&
3304 token.type == sc.TokenType.KEYWORD &&
3305 (token as sc.KeywordToken).keyword == keyword;
3306
3307 /**
3308 * Sets the visible source range for formal parameter. 3291 * Sets the visible source range for formal parameter.
3309 */ 3292 */
3310 void _setParameterVisibleRange(FormalParameter node, 3293 void _setParameterVisibleRange(FormalParameter node,
3311 ParameterElementImpl element) { 3294 ParameterElementImpl element) {
3312 FunctionBody body = _getFunctionBody(node); 3295 FunctionBody body = _getFunctionBody(node);
3313 if (body != null) { 3296 if (body != null) {
3314 element.setVisibleRange(body.offset, body.length); 3297 element.setVisibleRange(body.offset, body.length);
3315 } 3298 }
3316 } 3299 }
3317 3300
(...skipping 12352 matching lines...) Expand 10 before | Expand all | Expand 10 after
15670 * library. 15653 * library.
15671 */ 15654 */
15672 final HashSet<String> members = new HashSet<String>(); 15655 final HashSet<String> members = new HashSet<String>();
15673 15656
15674 /** 15657 /**
15675 * Names of resolved or unresolved class members that are read in the 15658 * Names of resolved or unresolved class members that are read in the
15676 * library. 15659 * library.
15677 */ 15660 */
15678 final HashSet<String> readMembers = new HashSet<String>(); 15661 final HashSet<String> readMembers = new HashSet<String>();
15679 } 15662 }
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698