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 KtVisitor<R, D> extends PsiElementVisitor {
023        public R visitKtElement(@NotNull KtElement element, D data) {
024            visitElement(element);
025            return null;
026        }
027    
028        public R visitDeclaration(@NotNull KtDeclaration dcl, D data) {
029            return visitExpression(dcl, data);
030        }
031    
032        public R visitClass(@NotNull KtClass klass, D data) {
033            return visitClassOrObject(klass, data);
034        }
035    
036        public R visitObjectDeclaration(@NotNull KtObjectDeclaration declaration, D data) {
037            return visitClassOrObject(declaration, data);
038        }
039    
040        public R visitClassOrObject(@NotNull KtClassOrObject classOrObject, D data) {
041            return visitNamedDeclaration(classOrObject, data);
042        }
043    
044        public R visitSecondaryConstructor(@NotNull KtSecondaryConstructor constructor, D data) {
045            return visitDeclaration(constructor, data);
046        }
047    
048        public R visitPrimaryConstructor(@NotNull KtPrimaryConstructor constructor, D data) {
049            return visitDeclaration(constructor, data);
050        }
051    
052        public R visitNamedFunction(@NotNull KtNamedFunction function, D data) {
053            return visitNamedDeclaration(function, data);
054        }
055    
056        public R visitProperty(@NotNull KtProperty property, D data) {
057            return visitNamedDeclaration(property, data);
058        }
059    
060        public R visitDestructuringDeclaration(@NotNull KtDestructuringDeclaration multiDeclaration, D data) {
061            return visitDeclaration(multiDeclaration, data);
062        }
063    
064        public R visitDestructuringDeclarationEntry(@NotNull KtDestructuringDeclarationEntry multiDeclarationEntry, D data) {
065            return visitNamedDeclaration(multiDeclarationEntry, data);
066        }
067    
068        public R visitKtFile(@NotNull KtFile file, D data) {
069            visitFile(file);
070            return null;
071        }
072    
073        public R visitScript(@NotNull KtScript script, D data) {
074            return visitDeclaration(script, data);
075        }
076    
077        public R visitImportDirective(@NotNull KtImportDirective importDirective, D data) {
078            return visitKtElement(importDirective, data);
079        }
080    
081        public R visitImportList(@NotNull KtImportList importList, D data) {
082            return visitKtElement(importList, data);
083        }
084    
085        public R visitFileAnnotationList(@NotNull KtFileAnnotationList fileAnnotationList, D data) {
086            return visitKtElement(fileAnnotationList, data);
087        }
088    
089        public R visitClassBody(@NotNull KtClassBody classBody, D data) {
090            return visitKtElement(classBody, data);
091        }
092    
093        public R visitModifierList(@NotNull KtModifierList list, D data) {
094            return visitKtElement(list, data);
095        }
096    
097        public R visitAnnotation(@NotNull KtAnnotation annotation, D data) {
098            return visitKtElement(annotation, data);
099        }
100    
101        public R visitAnnotationEntry(@NotNull KtAnnotationEntry annotationEntry, D data) {
102            return visitKtElement(annotationEntry, data);
103        }
104    
105        public R visitAnnotationUseSiteTarget(@NotNull KtAnnotationUseSiteTarget annotationTarget, D data) {
106            return visitKtElement(annotationTarget, data);
107        }
108    
109        public R visitConstructorCalleeExpression(@NotNull KtConstructorCalleeExpression constructorCalleeExpression, D data) {
110            return visitKtElement(constructorCalleeExpression, data);
111        }
112    
113        public R visitTypeParameterList(@NotNull KtTypeParameterList list, D data) {
114            return visitKtElement(list, data);
115        }
116    
117        public R visitTypeParameter(@NotNull KtTypeParameter parameter, D data) {
118            return visitNamedDeclaration(parameter, data);
119        }
120    
121        public R visitEnumEntry(@NotNull KtEnumEntry enumEntry, D data) {
122            return visitClass(enumEntry, data);
123        }
124    
125        public R visitParameterList(@NotNull KtParameterList list, D data) {
126            return visitKtElement(list, data);
127        }
128    
129        public R visitParameter(@NotNull KtParameter parameter, D data) {
130            return visitNamedDeclaration(parameter, data);
131        }
132    
133        public R visitSuperTypeList(@NotNull KtSuperTypeList list, D data) {
134            return visitKtElement(list, data);
135        }
136    
137        public R visitSuperTypeListEntry(@NotNull KtSuperTypeListEntry specifier, D data) {
138            return visitKtElement(specifier, data);
139        }
140    
141        public R visitDelegatedSuperTypeEntry(@NotNull KtDelegatedSuperTypeEntry specifier, D data) {
142            return visitSuperTypeListEntry(specifier, data);
143        }
144    
145        public R visitSuperTypeCallEntry(@NotNull KtSuperTypeCallEntry call, D data) {
146            return visitSuperTypeListEntry(call, data);
147        }
148    
149        public R visitSuperTypeEntry(@NotNull KtSuperTypeEntry specifier, D data) {
150            return visitSuperTypeListEntry(specifier, data);
151        }
152    
153        public R visitConstructorDelegationCall(@NotNull KtConstructorDelegationCall call, D data) {
154            return visitKtElement(call, data);
155        }
156    
157        public R visitPropertyDelegate(@NotNull KtPropertyDelegate delegate, D data) {
158            return visitKtElement(delegate, data);
159        }
160    
161        public R visitTypeReference(@NotNull KtTypeReference typeReference, D data) {
162            return visitKtElement(typeReference, data);
163        }
164    
165        public R visitValueArgumentList(@NotNull KtValueArgumentList list, D data) {
166            return visitKtElement(list, data);
167        }
168    
169        public R visitArgument(@NotNull KtValueArgument argument, D data) {
170            return visitKtElement(argument, data);
171        }
172    
173        public R visitExpression(@NotNull KtExpression expression, D data) {
174            return visitKtElement(expression, data);
175        }
176    
177        public R visitLoopExpression(@NotNull KtLoopExpression loopExpression, D data) {
178            return visitExpression(loopExpression, data);
179        }
180    
181        public R visitConstantExpression(@NotNull KtConstantExpression expression, D data) {
182            return visitExpression(expression, data);
183        }
184    
185        public R visitSimpleNameExpression(@NotNull KtSimpleNameExpression expression, D data) {
186            return visitReferenceExpression(expression, data);
187        }
188    
189        public R visitReferenceExpression(@NotNull KtReferenceExpression expression, D data) {
190            return visitExpression(expression, data);
191        }
192    
193        public R visitLabeledExpression(@NotNull KtLabeledExpression expression, D data) {
194            return visitExpressionWithLabel(expression, data);
195        }
196    
197        public R visitPrefixExpression(@NotNull KtPrefixExpression expression, D data) {
198            return visitUnaryExpression(expression, data);
199        }
200    
201        public R visitPostfixExpression(@NotNull KtPostfixExpression expression, D data) {
202            return visitUnaryExpression(expression, data);
203        }
204    
205        public R visitUnaryExpression(@NotNull KtUnaryExpression expression, D data) {
206            return visitExpression(expression, data);
207        }
208    
209        public R visitBinaryExpression(@NotNull KtBinaryExpression expression, D data) {
210            return visitExpression(expression, data);
211        }
212    
213        public R visitReturnExpression(@NotNull KtReturnExpression expression, D data) {
214            return visitExpressionWithLabel(expression, data);
215        }
216    
217        public R visitExpressionWithLabel(@NotNull KtExpressionWithLabel expression, D data) {
218            return visitExpression(expression, data);
219        }
220    
221        public R visitThrowExpression(@NotNull KtThrowExpression expression, D data) {
222            return visitExpression(expression, data);
223        }
224    
225        public R visitBreakExpression(@NotNull KtBreakExpression expression, D data) {
226            return visitExpressionWithLabel(expression, data);
227        }
228    
229        public R visitContinueExpression(@NotNull KtContinueExpression expression, D data) {
230            return visitExpressionWithLabel(expression, data);
231        }
232    
233        public R visitIfExpression(@NotNull KtIfExpression expression, D data) {
234            return visitExpression(expression, data);
235        }
236    
237        public R visitWhenExpression(@NotNull KtWhenExpression expression, D data) {
238            return visitExpression(expression, data);
239        }
240    
241        public R visitTryExpression(@NotNull KtTryExpression expression, D data) {
242            return visitExpression(expression, data);
243        }
244    
245        public R visitForExpression(@NotNull KtForExpression expression, D data) {
246            return visitLoopExpression(expression, data);
247        }
248    
249        public R visitWhileExpression(@NotNull KtWhileExpression expression, D data) {
250            return visitLoopExpression(expression, data);
251        }
252    
253        public R visitDoWhileExpression(@NotNull KtDoWhileExpression expression, D data) {
254            return visitLoopExpression(expression, data);
255        }
256    
257        public R visitLambdaExpression(@NotNull KtLambdaExpression expression, D data) {
258            return visitExpression(expression, data);
259        }
260    
261        public R visitAnnotatedExpression(@NotNull KtAnnotatedExpression expression, D data) {
262            return visitExpression(expression, data);
263        }
264    
265        public R visitCallExpression(@NotNull KtCallExpression expression, D data) {
266            return visitReferenceExpression(expression, data);
267        }
268    
269        public R visitArrayAccessExpression(@NotNull KtArrayAccessExpression expression, D data) {
270            return visitReferenceExpression(expression, data);
271        }
272    
273        public R visitQualifiedExpression(@NotNull KtQualifiedExpression expression, D data) {
274            return visitExpression(expression, data);
275        }
276    
277        public R visitDoubleColonExpression(@NotNull KtDoubleColonExpression expression, D data) {
278            return visitExpression(expression, data);
279        }
280    
281        public R visitCallableReferenceExpression(@NotNull KtCallableReferenceExpression expression, D data) {
282            return visitDoubleColonExpression(expression, data);
283        }
284    
285        public R visitClassLiteralExpression(@NotNull KtClassLiteralExpression expression, D data) {
286            return visitDoubleColonExpression(expression, data);
287        }
288    
289        public R visitDotQualifiedExpression(@NotNull KtDotQualifiedExpression expression, D data) {
290            return visitQualifiedExpression(expression, data);
291        }
292    
293        public R visitSafeQualifiedExpression(@NotNull KtSafeQualifiedExpression expression, D data) {
294            return visitQualifiedExpression(expression, data);
295        }
296    
297        public R visitObjectLiteralExpression(@NotNull KtObjectLiteralExpression expression, D data) {
298            return visitExpression(expression, data);
299        }
300    
301        public R visitBlockExpression(@NotNull KtBlockExpression expression, D data) {
302            return visitExpression(expression, data);
303        }
304    
305        public R visitCatchSection(@NotNull KtCatchClause catchClause, D data) {
306            return visitKtElement(catchClause, data);
307        }
308    
309        public R visitFinallySection(@NotNull KtFinallySection finallySection, D data) {
310            return visitKtElement(finallySection, data);
311        }
312    
313        public R visitTypeArgumentList(@NotNull KtTypeArgumentList typeArgumentList, D data) {
314            return visitKtElement(typeArgumentList, data);
315        }
316    
317        public R visitThisExpression(@NotNull KtThisExpression expression, D data) {
318            return visitExpressionWithLabel(expression, data);
319        }
320    
321        public R visitSuperExpression(@NotNull KtSuperExpression expression, D data) {
322            return visitExpressionWithLabel(expression, data);
323        }
324    
325        public R visitParenthesizedExpression(@NotNull KtParenthesizedExpression expression, D data) {
326            return visitExpression(expression, data);
327        }
328    
329        public R visitInitializerList(@NotNull KtInitializerList list, D data) {
330            return visitKtElement(list, data);
331        }
332    
333        public R visitAnonymousInitializer(@NotNull KtAnonymousInitializer initializer, D data) {
334            return visitDeclaration(initializer, data);
335        }
336    
337        public R visitScriptInitializer(@NotNull KtScriptInitializer initializer, D data) {
338            return visitAnonymousInitializer(initializer, data);
339        }
340    
341        public R visitClassInitializer(@NotNull KtClassInitializer initializer, D data) {
342            return visitAnonymousInitializer(initializer, data);
343        }
344    
345        public R visitPropertyAccessor(@NotNull KtPropertyAccessor accessor, D data) {
346            return visitDeclaration(accessor, data);
347        }
348    
349        public R visitTypeConstraintList(@NotNull KtTypeConstraintList list, D data) {
350            return visitKtElement(list, data);
351        }
352    
353        public R visitTypeConstraint(@NotNull KtTypeConstraint constraint, D data) {
354            return visitKtElement(constraint, data);
355        }
356    
357        private R visitTypeElement(@NotNull KtTypeElement type, D data) {
358            return visitKtElement(type, data);
359        }
360    
361        public R visitUserType(@NotNull KtUserType type, D data) {
362            return visitTypeElement(type, data);
363        }
364    
365        public R visitDynamicType(@NotNull KtDynamicType type, D data) {
366            return visitTypeElement(type, data);
367        }
368    
369        public R visitFunctionType(@NotNull KtFunctionType type, D data) {
370            return visitTypeElement(type, data);
371        }
372    
373        public R visitSelfType(@NotNull KtSelfType type, D data) {
374            return visitTypeElement(type, data);
375        }
376    
377        public R visitBinaryWithTypeRHSExpression(@NotNull KtBinaryExpressionWithTypeRHS expression, D data) {
378            return visitExpression(expression, data);
379        }
380    
381        public R visitStringTemplateExpression(@NotNull KtStringTemplateExpression expression, D data) {
382            return visitExpression(expression, data);
383        }
384    
385        public R visitNamedDeclaration(@NotNull KtNamedDeclaration declaration, D data) {
386            return visitDeclaration(declaration, data);
387        }
388    
389        public R visitNullableType(@NotNull KtNullableType nullableType, D data) {
390            return visitTypeElement(nullableType, data);
391        }
392    
393        public R visitTypeProjection(@NotNull KtTypeProjection typeProjection, D data) {
394            return visitKtElement(typeProjection, data);
395        }
396    
397        public R visitWhenEntry(@NotNull KtWhenEntry jetWhenEntry, D data) {
398            return visitKtElement(jetWhenEntry, data);
399        }
400    
401        public R visitIsExpression(@NotNull KtIsExpression expression, D data) {
402            return visitExpression(expression, data);
403        }
404    
405        public R visitWhenConditionIsPattern(@NotNull KtWhenConditionIsPattern condition, D data) {
406            return visitKtElement(condition, data);
407        }
408    
409        public R visitWhenConditionInRange(@NotNull KtWhenConditionInRange condition, D data) {
410            return visitKtElement(condition, data);
411        }
412    
413        public R visitWhenConditionWithExpression(@NotNull KtWhenConditionWithExpression condition, D data) {
414            return visitKtElement(condition, data);
415        }
416    
417        public R visitStringTemplateEntry(@NotNull KtStringTemplateEntry entry, D data) {
418            return visitKtElement(entry, data);
419        }
420    
421        public R visitStringTemplateEntryWithExpression(@NotNull KtStringTemplateEntryWithExpression entry, D data) {
422            return visitStringTemplateEntry(entry, data);
423        }
424    
425        public R visitBlockStringTemplateEntry(@NotNull KtBlockStringTemplateEntry entry, D data) {
426            return visitStringTemplateEntryWithExpression(entry, data);
427        }
428    
429        public R visitSimpleNameStringTemplateEntry(@NotNull KtSimpleNameStringTemplateEntry entry, D data) {
430            return visitStringTemplateEntryWithExpression(entry, data);
431        }
432    
433        public R visitLiteralStringTemplateEntry(@NotNull KtLiteralStringTemplateEntry entry, D data) {
434            return visitStringTemplateEntry(entry, data);
435        }
436    
437        public R visitEscapeStringTemplateEntry(@NotNull KtEscapeStringTemplateEntry entry, D data) {
438            return visitStringTemplateEntry(entry, data);
439        }
440    
441        public R visitPackageDirective(@NotNull KtPackageDirective directive, D data) {
442            return visitKtElement(directive, data);
443        }
444    }