diff --git a/j2k/newSrc/org/jetbrains/kotlin/j2k/JavaToJKTreeBuilder.kt b/j2k/newSrc/org/jetbrains/kotlin/j2k/JavaToJKTreeBuilder.kt index 945268e05ef..872130bb43a 100644 --- a/j2k/newSrc/org/jetbrains/kotlin/j2k/JavaToJKTreeBuilder.kt +++ b/j2k/newSrc/org/jetbrains/kotlin/j2k/JavaToJKTreeBuilder.kt @@ -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 - 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. + 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() + private val multiverse = mutableMapOf() 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() 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) } diff --git a/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/DebugTreePrinter.kt b/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/DebugTreePrinter.kt index e819c9abeff..f105d8ca302 100644 --- a/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/DebugTreePrinter.kt +++ b/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/DebugTreePrinter.kt @@ -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() \ No newline at end of file +fun JKElement.prettyDebugPrintTree(): String = DebugTreePrinter().apply { accept(this, null) }.stringBuilder.toString() \ No newline at end of file diff --git a/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/conveersionCache/Abstractions.kt b/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/conveersionCache/Abstractions.kt new file mode 100644 index 00000000000..188af409152 --- /dev/null +++ b/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/conveersionCache/Abstractions.kt @@ -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 accept(visitor: JKVisitor, data: D): R { + TODO("not implemented") //To change body of created functions use File | Settings | File Templates. + } + + override fun transform(transformer: JKTransformer, data: D): R { + TODO("not implemented") //To change body of created functions use File | Settings | File Templates. + } + + override fun acceptChildren(visitor: JKVisitor, data: D) { + TODO("not implemented") //To change body of created functions use File | Settings | File Templates. + } + + override fun transformChildren(transformer: JKTransformer, data: D) { + TODO("not implemented") //To change body of created functions use File | Settings | File Templates. + } +} diff --git a/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/conveersionCache/Implementations.kt b/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/conveersionCache/Implementations.kt new file mode 100644 index 00000000000..d0878fcc66f --- /dev/null +++ b/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/conveersionCache/Implementations.kt @@ -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 = listOf() + override val valid: Boolean + get() = true +} + +class JKMultiverseClass(override var name: JKNameIdentifier, override var declarations: List, + 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 accept(visitor: JKVisitor, data: D): R = visitor.visitJavaClassReference(this, data) + + override fun acceptChildren(visitor: JKVisitor, data: D) { + + } +} \ No newline at end of file diff --git a/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/conveersionCache/ReferenceTargetProvider.kt b/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/conveersionCache/ReferenceTargetProvider.kt new file mode 100644 index 00000000000..ba5ad798967 --- /dev/null +++ b/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/conveersionCache/ReferenceTargetProvider.kt @@ -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 + } + } +} \ No newline at end of file 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 75c6fac79e5..5eb0df3c0c6 100644 --- a/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/impl/j.kt +++ b/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/impl/j.kt @@ -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 accept(visitor: JKVisitor, 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, override var block: JKBlock?) : JKJavaMethod, JKElementBase() { + override val valid: Boolean + get() = true override fun accept(visitor: JKVisitor, data: D): R = visitor.visitJavaMethod(this, data) override fun transformChildren(transformer: JKTransformer, 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 accept(visitor: JKVisitor, data: D): R = visitor.visitJavaFieldAccessExpression(this, data) override fun acceptChildren(visitor: JKVisitor, 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 accept(visitor: JKVisitor, data: D): R = visitor.visitJavaMethodReference(this, data) - - override fun acceptChildren(visitor: JKVisitor, 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 accept(visitor: JKVisitor, data: D): R = visitor.visitJavaFieldReference(this, data) - - override fun acceptChildren(visitor: JKVisitor, 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 accept(visitor: JKVisitor, data: D): R = visitor.visitJavaClassReference(this, data) - - override fun acceptChildren(visitor: JKVisitor, data: D) { - - } -} - -class JKJavaNewEmptyArrayImpl(override var initializer: List) : JKJavaNewEmptyArray, JKElementBase() { +class JKJavaNewEmptyArrayImpl(override val initializer: List) : JKJavaNewEmptyArray, JKElementBase() { override fun accept(visitor: JKVisitor, data: D): R = visitor.visitJavaNewEmptyArray(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 08f7156a9df..9c0696a350a 100644 --- a/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/impl/jk.kt +++ b/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/impl/jk.kt @@ -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 = mutableListOf() override fun accept(visitor: JKVisitor, data: D): R = visitor.visitClass(this, data) @@ -83,6 +84,9 @@ class JKBlockImpl(override var statements: List) : JKBlock, JKEleme override fun transformChildren(transformer: JKTransformer, data: D) { statements = statements.map { it.transform(transformer, data) } } + override fun acceptChildren(visitor: JKVisitor, 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 accept(visitor: JKVisitor, data: D): R = visitor.visitExpressionStatement(this, data) + override fun acceptChildren(visitor: JKVisitor, data: D) { + expression.accept(visitor, data) + } +} + class JKArrayAccessExpressionImpl(override var expression: JKExpression, override var indexExpression: JKExpression?) : JKArrayAccessExpression, JKElementBase() { override fun accept(visitor: JKVisitor, 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, JKElementBase() { - override fun accept(visitor: JKVisitor, data: D): R = visitor.visitType(this, data) override fun acceptChildren(visitor: JKVisitor, 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 accept(visitor: JKVisitor, data: D): R = visitor.visitJavaFieldReference(this, data) + + override fun acceptChildren(visitor: JKVisitor, 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 accept(visitor: JKVisitor, data: D): R = visitor.visitJavaClassReference(this, data) + + override fun acceptChildren(visitor: JKVisitor, 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 accept(visitor: JKVisitor, data: D): R = visitor.visitJavaMethodReference(this, data) + + override fun acceptChildren(visitor: JKVisitor, data: D) { + } } \ No newline at end of file diff --git a/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/impl/k.kt b/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/impl/k.kt index 7744de58cab..51743b9bae8 100644 --- a/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/impl/k.kt +++ b/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/impl/k.kt @@ -51,5 +51,6 @@ class JKKtFunctionImpl(override var returnType: JKTypeIdentifier, override var valueArguments: List, override var block: JKBlock?, override var modifierList: JKModifierList) : JKElementBase(), JKKtFunction { - + override val valid: Boolean + get() = true } diff --git a/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/j.kt b/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/j.kt index b7a3dbec597..3764a1ef9ff 100644 --- a/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/j.kt +++ b/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/j.kt @@ -22,12 +22,7 @@ interface JKJavaField : JKDeclaration, JKModifierListOwner { val initializer: JKExpression? } -interface JKJavaMethod : JKDeclaration { - val modifierList: JKModifierList - val name: JKNameIdentifier - val valueArguments: List - val block: JKBlock? -} +interface JKJavaMethod : JKMethod interface JKJavaForLoop : JKLoop @@ -87,7 +82,3 @@ interface JKJavaNewEmptyArray : JKExpression { interface JKJavaNewArray : JKExpression { val initializer: List } - -interface JKJavaExternalReference : JKExternalReference { - -} diff --git a/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/jk.kt b/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/jk.kt index 7f4a36bf77d..0dd5703db3c 100644 --- a/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/jk.kt +++ b/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/jk.kt @@ -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 } -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 @@ -145,7 +126,7 @@ interface JKQualificationIdentifier : JKIdentifier interface JKLoop : JKStatement -interface JKDeclaration : JKElement +interface JKDeclaration : JKElement, JKReferenceTarget interface JKBlock : JKElement { val statements: List @@ -180,7 +161,13 @@ interface JKStringLiteralExpression : JKLiteralExpression { interface JKModalityModifier : JKModifier -interface ReferenceTargetProvider { - val resolveCache: Map - val conversionCache: Map +interface JKMethod : JKDeclaration { + var modifierList: JKModifierList + var name: JKNameIdentifier + var valueArguments: List + var block: JKBlock? +} + +interface JKExpressionStatement : JKStatement { + val expression: JKExpression } \ No newline at end of file diff --git a/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/markers.kt b/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/markers.kt index d9121f4a359..00d56c82cb4 100644 --- a/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/markers.kt +++ b/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/markers.kt @@ -18,4 +18,8 @@ package org.jetbrains.kotlin.j2k.tree interface JKModifierListOwner { var modifierList: JKModifierList +} + +interface JKReferenceTarget { + val valid: Boolean } \ 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 0261a6127f5..3d04643f21f 100644 --- a/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/visitors/JKTransformer.kt +++ b/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/visitors/JKTransformer.kt @@ -19,15 +19,10 @@ interface JKTransformer : JKVisitor { 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 : JKVisitor { 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 : 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 a25a5356276..d1f6c4d89a7 100644 --- a/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/visitors/JKTransformerVoid.kt +++ b/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/visitors/JKTransformerVoid.kt @@ -35,8 +35,6 @@ interface JKTransformerVoid : JKTransformer { 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 { 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 { 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 { 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 ca4d888d210..5845ad9ca38 100644 --- a/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/visitors/JKVisitor.kt +++ b/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/visitors/JKVisitor.kt @@ -19,15 +19,10 @@ interface JKVisitor { 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 { 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 { 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 06d91d5fbaf..5bafb0cdece 100644 --- a/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/visitors/JKVisitorVoid.kt +++ b/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/visitors/JKVisitorVoid.kt @@ -35,8 +35,6 @@ interface JKVisitorVoid : JKVisitor { 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 { 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 { 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 { 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) diff --git a/j2k/testData/newFileOrElement/first/First.java b/j2k/testData/newFileOrElement/first/First.java index d5dc18626ce..014db3081d8 100644 --- a/j2k/testData/newFileOrElement/first/First.java +++ b/j2k/testData/newFileOrElement/first/First.java @@ -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"); + } } \ No newline at end of file