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