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

Side by Side Diff: pkg/compiler/lib/src/elements/visitor.dart

Issue 1093363002: Refactor DartTypeVisitor and ElementVisitor. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 5 years, 8 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 | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2012, 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 visitor; 5 library visitor;
6 6
7 import 'elements.dart'; 7 import 'elements.dart';
8 import '../closure.dart' 8 import '../closure.dart'
9 show BoxFieldElement, 9 show BoxFieldElement,
10 ClosureClassElement, 10 ClosureClassElement,
11 ClosureFieldElement; 11 ClosureFieldElement;
12 12
13 abstract class ElementVisitor<R> { 13 abstract class ElementVisitor<R, A> {
14 R visit(Element e) => e.accept(this); 14 const ElementVisitor();
15 15
16 R visitElement(Element e); 16 R apply(Element e, A arg) => e.accept(this, arg);
17 R visitErroneousElement(ErroneousElement e) => visitFunctionElement(e); 17
18 R visitWarnOnUseElement(WarnOnUseElement e) => visitElement(e); 18 R visitErroneousElement(ErroneousElement e, A arg) => null;
19 R visitAmbiguousElement(AmbiguousElement e) => visitElement(e); 19 R visitWarnOnUseElement(WarnOnUseElement e, A arg) => null;
20 R visitScopeContainerElement(ScopeContainerElement e) => visitElement(e); 20 R visitAmbiguousElement(AmbiguousElement e, A arg) => null;
21 R visitCompilationUnitElement(CompilationUnitElement e) => visitElement(e); 21 R visitCompilationUnitElement(CompilationUnitElement e, A arg) => null;
22 R visitLibraryElement(LibraryElement e) => visitScopeContainerElement(e); 22 R visitLibraryElement(LibraryElement e, A arg) => null;
23 R visitPrefixElement(PrefixElement e) => visitElement(e); 23 R visitPrefixElement(PrefixElement e, A arg) => null;
24 R visitTypedefElement(TypedefElement e) => visitElement(e); 24 R visitTypedefElement(TypedefElement e, A arg) => null;
25 R visitVariableElement(VariableElement e) => visitElement(e); 25 R visitVariableElement(VariableElement e, A arg) => null;
26 R visitParameterElement(ParameterElement e) => visitVariableElement(e); 26 R visitParameterElement(ParameterElement e, A arg) => null;
27 R visitFormalElement(FormalElement e) => visitElement(e); 27 R visitFormalElement(FormalElement e, A arg) => null;
28 R visitFieldElement(FieldElement e) => visitVariableElement(e); 28 R visitFieldElement(FieldElement e, A arg) => null;
29 R visitFieldParameterElement(InitializingFormalElement e) => 29 R visitFieldParameterElement(InitializingFormalElement e, A arg) => null;
30 visitParameterElement(e); 30 R visitAbstractFieldElement(AbstractFieldElement e, A arg) => null;
31 R visitAbstractFieldElement(AbstractFieldElement e) => visitElement(e); 31 R visitFunctionElement(FunctionElement e, A arg) => null;
32 R visitFunctionElement(FunctionElement e) => visitElement(e); 32 R visitConstructorBodyElement(ConstructorBodyElement e, A arg) => null;
33 R visitConstructorBodyElement(ConstructorBodyElement e) => visitElement(e); 33 R visitClassElement(ClassElement e, A arg) => null;
34 R visitClassElement(ClassElement e) => visitScopeContainerElement(e); 34 R visitMixinApplicationElement(MixinApplicationElement e, A arg) => null;
35 R visitTypeDeclarationElement(TypeDeclarationElement e) => visitElement(e); 35 R visitEnumClassElement(EnumClassElement e, A arg) => null;
36 R visitMixinApplicationElement(MixinApplicationElement e) { 36 R visitTypeVariableElement(TypeVariableElement e, A arg) => null;
37 return visitClassElement(e); 37 R visitBoxFieldElement(BoxFieldElement e, A arg) => null;
38 R visitClosureClassElement(ClosureClassElement e, A arg) => null;
39 R visitClosureFieldElement(ClosureFieldElement e, A arg) => null;
40 }
41
42
43 abstract class BaseElementVisitor<R, A> extends ElementVisitor<R, A> {
44 const BaseElementVisitor();
45
46 R visitElement(Element e, A arg);
47
48 @override
49 R visitErroneousElement(ErroneousElement e, A arg) {
50 return visitFunctionElement(e, arg);
38 } 51 }
39 R visitEnumClassElement(EnumClassElement e) => visitClassElement(e); 52
40 R visitTypeVariableElement(TypeVariableElement e) => visitElement(e); 53 @override
41 R visitBoxFieldElement(BoxFieldElement e) => visitElement(e); 54 R visitWarnOnUseElement(WarnOnUseElement e, A arg) {
42 R visitClosureClassElement(ClosureClassElement e) => visitClassElement(e); 55 return visitElement(e, arg);
43 R visitClosureFieldElement(ClosureFieldElement e) => visitVariableElement(e); 56 }
57
58 @override
59 R visitAmbiguousElement(AmbiguousElement e, A arg) {
60 return visitElement(e, arg);
61 }
62
63 R visitScopeContainerElement(ScopeContainerElement e, A arg) {
64 return visitElement(e, arg);
65 }
66
67 @override
68 R visitCompilationUnitElement(CompilationUnitElement e, A arg) {
69 return visitElement(e, arg);
70 }
71
72 @override
73 R visitLibraryElement(LibraryElement e, A arg) {
74 return visitScopeContainerElement(e, arg);
75 }
76
77 @override
78 R visitPrefixElement(PrefixElement e, A arg) {
79 return visitElement(e, arg);
80 }
81
82 @override
83 R visitTypedefElement(TypedefElement e, A arg) {
84 return visitElement(e, arg);
85 }
86
87 @override
88 R visitVariableElement(VariableElement e, A arg) {
89 return visitElement(e, arg);
90 }
91
92 @override
93 R visitParameterElement(ParameterElement e, A arg) {
94 return visitVariableElement(e, arg);
95 }
96
97 @override
98 R visitFormalElement(FormalElement e, A arg) {
99 return visitElement(e, arg);
100 }
101
102 @override
103 R visitFieldElement(FieldElement e, A arg) {
104 return visitVariableElement(e, arg);
105 }
106
107 @override
108 R visitFieldParameterElement(InitializingFormalElement e, A arg) {
109 return visitParameterElement(e, arg);
110 }
111
112 @override
113 R visitAbstractFieldElement(AbstractFieldElement e, A arg) {
114 return visitElement(e, arg);
115 }
116
117 @override
118 R visitFunctionElement(FunctionElement e, A arg) {
119 return visitElement(e, arg);
120 }
121
122 @override
123 R visitConstructorBodyElement(ConstructorBodyElement e, A arg) {
124 return visitElement(e, arg);
125 }
126
127 @override
128 R visitClassElement(ClassElement e, A arg) {
129 return visitScopeContainerElement(e, arg);
130 }
131
132 R visitTypeDeclarationElement(TypeDeclarationElement e, A arg) {
133 return visitElement(e, arg);
134 }
135
136 @override
137 R visitMixinApplicationElement(MixinApplicationElement e, A arg) {
138 return visitClassElement(e, arg);
139 }
140
141 @override
142 R visitEnumClassElement(EnumClassElement e, A arg) {
143 return visitClassElement(e, arg);
144 }
145
146 @override
147 R visitTypeVariableElement(TypeVariableElement e, A arg) {
148 return visitElement(e, arg);
149 }
150
151 @override
152 R visitBoxFieldElement(BoxFieldElement e, A arg) {
153 return visitElement(e, arg);
154 }
155
156 @override
157 R visitClosureClassElement(ClosureClassElement e, A arg) {
158 return visitClassElement(e, arg);
159 }
160
161 @override
162 R visitClosureFieldElement(ClosureFieldElement e, A arg) {
163 return visitVariableElement(e, arg);
164 }
44 } 165 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698