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.*
import org.jetbrains.kotlin.j2k.tree.impl.* 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 { fun PsiExpression.toJK(): JKExpression {
when (this) { when (this) {
is PsiBinaryExpression -> { is PsiBinaryExpression -> {
@@ -141,7 +154,7 @@ class JavaToJKTreeBuilder {
return JKJavaNewEmptyArrayImpl(dimensions.map { it?.toJK() }) 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 { fun PsiArrayAccessExpression.toJK(): JKExpression {
@@ -149,7 +162,7 @@ class JavaToJKTreeBuilder {
} }
fun PsiTypeCastExpression.toJK(): JKExpression { fun PsiTypeCastExpression.toJK(): JKExpression {
return JKTypeCastExpressionImpl(operand?.toJK(), castType?.convertTypeReference()) return JKTypeCastExpressionImpl(operand?.toJK(), castType?.toJK())
} }
fun PsiParenthesizedExpression.toJK(): JKExpression { fun PsiParenthesizedExpression.toJK(): JKExpression {
@@ -160,25 +173,46 @@ class JavaToJKTreeBuilder {
return JKExpressionListImpl(this?.expressions?.map { it.toJK() }?.toTypedArray() ?: emptyArray()) 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 { fun PsiIdentifier.convertFieldReference(): JKJavaFieldReference {
return JKJavaFieldReferenceImpl() return JKJavaFieldReferenceImpl(this.toJK(), javaToJKTreeBuilder)
} }
fun PsiIdentifier.convertClassReference(): JKJavaClassReference { fun PsiIdentifier.convertType(): JKJavaClassReference {
return JKJavaClassReferenceImpl() return JKJavaClassReferenceImpl(this.toJK(), javaToJKTreeBuilder)
} }
fun PsiTypeElement.convertTypeReference(): JKTypeReference { fun PsiTypeElement.toJK(): JKType? {
return JKTypeReferenceImpl() 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 { fun PsiClass.toJK(): JKClass {
val classKind: JKClass.ClassKind = when { val classKind: JKClass.ClassKind = when {
@@ -187,22 +221,22 @@ class JavaToJKTreeBuilder {
isInterface -> JKClass.ClassKind.INTERFACE isInterface -> JKClass.ClassKind.INTERFACE
else -> JKClass.ClassKind.CLASS else -> JKClass.ClassKind.CLASS
} }
return JKClassImpl(with(ModifierMapper) { modifierList.toJK() }, JKNameIdentifierImpl(this.name!!), classKind).apply { return JKClassImpl(with(modifierMapper) { modifierList.toJK() }, JKNameIdentifierImpl(this.name!!), classKind).apply {
declarations = children.mapNotNull { ElementVisitor().apply { it.accept(this) }.resultElement as? JKDeclaration } declarations = children.mapNotNull { ElementVisitor(declarationMapper).apply { it.accept(this) }.resultElement as? JKDeclaration }
} }
} }
fun PsiField.toJK(): JKJavaField { fun PsiField.toJK(): JKJavaField {
val initializer = with(ExpressionTreeMapper) { val initializer = with(expressionTreeMapper) {
initializer?.toJK() initializer?.toJK()
} }
val type = JKJavaTypeIdentifierImpl(this.type.canonicalText) val type = JKJavaTypeIdentifierImpl(this.type.canonicalText)
val name = JKNameIdentifierImpl(this.name!!) val name = JKNameIdentifierImpl(this.name!!)
val modifierList = with(ModifierMapper) { val modifierList = with(modifierMapper) {
modifierList.toJK() modifierList.toJK()
} }
@@ -210,7 +244,7 @@ class JavaToJKTreeBuilder {
} }
fun PsiMethod.toJK(): JKJavaMethod { fun PsiMethod.toJK(): JKJavaMethod {
val modifierList = with(ModifierMapper) { modifierList.toJK() } val modifierList = with(modifierMapper) { modifierList.toJK() }
val name = JKNameIdentifierImpl(name) val name = JKNameIdentifierImpl(name)
val valueArgumentList = this.parameterList.parameters.map { it -> it.toJK() } val valueArgumentList = this.parameterList.parameters.map { it -> it.toJK() }
val block = body?.toJK() val block = body?.toJK()
@@ -236,7 +270,7 @@ class JavaToJKTreeBuilder {
} }
private object ModifierMapper { private inner class ModifierMapper {
fun PsiModifierList?.toJK(): JKModifierList { fun PsiModifierList?.toJK(): JKModifierList {
val modifierList = JKModifierListImpl() 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 var resultElement: JKElement? = null
override fun visitClass(aClass: PsiClass) { override fun visitClass(aClass: PsiClass) {
resultElement = with(DeclarationMapper) { aClass.toJK() } resultElement = with(declarationMapper) { aClass.toJK() }
} }
override fun visitField(field: PsiField) { override fun visitField(field: PsiField) {
resultElement = with(DeclarationMapper) { field.toJK() } resultElement = with(declarationMapper) { field.toJK() }
} }
override fun visitFile(file: PsiFile) { override fun visitFile(file: PsiFile) {
@@ -287,7 +321,7 @@ class JavaToJKTreeBuilder {
fun buildTree(psi: PsiElement): JKElement? { fun buildTree(psi: PsiElement): JKElement? {
assert(psi.language.`is`(JavaLanguage.INSTANCE)) { "Unable to build JK Tree using Java Visitor for language ${psi.language}" } 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) psi.accept(elementVisitor)
return elementVisitor.resultElement return elementVisitor.resultElement
} }
@@ -16,6 +16,7 @@
package org.jetbrains.kotlin.j2k.tree.impl package org.jetbrains.kotlin.j2k.tree.impl
import com.intellij.psi.*
import org.jetbrains.kotlin.j2k.tree.* import org.jetbrains.kotlin.j2k.tree.*
import org.jetbrains.kotlin.j2k.tree.visitors.JKTransformer import org.jetbrains.kotlin.j2k.tree.visitors.JKTransformer
import org.jetbrains.kotlin.j2k.tree.visitors.JKVisitor 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 <R, D> accept(visitor: JKVisitor<R, D>, data: D): R = visitor.visitJavaField(this, data)
override fun <D> acceptChildren(visitor: JKVisitor<Unit, D>, data: D) override fun <D> acceptChildren(visitor: JKVisitor<Unit, D>, data: D) = listOfNotNull(type, name, initializer).forEach { it.accept(visitor, data) }
= listOfNotNull(type, name, initializer).forEach { it.accept(visitor, data) }
override fun <D> transformChildren(transformer: JKTransformer<D>, data: D) { override fun <D> transformChildren(transformer: JKTransformer<D>, data: D) {
type = type.transform(transformer, data) 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 <R, D> accept(visitor: JKVisitor<R, D>, data: D): R = visitor.visitJavaMethodReference(this, data)
override fun <D> acceptChildren(visitor: JKVisitor<Unit, D>, data: D) { 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 <R, D> accept(visitor: JKVisitor<R, D>, data: D): R = visitor.visitJavaFieldReference(this, data)
override fun <D> acceptChildren(visitor: JKVisitor<Unit, D>, data: D) { 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 <R, D> accept(visitor: JKVisitor<R, D>, data: D): R = visitor.visitJavaClassReference(this, data)
override fun <D> acceptChildren(visitor: JKVisitor<Unit, D>, data: D) { override fun <D> acceptChildren(visitor: JKVisitor<Unit, D>, data: D) {
@@ -16,6 +16,9 @@
package org.jetbrains.kotlin.j2k.tree.impl 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.*
import org.jetbrains.kotlin.j2k.tree.visitors.JKTransformer import org.jetbrains.kotlin.j2k.tree.visitors.JKTransformer
import org.jetbrains.kotlin.j2k.tree.visitors.JKVisitor 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 <R, D> accept(visitor: JKVisitor<R, D>, data: D): R = visitor.visitTypeCastExpression(this, data)
override fun <D> acceptChildren(visitor: JKVisitor<Unit, D>, data: D) { 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) { override fun <D> acceptChildren(visitor: JKVisitor<Unit, D>, data: D) {
+34 -7
View File
@@ -17,6 +17,7 @@
package org.jetbrains.kotlin.j2k.tree package org.jetbrains.kotlin.j2k.tree
import com.intellij.psi.PsiElement 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.JKTransformer
import org.jetbrains.kotlin.j2k.tree.visitors.JKVisitor import org.jetbrains.kotlin.j2k.tree.visitors.JKVisitor
@@ -86,7 +87,7 @@ interface JKParenthesizedExpression : JKExpression {
interface JKTypeCastExpression : JKExpression { interface JKTypeCastExpression : JKExpression {
val expression: JKExpression? val expression: JKExpression?
val type: JKTypeReference? val type: JKType?
} }
interface JKExpressionList : JKElement { interface JKExpressionList : JKElement {
@@ -94,7 +95,8 @@ interface JKExpressionList : JKElement {
} }
interface JKReference : JKElement { interface JKReference : JKElement {
val targetProvider:ReferenceTargetProvider
fun resolve(): JKElement
} }
interface JKExternalReference { interface JKExternalReference {
@@ -102,19 +104,39 @@ interface JKExternalReference {
} }
interface JKMethodReference : JKReference { interface JKMethodReference : JKReference {
val nameIdentifier: JKNameIdentifier
} }
interface JKFieldReference : JKReference { interface JKFieldReference : JKReference {
val nameIdentifier: JKNameIdentifier
} }
interface JKClassReference : JKReference { interface JKClassReference : JKReference {
val nameIdentifier: JKNameIdentifier
} }
interface JKTypeReference : JKReference { interface JKType : JKElement {
val parameters: List<JKTypeReference> 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 interface JKOperatorIdentifier : JKIdentifier
@@ -157,3 +179,8 @@ interface JKStringLiteralExpression : JKLiteralExpression {
} }
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 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 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 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 visitReference(reference: JKReference, data: D): JKReference = visitElement(reference, data) as JKReference
override fun visitFieldReference(fieldReference: JKFieldReference, data: D): JKFieldReference = visitElement(fieldReference, data) as JKFieldReference override fun visitExternalReference(externalReference: JKExternalReference, data: D): JKExternalReference = visit(externalReference, data) as JKExternalReference
override fun visitClassReference(classReference: JKClassReference, data: D): JKClassReference = visitElement(classReference, data) as JKClassReference override fun visitMethodReference(methodReference: JKMethodReference, data: D): JKMethodReference = visitReference(methodReference, data) as JKMethodReference
override fun visitTypeReference(typeReference: JKTypeReference, data: D): JKTypeReference = visitElement(typeReference, data) as JKTypeReference 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 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 visitQualificationIdentifier(qualificationIdentifier: JKQualificationIdentifier, data: D): JKQualificationIdentifier = visitIdentifier(qualificationIdentifier, data) as JKQualificationIdentifier
override fun visitLoop(loop: JKLoop, data: D): JKLoop = visitStatement(loop, data) as JKLoop 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 visitJavaModifier(javaModifier: JKJavaModifier, data: D): JKModifier = visitModifier(javaModifier, data)
override fun visitJavaNewEmptyArray(javaNewEmptyArray: JKJavaNewEmptyArray, data: D): JKExpression = visitExpression(javaNewEmptyArray, 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 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 visitKtFun(ktFun: JKKtFun, data: D): JKDeclaration = visitDeclaration(ktFun, data)
override fun visitKtConstructor(ktConstructor: JKKtConstructor, data: D): JKDeclaration = visitDeclaration(ktConstructor, 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 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) override fun visitTypeCastExpression(typeCastExpression: JKTypeCastExpression, data: Nothing?): JKTypeCastExpression = visitTypeCastExpression(typeCastExpression)
fun visitExpressionList(expressionList: JKExpressionList): JKExpressionList = visitElement(expressionList) as JKExpressionList fun visitExpressionList(expressionList: JKExpressionList): JKExpressionList = visitElement(expressionList) as JKExpressionList
override fun visitExpressionList(expressionList: JKExpressionList, data: Nothing?): JKExpressionList = visitExpressionList(expressionList) 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) 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) 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) override fun visitClassReference(classReference: JKClassReference, data: Nothing?): JKClassReference = visitClassReference(classReference)
fun visitTypeReference(typeReference: JKTypeReference): JKTypeReference = visitElement(typeReference) as JKTypeReference fun visitType(type: JKType): JKType = visitElement(type) as JKType
override fun visitTypeReference(typeReference: JKTypeReference, data: Nothing?): JKTypeReference = visitTypeReference(typeReference) 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 fun visitOperatorIdentifier(operatorIdentifier: JKOperatorIdentifier): JKOperatorIdentifier = visitIdentifier(operatorIdentifier) as JKOperatorIdentifier
override fun visitOperatorIdentifier(operatorIdentifier: JKOperatorIdentifier, data: Nothing?): JKOperatorIdentifier = visitOperatorIdentifier(operatorIdentifier) override fun visitOperatorIdentifier(operatorIdentifier: JKOperatorIdentifier, data: Nothing?): JKOperatorIdentifier = visitOperatorIdentifier(operatorIdentifier)
fun visitQualificationIdentifier(qualificationIdentifier: JKQualificationIdentifier): JKQualificationIdentifier = visitIdentifier(qualificationIdentifier) as JKQualificationIdentifier 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) override fun visitJavaNewEmptyArray(javaNewEmptyArray: JKJavaNewEmptyArray, data: Nothing?): JKExpression = visitJavaNewEmptyArray(javaNewEmptyArray)
fun visitJavaNewArray(javaNewArray: JKJavaNewArray): JKExpression = visitExpression(javaNewArray) fun visitJavaNewArray(javaNewArray: JKJavaNewArray): JKExpression = visitExpression(javaNewArray)
override fun visitJavaNewArray(javaNewArray: JKJavaNewArray, data: Nothing?): JKExpression = visitJavaNewArray(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) fun visitKtFun(ktFun: JKKtFun): JKDeclaration = visitDeclaration(ktFun)
override fun visitKtFun(ktFun: JKKtFun, data: Nothing?): JKDeclaration = visitKtFun(ktFun) override fun visitKtFun(ktFun: JKKtFun, data: Nothing?): JKDeclaration = visitKtFun(ktFun)
fun visitKtConstructor(ktConstructor: JKKtConstructor): JKDeclaration = visitDeclaration(ktConstructor) 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 visitParenthesizedExpression(parenthesizedExpression: JKParenthesizedExpression, data: D): R = visitExpression(parenthesizedExpression, data)
fun visitTypeCastExpression(typeCastExpression: JKTypeCastExpression, data: D): R = visitExpression(typeCastExpression, data) fun visitTypeCastExpression(typeCastExpression: JKTypeCastExpression, data: D): R = visitExpression(typeCastExpression, data)
fun visitExpressionList(expressionList: JKExpressionList, data: D): R = visitElement(expressionList, data) fun visitExpressionList(expressionList: JKExpressionList, data: D): R = visitElement(expressionList, data)
fun visitMethodReference(methodReference: JKMethodReference, data: D): R = visitElement(methodReference, data) fun visitReference(reference: JKReference, data: D): R = visitElement(reference, data)
fun visitFieldReference(fieldReference: JKFieldReference, data: D): R = visitElement(fieldReference, data) fun visitExternalReference(externalReference: JKExternalReference, data: D): R = visit(externalReference, data)
fun visitClassReference(classReference: JKClassReference, data: D): R = visitElement(classReference, data) fun visitMethodReference(methodReference: JKMethodReference, data: D): R = visitReference(methodReference, data)
fun visitTypeReference(typeReference: JKTypeReference, data: D): R = visitElement(typeReference, 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 visitOperatorIdentifier(operatorIdentifier: JKOperatorIdentifier, data: D): R = visitIdentifier(operatorIdentifier, data)
fun visitQualificationIdentifier(qualificationIdentifier: JKQualificationIdentifier, data: D): R = visitIdentifier(qualificationIdentifier, data) fun visitQualificationIdentifier(qualificationIdentifier: JKQualificationIdentifier, data: D): R = visitIdentifier(qualificationIdentifier, data)
fun visitLoop(loop: JKLoop, data: D): R = visitStatement(loop, 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 visitJavaModifier(javaModifier: JKJavaModifier, data: D): R = visitModifier(javaModifier, data)
fun visitJavaNewEmptyArray(javaNewEmptyArray: JKJavaNewEmptyArray, data: D): R = visitExpression(javaNewEmptyArray, data) fun visitJavaNewEmptyArray(javaNewEmptyArray: JKJavaNewEmptyArray, data: D): R = visitExpression(javaNewEmptyArray, data)
fun visitJavaNewArray(javaNewArray: JKJavaNewArray, data: D): R = visitExpression(javaNewArray, 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 visitKtFun(ktFun: JKKtFun, data: D): R = visitDeclaration(ktFun, data)
fun visitKtConstructor(ktConstructor: JKKtConstructor, data: D): R = visitDeclaration(ktConstructor, data) fun visitKtConstructor(ktConstructor: JKKtConstructor, data: D): R = visitDeclaration(ktConstructor, data)
fun visitKtPrimaryConstructor(ktPrimaryConstructor: JKKtPrimaryConstructor, data: D): R = visitKtConstructor(ktPrimaryConstructor, 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) override fun visitTypeCastExpression(typeCastExpression: JKTypeCastExpression, data: Nothing?) = visitTypeCastExpression(typeCastExpression)
fun visitExpressionList(expressionList: JKExpressionList) = visitElement(expressionList, null) fun visitExpressionList(expressionList: JKExpressionList) = visitElement(expressionList, null)
override fun visitExpressionList(expressionList: JKExpressionList, data: Nothing?) = visitExpressionList(expressionList) 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) 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) 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) override fun visitClassReference(classReference: JKClassReference, data: Nothing?) = visitClassReference(classReference)
fun visitTypeReference(typeReference: JKTypeReference) = visitElement(typeReference, null) fun visitType(type: JKType) = visitElement(type, null)
override fun visitTypeReference(typeReference: JKTypeReference, data: Nothing?) = visitTypeReference(typeReference) 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) fun visitOperatorIdentifier(operatorIdentifier: JKOperatorIdentifier) = visitIdentifier(operatorIdentifier, null)
override fun visitOperatorIdentifier(operatorIdentifier: JKOperatorIdentifier, data: Nothing?) = visitOperatorIdentifier(operatorIdentifier) override fun visitOperatorIdentifier(operatorIdentifier: JKOperatorIdentifier, data: Nothing?) = visitOperatorIdentifier(operatorIdentifier)
fun visitQualificationIdentifier(qualificationIdentifier: JKQualificationIdentifier) = visitIdentifier(qualificationIdentifier, null) 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) override fun visitJavaNewEmptyArray(javaNewEmptyArray: JKJavaNewEmptyArray, data: Nothing?) = visitJavaNewEmptyArray(javaNewEmptyArray)
fun visitJavaNewArray(javaNewArray: JKJavaNewArray) = visitExpression(javaNewArray, null) fun visitJavaNewArray(javaNewArray: JKJavaNewArray) = visitExpression(javaNewArray, null)
override fun visitJavaNewArray(javaNewArray: JKJavaNewArray, data: Nothing?) = visitJavaNewArray(javaNewArray) 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) fun visitKtFun(ktFun: JKKtFun) = visitDeclaration(ktFun, null)
override fun visitKtFun(ktFun: JKKtFun, data: Nothing?) = visitKtFun(ktFun) override fun visitKtFun(ktFun: JKKtFun, data: Nothing?) = visitKtFun(ktFun)
fun visitKtConstructor(ktConstructor: JKKtConstructor) = visitDeclaration(ktConstructor, null) fun visitKtConstructor(ktConstructor: JKKtConstructor) = visitDeclaration(ktConstructor, null)