Skip to content

Commit b3385ba

Browse files
bwilkersonCommit Queue
authored andcommitted
Migrate a utility class used by several other libraries
Change-Id: I7f3b67624633fda4e188b30e5b44c304256378ee Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/391204 Reviewed-by: Konstantin Shcheglov <[email protected]> Commit-Queue: Brian Wilkerson <[email protected]>
1 parent 3b931e9 commit b3385ba

File tree

1 file changed

+47
-5
lines changed

1 file changed

+47
-5
lines changed

pkg/analysis_server/lib/src/services/refactoring/legacy/visible_ranges_computer.dart

Lines changed: 47 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5,17 +5,22 @@
55
import 'package:analyzer/dart/ast/ast.dart';
66
import 'package:analyzer/dart/ast/visitor.dart';
77
import 'package:analyzer/dart/element/element.dart';
8+
import 'package:analyzer/dart/element/element2.dart';
89
import 'package:analyzer/source/source_range.dart';
910
import 'package:analyzer_plugin/utilities/range_factory.dart';
1011

1112
/// Computer of local elements and source ranges in which they are visible.
1213
class VisibleRangesComputer extends GeneralizingAstVisitor<void> {
1314
final Map<LocalElement, SourceRange> _map = {};
1415

16+
final Map<PromotableElement2, SourceRange> _map2 = {};
17+
1518
@override
1619
void visitCatchClause(CatchClause node) {
17-
_addLocalVariable(node, node.exceptionParameter?.declaredElement);
18-
_addLocalVariable(node, node.stackTraceParameter?.declaredElement);
20+
_addLocalVariable(node, node.exceptionParameter?.declaredElement,
21+
node.exceptionParameter?.declaredElement2);
22+
_addLocalVariable(node, node.stackTraceParameter?.declaredElement,
23+
node.stackTraceParameter?.declaredElement2);
1924
node.body.accept(this);
2025
}
2126

@@ -30,14 +35,25 @@ class VisibleRangesComputer extends GeneralizingAstVisitor<void> {
3035
_map[element] = range.node(body);
3136
}
3237
}
38+
39+
var element2 = node.declaredFragment?.element;
40+
if (element2 is FormalParameterElement) {
41+
var body = _getFunctionBody(node);
42+
if (body is BlockFunctionBody) {
43+
_map2[element2] = range.node(body);
44+
} else if (body is ExpressionFunctionBody) {
45+
_map2[element2] = range.node(body);
46+
}
47+
}
3348
}
3449

3550
@override
3651
void visitForPartsWithDeclarations(ForPartsWithDeclarations node) {
3752
var loop = node.parent;
3853
if (loop != null) {
3954
for (var variable in node.variables.variables) {
40-
_addLocalVariable(loop, variable.declaredElement);
55+
_addLocalVariable(
56+
loop, variable.declaredElement, variable.declaredElement2);
4157
variable.initializer?.accept(this);
4258
}
4359
}
@@ -54,21 +70,41 @@ class VisibleRangesComputer extends GeneralizingAstVisitor<void> {
5470
super.visitFunctionDeclaration(node);
5571
}
5672

73+
@override
74+
void visitPatternVariableDeclaration(PatternVariableDeclaration node) {
75+
// TODO(brianwilkerson): Figure out why this isn't handled.
76+
super.visitPatternVariableDeclaration(node);
77+
}
78+
79+
@override
80+
void visitPatternVariableDeclarationStatement(
81+
PatternVariableDeclarationStatement node) {
82+
// TODO(brianwilkerson): Figure out why this isn't handled.
83+
super.visitPatternVariableDeclarationStatement(node);
84+
}
85+
5786
@override
5887
void visitVariableDeclarationStatement(VariableDeclarationStatement node) {
5988
var block = node.parent;
6089
if (block != null) {
6190
for (var variable in node.variables.variables) {
62-
_addLocalVariable(block, variable.declaredElement);
91+
_addLocalVariable(
92+
block, variable.declaredElement, variable.declaredElement2);
6393
variable.initializer?.accept(this);
6494
}
6595
}
6696
}
6797

68-
void _addLocalVariable(AstNode scopeNode, Element? element) {
98+
void _addLocalVariable(
99+
AstNode scopeNode, Element? element, Element2? element2) {
69100
if (element is LocalVariableElement) {
101+
// TODO(brianwilkerson): Figure out why this isn't `PromotableElement`. It
102+
// appears to be missing parameter elements.
70103
_map[element] = range.node(scopeNode);
71104
}
105+
if (element2 is PromotableElement2) {
106+
_map2[element2] = range.node(scopeNode);
107+
}
72108
}
73109

74110
static Map<LocalElement, SourceRange> forNode(AstNode unit) {
@@ -77,6 +113,12 @@ class VisibleRangesComputer extends GeneralizingAstVisitor<void> {
77113
return computer._map;
78114
}
79115

116+
static Map<PromotableElement2, SourceRange> forNode2(AstNode unit) {
117+
var computer = VisibleRangesComputer();
118+
unit.accept(computer);
119+
return computer._map2;
120+
}
121+
80122
/// Return the body of the function that contains the given [parameter], or
81123
/// `null` if no function body could be found.
82124
static FunctionBody? _getFunctionBody(FormalParameter parameter) {

0 commit comments

Comments
 (0)