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

Unified Diff: pkg/analyzer/lib/src/dart/analysis/referenced_names.dart

Issue 2689343003: Fixes for referenced names computing. (Closed)
Patch Set: Created 3 years, 10 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 side-by-side diff with in-line comments
Download patch
Index: pkg/analyzer/lib/src/dart/analysis/referenced_names.dart
diff --git a/pkg/analyzer/lib/src/dart/analysis/referenced_names.dart b/pkg/analyzer/lib/src/dart/analysis/referenced_names.dart
index 811aa925f59ed7771d562ec65a43b3acd6bc9bdb..1d0ed187d05361484523b53c506a8885be1c5bba 100644
--- a/pkg/analyzer/lib/src/dart/analysis/referenced_names.dart
+++ b/pkg/analyzer/lib/src/dart/analysis/referenced_names.dart
@@ -56,6 +56,13 @@ class _LocalNameScope {
return scope;
}
+ factory _LocalNameScope.forConstructor(
+ _LocalNameScope enclosing, ConstructorDeclaration node) {
+ _LocalNameScope scope = new _LocalNameScope(enclosing);
+ scope.addFormalParameters(node.parameters);
+ return scope;
+ }
+
factory _LocalNameScope.forFunction(
_LocalNameScope enclosing, FunctionDeclaration node) {
_LocalNameScope scope = new _LocalNameScope(enclosing);
@@ -175,6 +182,17 @@ class _ReferencedNamesComputer extends GeneralizingAstVisitor {
}
@override
+ visitConstructorDeclaration(ConstructorDeclaration node) {
+ _LocalNameScope outerScope = localScope;
+ try {
+ localScope = new _LocalNameScope.forConstructor(localScope, node);
+ super.visitConstructorDeclaration(node);
+ } finally {
+ localScope = outerScope;
+ }
+ }
+
+ @override
visitConstructorName(ConstructorName node) {
if (node.parent is! ConstructorDeclaration) {
super.visitConstructorName(node);
@@ -235,8 +253,10 @@ class _ReferencedNamesComputer extends GeneralizingAstVisitor {
}
// Prepare name.
String name = node.name;
- // Ignore unqualified names shadowed by local elements.
- if (!node.isQualified) {
+ // Ignore names shadowed by local elements.
+ if (node.isQualified || _isNameExpressionLabel(parent)) {
+ // Cannot be local.
+ } else {
if (localScope.contains(name)) {
return;
}
@@ -247,4 +267,12 @@ class _ReferencedNamesComputer extends GeneralizingAstVisitor {
// Do add the name.
names.add(name);
}
+
+ static bool _isNameExpressionLabel(AstNode parent) {
+ if (parent is Label) {
+ AstNode parent2 = parent?.parent;
+ return parent2 is NamedExpression && parent2.name == parent;
+ }
+ return false;
+ }
}
« no previous file with comments | « pkg/analyzer/lib/src/dart/analysis/driver.dart ('k') | pkg/analyzer/test/src/dart/analysis/referenced_names_test.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698