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

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

Issue 2725013003: Support accessing the parameter element when there is no name (Closed)
Patch Set: Created 3 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
OLDNEW
1 // Copyright (c) 2016, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2016, 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.generated.declaration_resolver; 5 library analyzer.src.generated.declaration_resolver;
6 6
7 import 'package:analyzer/dart/ast/ast.dart'; 7 import 'package:analyzer/dart/ast/ast.dart';
8 import 'package:analyzer/dart/ast/token.dart'; 8 import 'package:analyzer/dart/ast/token.dart';
9 import 'package:analyzer/dart/ast/visitor.dart'; 9 import 'package:analyzer/dart/ast/visitor.dart';
10 import 'package:analyzer/dart/element/element.dart'; 10 import 'package:analyzer/dart/element/element.dart';
11 import 'package:analyzer/exception/exception.dart'; 11 import 'package:analyzer/exception/exception.dart';
12 import 'package:analyzer/src/dart/ast/ast.dart';
12 import 'package:analyzer/src/dart/element/builder.dart'; 13 import 'package:analyzer/src/dart/element/builder.dart';
13 import 'package:analyzer/src/dart/element/element.dart'; 14 import 'package:analyzer/src/dart/element/element.dart';
14 import 'package:analyzer/src/dart/element/type.dart'; 15 import 'package:analyzer/src/dart/element/type.dart';
15 import 'package:analyzer/src/generated/resolver.dart'; 16 import 'package:analyzer/src/generated/resolver.dart';
16 17
17 /** 18 /**
18 * A visitor that resolves declarations in an AST structure to already built 19 * A visitor that resolves declarations in an AST structure to already built
19 * elements. 20 * elements.
20 * 21 *
21 * The resulting AST must have everything resolved that would have been resolved 22 * The resulting AST must have everything resolved that would have been resolved
(...skipping 93 matching lines...) Expand 10 before | Expand all | Expand 10 after
115 116
116 @override 117 @override
117 Object visitDeclaredIdentifier(DeclaredIdentifier node) { 118 Object visitDeclaredIdentifier(DeclaredIdentifier node) {
118 // Declared identifiers can only occur inside executable elements. 119 // Declared identifiers can only occur inside executable elements.
119 _walker.elementBuilder.visitDeclaredIdentifier(node); 120 _walker.elementBuilder.visitDeclaredIdentifier(node);
120 return null; 121 return null;
121 } 122 }
122 123
123 @override 124 @override
124 Object visitDefaultFormalParameter(DefaultFormalParameter node) { 125 Object visitDefaultFormalParameter(DefaultFormalParameter node) {
126 NormalFormalParameter normalParameter = node.parameter;
125 ParameterElement element = 127 ParameterElement element =
126 _match(node.parameter.identifier, _walker.getParameter()); 128 _match(normalParameter.identifier, _walker.getParameter());
129 if (normalParameter is SimpleFormalParameterImpl) {
130 normalParameter.element = node.identifier.staticElement;
131 }
127 Expression defaultValue = node.defaultValue; 132 Expression defaultValue = node.defaultValue;
128 if (defaultValue != null) { 133 if (defaultValue != null) {
129 _walk( 134 _walk(
130 new ElementWalker.forExecutable(element.initializer, _enclosingUnit), 135 new ElementWalker.forExecutable(element.initializer, _enclosingUnit),
131 () { 136 () {
132 defaultValue.accept(this); 137 defaultValue.accept(this);
133 }); 138 });
134 } 139 }
135 _walk(new ElementWalker.forParameter(element), () { 140 _walk(new ElementWalker.forParameter(element), () {
136 node.parameter.accept(this); 141 normalParameter.accept(this);
137 }); 142 });
138 _resolveMetadata(node, node.metadata, element); 143 _resolveMetadata(node, node.metadata, element);
139 return null; 144 return null;
140 } 145 }
141 146
142 @override 147 @override
143 Object visitEnumDeclaration(EnumDeclaration node) { 148 Object visitEnumDeclaration(EnumDeclaration node) {
144 ClassElement element = _match(node.name, _walker.getEnum()); 149 ClassElement element = _match(node.name, _walker.getEnum());
145 _walk(new ElementWalker.forClass(element), () { 150 _walk(new ElementWalker.forClass(element), () {
146 for (EnumConstantDeclaration constant in node.constants) { 151 for (EnumConstantDeclaration constant in node.constants) {
(...skipping 211 matching lines...) Expand 10 before | Expand all | Expand 10 after
358 Object visitPartOfDirective(PartOfDirective node) { 363 Object visitPartOfDirective(PartOfDirective node) {
359 node.element = _enclosingUnit.library; 364 node.element = _enclosingUnit.library;
360 return super.visitPartOfDirective(node); 365 return super.visitPartOfDirective(node);
361 } 366 }
362 367
363 @override 368 @override
364 Object visitSimpleFormalParameter(SimpleFormalParameter node) { 369 Object visitSimpleFormalParameter(SimpleFormalParameter node) {
365 if (node.parent is! DefaultFormalParameter) { 370 if (node.parent is! DefaultFormalParameter) {
366 ParameterElement element = 371 ParameterElement element =
367 _match(node.identifier, _walker.getParameter()); 372 _match(node.identifier, _walker.getParameter());
373 (node as SimpleFormalParameterImpl).element =
374 node.identifier.staticElement;
368 _walk(new ElementWalker.forParameter(element), () { 375 _walk(new ElementWalker.forParameter(element), () {
369 super.visitSimpleFormalParameter(node); 376 super.visitSimpleFormalParameter(node);
370 }); 377 });
371 _resolveMetadata(node, node.metadata, element); 378 _resolveMetadata(node, node.metadata, element);
372 return null; 379 return null;
373 } else { 380 } else {
374 return super.visitSimpleFormalParameter(node); 381 return super.visitSimpleFormalParameter(node);
375 } 382 }
376 } 383 }
377 384
(...skipping 355 matching lines...) Expand 10 before | Expand all | Expand 10 after
733 class _ElementMismatchException extends AnalysisException { 740 class _ElementMismatchException extends AnalysisException {
734 /** 741 /**
735 * Creates an exception to refer to the given [compilationUnit], [element], 742 * Creates an exception to refer to the given [compilationUnit], [element],
736 * and [cause]. 743 * and [cause].
737 */ 744 */
738 _ElementMismatchException( 745 _ElementMismatchException(
739 CompilationUnitElement compilationUnit, Element element, 746 CompilationUnitElement compilationUnit, Element element,
740 [CaughtException cause = null]) 747 [CaughtException cause = null])
741 : super('Element mismatch in $compilationUnit at $element', cause); 748 : super('Element mismatch in $compilationUnit at $element', cause);
742 } 749 }
OLDNEW
« no previous file with comments | « pkg/analyzer/lib/src/dart/element/builder.dart ('k') | pkg/analyzer/lib/src/generated/resolver.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698