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

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

Issue 2435313002: More improvements to DeclarationResolver. (Closed)
Patch Set: Created 4 years, 2 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
« no previous file with comments | « no previous file | pkg/analyzer/lib/src/dart/element/element.dart » ('j') | 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 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 1060 matching lines...) Expand 10 before | Expand all | Expand 10 after
1071 class LocalElementBuilder extends _BaseElementBuilder { 1071 class LocalElementBuilder extends _BaseElementBuilder {
1072 /** 1072 /**
1073 * Initialize a newly created element builder to build the elements for a 1073 * Initialize a newly created element builder to build the elements for a
1074 * compilation unit. The [initialHolder] is the element holder to which the 1074 * compilation unit. The [initialHolder] is the element holder to which the
1075 * children of the visited compilation unit node will be added. 1075 * children of the visited compilation unit node will be added.
1076 */ 1076 */
1077 LocalElementBuilder(ElementHolder initialHolder, 1077 LocalElementBuilder(ElementHolder initialHolder,
1078 CompilationUnitElementImpl compilationUnitElement) 1078 CompilationUnitElementImpl compilationUnitElement)
1079 : super(initialHolder, compilationUnitElement); 1079 : super(initialHolder, compilationUnitElement);
1080 1080
1081 @override 1081 /**
1082 Object visitCatchClause(CatchClause node) { 1082 * Builds the variable elements associated with [node] and stores them in
1083 * the element holder.
1084 */
1085 void buildCatchVariableElements(CatchClause node) {
1083 SimpleIdentifier exceptionParameter = node.exceptionParameter; 1086 SimpleIdentifier exceptionParameter = node.exceptionParameter;
1084 if (exceptionParameter != null) { 1087 if (exceptionParameter != null) {
1085 // exception 1088 // exception
1086 LocalVariableElementImpl exception = 1089 LocalVariableElementImpl exception =
1087 new LocalVariableElementImpl.forNode(exceptionParameter); 1090 new LocalVariableElementImpl.forNode(exceptionParameter);
1088 if (node.exceptionType == null) { 1091 if (node.exceptionType == null) {
1089 exception.hasImplicitType = true; 1092 exception.hasImplicitType = true;
1090 } 1093 }
1091 exception.setVisibleRange(node.offset, node.length); 1094 exception.setVisibleRange(node.offset, node.length);
1092 _currentHolder.addLocalVariable(exception); 1095 _currentHolder.addLocalVariable(exception);
1093 exceptionParameter.staticElement = exception; 1096 exceptionParameter.staticElement = exception;
1094 // stack trace 1097 // stack trace
1095 SimpleIdentifier stackTraceParameter = node.stackTraceParameter; 1098 SimpleIdentifier stackTraceParameter = node.stackTraceParameter;
1096 if (stackTraceParameter != null) { 1099 if (stackTraceParameter != null) {
1097 LocalVariableElementImpl stackTrace = 1100 LocalVariableElementImpl stackTrace =
1098 new LocalVariableElementImpl.forNode(stackTraceParameter); 1101 new LocalVariableElementImpl.forNode(stackTraceParameter);
1099 _setCodeRange(stackTrace, stackTraceParameter); 1102 _setCodeRange(stackTrace, stackTraceParameter);
1100 stackTrace.setVisibleRange(node.offset, node.length); 1103 stackTrace.setVisibleRange(node.offset, node.length);
1101 _currentHolder.addLocalVariable(stackTrace); 1104 _currentHolder.addLocalVariable(stackTrace);
1102 stackTraceParameter.staticElement = stackTrace; 1105 stackTraceParameter.staticElement = stackTrace;
1103 } 1106 }
1104 } 1107 }
1108 }
1109
1110 /**
1111 * Builds the label elements associated with [labels] and stores them in the
1112 * element holder.
1113 */
1114 void buildLabelElements(
1115 NodeList<Label> labels, bool onSwitchStatement, bool onSwitchMember) {
1116 for (Label label in labels) {
1117 SimpleIdentifier labelName = label.label;
1118 LabelElementImpl element = new LabelElementImpl.forNode(
1119 labelName, onSwitchStatement, onSwitchMember);
1120 labelName.staticElement = element;
1121 _currentHolder.addLabel(element);
1122 }
1123 }
1124
1125 @override
1126 Object visitCatchClause(CatchClause node) {
1127 buildCatchVariableElements(node);
1105 return super.visitCatchClause(node); 1128 return super.visitCatchClause(node);
1106 } 1129 }
1107 1130
1108 @override 1131 @override
1109 Object visitDeclaredIdentifier(DeclaredIdentifier node) { 1132 Object visitDeclaredIdentifier(DeclaredIdentifier node) {
1110 SimpleIdentifier variableName = node.identifier; 1133 SimpleIdentifier variableName = node.identifier;
1111 LocalVariableElementImpl element = 1134 LocalVariableElementImpl element =
1112 new LocalVariableElementImpl.forNode(variableName); 1135 new LocalVariableElementImpl.forNode(variableName);
1113 _setCodeRange(element, node); 1136 _setCodeRange(element, node);
1114 element.metadata = _createElementAnnotations(node.metadata); 1137 element.metadata = _createElementAnnotations(node.metadata);
(...skipping 104 matching lines...) Expand 10 before | Expand all | Expand 10 after
1219 element.hasImplicitReturnType = true; 1242 element.hasImplicitReturnType = true;
1220 _currentHolder.addFunction(element); 1243 _currentHolder.addFunction(element);
1221 node.element = element; 1244 node.element = element;
1222 holder.validate(); 1245 holder.validate();
1223 return null; 1246 return null;
1224 } 1247 }
1225 1248
1226 @override 1249 @override
1227 Object visitLabeledStatement(LabeledStatement node) { 1250 Object visitLabeledStatement(LabeledStatement node) {
1228 bool onSwitchStatement = node.statement is SwitchStatement; 1251 bool onSwitchStatement = node.statement is SwitchStatement;
1229 for (Label label in node.labels) { 1252 buildLabelElements(node.labels, onSwitchStatement, false);
1230 SimpleIdentifier labelName = label.label;
1231 LabelElementImpl element =
1232 new LabelElementImpl.forNode(labelName, onSwitchStatement, false);
1233 _currentHolder.addLabel(element);
1234 labelName.staticElement = element;
1235 }
1236 return super.visitLabeledStatement(node); 1253 return super.visitLabeledStatement(node);
1237 } 1254 }
1238 1255
1239 @override 1256 @override
1240 Object visitSwitchCase(SwitchCase node) { 1257 Object visitSwitchCase(SwitchCase node) {
1241 for (Label label in node.labels) { 1258 buildLabelElements(node.labels, false, true);
1242 SimpleIdentifier labelName = label.label;
1243 LabelElementImpl element =
1244 new LabelElementImpl.forNode(labelName, false, true);
1245 _currentHolder.addLabel(element);
1246 labelName.staticElement = element;
1247 }
1248 return super.visitSwitchCase(node); 1259 return super.visitSwitchCase(node);
1249 } 1260 }
1250 1261
1251 @override 1262 @override
1252 Object visitSwitchDefault(SwitchDefault node) { 1263 Object visitSwitchDefault(SwitchDefault node) {
1253 for (Label label in node.labels) { 1264 buildLabelElements(node.labels, false, true);
1254 SimpleIdentifier labelName = label.label;
1255 LabelElementImpl element =
1256 new LabelElementImpl.forNode(labelName, false, true);
1257 _currentHolder.addLabel(element);
1258 labelName.staticElement = element;
1259 }
1260 return super.visitSwitchDefault(node); 1265 return super.visitSwitchDefault(node);
1261 } 1266 }
1262 1267
1263 @override 1268 @override
1264 Object visitVariableDeclaration(VariableDeclaration node) { 1269 Object visitVariableDeclaration(VariableDeclaration node) {
1265 bool isConst = node.isConst; 1270 bool isConst = node.isConst;
1266 bool isFinal = node.isFinal; 1271 bool isFinal = node.isFinal;
1267 Expression initializerNode = node.initializer; 1272 Expression initializerNode = node.initializer;
1268 VariableDeclarationList varList = node.parent; 1273 VariableDeclarationList varList = node.parent;
1269 SimpleIdentifier variableName = node.name; 1274 SimpleIdentifier variableName = node.name;
(...skipping 339 matching lines...) Expand 10 before | Expand all | Expand 10 after
1609 return null; 1614 return null;
1610 } 1615 }
1611 1616
1612 /** 1617 /**
1613 * Return the lexical identifiers associated with the given [identifiers]. 1618 * Return the lexical identifiers associated with the given [identifiers].
1614 */ 1619 */
1615 static List<String> _getIdentifiers(NodeList<SimpleIdentifier> identifiers) { 1620 static List<String> _getIdentifiers(NodeList<SimpleIdentifier> identifiers) {
1616 return identifiers.map((identifier) => identifier.name).toList(); 1621 return identifiers.map((identifier) => identifier.name).toList();
1617 } 1622 }
1618 } 1623 }
OLDNEW
« no previous file with comments | « no previous file | pkg/analyzer/lib/src/dart/element/element.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698