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 }