| OLD | NEW |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 } |
| OLD | NEW |