New J2K: Update transformers to new style

This commit is contained in:
Simon Ogorodnik
2017-10-17 02:33:54 +03:00
committed by Ilya Kirillov
parent 517dd9a260
commit 8ac5eadadc
5 changed files with 120 additions and 104 deletions
@@ -23,9 +23,9 @@ import org.jetbrains.kotlin.j2k.tree.visitors.JKVisitor
abstract class JKElementBase : JKElement {
override fun <R, D> accept(visitor: JKVisitor<R, D>, data: D): R = visitor.visitElement(this, data)
override fun <D> acceptChildren(visitor: JKVisitor<Unit, D>, data: D) {}
override fun <R : JKElement, D> transform(transformer: JKTransformer<D>, data: D): R = accept(transformer, data) as R
override fun <E : JKElement, D> transform(transformer: JKTransformer<D>, data: D): E = transformer.transformElement(this, data)
override fun <D> acceptChildren(visitor: JKVisitor<Unit, D>, data: D) {}
override fun <D> transformChildren(transformer: JKTransformer<D>, data: D) {}
}
@@ -22,11 +22,9 @@ import org.jetbrains.kotlin.j2k.tree.visitors.JKVisitor
interface JKElement {
fun <R, D> accept(visitor: JKVisitor<R, D>, data: D): R
fun <R: JKElement, D> transform(transformer: JKTransformer<D>, data: D): R
fun <D> acceptChildren(visitor: JKVisitor<Unit, D>, data: D)
fun <E: JKElement, D> transform(transformer: JKTransformer<D>, data: D): E
fun <D> transformChildren(transformer: JKTransformer<D>, data: D)
}
@@ -30,6 +30,22 @@
* limitations under the License.
*/
/*
* Copyright 2010-2017 JetBrains s.r.o.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import java.io.File
@@ -60,7 +76,7 @@ fun String.safeVarName() = when (this) {
else -> this
}
fun genVisitors(commonData: List<InterfaceData>, uncommonData: List<InterfaceData>, visitorName: String, transformerName: String, visitorExtends: String? = null, transformerExtends: String? = null) {
fun genVisitors(commonData: List<InterfaceData>, uncommonData: List<InterfaceData>, visitorName: String, transformerName: String) {
val interfaceData = commonData + uncommonData
@@ -78,8 +94,7 @@ fun genVisitors(commonData: List<InterfaceData>, uncommonData: List<InterfaceDat
appendln()
appendln("import org.jetbrains.kotlin.j2k.tree.*")
appendln()
val extends = visitorExtends?.let { " : $it<out R, in D>" } ?: ""
appendln("interface $visitorName<out R, in D>$extends {")
appendln("interface $visitorName<out R, in D> {")
interfaceData.joinTo(this, separator = "\n") { (name, ext) ->
val nameWithoutPrefix = name.removePrefix("JK")
val argName = nameWithoutPrefix.decapitalize().safeVarName()
@@ -98,9 +113,8 @@ fun genVisitors(commonData: List<InterfaceData>, uncommonData: List<InterfaceDat
appendln()
appendln("import org.jetbrains.kotlin.j2k.tree.*")
appendln()
val extends = visitorExtends?.let { ", ${it}Void" } ?: ""
appendln("interface ${visitorName}Void : $visitorName<Unit, Nothing?>$extends {")
appendln("interface ${visitorName}Void : $visitorName<Unit, Nothing?> {")
interfaceData.joinTo(this, separator = "\n") { (name, ext) ->
val nameWithoutPrefix = name.removePrefix("JK")
val argName = nameWithoutPrefix.decapitalize().safeVarName()
@@ -120,18 +134,20 @@ fun genVisitors(commonData: List<InterfaceData>, uncommonData: List<InterfaceDat
appendln()
appendln("import org.jetbrains.kotlin.j2k.tree.*")
appendln()
val extends = transformerExtends?.let { " : $it<in D>" } ?: ""
appendln("interface $transformerName<in D>$extends {")
appendln("interface $transformerName<in D> : JKVisitor<JKElement, D> {")
interfaceData.joinTo(this, separator = "\n") { (name, ext) ->
val nameWithoutPrefix = name.removePrefix("JK")
val argName = nameWithoutPrefix.decapitalize().safeVarName()
val generifyCall = if (name != "JKElement") "= transform${ext!!.removePrefix("JK")}($argName, data)" else ""
val leastCommonName = name.firstCommonInterfaceName()
val cast = "as $leastCommonName".takeIf { leastCommonName == name } ?: ""
val generifyCall = if (name != "JKElement") "= visit${ext!!.removePrefix("JK")}($argName, data) $cast" else ""
"""
| fun <E: $leastCommonName> transform$nameWithoutPrefix($argName: $name, data: D): E $generifyCall
| override fun visit$nameWithoutPrefix($argName: $name, data: D): $leastCommonName $generifyCall
""".trimMargin()
}
appendln()
@@ -144,19 +160,21 @@ fun genVisitors(commonData: List<InterfaceData>, uncommonData: List<InterfaceDat
appendln()
appendln("import org.jetbrains.kotlin.j2k.tree.*")
appendln()
val extends = transformerExtends?.let { ", ${it}Void" } ?: ""
appendln("interface ${transformerName}Void : $transformerName<Nothing?>$extends {")
appendln("interface ${transformerName}Void : $transformerName<Nothing?> {")
interfaceData.joinTo(this, separator = "\n") { (name, ext) ->
val nameWithoutPrefix = name.removePrefix("JK")
val argName = nameWithoutPrefix.decapitalize().safeVarName()
val arg = "$argName: $name"
val generifyCall = if (name != "JKElement") "= transform${ext!!.removePrefix("JK")}($argName, null)" else ""
val leastCommonName = name.firstCommonInterfaceName()
val cast = "as $leastCommonName".takeIf { leastCommonName == name } ?: ""
val generifyCall = if (name != "JKElement") "= visit${ext!!.removePrefix("JK")}($argName) $cast" else ""
"""
| fun <E: $leastCommonName> transform$nameWithoutPrefix($arg): E $generifyCall
| override fun <E: $leastCommonName> transform$nameWithoutPrefix($arg, data: Nothing?): E = transform$nameWithoutPrefix($argName)
| fun visit$nameWithoutPrefix($arg): $leastCommonName $generifyCall
| override fun visit$nameWithoutPrefix($arg, data: Nothing?): $leastCommonName = visit$nameWithoutPrefix($argName)
""".trimMargin()
}
appendln()
@@ -2,33 +2,33 @@ package org.jetbrains.kotlin.j2k.tree.visitors
import org.jetbrains.kotlin.j2k.tree.*
interface JKTransformer<in D> {
fun <E: JKElement> transformElement(element: JKElement, data: D): E
fun <E: JKClass> transformClass(klass: JKClass, data: D): E = transformDeclaration(klass, data)
fun <E: JKStatement> transformStatement(statement: JKStatement, data: D): E = transformElement(statement, data)
fun <E: JKExpression> transformExpression(expression: JKExpression, data: D): E = transformStatement(expression, data)
fun <E: JKLoop> transformLoop(loop: JKLoop, data: D): E = transformStatement(loop, data)
fun <E: JKDeclaration> transformDeclaration(declaration: JKDeclaration, data: D): E = transformElement(declaration, data)
fun <E: JKBlock> transformBlock(block: JKBlock, data: D): E = transformElement(block, data)
fun <E: JKCall> transformCall(call: JKCall, data: D): E = transformExpression(call, data)
fun <E: JKIdentifier> transformIdentifier(identifier: JKIdentifier, data: D): E = transformElement(identifier, data)
fun <E: JKTypeIdentifier> transformTypeIdentifier(typeIdentifier: JKTypeIdentifier, data: D): E = transformIdentifier(typeIdentifier, data)
fun <E: JKNameIdentifier> transformNameIdentifier(nameIdentifier: JKNameIdentifier, data: D): E = transformIdentifier(nameIdentifier, data)
fun <E: JKLiteralExpression> transformLiteralExpression(literalExpression: JKLiteralExpression, data: D): E = transformExpression(literalExpression, data)
fun <E: JKModifierList> transformModifierList(modifierList: JKModifierList, data: D): E = transformElement(modifierList, data)
fun <E: JKModifier> transformModifier(modifier: JKModifier, data: D): E = transformElement(modifier, data)
fun <E: JKAccessModifier> transformAccessModifier(accessModifier: JKAccessModifier, data: D): E = transformModifier(accessModifier, data)
fun <E: JKDeclaration> transformJavaField(javaField: JKJavaField, data: D): E = transformDeclaration(javaField, data)
fun <E: JKDeclaration> transformJavaMethod(javaMethod: JKJavaMethod, data: D): E = transformDeclaration(javaMethod, data)
fun <E: JKLoop> transformJavaForLoop(javaForLoop: JKJavaForLoop, data: D): E = transformLoop(javaForLoop, data)
fun <E: JKExpression> transformJavaAssignmentExpression(javaAssignmentExpression: JKJavaAssignmentExpression, data: D): E = transformExpression(javaAssignmentExpression, data)
fun <E: JKCall> transformJavaCall(javaCall: JKJavaCall, data: D): E = transformCall(javaCall, data)
fun <E: JKTypeIdentifier> transformJavaTypeIdentifier(javaTypeIdentifier: JKJavaTypeIdentifier, data: D): E = transformTypeIdentifier(javaTypeIdentifier, data)
fun <E: JKLiteralExpression> transformJavaStringLiteralExpression(javaStringLiteralExpression: JKJavaStringLiteralExpression, data: D): E = transformLiteralExpression(javaStringLiteralExpression, data)
fun <E: JKAccessModifier> transformJavaAccessModifier(javaAccessModifier: JKJavaAccessModifier, data: D): E = transformAccessModifier(javaAccessModifier, data)
fun <E: JKDeclaration> transformKtFun(ktFun: JKKtFun, data: D): E = transformDeclaration(ktFun, data)
fun <E: JKDeclaration> transformKtConstructor(ktConstructor: JKKtConstructor, data: D): E = transformDeclaration(ktConstructor, data)
fun <E: JKDeclaration> transformKtPrimaryConstructor(ktPrimaryConstructor: JKKtPrimaryConstructor, data: D): E = transformKtConstructor(ktPrimaryConstructor, data)
fun <E: JKStatement> transformKtAssignmentStatement(ktAssignmentStatement: JKKtAssignmentStatement, data: D): E = transformStatement(ktAssignmentStatement, data)
fun <E: JKCall> transformKtCall(ktCall: JKKtCall, data: D): E = transformCall(ktCall, data)
interface JKTransformer<in D> : JKVisitor<JKElement, D> {
override fun visitElement(element: JKElement, data: D): JKElement
override fun visitClass(klass: JKClass, data: D): JKClass = visitDeclaration(klass, data) as JKClass
override fun visitStatement(statement: JKStatement, data: D): JKStatement = visitElement(statement, data) as JKStatement
override fun visitExpression(expression: JKExpression, data: D): JKExpression = visitStatement(expression, data) as JKExpression
override fun visitLoop(loop: JKLoop, data: D): JKLoop = visitStatement(loop, data) as JKLoop
override fun visitDeclaration(declaration: JKDeclaration, data: D): JKDeclaration = visitElement(declaration, data) as JKDeclaration
override fun visitBlock(block: JKBlock, data: D): JKBlock = visitElement(block, data) as JKBlock
override fun visitCall(call: JKCall, data: D): JKCall = visitExpression(call, data) as JKCall
override fun visitIdentifier(identifier: JKIdentifier, data: D): JKIdentifier = visitElement(identifier, data) as JKIdentifier
override fun visitTypeIdentifier(typeIdentifier: JKTypeIdentifier, data: D): JKTypeIdentifier = visitIdentifier(typeIdentifier, data) as JKTypeIdentifier
override fun visitNameIdentifier(nameIdentifier: JKNameIdentifier, data: D): JKNameIdentifier = visitIdentifier(nameIdentifier, data) as JKNameIdentifier
override fun visitLiteralExpression(literalExpression: JKLiteralExpression, data: D): JKLiteralExpression = visitExpression(literalExpression, data) as JKLiteralExpression
override fun visitModifierList(modifierList: JKModifierList, data: D): JKModifierList = visitElement(modifierList, data) as JKModifierList
override fun visitModifier(modifier: JKModifier, data: D): JKModifier = visitElement(modifier, data) as JKModifier
override fun visitAccessModifier(accessModifier: JKAccessModifier, data: D): JKAccessModifier = visitModifier(accessModifier, data) as JKAccessModifier
override fun visitJavaField(javaField: JKJavaField, data: D): JKDeclaration = visitDeclaration(javaField, data)
override fun visitJavaMethod(javaMethod: JKJavaMethod, data: D): JKDeclaration = visitDeclaration(javaMethod, data)
override fun visitJavaForLoop(javaForLoop: JKJavaForLoop, data: D): JKLoop = visitLoop(javaForLoop, data)
override fun visitJavaAssignmentExpression(javaAssignmentExpression: JKJavaAssignmentExpression, data: D): JKExpression = visitExpression(javaAssignmentExpression, data)
override fun visitJavaCall(javaCall: JKJavaCall, data: D): JKCall = visitCall(javaCall, data)
override fun visitJavaTypeIdentifier(javaTypeIdentifier: JKJavaTypeIdentifier, data: D): JKTypeIdentifier = visitTypeIdentifier(javaTypeIdentifier, data)
override fun visitJavaStringLiteralExpression(javaStringLiteralExpression: JKJavaStringLiteralExpression, data: D): JKLiteralExpression = visitLiteralExpression(javaStringLiteralExpression, data)
override fun visitJavaAccessModifier(javaAccessModifier: JKJavaAccessModifier, data: D): JKAccessModifier = visitAccessModifier(javaAccessModifier, data)
override fun visitKtFun(ktFun: JKKtFun, data: D): JKDeclaration = visitDeclaration(ktFun, data)
override fun visitKtConstructor(ktConstructor: JKKtConstructor, data: D): JKDeclaration = visitDeclaration(ktConstructor, data)
override fun visitKtPrimaryConstructor(ktPrimaryConstructor: JKKtPrimaryConstructor, data: D): JKDeclaration = visitKtConstructor(ktPrimaryConstructor, data)
override fun visitKtAssignmentStatement(ktAssignmentStatement: JKKtAssignmentStatement, data: D): JKStatement = visitStatement(ktAssignmentStatement, data)
override fun visitKtCall(ktCall: JKKtCall, data: D): JKCall = visitCall(ktCall, data)
}
@@ -3,60 +3,60 @@ package org.jetbrains.kotlin.j2k.tree.visitors
import org.jetbrains.kotlin.j2k.tree.*
interface JKTransformerVoid : JKTransformer<Nothing?> {
fun <E: JKElement> transformElement(element: JKElement): E
override fun <E: JKElement> transformElement(element: JKElement, data: Nothing?): E = transformElement(element)
fun <E: JKClass> transformClass(klass: JKClass): E = transformDeclaration(klass, null)
override fun <E: JKClass> transformClass(klass: JKClass, data: Nothing?): E = transformClass(klass)
fun <E: JKStatement> transformStatement(statement: JKStatement): E = transformElement(statement, null)
override fun <E: JKStatement> transformStatement(statement: JKStatement, data: Nothing?): E = transformStatement(statement)
fun <E: JKExpression> transformExpression(expression: JKExpression): E = transformStatement(expression, null)
override fun <E: JKExpression> transformExpression(expression: JKExpression, data: Nothing?): E = transformExpression(expression)
fun <E: JKLoop> transformLoop(loop: JKLoop): E = transformStatement(loop, null)
override fun <E: JKLoop> transformLoop(loop: JKLoop, data: Nothing?): E = transformLoop(loop)
fun <E: JKDeclaration> transformDeclaration(declaration: JKDeclaration): E = transformElement(declaration, null)
override fun <E: JKDeclaration> transformDeclaration(declaration: JKDeclaration, data: Nothing?): E = transformDeclaration(declaration)
fun <E: JKBlock> transformBlock(block: JKBlock): E = transformElement(block, null)
override fun <E: JKBlock> transformBlock(block: JKBlock, data: Nothing?): E = transformBlock(block)
fun <E: JKCall> transformCall(call: JKCall): E = transformExpression(call, null)
override fun <E: JKCall> transformCall(call: JKCall, data: Nothing?): E = transformCall(call)
fun <E: JKIdentifier> transformIdentifier(identifier: JKIdentifier): E = transformElement(identifier, null)
override fun <E: JKIdentifier> transformIdentifier(identifier: JKIdentifier, data: Nothing?): E = transformIdentifier(identifier)
fun <E: JKTypeIdentifier> transformTypeIdentifier(typeIdentifier: JKTypeIdentifier): E = transformIdentifier(typeIdentifier, null)
override fun <E: JKTypeIdentifier> transformTypeIdentifier(typeIdentifier: JKTypeIdentifier, data: Nothing?): E = transformTypeIdentifier(typeIdentifier)
fun <E: JKNameIdentifier> transformNameIdentifier(nameIdentifier: JKNameIdentifier): E = transformIdentifier(nameIdentifier, null)
override fun <E: JKNameIdentifier> transformNameIdentifier(nameIdentifier: JKNameIdentifier, data: Nothing?): E = transformNameIdentifier(nameIdentifier)
fun <E: JKLiteralExpression> transformLiteralExpression(literalExpression: JKLiteralExpression): E = transformExpression(literalExpression, null)
override fun <E: JKLiteralExpression> transformLiteralExpression(literalExpression: JKLiteralExpression, data: Nothing?): E = transformLiteralExpression(literalExpression)
fun <E: JKModifierList> transformModifierList(modifierList: JKModifierList): E = transformElement(modifierList, null)
override fun <E: JKModifierList> transformModifierList(modifierList: JKModifierList, data: Nothing?): E = transformModifierList(modifierList)
fun <E: JKModifier> transformModifier(modifier: JKModifier): E = transformElement(modifier, null)
override fun <E: JKModifier> transformModifier(modifier: JKModifier, data: Nothing?): E = transformModifier(modifier)
fun <E: JKAccessModifier> transformAccessModifier(accessModifier: JKAccessModifier): E = transformModifier(accessModifier, null)
override fun <E: JKAccessModifier> transformAccessModifier(accessModifier: JKAccessModifier, data: Nothing?): E = transformAccessModifier(accessModifier)
fun <E: JKDeclaration> transformJavaField(javaField: JKJavaField): E = transformDeclaration(javaField, null)
override fun <E: JKDeclaration> transformJavaField(javaField: JKJavaField, data: Nothing?): E = transformJavaField(javaField)
fun <E: JKDeclaration> transformJavaMethod(javaMethod: JKJavaMethod): E = transformDeclaration(javaMethod, null)
override fun <E: JKDeclaration> transformJavaMethod(javaMethod: JKJavaMethod, data: Nothing?): E = transformJavaMethod(javaMethod)
fun <E: JKLoop> transformJavaForLoop(javaForLoop: JKJavaForLoop): E = transformLoop(javaForLoop, null)
override fun <E: JKLoop> transformJavaForLoop(javaForLoop: JKJavaForLoop, data: Nothing?): E = transformJavaForLoop(javaForLoop)
fun <E: JKExpression> transformJavaAssignmentExpression(javaAssignmentExpression: JKJavaAssignmentExpression): E = transformExpression(javaAssignmentExpression, null)
override fun <E: JKExpression> transformJavaAssignmentExpression(javaAssignmentExpression: JKJavaAssignmentExpression, data: Nothing?): E = transformJavaAssignmentExpression(javaAssignmentExpression)
fun <E: JKCall> transformJavaCall(javaCall: JKJavaCall): E = transformCall(javaCall, null)
override fun <E: JKCall> transformJavaCall(javaCall: JKJavaCall, data: Nothing?): E = transformJavaCall(javaCall)
fun <E: JKTypeIdentifier> transformJavaTypeIdentifier(javaTypeIdentifier: JKJavaTypeIdentifier): E = transformTypeIdentifier(javaTypeIdentifier, null)
override fun <E: JKTypeIdentifier> transformJavaTypeIdentifier(javaTypeIdentifier: JKJavaTypeIdentifier, data: Nothing?): E = transformJavaTypeIdentifier(javaTypeIdentifier)
fun <E: JKLiteralExpression> transformJavaStringLiteralExpression(javaStringLiteralExpression: JKJavaStringLiteralExpression): E = transformLiteralExpression(javaStringLiteralExpression, null)
override fun <E: JKLiteralExpression> transformJavaStringLiteralExpression(javaStringLiteralExpression: JKJavaStringLiteralExpression, data: Nothing?): E = transformJavaStringLiteralExpression(javaStringLiteralExpression)
fun <E: JKAccessModifier> transformJavaAccessModifier(javaAccessModifier: JKJavaAccessModifier): E = transformAccessModifier(javaAccessModifier, null)
override fun <E: JKAccessModifier> transformJavaAccessModifier(javaAccessModifier: JKJavaAccessModifier, data: Nothing?): E = transformJavaAccessModifier(javaAccessModifier)
fun <E: JKDeclaration> transformKtFun(ktFun: JKKtFun): E = transformDeclaration(ktFun, null)
override fun <E: JKDeclaration> transformKtFun(ktFun: JKKtFun, data: Nothing?): E = transformKtFun(ktFun)
fun <E: JKDeclaration> transformKtConstructor(ktConstructor: JKKtConstructor): E = transformDeclaration(ktConstructor, null)
override fun <E: JKDeclaration> transformKtConstructor(ktConstructor: JKKtConstructor, data: Nothing?): E = transformKtConstructor(ktConstructor)
fun <E: JKDeclaration> transformKtPrimaryConstructor(ktPrimaryConstructor: JKKtPrimaryConstructor): E = transformKtConstructor(ktPrimaryConstructor, null)
override fun <E: JKDeclaration> transformKtPrimaryConstructor(ktPrimaryConstructor: JKKtPrimaryConstructor, data: Nothing?): E = transformKtPrimaryConstructor(ktPrimaryConstructor)
fun <E: JKStatement> transformKtAssignmentStatement(ktAssignmentStatement: JKKtAssignmentStatement): E = transformStatement(ktAssignmentStatement, null)
override fun <E: JKStatement> transformKtAssignmentStatement(ktAssignmentStatement: JKKtAssignmentStatement, data: Nothing?): E = transformKtAssignmentStatement(ktAssignmentStatement)
fun <E: JKCall> transformKtCall(ktCall: JKKtCall): E = transformCall(ktCall, null)
override fun <E: JKCall> transformKtCall(ktCall: JKKtCall, data: Nothing?): E = transformKtCall(ktCall)
fun visitElement(element: JKElement): JKElement
override fun visitElement(element: JKElement, data: Nothing?): JKElement = visitElement(element)
fun visitClass(klass: JKClass): JKClass = visitDeclaration(klass) as JKClass
override fun visitClass(klass: JKClass, data: Nothing?): JKClass = visitClass(klass)
fun visitStatement(statement: JKStatement): JKStatement = visitElement(statement) as JKStatement
override fun visitStatement(statement: JKStatement, data: Nothing?): JKStatement = visitStatement(statement)
fun visitExpression(expression: JKExpression): JKExpression = visitStatement(expression) as JKExpression
override fun visitExpression(expression: JKExpression, data: Nothing?): JKExpression = visitExpression(expression)
fun visitLoop(loop: JKLoop): JKLoop = visitStatement(loop) as JKLoop
override fun visitLoop(loop: JKLoop, data: Nothing?): JKLoop = visitLoop(loop)
fun visitDeclaration(declaration: JKDeclaration): JKDeclaration = visitElement(declaration) as JKDeclaration
override fun visitDeclaration(declaration: JKDeclaration, data: Nothing?): JKDeclaration = visitDeclaration(declaration)
fun visitBlock(block: JKBlock): JKBlock = visitElement(block) as JKBlock
override fun visitBlock(block: JKBlock, data: Nothing?): JKBlock = visitBlock(block)
fun visitCall(call: JKCall): JKCall = visitExpression(call) as JKCall
override fun visitCall(call: JKCall, data: Nothing?): JKCall = visitCall(call)
fun visitIdentifier(identifier: JKIdentifier): JKIdentifier = visitElement(identifier) as JKIdentifier
override fun visitIdentifier(identifier: JKIdentifier, data: Nothing?): JKIdentifier = visitIdentifier(identifier)
fun visitTypeIdentifier(typeIdentifier: JKTypeIdentifier): JKTypeIdentifier = visitIdentifier(typeIdentifier) as JKTypeIdentifier
override fun visitTypeIdentifier(typeIdentifier: JKTypeIdentifier, data: Nothing?): JKTypeIdentifier = visitTypeIdentifier(typeIdentifier)
fun visitNameIdentifier(nameIdentifier: JKNameIdentifier): JKNameIdentifier = visitIdentifier(nameIdentifier) as JKNameIdentifier
override fun visitNameIdentifier(nameIdentifier: JKNameIdentifier, data: Nothing?): JKNameIdentifier = visitNameIdentifier(nameIdentifier)
fun visitLiteralExpression(literalExpression: JKLiteralExpression): JKLiteralExpression = visitExpression(literalExpression) as JKLiteralExpression
override fun visitLiteralExpression(literalExpression: JKLiteralExpression, data: Nothing?): JKLiteralExpression = visitLiteralExpression(literalExpression)
fun visitModifierList(modifierList: JKModifierList): JKModifierList = visitElement(modifierList) as JKModifierList
override fun visitModifierList(modifierList: JKModifierList, data: Nothing?): JKModifierList = visitModifierList(modifierList)
fun visitModifier(modifier: JKModifier): JKModifier = visitElement(modifier) as JKModifier
override fun visitModifier(modifier: JKModifier, data: Nothing?): JKModifier = visitModifier(modifier)
fun visitAccessModifier(accessModifier: JKAccessModifier): JKAccessModifier = visitModifier(accessModifier) as JKAccessModifier
override fun visitAccessModifier(accessModifier: JKAccessModifier, data: Nothing?): JKAccessModifier = visitAccessModifier(accessModifier)
fun visitJavaField(javaField: JKJavaField): JKDeclaration = visitDeclaration(javaField)
override fun visitJavaField(javaField: JKJavaField, data: Nothing?): JKDeclaration = visitJavaField(javaField)
fun visitJavaMethod(javaMethod: JKJavaMethod): JKDeclaration = visitDeclaration(javaMethod)
override fun visitJavaMethod(javaMethod: JKJavaMethod, data: Nothing?): JKDeclaration = visitJavaMethod(javaMethod)
fun visitJavaForLoop(javaForLoop: JKJavaForLoop): JKLoop = visitLoop(javaForLoop)
override fun visitJavaForLoop(javaForLoop: JKJavaForLoop, data: Nothing?): JKLoop = visitJavaForLoop(javaForLoop)
fun visitJavaAssignmentExpression(javaAssignmentExpression: JKJavaAssignmentExpression): JKExpression = visitExpression(javaAssignmentExpression)
override fun visitJavaAssignmentExpression(javaAssignmentExpression: JKJavaAssignmentExpression, data: Nothing?): JKExpression = visitJavaAssignmentExpression(javaAssignmentExpression)
fun visitJavaCall(javaCall: JKJavaCall): JKCall = visitCall(javaCall)
override fun visitJavaCall(javaCall: JKJavaCall, data: Nothing?): JKCall = visitJavaCall(javaCall)
fun visitJavaTypeIdentifier(javaTypeIdentifier: JKJavaTypeIdentifier): JKTypeIdentifier = visitTypeIdentifier(javaTypeIdentifier)
override fun visitJavaTypeIdentifier(javaTypeIdentifier: JKJavaTypeIdentifier, data: Nothing?): JKTypeIdentifier = visitJavaTypeIdentifier(javaTypeIdentifier)
fun visitJavaStringLiteralExpression(javaStringLiteralExpression: JKJavaStringLiteralExpression): JKLiteralExpression = visitLiteralExpression(javaStringLiteralExpression)
override fun visitJavaStringLiteralExpression(javaStringLiteralExpression: JKJavaStringLiteralExpression, data: Nothing?): JKLiteralExpression = visitJavaStringLiteralExpression(javaStringLiteralExpression)
fun visitJavaAccessModifier(javaAccessModifier: JKJavaAccessModifier): JKAccessModifier = visitAccessModifier(javaAccessModifier)
override fun visitJavaAccessModifier(javaAccessModifier: JKJavaAccessModifier, data: Nothing?): JKAccessModifier = visitJavaAccessModifier(javaAccessModifier)
fun visitKtFun(ktFun: JKKtFun): JKDeclaration = visitDeclaration(ktFun)
override fun visitKtFun(ktFun: JKKtFun, data: Nothing?): JKDeclaration = visitKtFun(ktFun)
fun visitKtConstructor(ktConstructor: JKKtConstructor): JKDeclaration = visitDeclaration(ktConstructor)
override fun visitKtConstructor(ktConstructor: JKKtConstructor, data: Nothing?): JKDeclaration = visitKtConstructor(ktConstructor)
fun visitKtPrimaryConstructor(ktPrimaryConstructor: JKKtPrimaryConstructor): JKDeclaration = visitKtConstructor(ktPrimaryConstructor)
override fun visitKtPrimaryConstructor(ktPrimaryConstructor: JKKtPrimaryConstructor, data: Nothing?): JKDeclaration = visitKtPrimaryConstructor(ktPrimaryConstructor)
fun visitKtAssignmentStatement(ktAssignmentStatement: JKKtAssignmentStatement): JKStatement = visitStatement(ktAssignmentStatement)
override fun visitKtAssignmentStatement(ktAssignmentStatement: JKKtAssignmentStatement, data: Nothing?): JKStatement = visitKtAssignmentStatement(ktAssignmentStatement)
fun visitKtCall(ktCall: JKKtCall): JKCall = visitCall(ktCall)
override fun visitKtCall(ktCall: JKKtCall, data: Nothing?): JKCall = visitKtCall(ktCall)
}