New J2K: References base done.

This commit is contained in:
Dimach
2018-03-03 21:15:28 +02:00
committed by Ilya Kirillov
parent c8c9c19a91
commit 10ff8d500b
16 changed files with 371 additions and 169 deletions
@@ -23,14 +23,40 @@ import com.intellij.psi.impl.source.tree.java.PsiLiteralExpressionImpl
import com.intellij.psi.impl.source.tree.java.PsiNewExpressionImpl
import com.intellij.psi.impl.source.tree.java.PsiReferenceExpressionImpl
import org.jetbrains.kotlin.j2k.tree.*
import org.jetbrains.kotlin.j2k.tree.conveersionCache.JKMultiverseClass
import org.jetbrains.kotlin.j2k.tree.conveersionCache.ReferenceTargetProvider
import org.jetbrains.kotlin.j2k.tree.impl.*
import java.util.*
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.
override fun resolveClassReference(clazz: PsiClass): JKClass {
val name = clazz.qualifiedName ?: TODO()
return universe[name] ?: multiverse[name] ?: run {
val clazz = JKMultiverseClass(JKNameIdentifierImpl(name), mutableListOf(), JKClass.ClassKind.CLASS, JKModifierListImpl())
multiverse[name] = clazz
clazz
}
}
override fun resolveClassReference(identifier: String): JKClass {
return universe[identifier] ?: multiverse[identifier] ?: run {
val clazz = JKMultiverseClass(JKNameIdentifierImpl(identifier), mutableListOf(), JKClass.ClassKind.CLASS, JKModifierListImpl())
multiverse[identifier] = clazz
clazz
}
}
override fun putUniverseClass(clazz: JKClass) {
universe[clazz.name.name] = clazz
}
override fun putMultiverseClass(clazz: JKMultiverseClass) {
multiverse[clazz.name.name] = clazz
}
private val universe = mutableMapOf<String, JKClass>()
private val multiverse = mutableMapOf<String, JKMultiverseClass>()
private val expressionTreeMapper = ExpressionTreeMapper()
@@ -38,8 +64,6 @@ class JavaToJKTreeBuilder : ReferenceTargetProvider {
private val modifierMapper = ModifierMapper()
private val javaToJKTreeBuilder = this
private inner class ExpressionTreeMapper {
fun PsiExpression.toJK(): JKExpression {
when (this) {
@@ -107,8 +131,9 @@ class JavaToJKTreeBuilder : ReferenceTargetProvider {
fun PsiMethodCallExpression.toJK(): JKExpression {
val method = methodExpression as PsiReferenceExpressionImpl
val identifier = (method.referenceNameElement as PsiIdentifier).convertMethodReference()
val call = JKJavaMethodCallExpressionImpl(identifier, argumentList.toJK())
val identifier = method.resolve().convertReference()
val call = JKJavaMethodCallExpressionImpl(identifier as JKMethodReference, argumentList.toJK())
return if (method.findChildByRole(ChildRole.DOT) != null) {
JKQualifiedExpressionImpl((method.qualifier as PsiExpression).toJK(), JKJavaQualificationIdentifierImpl.DOT, call)
}
@@ -119,7 +144,7 @@ class JavaToJKTreeBuilder : ReferenceTargetProvider {
fun PsiReferenceExpression.toJK(): JKExpression {
val impl = this as PsiReferenceExpressionImpl
val identifier = (impl.referenceNameElement as PsiIdentifier).convertFieldReference()
val identifier = impl.resolve().convertReference()
val access = JKJavaFieldAccessExpressionImpl(identifier)
return if (impl.findChildByRole(ChildRole.DOT) != null) {
JKQualifiedExpressionImpl((impl.qualifier as PsiExpression).toJK(), JKJavaQualificationIdentifierImpl.DOT, access)
@@ -154,7 +179,7 @@ class JavaToJKTreeBuilder : ReferenceTargetProvider {
return JKJavaNewEmptyArrayImpl(dimensions.map { it?.toJK() })
}
}
return JKJavaNewExpressionImpl((classReference as PsiIdentifier).convertType(), argumentList.toJK())
return JKJavaNewExpressionImpl(classReference?.resolve().convertReference() as JKClassReference, argumentList.toJK())
}
fun PsiArrayAccessExpression.toJK(): JKExpression {
@@ -173,31 +198,33 @@ class JavaToJKTreeBuilder : ReferenceTargetProvider {
return JKExpressionListImpl(this?.expressions?.map { it.toJK() }?.toTypedArray() ?: emptyArray())
}
fun PsiIdentifier.toJK(): JKNameIdentifier {
return JKNameIdentifierImpl(this.text)
fun PsiElement?.convertReference(): JKReference = when(this){
is PsiMethod -> convertMethodReference()
is PsiField -> convertFieldReference()
is PsiClass -> convertType()
else -> throw Exception("Invalid PSI")
}
fun PsiIdentifier.convertMethodReference(): JKJavaMethodReference {
return JKJavaMethodReferenceImpl(this.toJK(), javaToJKTreeBuilder)
fun PsiMethod.convertMethodReference(): JKJavaMethodReference {
val clazz = this@JavaToJKTreeBuilder.resolveClassReference(containingClass ?: TODO())
return JKMethodReferenceImpl(clazz, this@JavaToJKTreeBuilder.resolveMethodReference(clazz, this))
}
fun PsiIdentifier.convertFieldReference(): JKJavaFieldReference {
return JKJavaFieldReferenceImpl(this.toJK(), javaToJKTreeBuilder)
fun PsiField.convertFieldReference(): JKJavaFieldReference {
val clazz = this@JavaToJKTreeBuilder.resolveClassReference(containingClass ?: TODO())
return JKFieldReferenceImpl(clazz, this@JavaToJKTreeBuilder.resolveFieldReference(clazz, this))
}
fun PsiIdentifier.convertType(): JKJavaClassReference {
return JKJavaClassReferenceImpl(this.toJK(), javaToJKTreeBuilder)
fun PsiClass.convertType(): JKJavaClassReference {
return JKClassReferenceImpl(this@JavaToJKTreeBuilder.resolveClassReference(this))
}
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 classReference = JKClassReferenceImpl(this@JavaToJKTreeBuilder.resolveClassReference(this.resolve() as? PsiClass ?: TODO()))
val typeArguments = ArrayList<JKType>()
parameterList?.typeParameterElements?.forEach { it ->
kotlin.run {
@@ -263,11 +290,15 @@ class JavaToJKTreeBuilder : ReferenceTargetProvider {
}
fun PsiCodeBlock.toJK(): JKBlock {
//TODO block mapping
return JKBlockImpl(listOf(JKStringLiteralExpressionImpl("")))
return JKBlockImpl(statements.map { it.toJK() })
}
fun PsiStatement.toJK(): JKStatement {
if (this is PsiExpressionStatement) {
return JKExpressionStatementImpl(with(expressionTreeMapper) { expression.toJK() })
}
TODO()
}
}
private inner class ModifierMapper {
@@ -313,6 +344,10 @@ class JavaToJKTreeBuilder : ReferenceTargetProvider {
resultElement = with(declarationMapper) { field.toJK() }
}
override fun visitMethod(method: PsiMethod) {
resultElement = with(declarationMapper) { method.toJK() }
}
override fun visitFile(file: PsiFile) {
file.acceptChildren(this)
}
@@ -38,6 +38,62 @@ private class DebugTreePrinter : JKVisitorVoid {
override fun visitJavaAccessModifier(javaAccessModifier: JKJavaAccessModifier) {
printer.println(javaAccessModifier.classNameWithoutJK(), "(", javaAccessModifier.type, ")")
}
override fun visitJavaMethod(javaMethod: JKJavaMethod) {
printer.println(javaMethod.classNameWithoutJK(), " [")
printer.indented {
javaMethod.block?.accept(this, null)
javaMethod.modifierList.accept(this, null)
}
printer.println("]")
}
override fun visitExpressionStatement(expressionStatement: JKExpressionStatement) {
printer.println(expressionStatement.classNameWithoutJK(), " [")
printer.indented {
expressionStatement.acceptChildren(this, null)
}
printer.println("]")
}
override fun visitQualifiedExpression(qualifiedExpression: JKQualifiedExpression) {
printer.println(qualifiedExpression.classNameWithoutJK(), " [")
printer.indented {
qualifiedExpression.acceptChildren(this, null)
}
printer.println("]")
}
override fun visitBlock(block: JKBlock) {
printer.println(block.classNameWithoutJK(), " [")
printer.indented {
block.acceptChildren(this, null)
}
printer.println("]")
}
override fun visitMethodReference(methodReference: JKMethodReference) {
printer.println(methodReference.classNameWithoutJK())
printer.println(methodReference.containerClass.name.name, "@", methodReference.target.name.name)
}
override fun visitFieldReference(fieldReference: JKFieldReference) {
printer.println(fieldReference.classNameWithoutJK())
printer.println(fieldReference.containerClass.name.name, "@", fieldReference.target.name.name)
}
override fun visitClassReference(classReference: JKClassReference) {
printer.println(classReference.classNameWithoutJK())
printer.println(classReference.target.name.name)
}
override fun visitJavaStringLiteralExpression(javaStringLiteralExpression: JKJavaStringLiteralExpression) {
printer.println(javaStringLiteralExpression.classNameWithoutJK(), " \"")
printer.indented {
printer.println(javaStringLiteralExpression.text)
}
printer.println("\"")
}
}
private fun Any.classNameWithoutJK(): String = this.javaClass.simpleName.removePrefix("JK")
@@ -49,5 +105,4 @@ private inline fun Printer.indented(block: () -> Unit) {
}
fun JKElement.prettyDebugPrintTree(): String
= DebugTreePrinter().apply { accept(this, null) }.stringBuilder.toString()
fun JKElement.prettyDebugPrintTree(): String = DebugTreePrinter().apply { accept(this, null) }.stringBuilder.toString()
@@ -0,0 +1,40 @@
/*
* Copyright 2010-2018 JetBrains s.r.o.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.jetbrains.kotlin.j2k.tree.conveersionCache
import org.jetbrains.kotlin.j2k.tree.JKDeclaration
import org.jetbrains.kotlin.j2k.tree.JKElement
import org.jetbrains.kotlin.j2k.tree.visitors.JKTransformer
import org.jetbrains.kotlin.j2k.tree.visitors.JKVisitor
interface JKMultiverseDeclaration : JKDeclaration{
override fun <R, D> accept(visitor: JKVisitor<R, D>, data: D): R {
TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
}
override fun <R : JKElement, D> transform(transformer: JKTransformer<D>, data: D): R {
TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
}
override fun <D> acceptChildren(visitor: JKVisitor<Unit, D>, data: D) {
TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
}
override fun <D> transformChildren(transformer: JKTransformer<D>, data: D) {
TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
}
}
@@ -0,0 +1,62 @@
/*
* Copyright 2010-2018 JetBrains s.r.o.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.jetbrains.kotlin.j2k.tree.conveersionCache
import org.jetbrains.kotlin.j2k.tree.*
import org.jetbrains.kotlin.j2k.tree.impl.JKElementBase
import org.jetbrains.kotlin.j2k.tree.impl.JKJavaTypeIdentifierImpl
import org.jetbrains.kotlin.j2k.tree.impl.JKModifierListImpl
import org.jetbrains.kotlin.j2k.tree.impl.JKReferenceType
import org.jetbrains.kotlin.j2k.tree.visitors.JKVisitor
class JKMultiverseField(override var name: JKNameIdentifier) : JKMultiverseDeclaration, JKJavaField {
override var initializer: JKExpression? = null
override var modifierList: JKModifierList = JKModifierListImpl()
override var type: JKTypeIdentifier = JKJavaTypeIdentifierImpl("") //TODO
override val valid: Boolean
get() = true
}
class JKMultiverseProperty : JKMultiverseDeclaration {
override val valid: Boolean
get() = true
}
class JKMultiverseMethod(override var name: JKNameIdentifier) : JKMultiverseDeclaration, JKMethod {
override var modifierList: JKModifierList = JKModifierListImpl()
override var block: JKBlock? = null
override var valueArguments: List<JKValueArgument> = listOf()
override val valid: Boolean
get() = true
}
class JKMultiverseClass(override var name: JKNameIdentifier, override var declarations: List<JKDeclaration>,
override var classKind: JKClass.ClassKind, override var modifierList: JKModifierList) : JKClass, JKMultiverseDeclaration {
override val valid: Boolean
get() = true
}
class JKMultiverseClassReferenceImpl(override val target: JKClass) : JKJavaClassReference, JKElementBase() {
override val referenceType: JKReferenceType = JKReferenceType.M2U
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) {
}
}
@@ -0,0 +1,49 @@
/*
* Copyright 2010-2018 JetBrains s.r.o.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.jetbrains.kotlin.j2k.tree.conveersionCache
import com.intellij.psi.PsiClass
import com.intellij.psi.PsiField
import com.intellij.psi.PsiMethod
import org.jetbrains.kotlin.j2k.tree.JKClass
import org.jetbrains.kotlin.j2k.tree.JKJavaField
import org.jetbrains.kotlin.j2k.tree.JKMethod
import org.jetbrains.kotlin.j2k.tree.impl.JKNameIdentifierImpl
interface ReferenceTargetProvider {
fun resolveClassReference(identifier: String): JKClass
fun resolveClassReference(clazz: PsiClass): JKClass
fun putUniverseClass(clazz: JKClass)
fun putMultiverseClass(clazz: JKMultiverseClass)
fun resolveMethodReference(clazz: JKClass, method: PsiMethod): JKMethod {
return clazz.declarations.asSequence().filter { it is JKMethod && it.name.name == method.name }.firstOrNull() as JKMethod? ?: run {
val met = JKMultiverseMethod(JKNameIdentifierImpl(method.name))
clazz.declarations += met
met
}
}
fun resolveFieldReference(clazz: JKClass, field: PsiField): JKJavaField {
return clazz.declarations.asSequence().filter { it is JKJavaField && it.name.name == field.name }.firstOrNull() as JKJavaField?
?: run {
val field = JKMultiverseField(JKNameIdentifierImpl(field.name!!))
clazz.declarations += field
field
}
}
}
@@ -16,7 +16,6 @@
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
@@ -25,6 +24,8 @@ class JKJavaFieldImpl(override var modifierList: JKModifierList,
override var type: JKTypeIdentifier,
override var name: JKNameIdentifier,
override var initializer: JKExpression?) : JKJavaField, JKElementBase() {
override val valid: Boolean
get() = true
override fun <R, D> accept(visitor: JKVisitor<R, D>, data: D): R = visitor.visitJavaField(this, data)
@@ -60,6 +61,8 @@ class JKJavaMethodImpl(override var modifierList: JKModifierList,
override var name: JKNameIdentifier,
override var valueArguments: List<JKValueArgument>,
override var block: JKBlock?) : JKJavaMethod, JKElementBase() {
override val valid: Boolean
get() = true
override fun <R, D> accept(visitor: JKVisitor<R, D>, data: D): R = visitor.visitJavaMethod(this, data)
override fun <D> transformChildren(transformer: JKTransformer<D>, data: D) {
@@ -98,7 +101,7 @@ class JKJavaMethodCallExpressionImpl(override var identifier: JKMethodReference,
}
}
class JKJavaFieldAccessExpressionImpl(override var identifier: JKFieldReference) : JKJavaFieldAccessExpression, JKElementBase() {
class JKJavaFieldAccessExpressionImpl(override var identifier: JKReference) : JKJavaFieldAccessExpression, JKElementBase() {
override fun <R, D> accept(visitor: JKVisitor<R, D>, data: D): R = visitor.visitJavaFieldAccessExpression(this, data)
override fun <D> acceptChildren(visitor: JKVisitor<Unit, D>, data: D) {
@@ -124,58 +127,7 @@ class JKJavaNewExpressionImpl(override var identifier: JKClassReference,
}
}
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) {
}
}
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) {
}
}
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) {
}
}
class JKJavaNewEmptyArrayImpl(override var initializer: List<JKLiteralExpression?>) : JKJavaNewEmptyArray, JKElementBase() {
class JKJavaNewEmptyArrayImpl(override val initializer: List<JKLiteralExpression?>) : JKJavaNewEmptyArray, JKElementBase() {
override fun <R, D> accept(visitor: JKVisitor<R, D>, data: D): R = visitor.visitJavaNewEmptyArray(this, data)
override fun <D> acceptChildren(visitor: JKVisitor<Unit, D>, data: D) {
@@ -16,10 +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.conveersionCache.JKMultiverseClass
import org.jetbrains.kotlin.j2k.tree.visitors.JKTransformer
import org.jetbrains.kotlin.j2k.tree.visitors.JKVisitor
@@ -35,6 +34,8 @@ abstract class JKElementBase : JKElement {
class JKClassImpl(override var modifierList: JKModifierList, override var name: JKNameIdentifier, override var classKind: JKClass.ClassKind) : JKClass, JKElementBase() {
override val valid: Boolean
get() = true
override var declarations: List<JKDeclaration> = mutableListOf()
override fun <R, D> accept(visitor: JKVisitor<R, D>, data: D): R = visitor.visitClass(this, data)
@@ -83,6 +84,9 @@ class JKBlockImpl(override var statements: List<JKStatement>) : JKBlock, JKEleme
override fun <D> transformChildren(transformer: JKTransformer<D>, data: D) {
statements = statements.map { it.transform<JKStatement, D>(transformer, data) }
}
override fun <D> acceptChildren(visitor: JKVisitor<Unit, D>, data: D) {
statements.forEach { it.accept(visitor, data) }
}
}
class JKStringLiteralExpressionImpl(override val text: String) : JKStringLiteralExpression, JKElementBase() {
@@ -161,6 +165,13 @@ class JKQualifiedExpressionImpl(override var receiver: JKExpression, override va
}
}
class JKExpressionStatementImpl(override val expression: JKExpression) : JKExpressionStatement, JKElementBase() {
override fun <R, D> accept(visitor: JKVisitor<R, D>, data: D): R = visitor.visitExpressionStatement(this, data)
override fun <D> acceptChildren(visitor: JKVisitor<Unit, D>, data: D) {
expression.accept(visitor, data)
}
}
class JKArrayAccessExpressionImpl(override var expression: JKExpression, override var indexExpression: JKExpression?) : JKArrayAccessExpression, JKElementBase() {
override fun <R, D> accept(visitor: JKVisitor<R, D>, data: D): R = visitor.visitArrayAccessExpression(this, data)
@@ -203,10 +214,45 @@ class JKTypeCastExpressionImpl(override var expression: JKExpression?, override
class JKTypeReferenceImpl(override val parameters: List<JKType>) : JKType, JKElementBase() {
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) {
}
}
sealed class JKReferenceType {
object U2U : JKReferenceType()
object U2M : JKReferenceType()
object M2U : JKReferenceType()
}
class JKFieldReferenceImpl(override val containerClass: JKClass, override val target: JKJavaField) : JKJavaFieldReference, JKElementBase() {
override val referenceType: JKReferenceType = if (containerClass is JKMultiverseClass) JKReferenceType.U2M else JKReferenceType.U2U
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) {
}
}
class JKClassReferenceImpl(override val target: JKClass) : JKJavaClassReference, JKElementBase() {
override val referenceType: JKReferenceType = if (target is JKMultiverseClass) JKReferenceType.U2M else JKReferenceType.U2U
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) {
}
}
class JKMethodReferenceImpl(override val containerClass: JKClass, override val target: JKMethod) : JKJavaMethodReference, JKElementBase() {
override val referenceType: JKReferenceType = if (containerClass is JKMultiverseClass) JKReferenceType.U2M else JKReferenceType.U2U
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) {
}
}
@@ -51,5 +51,6 @@ class JKKtFunctionImpl(override var returnType: JKTypeIdentifier,
override var valueArguments: List<JKValueArgument>,
override var block: JKBlock?,
override var modifierList: JKModifierList) : JKElementBase(), JKKtFunction {
override val valid: Boolean
get() = true
}
+1 -10
View File
@@ -22,12 +22,7 @@ interface JKJavaField : JKDeclaration, JKModifierListOwner {
val initializer: JKExpression?
}
interface JKJavaMethod : JKDeclaration {
val modifierList: JKModifierList
val name: JKNameIdentifier
val valueArguments: List<JKValueArgument>
val block: JKBlock?
}
interface JKJavaMethod : JKMethod
interface JKJavaForLoop : JKLoop
@@ -87,7 +82,3 @@ interface JKJavaNewEmptyArray : JKExpression {
interface JKJavaNewArray : JKExpression {
val initializer: List<JKExpression>
}
interface JKJavaExternalReference : JKExternalReference {
}
+19 -32
View File
@@ -16,8 +16,8 @@
package org.jetbrains.kotlin.j2k.tree
import com.intellij.psi.PsiElement
import org.jetbrains.kotlin.j2k.ast.Nullability
import org.jetbrains.kotlin.j2k.tree.impl.JKReferenceType
import org.jetbrains.kotlin.j2k.tree.visitors.JKTransformer
import org.jetbrains.kotlin.j2k.tree.visitors.JKVisitor
@@ -73,7 +73,7 @@ interface JKMethodCallExpression : JKExpression {
}
interface JKFieldAccessExpression : JKExpression {
val identifier: JKFieldReference
val identifier: JKReference
}
interface JKArrayAccessExpression : JKExpression {
@@ -95,24 +95,22 @@ interface JKExpressionList : JKElement {
}
interface JKReference : JKElement {
val targetProvider:ReferenceTargetProvider
fun resolve(): JKElement
}
interface JKExternalReference {
fun resolve(): PsiElement
val target: JKReferenceTarget
val referenceType: JKReferenceType
}
interface JKMethodReference : JKReference {
val nameIdentifier: JKNameIdentifier
val containerClass: JKClass
override val target: JKMethod
}
interface JKFieldReference : JKReference {
val nameIdentifier: JKNameIdentifier
val containerClass: JKClass
override val target: JKJavaField
}
interface JKClassReference : JKReference {
val nameIdentifier: JKNameIdentifier
override val target: JKClass
}
interface JKType : JKElement {
@@ -121,23 +119,6 @@ interface JKType : JKElement {
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
@@ -145,7 +126,7 @@ interface JKQualificationIdentifier : JKIdentifier
interface JKLoop : JKStatement
interface JKDeclaration : JKElement
interface JKDeclaration : JKElement, JKReferenceTarget
interface JKBlock : JKElement {
val statements: List<JKStatement>
@@ -180,7 +161,13 @@ interface JKStringLiteralExpression : JKLiteralExpression {
interface JKModalityModifier : JKModifier
interface ReferenceTargetProvider {
val resolveCache: Map<JKElement, PsiElement>
val conversionCache: Map<PsiElement, JKElement>
interface JKMethod : JKDeclaration {
var modifierList: JKModifierList
var name: JKNameIdentifier
var valueArguments: List<JKValueArgument>
var block: JKBlock?
}
interface JKExpressionStatement : JKStatement {
val expression: JKExpression
}
@@ -18,4 +18,8 @@ package org.jetbrains.kotlin.j2k.tree
interface JKModifierListOwner {
var modifierList: JKModifierList
}
interface JKReferenceTarget {
val valid: Boolean
}
@@ -19,15 +19,10 @@ interface JKTransformer<in D> : JKVisitor<JKElement, D> {
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 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
@@ -43,8 +38,10 @@ interface JKTransformer<in D> : JKVisitor<JKElement, D> {
override fun visitValueArgument(valueArgument: JKValueArgument, data: D): JKValueArgument = visitElement(valueArgument, data) as JKValueArgument
override fun visitStringLiteralExpression(stringLiteralExpression: JKStringLiteralExpression, data: D): JKStringLiteralExpression = visitLiteralExpression(stringLiteralExpression, data) as JKStringLiteralExpression
override fun visitModalityModifier(modalityModifier: JKModalityModifier, data: D): JKModalityModifier = visitModifier(modalityModifier, data) as JKModalityModifier
override fun visitMethod(method: JKMethod, data: D): JKMethod = visitDeclaration(method, data) as JKMethod
override fun visitExpressionStatement(expressionStatement: JKExpressionStatement, data: D): JKExpressionStatement = visitStatement(expressionStatement, data) as JKExpressionStatement
override fun visitJavaField(javaField: JKJavaField, data: D): JKDeclaration = visitDeclaration(javaField, data)
override fun visitJavaMethod(javaMethod: JKJavaMethod, data: D): JKDeclaration = visitDeclaration(javaMethod, data)
override fun visitJavaMethod(javaMethod: JKJavaMethod, data: D): JKMethod = visitMethod(javaMethod, data)
override fun visitJavaForLoop(javaForLoop: JKJavaForLoop, data: D): JKLoop = visitLoop(javaForLoop, data)
override fun visitJavaAssignmentExpression(javaAssignmentExpression: JKJavaAssignmentExpression, data: D): JKExpression = visitExpression(javaAssignmentExpression, data)
override fun visitJavaTypeIdentifier(javaTypeIdentifier: JKJavaTypeIdentifier, data: D): JKTypeIdentifier = visitTypeIdentifier(javaTypeIdentifier, data)
@@ -61,7 +58,6 @@ 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)
@@ -35,8 +35,6 @@ interface JKTransformerVoid : JKTransformer<Nothing?> {
override fun visitExpressionList(expressionList: JKExpressionList, data: Nothing?): JKExpressionList = visitExpressionList(expressionList)
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 = visitReference(fieldReference) as JKFieldReference
@@ -45,14 +43,6 @@ interface JKTransformerVoid : JKTransformer<Nothing?> {
override fun visitClassReference(classReference: JKClassReference, data: Nothing?): JKClassReference = visitClassReference(classReference)
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
@@ -83,10 +73,14 @@ interface JKTransformerVoid : JKTransformer<Nothing?> {
override fun visitStringLiteralExpression(stringLiteralExpression: JKStringLiteralExpression, data: Nothing?): JKStringLiteralExpression = visitStringLiteralExpression(stringLiteralExpression)
fun visitModalityModifier(modalityModifier: JKModalityModifier): JKModalityModifier = visitModifier(modalityModifier) as JKModalityModifier
override fun visitModalityModifier(modalityModifier: JKModalityModifier, data: Nothing?): JKModalityModifier = visitModalityModifier(modalityModifier)
fun visitMethod(method: JKMethod): JKMethod = visitDeclaration(method) as JKMethod
override fun visitMethod(method: JKMethod, data: Nothing?): JKMethod = visitMethod(method)
fun visitExpressionStatement(expressionStatement: JKExpressionStatement): JKExpressionStatement = visitStatement(expressionStatement) as JKExpressionStatement
override fun visitExpressionStatement(expressionStatement: JKExpressionStatement, data: Nothing?): JKExpressionStatement = visitExpressionStatement(expressionStatement)
fun visitJavaField(javaField: JKJavaField): JKDeclaration = visitDeclaration(javaField)
override fun visitJavaField(javaField: JKJavaField, data: Nothing?): JKDeclaration = visitJavaField(javaField)
fun visitJavaMethod(javaMethod: JKJavaMethod): JKDeclaration = visitDeclaration(javaMethod)
override fun visitJavaMethod(javaMethod: JKJavaMethod, data: Nothing?): JKDeclaration = visitJavaMethod(javaMethod)
fun visitJavaMethod(javaMethod: JKJavaMethod): JKMethod = visitMethod(javaMethod)
override fun visitJavaMethod(javaMethod: JKJavaMethod, data: Nothing?): JKMethod = visitJavaMethod(javaMethod)
fun visitJavaForLoop(javaForLoop: JKJavaForLoop): JKLoop = visitLoop(javaForLoop)
override fun visitJavaForLoop(javaForLoop: JKJavaForLoop, data: Nothing?): JKLoop = visitJavaForLoop(javaForLoop)
fun visitJavaAssignmentExpression(javaAssignmentExpression: JKJavaAssignmentExpression): JKExpression = visitExpression(javaAssignmentExpression)
@@ -119,8 +113,6 @@ 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)
@@ -19,15 +19,10 @@ interface JKVisitor<out R, in D> {
fun visitTypeCastExpression(typeCastExpression: JKTypeCastExpression, data: D): R = visitExpression(typeCastExpression, data)
fun visitExpressionList(expressionList: JKExpressionList, data: D): R = visitElement(expressionList, 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)
@@ -43,8 +38,10 @@ interface JKVisitor<out R, in D> {
fun visitValueArgument(valueArgument: JKValueArgument, data: D): R = visitElement(valueArgument, data)
fun visitStringLiteralExpression(stringLiteralExpression: JKStringLiteralExpression, data: D): R = visitLiteralExpression(stringLiteralExpression, data)
fun visitModalityModifier(modalityModifier: JKModalityModifier, data: D): R = visitModifier(modalityModifier, data)
fun visitMethod(method: JKMethod, data: D): R = visitDeclaration(method, data)
fun visitExpressionStatement(expressionStatement: JKExpressionStatement, data: D): R = visitStatement(expressionStatement, data)
fun visitJavaField(javaField: JKJavaField, data: D): R = visitDeclaration(javaField, data)
fun visitJavaMethod(javaMethod: JKJavaMethod, data: D): R = visitDeclaration(javaMethod, data)
fun visitJavaMethod(javaMethod: JKJavaMethod, data: D): R = visitMethod(javaMethod, data)
fun visitJavaForLoop(javaForLoop: JKJavaForLoop, data: D): R = visitLoop(javaForLoop, data)
fun visitJavaAssignmentExpression(javaAssignmentExpression: JKJavaAssignmentExpression, data: D): R = visitExpression(javaAssignmentExpression, data)
fun visitJavaTypeIdentifier(javaTypeIdentifier: JKJavaTypeIdentifier, data: D): R = visitTypeIdentifier(javaTypeIdentifier, data)
@@ -61,7 +58,6 @@ 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)
@@ -35,8 +35,6 @@ interface JKVisitorVoid : JKVisitor<Unit, Nothing?> {
override fun visitExpressionList(expressionList: JKExpressionList, data: Nothing?) = visitExpressionList(expressionList)
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) = visitReference(fieldReference, null)
@@ -45,14 +43,6 @@ interface JKVisitorVoid : JKVisitor<Unit, Nothing?> {
override fun visitClassReference(classReference: JKClassReference, data: Nothing?) = visitClassReference(classReference)
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)
@@ -83,9 +73,13 @@ interface JKVisitorVoid : JKVisitor<Unit, Nothing?> {
override fun visitStringLiteralExpression(stringLiteralExpression: JKStringLiteralExpression, data: Nothing?) = visitStringLiteralExpression(stringLiteralExpression)
fun visitModalityModifier(modalityModifier: JKModalityModifier) = visitModifier(modalityModifier, null)
override fun visitModalityModifier(modalityModifier: JKModalityModifier, data: Nothing?) = visitModalityModifier(modalityModifier)
fun visitMethod(method: JKMethod) = visitDeclaration(method, null)
override fun visitMethod(method: JKMethod, data: Nothing?) = visitMethod(method)
fun visitExpressionStatement(expressionStatement: JKExpressionStatement) = visitStatement(expressionStatement, null)
override fun visitExpressionStatement(expressionStatement: JKExpressionStatement, data: Nothing?) = visitExpressionStatement(expressionStatement)
fun visitJavaField(javaField: JKJavaField) = visitDeclaration(javaField, null)
override fun visitJavaField(javaField: JKJavaField, data: Nothing?) = visitJavaField(javaField)
fun visitJavaMethod(javaMethod: JKJavaMethod) = visitDeclaration(javaMethod, null)
fun visitJavaMethod(javaMethod: JKJavaMethod) = visitMethod(javaMethod, null)
override fun visitJavaMethod(javaMethod: JKJavaMethod, data: Nothing?) = visitJavaMethod(javaMethod)
fun visitJavaForLoop(javaForLoop: JKJavaForLoop) = visitLoop(javaForLoop, null)
override fun visitJavaForLoop(javaForLoop: JKJavaForLoop, data: Nothing?) = visitJavaForLoop(javaForLoop)
@@ -119,8 +113,6 @@ 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)
+5 -1
View File
@@ -1,5 +1,9 @@
package p;
public class Some {
public String aaaa = "";
public String test=""+"a";
public static void main(String[] args) {
System.out.println("Test");
}
}