001    /*
002     * Copyright 2010-2015 JetBrains s.r.o.
003     *
004     * Licensed under the Apache License, Version 2.0 (the "License");
005     * you may not use this file except in compliance with the License.
006     * You may obtain a copy of the License at
007     *
008     * http://www.apache.org/licenses/LICENSE-2.0
009     *
010     * Unless required by applicable law or agreed to in writing, software
011     * distributed under the License is distributed on an "AS IS" BASIS,
012     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
013     * See the License for the specific language governing permissions and
014     * limitations under the License.
015     */
016    
017    package org.jetbrains.kotlin.psi;
018    
019    import com.intellij.psi.PsiElementVisitor;
020    import org.jetbrains.annotations.NotNull;
021    
022    public class JetVisitor<R, D> extends PsiElementVisitor {
023        public R visitJetElement(@NotNull JetElement element, D data) {
024            visitElement(element);
025            return null;
026        }
027    
028        public R visitDeclaration(@NotNull JetDeclaration dcl, D data) {
029            return visitExpression(dcl, data);
030        }
031    
032        public R visitClass(@NotNull JetClass klass, D data) {
033            return visitNamedDeclaration(klass, data);
034        }
035    
036        public R visitNamedFunction(@NotNull JetNamedFunction function, D data) {
037            return visitNamedDeclaration(function, data);
038        }
039    
040        public R visitProperty(@NotNull JetProperty property, D data) {
041            return visitNamedDeclaration(property, data);
042        }
043    
044        public R visitMultiDeclaration(@NotNull JetMultiDeclaration multiDeclaration, D data) {
045            return visitDeclaration(multiDeclaration, data);
046        }
047    
048        public R visitMultiDeclarationEntry(@NotNull JetMultiDeclarationEntry multiDeclarationEntry, D data) {
049            return visitNamedDeclaration(multiDeclarationEntry, data);
050        }
051    
052        public R visitTypedef(@NotNull JetTypedef typedef, D data) {
053            return visitNamedDeclaration(typedef, data);
054        }
055    
056        public R visitJetFile(@NotNull JetFile file, D data) {
057            visitFile(file);
058            return null;
059        }
060    
061        public R visitScript(@NotNull JetScript script, D data) {
062            return visitDeclaration(script, data);
063        }
064    
065        public R visitImportDirective(@NotNull JetImportDirective importDirective, D data) {
066            return visitJetElement(importDirective, data);
067        }
068    
069        public R visitImportList(@NotNull JetImportList importList, D data) {
070            return visitJetElement(importList, data);
071        }
072    
073        public R visitFileAnnotationList(@NotNull JetFileAnnotationList fileAnnotationList, D data) {
074            return visitJetElement(fileAnnotationList, data);
075        }
076    
077        public R visitClassBody(@NotNull JetClassBody classBody, D data) {
078            return visitJetElement(classBody, data);
079        }
080    
081        public R visitModifierList(@NotNull JetModifierList list, D data) {
082            return visitJetElement(list, data);
083        }
084    
085        public R visitAnnotation(@NotNull JetAnnotation annotation, D data) {
086            return visitJetElement(annotation, data);
087        }
088    
089        public R visitAnnotationEntry(@NotNull JetAnnotationEntry annotationEntry, D data) {
090            return visitJetElement(annotationEntry, data);
091        }
092    
093        public R visitConstructorCalleeExpression(@NotNull JetConstructorCalleeExpression constructorCalleeExpression, D data) {
094            return visitJetElement(constructorCalleeExpression, data);
095        }
096    
097        public R visitTypeParameterList(@NotNull JetTypeParameterList list, D data) {
098            return visitJetElement(list, data);
099        }
100    
101        public R visitTypeParameter(@NotNull JetTypeParameter parameter, D data) {
102            return visitNamedDeclaration(parameter, data);
103        }
104    
105        public R visitEnumEntry(@NotNull JetEnumEntry enumEntry, D data) {
106            return visitClass(enumEntry, data);
107        }
108    
109        public R visitParameterList(@NotNull JetParameterList list, D data) {
110            return visitJetElement(list, data);
111        }
112    
113        public R visitParameter(@NotNull JetParameter parameter, D data) {
114            return visitNamedDeclaration(parameter, data);
115        }
116    
117        public R visitDelegationSpecifierList(@NotNull JetDelegationSpecifierList list, D data) {
118            return visitJetElement(list, data);
119        }
120    
121        public R visitDelegationSpecifier(@NotNull JetDelegationSpecifier specifier, D data) {
122            return visitJetElement(specifier, data);
123        }
124    
125        public R visitDelegationByExpressionSpecifier(@NotNull JetDelegatorByExpressionSpecifier specifier, D data) {
126            return visitDelegationSpecifier(specifier, data);
127        }
128    
129        public R visitDelegationToSuperCallSpecifier(@NotNull JetDelegatorToSuperCall call, D data) {
130            return visitDelegationSpecifier(call, data);
131        }
132    
133        public R visitDelegationToSuperClassSpecifier(@NotNull JetDelegatorToSuperClass specifier, D data) {
134            return visitDelegationSpecifier(specifier, data);
135        }
136    
137        public R visitDelegationToThisCall(@NotNull JetDelegatorToThisCall thisCall, D data) {
138            return visitDelegationSpecifier(thisCall, data);
139        }
140    
141        public R visitPropertyDelegate(@NotNull JetPropertyDelegate delegate, D data) {
142            return visitJetElement(delegate, data);
143        }
144    
145        public R visitTypeReference(@NotNull JetTypeReference typeReference, D data) {
146            return visitJetElement(typeReference, data);
147        }
148    
149        public R visitValueArgumentList(@NotNull JetValueArgumentList list, D data) {
150            return visitJetElement(list, data);
151        }
152    
153        public R visitArgument(@NotNull JetValueArgument argument, D data) {
154            return visitJetElement(argument, data);
155        }
156    
157        public R visitExpression(@NotNull JetExpression expression, D data) {
158            return visitJetElement(expression, data);
159        }
160    
161        public R visitLoopExpression(@NotNull JetLoopExpression loopExpression, D data) {
162            return visitExpression(loopExpression, data);
163        }
164    
165        public R visitConstantExpression(@NotNull JetConstantExpression expression, D data) {
166            return visitExpression(expression, data);
167        }
168    
169        public R visitSimpleNameExpression(@NotNull JetSimpleNameExpression expression, D data) {
170            return visitReferenceExpression(expression, data);
171        }
172    
173        public R visitReferenceExpression(@NotNull JetReferenceExpression expression, D data) {
174            return visitExpression(expression, data);
175        }
176    
177        public R visitLabeledExpression(@NotNull JetLabeledExpression expression, D data) {
178            return visitExpressionWithLabel(expression, data);
179        }
180    
181        public R visitPrefixExpression(@NotNull JetPrefixExpression expression, D data) {
182            return visitUnaryExpression(expression, data);
183        }
184    
185        public R visitPostfixExpression(@NotNull JetPostfixExpression expression, D data) {
186            return visitUnaryExpression(expression, data);
187        }
188    
189        public R visitUnaryExpression(@NotNull JetUnaryExpression expression, D data) {
190            return visitExpression(expression, data);
191        }
192    
193        public R visitBinaryExpression(@NotNull JetBinaryExpression expression, D data) {
194            return visitExpression(expression, data);
195        }
196    
197        public R visitReturnExpression(@NotNull JetReturnExpression expression, D data) {
198            return visitExpressionWithLabel(expression, data);
199        }
200    
201        public R visitExpressionWithLabel(@NotNull JetExpressionWithLabel expression, D data) {
202            return visitExpression(expression, data);
203        }
204    
205        public R visitThrowExpression(@NotNull JetThrowExpression expression, D data) {
206            return visitExpression(expression, data);
207        }
208    
209        public R visitBreakExpression(@NotNull JetBreakExpression expression, D data) {
210            return visitExpressionWithLabel(expression, data);
211        }
212    
213        public R visitContinueExpression(@NotNull JetContinueExpression expression, D data) {
214            return visitExpressionWithLabel(expression, data);
215        }
216    
217        public R visitIfExpression(@NotNull JetIfExpression expression, D data) {
218            return visitExpression(expression, data);
219        }
220    
221        public R visitWhenExpression(@NotNull JetWhenExpression expression, D data) {
222            return visitExpression(expression, data);
223        }
224    
225        public R visitTryExpression(@NotNull JetTryExpression expression, D data) {
226            return visitExpression(expression, data);
227        }
228    
229        public R visitForExpression(@NotNull JetForExpression expression, D data) {
230            return visitLoopExpression(expression, data);
231        }
232    
233        public R visitWhileExpression(@NotNull JetWhileExpression expression, D data) {
234            return visitLoopExpression(expression, data);
235        }
236    
237        public R visitDoWhileExpression(@NotNull JetDoWhileExpression expression, D data) {
238            return visitLoopExpression(expression, data);
239        }
240    
241        public R visitFunctionLiteralExpression(@NotNull JetFunctionLiteralExpression expression, D data) {
242            return visitExpression(expression, data);
243        }
244    
245        public R visitAnnotatedExpression(@NotNull JetAnnotatedExpression expression, D data) {
246            return visitExpression(expression, data);
247        }
248    
249        public R visitCallExpression(@NotNull JetCallExpression expression, D data) {
250            return visitReferenceExpression(expression, data);
251        }
252    
253        public R visitArrayAccessExpression(@NotNull JetArrayAccessExpression expression, D data) {
254            return visitReferenceExpression(expression, data);
255        }
256    
257        public R visitQualifiedExpression(@NotNull JetQualifiedExpression expression, D data) {
258            return visitExpression(expression, data);
259        }
260    
261        public R visitCallableReferenceExpression(@NotNull JetCallableReferenceExpression expression, D data) {
262            return visitExpression(expression, data);
263        }
264    
265        public R visitDotQualifiedExpression(@NotNull JetDotQualifiedExpression expression, D data) {
266            return visitQualifiedExpression(expression, data);
267        }
268    
269        public R visitSafeQualifiedExpression(@NotNull JetSafeQualifiedExpression expression, D data) {
270            return visitQualifiedExpression(expression, data);
271        }
272    
273        public R visitObjectLiteralExpression(@NotNull JetObjectLiteralExpression expression, D data) {
274            return visitExpression(expression, data);
275        }
276    
277        public R visitRootPackageExpression(@NotNull JetRootPackageExpression expression, D data) {
278            return visitExpression(expression, data);
279        }
280    
281        public R visitBlockExpression(@NotNull JetBlockExpression expression, D data) {
282            return visitExpression(expression, data);
283        }
284    
285        public R visitCatchSection(@NotNull JetCatchClause catchClause, D data) {
286            return visitJetElement(catchClause, data);
287        }
288    
289        public R visitFinallySection(@NotNull JetFinallySection finallySection, D data) {
290            return visitJetElement(finallySection, data);
291        }
292    
293        public R visitTypeArgumentList(@NotNull JetTypeArgumentList typeArgumentList, D data) {
294            return visitJetElement(typeArgumentList, data);
295        }
296    
297        public R visitThisExpression(@NotNull JetThisExpression expression, D data) {
298            return visitExpressionWithLabel(expression, data);
299        }
300    
301        public R visitSuperExpression(@NotNull JetSuperExpression expression, D data) {
302            return visitExpressionWithLabel(expression, data);
303        }
304    
305        public R visitParenthesizedExpression(@NotNull JetParenthesizedExpression expression, D data) {
306            return visitExpression(expression, data);
307        }
308    
309        public R visitInitializerList(@NotNull JetInitializerList list, D data) {
310            return visitJetElement(list, data);
311        }
312    
313        public R visitAnonymousInitializer(@NotNull JetClassInitializer initializer, D data) {
314            return visitDeclaration(initializer, data);
315        }
316    
317        public R visitPropertyAccessor(@NotNull JetPropertyAccessor accessor, D data) {
318            return visitDeclaration(accessor, data);
319        }
320    
321        public R visitTypeConstraintList(@NotNull JetTypeConstraintList list, D data) {
322            return visitJetElement(list, data);
323        }
324    
325        public R visitTypeConstraint(@NotNull JetTypeConstraint constraint, D data) {
326            return visitJetElement(constraint, data);
327        }
328    
329        private R visitTypeElement(@NotNull JetTypeElement type, D data) {
330            return visitJetElement(type, data);
331        }
332    
333        public R visitUserType(@NotNull JetUserType type, D data) {
334            return visitTypeElement(type, data);
335        }
336    
337        public R visitDynamicType(@NotNull JetDynamicType type, D data) {
338            return visitTypeElement(type, data);
339        }
340    
341        public R visitFunctionType(@NotNull JetFunctionType type, D data) {
342            return visitTypeElement(type, data);
343        }
344    
345        public R visitSelfType(@NotNull JetSelfType type, D data) {
346            return visitTypeElement(type, data);
347        }
348    
349        public R visitBinaryWithTypeRHSExpression(@NotNull JetBinaryExpressionWithTypeRHS expression, D data) {
350            return visitExpression(expression, data);
351        }
352    
353        public R visitStringTemplateExpression(@NotNull JetStringTemplateExpression expression, D data) {
354            return visitExpression(expression, data);
355        }
356    
357        public R visitNamedDeclaration(@NotNull JetNamedDeclaration declaration, D data) {
358            return visitDeclaration(declaration, data);
359        }
360    
361        public R visitNullableType(@NotNull JetNullableType nullableType, D data) {
362            return visitTypeElement(nullableType, data);
363        }
364    
365        public R visitTypeProjection(@NotNull JetTypeProjection typeProjection, D data) {
366            return visitJetElement(typeProjection, data);
367        }
368    
369        public R visitWhenEntry(@NotNull JetWhenEntry jetWhenEntry, D data) {
370            return visitJetElement(jetWhenEntry, data);
371        }
372    
373        public R visitIsExpression(@NotNull JetIsExpression expression, D data) {
374            return visitExpression(expression, data);
375        }
376    
377        public R visitWhenConditionIsPattern(@NotNull JetWhenConditionIsPattern condition, D data) {
378            return visitJetElement(condition, data);
379        }
380    
381        public R visitWhenConditionInRange(@NotNull JetWhenConditionInRange condition, D data) {
382            return visitJetElement(condition, data);
383        }
384    
385        public R visitWhenConditionWithExpression(@NotNull JetWhenConditionWithExpression condition, D data) {
386            return visitJetElement(condition, data);
387        }
388    
389        public R visitObjectDeclaration(@NotNull JetObjectDeclaration declaration, D data) {
390            return visitNamedDeclaration(declaration, data);
391        }
392    
393        public R visitObjectDeclarationName(@NotNull JetObjectDeclarationName declarationName, D data) {
394            return visitExpression(declarationName, data);
395        }
396    
397        public R visitStringTemplateEntry(@NotNull JetStringTemplateEntry entry, D data) {
398            return visitJetElement(entry, data);
399        }
400    
401        public R visitStringTemplateEntryWithExpression(@NotNull JetStringTemplateEntryWithExpression entry, D data) {
402            return visitStringTemplateEntry(entry, data);
403        }
404    
405        public R visitBlockStringTemplateEntry(@NotNull JetBlockStringTemplateEntry entry, D data) {
406            return visitStringTemplateEntryWithExpression(entry, data);
407        }
408    
409        public R visitSimpleNameStringTemplateEntry(@NotNull JetSimpleNameStringTemplateEntry entry, D data) {
410            return visitStringTemplateEntryWithExpression(entry, data);
411        }
412    
413        public R visitLiteralStringTemplateEntry(@NotNull JetLiteralStringTemplateEntry entry, D data) {
414            return visitStringTemplateEntry(entry, data);
415        }
416    
417        public R visitEscapeStringTemplateEntry(@NotNull JetEscapeStringTemplateEntry entry, D data) {
418            return visitStringTemplateEntry(entry, data);
419        }
420    
421        public R visitPackageDirective(@NotNull JetPackageDirective directive, D data) {
422            return visitExpression(directive, data);
423        }
424    }