From c8c9c19a91257fc0fa201ace0c9edfa980434e2b Mon Sep 17 00:00:00 2001 From: knize Date: Thu, 1 Feb 2018 00:11:23 +0300 Subject: [PATCH] New J2K: References base --- .../kotlin/j2k/JavaToJKTreeBuilder.kt | 78 +++++++++++++------ .../org/jetbrains/kotlin/j2k/tree/impl/j.kt | 37 +++++++-- .../org/jetbrains/kotlin/j2k/tree/impl/jk.kt | 9 ++- .../org/jetbrains/kotlin/j2k/tree/jk.kt | 43 ++++++++-- .../kotlin/j2k/tree/visitors/JKTransformer.kt | 15 +++- .../j2k/tree/visitors/JKTransformerVoid.kt | 24 ++++-- .../kotlin/j2k/tree/visitors/JKVisitor.kt | 15 +++- .../kotlin/j2k/tree/visitors/JKVisitorVoid.kt | 24 ++++-- 8 files changed, 189 insertions(+), 56 deletions(-) diff --git a/j2k/newSrc/org/jetbrains/kotlin/j2k/JavaToJKTreeBuilder.kt b/j2k/newSrc/org/jetbrains/kotlin/j2k/JavaToJKTreeBuilder.kt index 7971e224739..945268e05ef 100644 --- a/j2k/newSrc/org/jetbrains/kotlin/j2k/JavaToJKTreeBuilder.kt +++ b/j2k/newSrc/org/jetbrains/kotlin/j2k/JavaToJKTreeBuilder.kt @@ -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 + get() = TODO("not implemented") //To change initializer of created properties use File | Settings | File Templates. + override val conversionCache: Map + 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() + 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 } diff --git a/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/impl/j.kt b/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/impl/j.kt index 6f57e3e3dc5..75c6fac79e5 100644 --- a/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/impl/j.kt +++ b/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/impl/j.kt @@ -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 accept(visitor: JKVisitor, data: D): R = visitor.visitJavaField(this, data) - override fun acceptChildren(visitor: JKVisitor, data: D) - = listOfNotNull(type, name, initializer).forEach { it.accept(visitor, data) } + override fun acceptChildren(visitor: JKVisitor, data: D) = listOfNotNull(type, name, initializer).forEach { it.accept(visitor, data) } override fun transformChildren(transformer: JKTransformer, 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 accept(visitor: JKVisitor, data: D): R = visitor.visitJavaMethodReference(this, data) override fun acceptChildren(visitor: JKVisitor, 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 accept(visitor: JKVisitor, data: D): R = visitor.visitJavaFieldReference(this, data) override fun acceptChildren(visitor: JKVisitor, 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 accept(visitor: JKVisitor, data: D): R = visitor.visitJavaClassReference(this, data) override fun acceptChildren(visitor: JKVisitor, data: D) { diff --git a/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/impl/jk.kt b/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/impl/jk.kt index 8800aa6451f..08f7156a9df 100644 --- a/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/impl/jk.kt +++ b/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/impl/jk.kt @@ -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 accept(visitor: JKVisitor, data: D): R = visitor.visitTypeCastExpression(this, data) override fun acceptChildren(visitor: JKVisitor, data: D) { @@ -198,10 +201,10 @@ class JKTypeCastExpressionImpl(override var expression: JKExpression?, override } } -class JKTypeReferenceImpl(override val parameters: List) : JKTypeReference, JKElementBase() { +class JKTypeReferenceImpl(override val parameters: List) : JKType, JKElementBase() { - override fun accept(visitor: JKVisitor, data: D): R = visitor.visitTypeReference(this, data) + override fun accept(visitor: JKVisitor, data: D): R = visitor.visitType(this, data) override fun acceptChildren(visitor: JKVisitor, data: D) { diff --git a/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/jk.kt b/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/jk.kt index 41898216344..7f4a36bf77d 100644 --- a/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/jk.kt +++ b/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/jk.kt @@ -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 +interface JKType : JKElement { + val classReference: JKClassReference + val nullability: Nullability + val parameters: List +} + +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 } interface JKOperatorIdentifier : JKIdentifier @@ -156,4 +178,9 @@ interface JKStringLiteralExpression : JKLiteralExpression { val text: String } -interface JKModalityModifier : JKModifier \ No newline at end of file +interface JKModalityModifier : JKModifier + +interface ReferenceTargetProvider { + val resolveCache: Map + val conversionCache: Map +} \ No newline at end of file diff --git a/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/visitors/JKTransformer.kt b/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/visitors/JKTransformer.kt index 17529d89895..0261a6127f5 100644 --- a/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/visitors/JKTransformer.kt +++ b/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/visitors/JKTransformer.kt @@ -18,10 +18,16 @@ interface JKTransformer : JKVisitor { 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 : JKVisitor { 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) diff --git a/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/visitors/JKTransformerVoid.kt b/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/visitors/JKTransformerVoid.kt index 57bf6b8571c..a25a5356276 100644 --- a/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/visitors/JKTransformerVoid.kt +++ b/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/visitors/JKTransformerVoid.kt @@ -33,14 +33,26 @@ interface JKTransformerVoid : JKTransformer { 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 { 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) diff --git a/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/visitors/JKVisitor.kt b/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/visitors/JKVisitor.kt index f42d09bd1cc..ca4d888d210 100644 --- a/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/visitors/JKVisitor.kt +++ b/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/visitors/JKVisitor.kt @@ -18,10 +18,16 @@ interface JKVisitor { 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 { 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) diff --git a/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/visitors/JKVisitorVoid.kt b/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/visitors/JKVisitorVoid.kt index 6c74f3099e1..06d91d5fbaf 100644 --- a/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/visitors/JKVisitorVoid.kt +++ b/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/visitors/JKVisitorVoid.kt @@ -33,14 +33,26 @@ interface JKVisitorVoid : JKVisitor { 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 { 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)