New J2K: References base

This commit is contained in:
knize
2018-02-01 00:11:23 +03:00
committed by Ilya Kirillov
parent 70c291f222
commit c8c9c19a91
8 changed files with 189 additions and 56 deletions
@@ -25,9 +25,22 @@ import com.intellij.psi.impl.source.tree.java.PsiReferenceExpressionImpl
import org.jetbrains.kotlin.j2k.tree.*
import org.jetbrains.kotlin.j2k.tree.impl.*
class JavaToJKTreeBuilder {
private object ExpressionTreeMapper {
class JavaToJKTreeBuilder : ReferenceTargetProvider {
override val resolveCache: Map<JKElement, PsiElement>
get() = TODO("not implemented") //To change initializer of created properties use File | Settings | File Templates.
override val conversionCache: Map<PsiElement, JKElement>
get() = TODO("not implemented") //To change initializer of created properties use File | Settings | File Templates.
private val expressionTreeMapper = ExpressionTreeMapper()
private val declarationMapper = DeclarationMapper(expressionTreeMapper)
private val modifierMapper = ModifierMapper()
private val javaToJKTreeBuilder = this
private inner class ExpressionTreeMapper {
fun PsiExpression.toJK(): JKExpression {
when (this) {
is PsiBinaryExpression -> {
@@ -141,7 +154,7 @@ class JavaToJKTreeBuilder {
return JKJavaNewEmptyArrayImpl(dimensions.map { it?.toJK() })
}
}
return JKJavaNewExpressionImpl((classReference as PsiIdentifier).convertClassReference(), argumentList.toJK())
return JKJavaNewExpressionImpl((classReference as PsiIdentifier).convertType(), argumentList.toJK())
}
fun PsiArrayAccessExpression.toJK(): JKExpression {
@@ -149,7 +162,7 @@ class JavaToJKTreeBuilder {
}
fun PsiTypeCastExpression.toJK(): JKExpression {
return JKTypeCastExpressionImpl(operand?.toJK(), castType?.convertTypeReference())
return JKTypeCastExpressionImpl(operand?.toJK(), castType?.toJK())
}
fun PsiParenthesizedExpression.toJK(): JKExpression {
@@ -160,25 +173,46 @@ class JavaToJKTreeBuilder {
return JKExpressionListImpl(this?.expressions?.map { it.toJK() }?.toTypedArray() ?: emptyArray())
}
fun PsiIdentifier.convertMethodReference(): JKJavaMethodReference {
fun PsiIdentifier.toJK(): JKNameIdentifier {
return JKNameIdentifierImpl(this.text)
}
return JKJavaMethodReferenceImpl()
fun PsiIdentifier.convertMethodReference(): JKJavaMethodReference {
return JKJavaMethodReferenceImpl(this.toJK(), javaToJKTreeBuilder)
}
fun PsiIdentifier.convertFieldReference(): JKJavaFieldReference {
return JKJavaFieldReferenceImpl()
return JKJavaFieldReferenceImpl(this.toJK(), javaToJKTreeBuilder)
}
fun PsiIdentifier.convertClassReference(): JKJavaClassReference {
return JKJavaClassReferenceImpl()
fun PsiIdentifier.convertType(): JKJavaClassReference {
return JKJavaClassReferenceImpl(this.toJK(), javaToJKTreeBuilder)
}
fun PsiTypeElement.convertTypeReference(): JKTypeReference {
return JKTypeReferenceImpl()
fun PsiTypeElement.toJK(): JKType? {
return innermostComponentReferenceElement?.convertType()
}
fun PsiJavaCodeReferenceElement.convertType(): JKType {
val classReference = JKJavaClassReferenceImpl(
JKNameIdentifierImpl(this.referenceName ?: throw RuntimeException("Can't be null: referenceName")),
javaToJKTreeBuilder)
val typeArguments = ArrayList<JKType>()
parameterList?.typeParameterElements?.forEach { it ->
kotlin.run {
val type = it.toJK()
if (type != null) typeArguments.add(type)
}
}
return JKTypeImpl(classReference, typeArguments)
}
}
private object DeclarationMapper {
private inner class DeclarationMapper(val expressionTreeMapper: ExpressionTreeMapper) {
val declarationMapper = this
fun PsiClass.toJK(): JKClass {
val classKind: JKClass.ClassKind = when {
@@ -187,22 +221,22 @@ class JavaToJKTreeBuilder {
isInterface -> JKClass.ClassKind.INTERFACE
else -> JKClass.ClassKind.CLASS
}
return JKClassImpl(with(ModifierMapper) { modifierList.toJK() }, JKNameIdentifierImpl(this.name!!), classKind).apply {
declarations = children.mapNotNull { ElementVisitor().apply { it.accept(this) }.resultElement as? JKDeclaration }
return JKClassImpl(with(modifierMapper) { modifierList.toJK() }, JKNameIdentifierImpl(this.name!!), classKind).apply {
declarations = children.mapNotNull { ElementVisitor(declarationMapper).apply { it.accept(this) }.resultElement as? JKDeclaration }
}
}
fun PsiField.toJK(): JKJavaField {
val initializer = with(ExpressionTreeMapper) {
val initializer = with(expressionTreeMapper) {
initializer?.toJK()
}
val type = JKJavaTypeIdentifierImpl(this.type.canonicalText)
val name = JKNameIdentifierImpl(this.name!!)
val modifierList = with(ModifierMapper) {
val modifierList = with(modifierMapper) {
modifierList.toJK()
}
@@ -210,7 +244,7 @@ class JavaToJKTreeBuilder {
}
fun PsiMethod.toJK(): JKJavaMethod {
val modifierList = with(ModifierMapper) { modifierList.toJK() }
val modifierList = with(modifierMapper) { modifierList.toJK() }
val name = JKNameIdentifierImpl(name)
val valueArgumentList = this.parameterList.parameters.map { it -> it.toJK() }
val block = body?.toJK()
@@ -236,7 +270,7 @@ class JavaToJKTreeBuilder {
}
private object ModifierMapper {
private inner class ModifierMapper {
fun PsiModifierList?.toJK(): JKModifierList {
val modifierList = JKModifierListImpl()
@@ -267,16 +301,16 @@ class JavaToJKTreeBuilder {
}
}
private class ElementVisitor : JavaElementVisitor() {
private inner class ElementVisitor(val declarationMapper: DeclarationMapper) : JavaElementVisitor() {
var resultElement: JKElement? = null
override fun visitClass(aClass: PsiClass) {
resultElement = with(DeclarationMapper) { aClass.toJK() }
resultElement = with(declarationMapper) { aClass.toJK() }
}
override fun visitField(field: PsiField) {
resultElement = with(DeclarationMapper) { field.toJK() }
resultElement = with(declarationMapper) { field.toJK() }
}
override fun visitFile(file: PsiFile) {
@@ -287,7 +321,7 @@ class JavaToJKTreeBuilder {
fun buildTree(psi: PsiElement): JKElement? {
assert(psi.language.`is`(JavaLanguage.INSTANCE)) { "Unable to build JK Tree using Java Visitor for language ${psi.language}" }
val elementVisitor = ElementVisitor()
val elementVisitor = ElementVisitor(declarationMapper)
psi.accept(elementVisitor)
return elementVisitor.resultElement
}
@@ -16,6 +16,7 @@
package org.jetbrains.kotlin.j2k.tree.impl
import com.intellij.psi.*
import org.jetbrains.kotlin.j2k.tree.*
import org.jetbrains.kotlin.j2k.tree.visitors.JKTransformer
import org.jetbrains.kotlin.j2k.tree.visitors.JKVisitor
@@ -27,8 +28,7 @@ class JKJavaFieldImpl(override var modifierList: JKModifierList,
override fun <R, D> accept(visitor: JKVisitor<R, D>, data: D): R = visitor.visitJavaField(this, data)
override fun <D> acceptChildren(visitor: JKVisitor<Unit, D>, data: D)
= listOfNotNull(type, name, initializer).forEach { it.accept(visitor, data) }
override fun <D> acceptChildren(visitor: JKVisitor<Unit, D>, data: D) = listOfNotNull(type, name, initializer).forEach { it.accept(visitor, data) }
override fun <D> transformChildren(transformer: JKTransformer<D>, data: D) {
type = type.transform(transformer, data)
@@ -124,7 +124,16 @@ class JKJavaNewExpressionImpl(override var identifier: JKClassReference,
}
}
class JKJavaMethodReferenceImpl() : JKJavaMethodReference, JKElementBase() {
class JKJavaMethodReferenceImpl(override val nameIdentifier: JKNameIdentifier, override val targetProvider: ReferenceTargetProvider) : JKJavaMethodReference, JKElementBase() {
override fun resolve(): JKElement {
val resolveCache = targetProvider.resolveCache
val conversionCache = targetProvider.conversionCache
val psiIdentifier = resolveCache[this] as PsiIdentifier
val methodReferenceExpression = psiIdentifier.parent as PsiMethodReferenceExpression
val psiMethod = methodReferenceExpression.resolve() as PsiMethod
return conversionCache[psiMethod] ?: throw Exception("Resolved to null")
}
override fun <R, D> accept(visitor: JKVisitor<R, D>, data: D): R = visitor.visitJavaMethodReference(this, data)
override fun <D> acceptChildren(visitor: JKVisitor<Unit, D>, data: D) {
@@ -132,7 +141,16 @@ class JKJavaMethodReferenceImpl() : JKJavaMethodReference, JKElementBase() {
}
}
class JKJavaFieldReferenceImpl() : JKJavaFieldReference, JKElementBase() {
class JKJavaFieldReferenceImpl(override val nameIdentifier: JKNameIdentifier, override val targetProvider: ReferenceTargetProvider) : JKJavaFieldReference, JKElementBase() {
override fun resolve(): JKElement {
val resolveCache = targetProvider.resolveCache
val conversionCache = targetProvider.conversionCache
val psiIdentifier = resolveCache[this] as PsiIdentifier
val psiReferenceExpression = psiIdentifier.parent as PsiReferenceExpression
val psiField = psiReferenceExpression.resolve() as PsiField
return conversionCache[psiField] ?: throw Exception("Resolved to null")
}
override fun <R, D> accept(visitor: JKVisitor<R, D>, data: D): R = visitor.visitJavaFieldReference(this, data)
override fun <D> acceptChildren(visitor: JKVisitor<Unit, D>, data: D) {
@@ -140,7 +158,16 @@ class JKJavaFieldReferenceImpl() : JKJavaFieldReference, JKElementBase() {
}
}
class JKJavaClassReferenceImpl() : JKJavaClassReference, JKElementBase() {
class JKJavaClassReferenceImpl(override val nameIdentifier: JKNameIdentifier, override val targetProvider: ReferenceTargetProvider) : JKJavaClassReference, JKElementBase() {
override fun resolve(): JKElement {
val resolveCache = targetProvider.resolveCache
val conversionCache = targetProvider.conversionCache
val psiIdentifier = resolveCache[this] as PsiIdentifier
val codeReferenceElement = psiIdentifier.parent as PsiJavaCodeReferenceElement
val psiClass = codeReferenceElement.resolve() as PsiClass
return conversionCache[psiClass] ?: throw Exception("Resolved to null")
}
override fun <R, D> accept(visitor: JKVisitor<R, D>, data: D): R = visitor.visitJavaClassReference(this, data)
override fun <D> acceptChildren(visitor: JKVisitor<Unit, D>, data: D) {
@@ -16,6 +16,9 @@
package org.jetbrains.kotlin.j2k.tree.impl
import com.intellij.psi.PsiClass
import com.intellij.psi.PsiJavaCodeReferenceElement
import org.jetbrains.kotlin.j2k.ast.Nullability
import org.jetbrains.kotlin.j2k.tree.*
import org.jetbrains.kotlin.j2k.tree.visitors.JKTransformer
import org.jetbrains.kotlin.j2k.tree.visitors.JKVisitor
@@ -184,7 +187,7 @@ class JKParenthesizedExpressionImpl(override var expression: JKExpression?) : JK
}
}
class JKTypeCastExpressionImpl(override var expression: JKExpression?, override var type: JKTypeReference?) : JKTypeCastExpression, JKElementBase() {
class JKTypeCastExpressionImpl(override var expression: JKExpression?, override var type: JKType?) : JKTypeCastExpression, JKElementBase() {
override fun <R, D> accept(visitor: JKVisitor<R, D>, data: D): R = visitor.visitTypeCastExpression(this, data)
override fun <D> acceptChildren(visitor: JKVisitor<Unit, D>, data: D) {
@@ -198,10 +201,10 @@ class JKTypeCastExpressionImpl(override var expression: JKExpression?, override
}
}
class JKTypeReferenceImpl(override val parameters: List<JKTypeReference>) : JKTypeReference, JKElementBase() {
class JKTypeReferenceImpl(override val parameters: List<JKType>) : JKType, JKElementBase() {
override fun <R, D> accept(visitor: JKVisitor<R, D>, data: D): R = visitor.visitTypeReference(this, data)
override fun <R, D> accept(visitor: JKVisitor<R, D>, data: D): R = visitor.visitType(this, data)
override fun <D> acceptChildren(visitor: JKVisitor<Unit, D>, data: D) {
+35 -8
View File
@@ -17,6 +17,7 @@
package org.jetbrains.kotlin.j2k.tree
import com.intellij.psi.PsiElement
import org.jetbrains.kotlin.j2k.ast.Nullability
import org.jetbrains.kotlin.j2k.tree.visitors.JKTransformer
import org.jetbrains.kotlin.j2k.tree.visitors.JKVisitor
@@ -86,7 +87,7 @@ interface JKParenthesizedExpression : JKExpression {
interface JKTypeCastExpression : JKExpression {
val expression: JKExpression?
val type: JKTypeReference?
val type: JKType?
}
interface JKExpressionList : JKElement {
@@ -94,7 +95,8 @@ interface JKExpressionList : JKElement {
}
interface JKReference : JKElement {
val targetProvider:ReferenceTargetProvider
fun resolve(): JKElement
}
interface JKExternalReference {
@@ -102,19 +104,39 @@ interface JKExternalReference {
}
interface JKMethodReference : JKReference {
val nameIdentifier: JKNameIdentifier
}
interface JKFieldReference : JKReference {
val nameIdentifier: JKNameIdentifier
}
interface JKClassReference : JKReference {
val nameIdentifier: JKNameIdentifier
}
interface JKTypeReference : JKReference {
val parameters: List<JKTypeReference>
interface JKType : JKElement {
val classReference: JKClassReference
val nullability: Nullability
val parameters: List<JKType>
}
interface JKExternalMethodReference : JKExternalReference {
val nameIdentifier: JKNameIdentifier
}
interface JKExternalFieldReference : JKExternalReference {
val nameIdentifier: JKNameIdentifier
}
interface JKExternalClassReference : JKExternalReference {
val nameIdentifier: JKNameIdentifier
}
interface JKExternalTypeReference : JKExternalReference {
val classReference: JKClassReference
val nullability: Nullability
val parameters: List<JKType>
}
interface JKOperatorIdentifier : JKIdentifier
@@ -156,4 +178,9 @@ interface JKStringLiteralExpression : JKLiteralExpression {
val text: String
}
interface JKModalityModifier : JKModifier
interface JKModalityModifier : JKModifier
interface ReferenceTargetProvider {
val resolveCache: Map<JKElement, PsiElement>
val conversionCache: Map<PsiElement, JKElement>
}
@@ -18,10 +18,16 @@ interface JKTransformer<in D> : JKVisitor<JKElement, D> {
override fun visitParenthesizedExpression(parenthesizedExpression: JKParenthesizedExpression, data: D): JKParenthesizedExpression = visitExpression(parenthesizedExpression, data) as JKParenthesizedExpression
override fun visitTypeCastExpression(typeCastExpression: JKTypeCastExpression, data: D): JKTypeCastExpression = visitExpression(typeCastExpression, data) as JKTypeCastExpression
override fun visitExpressionList(expressionList: JKExpressionList, data: D): JKExpressionList = visitElement(expressionList, data) as JKExpressionList
override fun visitMethodReference(methodReference: JKMethodReference, data: D): JKMethodReference = visitElement(methodReference, data) as JKMethodReference
override fun visitFieldReference(fieldReference: JKFieldReference, data: D): JKFieldReference = visitElement(fieldReference, data) as JKFieldReference
override fun visitClassReference(classReference: JKClassReference, data: D): JKClassReference = visitElement(classReference, data) as JKClassReference
override fun visitTypeReference(typeReference: JKTypeReference, data: D): JKTypeReference = visitElement(typeReference, data) as JKTypeReference
override fun visitReference(reference: JKReference, data: D): JKReference = visitElement(reference, data) as JKReference
override fun visitExternalReference(externalReference: JKExternalReference, data: D): JKExternalReference = visit(externalReference, data) as JKExternalReference
override fun visitMethodReference(methodReference: JKMethodReference, data: D): JKMethodReference = visitReference(methodReference, data) as JKMethodReference
override fun visitFieldReference(fieldReference: JKFieldReference, data: D): JKFieldReference = visitReference(fieldReference, data) as JKFieldReference
override fun visitClassReference(classReference: JKClassReference, data: D): JKClassReference = visitReference(classReference, data) as JKClassReference
override fun visitType(type: JKType, data: D): JKType = visitElement(type, data) as JKType
override fun visitExternalMethodReference(externalMethodReference: JKExternalMethodReference, data: D): JKExternalMethodReference = visitExternalReference(externalMethodReference, data) as JKExternalMethodReference
override fun visitExternalFieldReference(externalFieldReference: JKExternalFieldReference, data: D): JKExternalFieldReference = visitExternalReference(externalFieldReference, data) as JKExternalFieldReference
override fun visitExternalClassReference(externalClassReference: JKExternalClassReference, data: D): JKExternalClassReference = visitExternalReference(externalClassReference, data) as JKExternalClassReference
override fun visitExternalTypeReference(externalTypeReference: JKExternalTypeReference, data: D): JKExternalTypeReference = visitExternalReference(externalTypeReference, data) as JKExternalTypeReference
override fun visitOperatorIdentifier(operatorIdentifier: JKOperatorIdentifier, data: D): JKOperatorIdentifier = visitIdentifier(operatorIdentifier, data) as JKOperatorIdentifier
override fun visitQualificationIdentifier(qualificationIdentifier: JKQualificationIdentifier, data: D): JKQualificationIdentifier = visitIdentifier(qualificationIdentifier, data) as JKQualificationIdentifier
override fun visitLoop(loop: JKLoop, data: D): JKLoop = visitStatement(loop, data) as JKLoop
@@ -55,6 +61,7 @@ interface JKTransformer<in D> : JKVisitor<JKElement, D> {
override fun visitJavaModifier(javaModifier: JKJavaModifier, data: D): JKModifier = visitModifier(javaModifier, data)
override fun visitJavaNewEmptyArray(javaNewEmptyArray: JKJavaNewEmptyArray, data: D): JKExpression = visitExpression(javaNewEmptyArray, data)
override fun visitJavaNewArray(javaNewArray: JKJavaNewArray, data: D): JKExpression = visitExpression(javaNewArray, data)
override fun visitJavaExternalReference(javaExternalReference: JKJavaExternalReference, data: D): JKExternalReference = visitExternalReference(javaExternalReference, 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)
@@ -33,14 +33,26 @@ interface JKTransformerVoid : JKTransformer<Nothing?> {
override fun visitTypeCastExpression(typeCastExpression: JKTypeCastExpression, data: Nothing?): JKTypeCastExpression = visitTypeCastExpression(typeCastExpression)
fun visitExpressionList(expressionList: JKExpressionList): JKExpressionList = visitElement(expressionList) as JKExpressionList
override fun visitExpressionList(expressionList: JKExpressionList, data: Nothing?): JKExpressionList = visitExpressionList(expressionList)
fun visitMethodReference(methodReference: JKMethodReference): JKMethodReference = visitElement(methodReference) as JKMethodReference
fun visitReference(reference: JKReference): JKReference = visitElement(reference) as JKReference
override fun visitReference(reference: JKReference, data: Nothing?): JKReference = visitReference(reference)
fun visitExternalReference(externalReference: JKExternalReference): JKExternalReference = visit(externalReference) as JKExternalReference
override fun visitExternalReference(externalReference: JKExternalReference, data: Nothing?): JKExternalReference = visitExternalReference(externalReference)
fun visitMethodReference(methodReference: JKMethodReference): JKMethodReference = visitReference(methodReference) as JKMethodReference
override fun visitMethodReference(methodReference: JKMethodReference, data: Nothing?): JKMethodReference = visitMethodReference(methodReference)
fun visitFieldReference(fieldReference: JKFieldReference): JKFieldReference = visitElement(fieldReference) as JKFieldReference
fun visitFieldReference(fieldReference: JKFieldReference): JKFieldReference = visitReference(fieldReference) as JKFieldReference
override fun visitFieldReference(fieldReference: JKFieldReference, data: Nothing?): JKFieldReference = visitFieldReference(fieldReference)
fun visitClassReference(classReference: JKClassReference): JKClassReference = visitElement(classReference) as JKClassReference
fun visitClassReference(classReference: JKClassReference): JKClassReference = visitReference(classReference) as JKClassReference
override fun visitClassReference(classReference: JKClassReference, data: Nothing?): JKClassReference = visitClassReference(classReference)
fun visitTypeReference(typeReference: JKTypeReference): JKTypeReference = visitElement(typeReference) as JKTypeReference
override fun visitTypeReference(typeReference: JKTypeReference, data: Nothing?): JKTypeReference = visitTypeReference(typeReference)
fun visitType(type: JKType): JKType = visitElement(type) as JKType
override fun visitType(type: JKType, data: Nothing?): JKType = visitType(type)
fun visitExternalMethodReference(externalMethodReference: JKExternalMethodReference): JKExternalMethodReference = visitExternalReference(externalMethodReference) as JKExternalMethodReference
override fun visitExternalMethodReference(externalMethodReference: JKExternalMethodReference, data: Nothing?): JKExternalMethodReference = visitExternalMethodReference(externalMethodReference)
fun visitExternalFieldReference(externalFieldReference: JKExternalFieldReference): JKExternalFieldReference = visitExternalReference(externalFieldReference) as JKExternalFieldReference
override fun visitExternalFieldReference(externalFieldReference: JKExternalFieldReference, data: Nothing?): JKExternalFieldReference = visitExternalFieldReference(externalFieldReference)
fun visitExternalClassReference(externalClassReference: JKExternalClassReference): JKExternalClassReference = visitExternalReference(externalClassReference) as JKExternalClassReference
override fun visitExternalClassReference(externalClassReference: JKExternalClassReference, data: Nothing?): JKExternalClassReference = visitExternalClassReference(externalClassReference)
fun visitExternalTypeReference(externalTypeReference: JKExternalTypeReference): JKExternalTypeReference = visitExternalReference(externalTypeReference) as JKExternalTypeReference
override fun visitExternalTypeReference(externalTypeReference: JKExternalTypeReference, data: Nothing?): JKExternalTypeReference = visitExternalTypeReference(externalTypeReference)
fun visitOperatorIdentifier(operatorIdentifier: JKOperatorIdentifier): JKOperatorIdentifier = visitIdentifier(operatorIdentifier) as JKOperatorIdentifier
override fun visitOperatorIdentifier(operatorIdentifier: JKOperatorIdentifier, data: Nothing?): JKOperatorIdentifier = visitOperatorIdentifier(operatorIdentifier)
fun visitQualificationIdentifier(qualificationIdentifier: JKQualificationIdentifier): JKQualificationIdentifier = visitIdentifier(qualificationIdentifier) as JKQualificationIdentifier
@@ -107,6 +119,8 @@ interface JKTransformerVoid : JKTransformer<Nothing?> {
override fun visitJavaNewEmptyArray(javaNewEmptyArray: JKJavaNewEmptyArray, data: Nothing?): JKExpression = visitJavaNewEmptyArray(javaNewEmptyArray)
fun visitJavaNewArray(javaNewArray: JKJavaNewArray): JKExpression = visitExpression(javaNewArray)
override fun visitJavaNewArray(javaNewArray: JKJavaNewArray, data: Nothing?): JKExpression = visitJavaNewArray(javaNewArray)
fun visitJavaExternalReference(javaExternalReference: JKJavaExternalReference): JKExternalReference = visitExternalReference(javaExternalReference)
override fun visitJavaExternalReference(javaExternalReference: JKJavaExternalReference, data: Nothing?): JKExternalReference = visitJavaExternalReference(javaExternalReference)
fun visitKtFun(ktFun: JKKtFun): JKDeclaration = visitDeclaration(ktFun)
override fun visitKtFun(ktFun: JKKtFun, data: Nothing?): JKDeclaration = visitKtFun(ktFun)
fun visitKtConstructor(ktConstructor: JKKtConstructor): JKDeclaration = visitDeclaration(ktConstructor)
@@ -18,10 +18,16 @@ interface JKVisitor<out R, in D> {
fun visitParenthesizedExpression(parenthesizedExpression: JKParenthesizedExpression, data: D): R = visitExpression(parenthesizedExpression, data)
fun visitTypeCastExpression(typeCastExpression: JKTypeCastExpression, data: D): R = visitExpression(typeCastExpression, data)
fun visitExpressionList(expressionList: JKExpressionList, data: D): R = visitElement(expressionList, data)
fun visitMethodReference(methodReference: JKMethodReference, data: D): R = visitElement(methodReference, data)
fun visitFieldReference(fieldReference: JKFieldReference, data: D): R = visitElement(fieldReference, data)
fun visitClassReference(classReference: JKClassReference, data: D): R = visitElement(classReference, data)
fun visitTypeReference(typeReference: JKTypeReference, data: D): R = visitElement(typeReference, data)
fun visitReference(reference: JKReference, data: D): R = visitElement(reference, data)
fun visitExternalReference(externalReference: JKExternalReference, data: D): R = visit(externalReference, data)
fun visitMethodReference(methodReference: JKMethodReference, data: D): R = visitReference(methodReference, data)
fun visitFieldReference(fieldReference: JKFieldReference, data: D): R = visitReference(fieldReference, data)
fun visitClassReference(classReference: JKClassReference, data: D): R = visitReference(classReference, data)
fun visitType(type: JKType, data: D): R = visitElement(type, data)
fun visitExternalMethodReference(externalMethodReference: JKExternalMethodReference, data: D): R = visitExternalReference(externalMethodReference, data)
fun visitExternalFieldReference(externalFieldReference: JKExternalFieldReference, data: D): R = visitExternalReference(externalFieldReference, data)
fun visitExternalClassReference(externalClassReference: JKExternalClassReference, data: D): R = visitExternalReference(externalClassReference, data)
fun visitExternalTypeReference(externalTypeReference: JKExternalTypeReference, data: D): R = visitExternalReference(externalTypeReference, data)
fun visitOperatorIdentifier(operatorIdentifier: JKOperatorIdentifier, data: D): R = visitIdentifier(operatorIdentifier, data)
fun visitQualificationIdentifier(qualificationIdentifier: JKQualificationIdentifier, data: D): R = visitIdentifier(qualificationIdentifier, data)
fun visitLoop(loop: JKLoop, data: D): R = visitStatement(loop, data)
@@ -55,6 +61,7 @@ interface JKVisitor<out R, in D> {
fun visitJavaModifier(javaModifier: JKJavaModifier, data: D): R = visitModifier(javaModifier, data)
fun visitJavaNewEmptyArray(javaNewEmptyArray: JKJavaNewEmptyArray, data: D): R = visitExpression(javaNewEmptyArray, data)
fun visitJavaNewArray(javaNewArray: JKJavaNewArray, data: D): R = visitExpression(javaNewArray, data)
fun visitJavaExternalReference(javaExternalReference: JKJavaExternalReference, data: D): R = visitExternalReference(javaExternalReference, data)
fun visitKtFun(ktFun: JKKtFun, data: D): R = visitDeclaration(ktFun, data)
fun visitKtConstructor(ktConstructor: JKKtConstructor, data: D): R = visitDeclaration(ktConstructor, data)
fun visitKtPrimaryConstructor(ktPrimaryConstructor: JKKtPrimaryConstructor, data: D): R = visitKtConstructor(ktPrimaryConstructor, data)
@@ -33,14 +33,26 @@ interface JKVisitorVoid : JKVisitor<Unit, Nothing?> {
override fun visitTypeCastExpression(typeCastExpression: JKTypeCastExpression, data: Nothing?) = visitTypeCastExpression(typeCastExpression)
fun visitExpressionList(expressionList: JKExpressionList) = visitElement(expressionList, null)
override fun visitExpressionList(expressionList: JKExpressionList, data: Nothing?) = visitExpressionList(expressionList)
fun visitMethodReference(methodReference: JKMethodReference) = visitElement(methodReference, null)
fun visitReference(reference: JKReference) = visitElement(reference, null)
override fun visitReference(reference: JKReference, data: Nothing?) = visitReference(reference)
fun visitExternalReference(externalReference: JKExternalReference) = visit(externalReference, null)
override fun visitExternalReference(externalReference: JKExternalReference, data: Nothing?) = visitExternalReference(externalReference)
fun visitMethodReference(methodReference: JKMethodReference) = visitReference(methodReference, null)
override fun visitMethodReference(methodReference: JKMethodReference, data: Nothing?) = visitMethodReference(methodReference)
fun visitFieldReference(fieldReference: JKFieldReference) = visitElement(fieldReference, null)
fun visitFieldReference(fieldReference: JKFieldReference) = visitReference(fieldReference, null)
override fun visitFieldReference(fieldReference: JKFieldReference, data: Nothing?) = visitFieldReference(fieldReference)
fun visitClassReference(classReference: JKClassReference) = visitElement(classReference, null)
fun visitClassReference(classReference: JKClassReference) = visitReference(classReference, null)
override fun visitClassReference(classReference: JKClassReference, data: Nothing?) = visitClassReference(classReference)
fun visitTypeReference(typeReference: JKTypeReference) = visitElement(typeReference, null)
override fun visitTypeReference(typeReference: JKTypeReference, data: Nothing?) = visitTypeReference(typeReference)
fun visitType(type: JKType) = visitElement(type, null)
override fun visitType(type: JKType, data: Nothing?) = visitType(type)
fun visitExternalMethodReference(externalMethodReference: JKExternalMethodReference) = visitExternalReference(externalMethodReference, null)
override fun visitExternalMethodReference(externalMethodReference: JKExternalMethodReference, data: Nothing?) = visitExternalMethodReference(externalMethodReference)
fun visitExternalFieldReference(externalFieldReference: JKExternalFieldReference) = visitExternalReference(externalFieldReference, null)
override fun visitExternalFieldReference(externalFieldReference: JKExternalFieldReference, data: Nothing?) = visitExternalFieldReference(externalFieldReference)
fun visitExternalClassReference(externalClassReference: JKExternalClassReference) = visitExternalReference(externalClassReference, null)
override fun visitExternalClassReference(externalClassReference: JKExternalClassReference, data: Nothing?) = visitExternalClassReference(externalClassReference)
fun visitExternalTypeReference(externalTypeReference: JKExternalTypeReference) = visitExternalReference(externalTypeReference, null)
override fun visitExternalTypeReference(externalTypeReference: JKExternalTypeReference, data: Nothing?) = visitExternalTypeReference(externalTypeReference)
fun visitOperatorIdentifier(operatorIdentifier: JKOperatorIdentifier) = visitIdentifier(operatorIdentifier, null)
override fun visitOperatorIdentifier(operatorIdentifier: JKOperatorIdentifier, data: Nothing?) = visitOperatorIdentifier(operatorIdentifier)
fun visitQualificationIdentifier(qualificationIdentifier: JKQualificationIdentifier) = visitIdentifier(qualificationIdentifier, null)
@@ -107,6 +119,8 @@ interface JKVisitorVoid : JKVisitor<Unit, Nothing?> {
override fun visitJavaNewEmptyArray(javaNewEmptyArray: JKJavaNewEmptyArray, data: Nothing?) = visitJavaNewEmptyArray(javaNewEmptyArray)
fun visitJavaNewArray(javaNewArray: JKJavaNewArray) = visitExpression(javaNewArray, null)
override fun visitJavaNewArray(javaNewArray: JKJavaNewArray, data: Nothing?) = visitJavaNewArray(javaNewArray)
fun visitJavaExternalReference(javaExternalReference: JKJavaExternalReference) = visitExternalReference(javaExternalReference, null)
override fun visitJavaExternalReference(javaExternalReference: JKJavaExternalReference, data: Nothing?) = visitJavaExternalReference(javaExternalReference)
fun visitKtFun(ktFun: JKKtFun) = visitDeclaration(ktFun, null)
override fun visitKtFun(ktFun: JKKtFun, data: Nothing?) = visitKtFun(ktFun)
fun visitKtConstructor(ktConstructor: JKKtConstructor) = visitDeclaration(ktConstructor, null)