Skip to content

Commit 4a268b7

Browse files
bwilkersoncommit-bot@chromium.org
authored andcommitted
Support const subclasses of visitor classes (issue 42853)
Change-Id: Idee546d25a4cb96d790d966695c852c22f4c3392 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/156064 Reviewed-by: Konstantin Shcheglov <[email protected]> Commit-Queue: Brian Wilkerson <[email protected]>
1 parent 9b96337 commit 4a268b7

File tree

2 files changed

+28
-1
lines changed

2 files changed

+28
-1
lines changed

pkg/analyzer/lib/dart/ast/visitor.dart

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -98,7 +98,7 @@ class DelegatingAstVisitor<T> extends UnifyingAstVisitor<T> {
9898

9999
/// Initialize a newly created visitor to use each of the given delegate
100100
/// visitors to visit the nodes of an AST structure.
101-
DelegatingAstVisitor(this.delegates);
101+
const DelegatingAstVisitor(this.delegates);
102102

103103
@override
104104
T visitNode(AstNode node) {
@@ -128,6 +128,9 @@ class DelegatingAstVisitor<T> extends UnifyingAstVisitor<T> {
128128
///
129129
/// Clients may extend this class.
130130
class GeneralizingAstVisitor<R> implements AstVisitor<R> {
131+
/// Initialize a newly created visitor.
132+
const GeneralizingAstVisitor();
133+
131134
@override
132135
R visitAdjacentStrings(AdjacentStrings node) => visitStringLiteral(node);
133136

@@ -606,6 +609,9 @@ class GeneralizingAstVisitor<R> implements AstVisitor<R> {
606609
///
607610
/// Clients may extend this class.
608611
class RecursiveAstVisitor<R> implements AstVisitor<R> {
612+
/// Initialize a newly created visitor.
613+
const RecursiveAstVisitor();
614+
609615
@override
610616
R visitAdjacentStrings(AdjacentStrings node) {
611617
node.visitChildren(this);
@@ -1341,6 +1347,9 @@ class RecursiveAstVisitor<R> implements AstVisitor<R> {
13411347
///
13421348
/// Clients may extend this class.
13431349
class SimpleAstVisitor<R> implements AstVisitor<R> {
1350+
/// Initialize a newly created visitor.
1351+
const SimpleAstVisitor();
1352+
13441353
@override
13451354
R visitAdjacentStrings(AdjacentStrings node) => null;
13461355

@@ -1719,6 +1728,9 @@ class SimpleAstVisitor<R> implements AstVisitor<R> {
17191728
///
17201729
/// Clients may extend this class.
17211730
class ThrowingAstVisitor<R> implements AstVisitor<R> {
1731+
/// Initialize a newly created visitor.
1732+
const ThrowingAstVisitor();
1733+
17221734
@override
17231735
R visitAdjacentStrings(AdjacentStrings node) => _throw(node);
17241736

@@ -3097,6 +3109,9 @@ class TimedAstVisitor<T> implements AstVisitor<T> {
30973109
///
30983110
/// Clients may extend this class.
30993111
class UnifyingAstVisitor<R> implements AstVisitor<R> {
3112+
/// Initialize a newly created visitor.
3113+
const UnifyingAstVisitor();
3114+
31003115
@override
31013116
R visitAdjacentStrings(AdjacentStrings node) => visitNode(node);
31023117

pkg/analyzer/lib/dart/element/visitor.dart

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,9 @@ import 'package:analyzer/dart/element/element.dart';
7979
///
8080
/// Clients may extend this class.
8181
class GeneralizingElementVisitor<R> implements ElementVisitor<R> {
82+
/// Initialize a newly created visitor.
83+
const GeneralizingElementVisitor();
84+
8285
@override
8386
R visitClassElement(ClassElement element) => visitElement(element);
8487

@@ -191,6 +194,9 @@ class GeneralizingElementVisitor<R> implements ElementVisitor<R> {
191194
///
192195
/// Clients may extend this class.
193196
class RecursiveElementVisitor<R> implements ElementVisitor<R> {
197+
/// Initialize a newly created visitor.
198+
const RecursiveElementVisitor();
199+
194200
@override
195201
R visitClassElement(ClassElement element) {
196202
element.visitChildren(this);
@@ -325,6 +331,9 @@ class RecursiveElementVisitor<R> implements ElementVisitor<R> {
325331
///
326332
/// Clients may extend this class.
327333
class SimpleElementVisitor<R> implements ElementVisitor<R> {
334+
/// Initialize a newly created visitor.
335+
const SimpleElementVisitor();
336+
328337
@override
329338
R visitClassElement(ClassElement element) => null;
330339

@@ -398,6 +407,9 @@ class SimpleElementVisitor<R> implements ElementVisitor<R> {
398407
///
399408
/// Clients may extend this class.
400409
class ThrowingElementVisitor<R> implements ElementVisitor<R> {
410+
/// Initialize a newly created visitor.
411+
const ThrowingElementVisitor();
412+
401413
@override
402414
R visitClassElement(ClassElement element) => _throw(element);
403415

0 commit comments

Comments
 (0)