New J2K: Add debug tree visitor and some tree elements
This commit is contained in:
committed by
Ilya Kirillov
parent
3ff0287c9f
commit
4f7c46741e
@@ -18,21 +18,48 @@ package org.jetbrains.kotlin.j2k
|
|||||||
|
|
||||||
import com.intellij.lang.java.JavaLanguage
|
import com.intellij.lang.java.JavaLanguage
|
||||||
import com.intellij.psi.*
|
import com.intellij.psi.*
|
||||||
import org.jetbrains.kotlin.j2k.tree.JKClass
|
import com.intellij.psi.impl.source.tree.java.PsiLiteralExpressionImpl
|
||||||
import org.jetbrains.kotlin.j2k.tree.JKElement
|
import org.jetbrains.kotlin.j2k.tree.*
|
||||||
import org.jetbrains.kotlin.j2k.tree.JKExpression
|
import org.jetbrains.kotlin.j2k.tree.impl.*
|
||||||
import org.jetbrains.kotlin.j2k.tree.impl.JKClassImpl
|
|
||||||
import org.jetbrains.kotlin.j2k.tree.impl.JKElementBase
|
|
||||||
import org.jetbrains.kotlin.j2k.tree.impl.JKJavaFieldImpl
|
|
||||||
|
|
||||||
class JavaToJKTreeBuilder {
|
class JavaToJKTreeBuilder {
|
||||||
|
|
||||||
private class ExpressionTreeVisitor : JavaElementVisitor() {
|
private class ExpressionTreeVisitor : JavaElementVisitor() {
|
||||||
override fun visitElement(element: PsiElement) {
|
|
||||||
element.acceptChildren(this)
|
private var resultExpression: JKExpression? = null
|
||||||
|
|
||||||
|
override fun visitLiteralExpression(expression: PsiLiteralExpression?) {
|
||||||
|
if (expression is PsiLiteralExpressionImpl) {
|
||||||
|
|
||||||
|
when (expression.literalElementType) {
|
||||||
|
JavaTokenType.STRING_LITERAL ->
|
||||||
|
resultExpression = JKJavaStringLiteralExpressionImpl(expression.innerText!!)
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fun extractExpression(): JKExpression? = object : JKElementBase(), JKExpression {}
|
fun result(): JKExpression = resultExpression!!
|
||||||
|
}
|
||||||
|
|
||||||
|
private object ModifierMapper {
|
||||||
|
fun PsiModifierList?.toJK(): JKModifierList {
|
||||||
|
|
||||||
|
val modifierList = JKModifierListImpl()
|
||||||
|
if (this == null) return modifierList
|
||||||
|
|
||||||
|
PsiModifier.MODIFIERS
|
||||||
|
.filter { hasExplicitModifier(it) }
|
||||||
|
.mapTo(modifierList.modifiers) { modifierToJK(it) }
|
||||||
|
|
||||||
|
return modifierList
|
||||||
|
}
|
||||||
|
|
||||||
|
fun modifierToJK(name: String): JKModifier = when (name) {
|
||||||
|
PsiModifier.PUBLIC -> JKJavaAccessModifierImpl(JKJavaAccessModifier.AccessModifierType.PUBLIC)
|
||||||
|
PsiModifier.PRIVATE -> JKJavaAccessModifierImpl(JKJavaAccessModifier.AccessModifierType.PRIVATE)
|
||||||
|
PsiModifier.PROTECTED -> JKJavaAccessModifierImpl(JKJavaAccessModifier.AccessModifierType.PROTECTED)
|
||||||
|
else -> TODO("Not yet supported")
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private class ElementVisitor : JavaElementVisitor() {
|
private class ElementVisitor : JavaElementVisitor() {
|
||||||
@@ -44,23 +71,39 @@ class JavaToJKTreeBuilder {
|
|||||||
var currentClass: JKClass? = null
|
var currentClass: JKClass? = null
|
||||||
|
|
||||||
override fun visitClass(aClass: PsiClass) {
|
override fun visitClass(aClass: PsiClass) {
|
||||||
currentClass = JKClassImpl()
|
|
||||||
|
val name = JKNameIdentifierImpl(aClass.name!!)
|
||||||
|
val modifierList = with(ModifierMapper) {
|
||||||
|
aClass.modifierList.toJK()
|
||||||
|
}
|
||||||
|
|
||||||
|
currentClass = JKClassImpl(modifierList, name)
|
||||||
super.visitClass(aClass)
|
super.visitClass(aClass)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun visitField(field: PsiField) {
|
override fun visitField(field: PsiField) {
|
||||||
val initializer = ExpressionTreeVisitor().also { field.initializer?.accept(it) }.extractExpression()
|
val initializer = field.initializer?.buildTreeForExpression()
|
||||||
|
|
||||||
currentClass!!.declarations += JKJavaFieldImpl(field.name!!, initializer)
|
val type = JKJavaTypeIdentifierImpl(field.type.canonicalText)
|
||||||
|
val name = JKNameIdentifierImpl(field.name!!)
|
||||||
|
|
||||||
|
currentClass!!.declarations += JKJavaFieldImpl(type, name, initializer)
|
||||||
super.visitField(field)
|
super.visitField(field)
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
fun buildTree(psi: PsiElement): JKElement? {
|
fun buildTree(psi: PsiElement): JKElement? {
|
||||||
assert(psi.language.`is`(JavaLanguage.INSTANCE)) { "Unable to build JK Tree using Java Visitor for language ${psi.language}" }
|
assert(psi.language.`is`(JavaLanguage.INSTANCE)) { "Unable to build JK Tree using Java Visitor for language ${psi.language}" }
|
||||||
val elementVisitor = ElementVisitor()
|
val elementVisitor = ElementVisitor()
|
||||||
psi.accept(elementVisitor)
|
psi.accept(elementVisitor)
|
||||||
return elementVisitor.currentClass
|
return elementVisitor.currentClass
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
companion object {
|
||||||
|
private fun PsiExpression.buildTreeForExpression(): JKExpression =
|
||||||
|
JavaToJKTreeBuilder.ExpressionTreeVisitor().apply { accept(this) }.result()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -20,10 +20,8 @@ import com.intellij.openapi.progress.EmptyProgressIndicator
|
|||||||
import com.intellij.openapi.progress.ProgressIndicator
|
import com.intellij.openapi.progress.ProgressIndicator
|
||||||
import com.intellij.openapi.project.Project
|
import com.intellij.openapi.project.Project
|
||||||
import com.intellij.psi.PsiJavaFile
|
import com.intellij.psi.PsiJavaFile
|
||||||
import org.jetbrains.kotlin.j2k.tree.JKClass
|
import org.jetbrains.kotlin.j2k.tree.*
|
||||||
import org.jetbrains.kotlin.j2k.tree.JKElement
|
import org.jetbrains.kotlin.utils.Printer
|
||||||
import org.jetbrains.kotlin.j2k.tree.JKJavaField
|
|
||||||
import org.jetbrains.kotlin.j2k.tree.JKJavaKtVisitorVoid
|
|
||||||
|
|
||||||
class NewJavaToKotlinConverter(
|
class NewJavaToKotlinConverter(
|
||||||
private val project: Project,
|
private val project: Project,
|
||||||
@@ -38,26 +36,13 @@ class NewJavaToKotlinConverter(
|
|||||||
|
|
||||||
for (tree in fileTrees.filterNotNull()) {
|
for (tree in fileTrees.filterNotNull()) {
|
||||||
appendln()
|
appendln()
|
||||||
tree.accept(object : JKJavaKtVisitorVoid {
|
appendln(tree.prettyDebugPrintTree())
|
||||||
override fun visitElement(element: JKElement) {
|
|
||||||
element.acceptChildren(this, null)
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun visitClass(klass: JKClass) {
|
|
||||||
appendln("class")
|
|
||||||
super.visitClass(klass)
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun visitJavaField(javaField: JKJavaField, data: Nothing?) {
|
|
||||||
appendln("java field ${javaField.name}")
|
|
||||||
super.visitJavaField(javaField, data)
|
|
||||||
}
|
|
||||||
|
|
||||||
}, null)
|
|
||||||
appendln()
|
appendln()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
println(result)
|
||||||
|
|
||||||
return result
|
return result
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -0,0 +1,44 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2010-2017 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
|
||||||
|
|
||||||
|
import org.jetbrains.kotlin.utils.Printer
|
||||||
|
|
||||||
|
private class DebugTreePrinter : JKJavaKtVisitorVoid {
|
||||||
|
internal val stringBuilder = StringBuilder()
|
||||||
|
private val printer = Printer(stringBuilder)
|
||||||
|
|
||||||
|
override fun visitElement(element: JKElement) {
|
||||||
|
printer.println(element.classNameWithoutJK(), " [")
|
||||||
|
printer.indented {
|
||||||
|
element.acceptChildren(this, null)
|
||||||
|
}
|
||||||
|
printer.println("]")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun Any.classNameWithoutJK(): String = this.javaClass.simpleName.removePrefix("JK")
|
||||||
|
|
||||||
|
private inline fun Printer.indented(block: () -> Unit) {
|
||||||
|
this.pushIndent()
|
||||||
|
block()
|
||||||
|
this.popIndent()
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
fun JKElement.prettyDebugPrintTree(): String
|
||||||
|
= DebugTreePrinter().apply { accept(this, null) }.stringBuilder.toString()
|
||||||
@@ -4,4 +4,9 @@ interface JKJavaVisitor<R, D> : JKVisitor<R, D> {
|
|||||||
fun visitJavaField(javaField: JKJavaField, data: D): R = visitDeclaration(javaField, 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 = visitDeclaration(javaMethod, data)
|
||||||
fun visitJavaForLoop(javaForLoop: JKJavaForLoop, data: D): R = visitLoop(javaForLoop, data)
|
fun visitJavaForLoop(javaForLoop: JKJavaForLoop, data: D): R = visitLoop(javaForLoop, data)
|
||||||
|
fun visitJavaAssignmentExpression(javaAssignmentExpression: JKJavaAssignmentExpression, data: D): R = visitExpression(javaAssignmentExpression, data)
|
||||||
|
fun visitJavaCall(javaCall: JKJavaCall, data: D): R = visitCall(javaCall, data)
|
||||||
|
fun visitJavaTypeIdentifier(javaTypeIdentifier: JKJavaTypeIdentifier, data: D): R = visitTypeIdentifier(javaTypeIdentifier, data)
|
||||||
|
fun visitJavaStringLiteralExpression(javaStringLiteralExpression: JKJavaStringLiteralExpression, data: D): R = visitLiteralExpression(javaStringLiteralExpression, data)
|
||||||
|
fun visitJavaAccessModifier(javaAccessModifier: JKJavaAccessModifier, data: D): R = visitAccessModifier(javaAccessModifier, data)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -7,4 +7,14 @@ interface JKJavaVisitorVoid : JKJavaVisitor<Unit, Nothing?>, JKVisitorVoid {
|
|||||||
override fun visitJavaMethod(javaMethod: JKJavaMethod, data: Nothing?) = visitJavaMethod(javaMethod)
|
override fun visitJavaMethod(javaMethod: JKJavaMethod, data: Nothing?) = visitJavaMethod(javaMethod)
|
||||||
fun visitJavaForLoop(javaForLoop: JKJavaForLoop) = visitLoop(javaForLoop, null)
|
fun visitJavaForLoop(javaForLoop: JKJavaForLoop) = visitLoop(javaForLoop, null)
|
||||||
override fun visitJavaForLoop(javaForLoop: JKJavaForLoop, data: Nothing?) = visitJavaForLoop(javaForLoop)
|
override fun visitJavaForLoop(javaForLoop: JKJavaForLoop, data: Nothing?) = visitJavaForLoop(javaForLoop)
|
||||||
|
fun visitJavaAssignmentExpression(javaAssignmentExpression: JKJavaAssignmentExpression) = visitExpression(javaAssignmentExpression, null)
|
||||||
|
override fun visitJavaAssignmentExpression(javaAssignmentExpression: JKJavaAssignmentExpression, data: Nothing?) = visitJavaAssignmentExpression(javaAssignmentExpression)
|
||||||
|
fun visitJavaCall(javaCall: JKJavaCall) = visitCall(javaCall, null)
|
||||||
|
override fun visitJavaCall(javaCall: JKJavaCall, data: Nothing?) = visitJavaCall(javaCall)
|
||||||
|
fun visitJavaTypeIdentifier(javaTypeIdentifier: JKJavaTypeIdentifier) = visitTypeIdentifier(javaTypeIdentifier, null)
|
||||||
|
override fun visitJavaTypeIdentifier(javaTypeIdentifier: JKJavaTypeIdentifier, data: Nothing?) = visitJavaTypeIdentifier(javaTypeIdentifier)
|
||||||
|
fun visitJavaStringLiteralExpression(javaStringLiteralExpression: JKJavaStringLiteralExpression) = visitLiteralExpression(javaStringLiteralExpression, null)
|
||||||
|
override fun visitJavaStringLiteralExpression(javaStringLiteralExpression: JKJavaStringLiteralExpression, data: Nothing?) = visitJavaStringLiteralExpression(javaStringLiteralExpression)
|
||||||
|
fun visitJavaAccessModifier(javaAccessModifier: JKJavaAccessModifier) = visitAccessModifier(javaAccessModifier, null)
|
||||||
|
override fun visitJavaAccessModifier(javaAccessModifier: JKJavaAccessModifier, data: Nothing?) = visitJavaAccessModifier(javaAccessModifier)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,4 +4,6 @@ interface JKKtVisitor<R, D> : JKVisitor<R, D> {
|
|||||||
fun visitKtFun(ktFun: JKKtFun, data: D): R = visitDeclaration(ktFun, data)
|
fun visitKtFun(ktFun: JKKtFun, data: D): R = visitDeclaration(ktFun, data)
|
||||||
fun visitKtConstructor(ktConstructor: JKKtConstructor, data: D): R = visitDeclaration(ktConstructor, data)
|
fun visitKtConstructor(ktConstructor: JKKtConstructor, data: D): R = visitDeclaration(ktConstructor, data)
|
||||||
fun visitKtPrimaryConstructor(ktPrimaryConstructor: JKKtPrimaryConstructor, data: D): R = visitKtConstructor(ktPrimaryConstructor, data)
|
fun visitKtPrimaryConstructor(ktPrimaryConstructor: JKKtPrimaryConstructor, data: D): R = visitKtConstructor(ktPrimaryConstructor, data)
|
||||||
|
fun visitKtAssignmentStatement(ktAssignmentStatement: JKKtAssignmentStatement, data: D): R = visitStatement(ktAssignmentStatement, data)
|
||||||
|
fun visitKtCall(ktCall: JKKtCall, data: D): R = visitCall(ktCall, data)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -7,4 +7,8 @@ interface JKKtVisitorVoid : JKKtVisitor<Unit, Nothing?>, JKVisitorVoid {
|
|||||||
override fun visitKtConstructor(ktConstructor: JKKtConstructor, data: Nothing?) = visitKtConstructor(ktConstructor)
|
override fun visitKtConstructor(ktConstructor: JKKtConstructor, data: Nothing?) = visitKtConstructor(ktConstructor)
|
||||||
fun visitKtPrimaryConstructor(ktPrimaryConstructor: JKKtPrimaryConstructor) = visitKtConstructor(ktPrimaryConstructor, null)
|
fun visitKtPrimaryConstructor(ktPrimaryConstructor: JKKtPrimaryConstructor) = visitKtConstructor(ktPrimaryConstructor, null)
|
||||||
override fun visitKtPrimaryConstructor(ktPrimaryConstructor: JKKtPrimaryConstructor, data: Nothing?) = visitKtPrimaryConstructor(ktPrimaryConstructor)
|
override fun visitKtPrimaryConstructor(ktPrimaryConstructor: JKKtPrimaryConstructor, data: Nothing?) = visitKtPrimaryConstructor(ktPrimaryConstructor)
|
||||||
|
fun visitKtAssignmentStatement(ktAssignmentStatement: JKKtAssignmentStatement) = visitStatement(ktAssignmentStatement, null)
|
||||||
|
override fun visitKtAssignmentStatement(ktAssignmentStatement: JKKtAssignmentStatement, data: Nothing?) = visitKtAssignmentStatement(ktAssignmentStatement)
|
||||||
|
fun visitKtCall(ktCall: JKKtCall) = visitCall(ktCall, null)
|
||||||
|
override fun visitKtCall(ktCall: JKKtCall, data: Nothing?) = visitKtCall(ktCall)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,9 +3,17 @@ package org.jetbrains.kotlin.j2k.tree
|
|||||||
interface JKVisitor<R, D> {
|
interface JKVisitor<R, D> {
|
||||||
fun visitElement(element: JKElement, data: D): R
|
fun visitElement(element: JKElement, data: D): R
|
||||||
fun visitClass(klass: JKClass, data: D): R = visitDeclaration(klass, data)
|
fun visitClass(klass: JKClass, data: D): R = visitDeclaration(klass, data)
|
||||||
fun visitExpression(expression: JKExpression, data: D): R = visitElement(expression, data)
|
|
||||||
fun visitStatement(statement: JKStatement, data: D): R = visitElement(statement, data)
|
fun visitStatement(statement: JKStatement, data: D): R = visitElement(statement, data)
|
||||||
|
fun visitExpression(expression: JKExpression, data: D): R = visitStatement(expression, data)
|
||||||
fun visitLoop(loop: JKLoop, data: D): R = visitStatement(loop, data)
|
fun visitLoop(loop: JKLoop, data: D): R = visitStatement(loop, data)
|
||||||
fun visitDeclaration(declaration: JKDeclaration, data: D): R = visitElement(declaration, data)
|
fun visitDeclaration(declaration: JKDeclaration, data: D): R = visitElement(declaration, data)
|
||||||
fun visitBlock(block: JKBlock, data: D): R = visitElement(block, data)
|
fun visitBlock(block: JKBlock, data: D): R = visitElement(block, data)
|
||||||
|
fun visitCall(call: JKCall, data: D): R = visitExpression(call, data)
|
||||||
|
fun visitIdentifier(identifier: JKIdentifier, data: D): R = visitElement(identifier, data)
|
||||||
|
fun visitTypeIdentifier(typeIdentifier: JKTypeIdentifier, data: D): R = visitIdentifier(typeIdentifier, data)
|
||||||
|
fun visitNameIdentifier(nameIdentifier: JKNameIdentifier, data: D): R = visitIdentifier(nameIdentifier, data)
|
||||||
|
fun visitLiteralExpression(literalExpression: JKLiteralExpression, data: D): R = visitExpression(literalExpression, data)
|
||||||
|
fun visitModifierList(modifierList: JKModifierList, data: D): R = visitElement(modifierList, data)
|
||||||
|
fun visitModifier(modifier: JKModifier, data: D): R = visitElement(modifier, data)
|
||||||
|
fun visitAccessModifier(accessModifier: JKAccessModifier, data: D): R = visitModifier(accessModifier, data)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -5,14 +5,30 @@ interface JKVisitorVoid : JKVisitor<Unit, Nothing?> {
|
|||||||
override fun visitElement(element: JKElement, data: Nothing?) = visitElement(element)
|
override fun visitElement(element: JKElement, data: Nothing?) = visitElement(element)
|
||||||
fun visitClass(klass: JKClass) = visitDeclaration(klass, null)
|
fun visitClass(klass: JKClass) = visitDeclaration(klass, null)
|
||||||
override fun visitClass(klass: JKClass, data: Nothing?) = visitClass(klass)
|
override fun visitClass(klass: JKClass, data: Nothing?) = visitClass(klass)
|
||||||
fun visitExpression(expression: JKExpression) = visitElement(expression, null)
|
|
||||||
override fun visitExpression(expression: JKExpression, data: Nothing?) = visitExpression(expression)
|
|
||||||
fun visitStatement(statement: JKStatement) = visitElement(statement, null)
|
fun visitStatement(statement: JKStatement) = visitElement(statement, null)
|
||||||
override fun visitStatement(statement: JKStatement, data: Nothing?) = visitStatement(statement)
|
override fun visitStatement(statement: JKStatement, data: Nothing?) = visitStatement(statement)
|
||||||
|
fun visitExpression(expression: JKExpression) = visitStatement(expression, null)
|
||||||
|
override fun visitExpression(expression: JKExpression, data: Nothing?) = visitExpression(expression)
|
||||||
fun visitLoop(loop: JKLoop) = visitStatement(loop, null)
|
fun visitLoop(loop: JKLoop) = visitStatement(loop, null)
|
||||||
override fun visitLoop(loop: JKLoop, data: Nothing?) = visitLoop(loop)
|
override fun visitLoop(loop: JKLoop, data: Nothing?) = visitLoop(loop)
|
||||||
fun visitDeclaration(declaration: JKDeclaration) = visitElement(declaration, null)
|
fun visitDeclaration(declaration: JKDeclaration) = visitElement(declaration, null)
|
||||||
override fun visitDeclaration(declaration: JKDeclaration, data: Nothing?) = visitDeclaration(declaration)
|
override fun visitDeclaration(declaration: JKDeclaration, data: Nothing?) = visitDeclaration(declaration)
|
||||||
fun visitBlock(block: JKBlock) = visitElement(block, null)
|
fun visitBlock(block: JKBlock) = visitElement(block, null)
|
||||||
override fun visitBlock(block: JKBlock, data: Nothing?) = visitBlock(block)
|
override fun visitBlock(block: JKBlock, data: Nothing?) = visitBlock(block)
|
||||||
|
fun visitCall(call: JKCall) = visitExpression(call, null)
|
||||||
|
override fun visitCall(call: JKCall, data: Nothing?) = visitCall(call)
|
||||||
|
fun visitIdentifier(identifier: JKIdentifier) = visitElement(identifier, null)
|
||||||
|
override fun visitIdentifier(identifier: JKIdentifier, data: Nothing?) = visitIdentifier(identifier)
|
||||||
|
fun visitTypeIdentifier(typeIdentifier: JKTypeIdentifier) = visitIdentifier(typeIdentifier, null)
|
||||||
|
override fun visitTypeIdentifier(typeIdentifier: JKTypeIdentifier, data: Nothing?) = visitTypeIdentifier(typeIdentifier)
|
||||||
|
fun visitNameIdentifier(nameIdentifier: JKNameIdentifier) = visitIdentifier(nameIdentifier, null)
|
||||||
|
override fun visitNameIdentifier(nameIdentifier: JKNameIdentifier, data: Nothing?) = visitNameIdentifier(nameIdentifier)
|
||||||
|
fun visitLiteralExpression(literalExpression: JKLiteralExpression) = visitExpression(literalExpression, null)
|
||||||
|
override fun visitLiteralExpression(literalExpression: JKLiteralExpression, data: Nothing?) = visitLiteralExpression(literalExpression)
|
||||||
|
fun visitModifierList(modifierList: JKModifierList) = visitElement(modifierList, null)
|
||||||
|
override fun visitModifierList(modifierList: JKModifierList, data: Nothing?) = visitModifierList(modifierList)
|
||||||
|
fun visitModifier(modifier: JKModifier) = visitElement(modifier, null)
|
||||||
|
override fun visitModifier(modifier: JKModifier, data: Nothing?) = visitModifier(modifier)
|
||||||
|
fun visitAccessModifier(accessModifier: JKAccessModifier) = visitModifier(accessModifier, null)
|
||||||
|
override fun visitAccessModifier(accessModifier: JKAccessModifier, data: Nothing?) = visitAccessModifier(accessModifier)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -16,12 +16,10 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.j2k.tree.impl
|
package org.jetbrains.kotlin.j2k.tree.impl
|
||||||
|
|
||||||
import org.jetbrains.kotlin.j2k.tree.JKExpression
|
import org.jetbrains.kotlin.j2k.tree.*
|
||||||
import org.jetbrains.kotlin.j2k.tree.JKJavaField
|
|
||||||
import org.jetbrains.kotlin.j2k.tree.JKJavaVisitor
|
|
||||||
import org.jetbrains.kotlin.j2k.tree.JKVisitor
|
|
||||||
|
|
||||||
class JKJavaFieldImpl(override val name: String,
|
class JKJavaFieldImpl(override var type: JKTypeIdentifier,
|
||||||
|
override var name: JKNameIdentifier,
|
||||||
override var initializer: JKExpression?) : JKJavaField, JKElementBase() {
|
override var initializer: JKExpression?) : JKJavaField, JKElementBase() {
|
||||||
|
|
||||||
override fun <R, D> accept(visitor: JKVisitor<R, D>, data: D): R {
|
override fun <R, D> accept(visitor: JKVisitor<R, D>, data: D): R {
|
||||||
@@ -34,5 +32,41 @@ class JKJavaFieldImpl(override val name: String,
|
|||||||
}
|
}
|
||||||
|
|
||||||
override fun <D> acceptChildren(visitor: JKVisitor<Unit, D>, data: D)
|
override fun <D> acceptChildren(visitor: JKVisitor<Unit, D>, data: D)
|
||||||
= initializer?.accept(visitor, data) ?: Unit
|
= listOfNotNull(type, name, initializer).forEach { it.accept(visitor, data) }
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
class JKJavaTypeIdentifierImpl(override val typeName: String) : JKJavaTypeIdentifier, JKElementBase() {
|
||||||
|
override fun <R, D> accept(visitor: JKVisitor<R, D>, data: D): R {
|
||||||
|
return if (visitor is JKJavaVisitor) {
|
||||||
|
visitor.visitJavaTypeIdentifier(this, data)
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
visitor.visitTypeIdentifier(this, data)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
class JKJavaStringLiteralExpressionImpl(override val text: String) : JKJavaStringLiteralExpression, JKElementBase() {
|
||||||
|
override fun <R, D> accept(visitor: JKVisitor<R, D>, data: D): R {
|
||||||
|
return if (visitor is JKJavaVisitor) {
|
||||||
|
visitor.visitJavaStringLiteralExpression(this, data)
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
visitor.visitLiteralExpression(this, data)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
class JKJavaAccessModifierImpl(override val type: JKJavaAccessModifier.AccessModifierType) : JKJavaAccessModifier, JKElementBase() {
|
||||||
|
override fun <R, D> accept(visitor: JKVisitor<R, D>, data: D): R {
|
||||||
|
return if (visitor is JKJavaVisitor) {
|
||||||
|
visitor.visitJavaAccessModifier(this, data)
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
visitor.visitAccessModifier(this, data)
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@@ -16,10 +16,7 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.j2k.tree.impl
|
package org.jetbrains.kotlin.j2k.tree.impl
|
||||||
|
|
||||||
import org.jetbrains.kotlin.j2k.tree.JKClass
|
import org.jetbrains.kotlin.j2k.tree.*
|
||||||
import org.jetbrains.kotlin.j2k.tree.JKDeclaration
|
|
||||||
import org.jetbrains.kotlin.j2k.tree.JKElement
|
|
||||||
import org.jetbrains.kotlin.j2k.tree.JKVisitor
|
|
||||||
|
|
||||||
abstract class JKElementBase : JKElement {
|
abstract class JKElementBase : JKElement {
|
||||||
override fun <R, D> accept(visitor: JKVisitor<R, D>, data: D): R = visitor.visitElement(this, data)
|
override fun <R, D> accept(visitor: JKVisitor<R, D>, data: D): R = visitor.visitElement(this, data)
|
||||||
@@ -27,12 +24,29 @@ abstract class JKElementBase : JKElement {
|
|||||||
override fun <D> acceptChildren(visitor: JKVisitor<Unit, D>, data: D) {}
|
override fun <D> acceptChildren(visitor: JKVisitor<Unit, D>, data: D) {}
|
||||||
}
|
}
|
||||||
|
|
||||||
class JKClassImpl : JKClass, JKElementBase() {
|
|
||||||
|
class JKClassImpl(override var modifierList: JKModifierList, override var name: JKNameIdentifier) : JKClass, JKElementBase() {
|
||||||
override fun <R, D> accept(visitor: JKVisitor<R, D>, data: D): R = visitor.visitClass(this, data)
|
override fun <R, D> accept(visitor: JKVisitor<R, D>, data: D): R = visitor.visitClass(this, data)
|
||||||
|
|
||||||
override fun <D> acceptChildren(visitor: JKVisitor<Unit, D>, data: D) {
|
override fun <D> acceptChildren(visitor: JKVisitor<Unit, D>, data: D) {
|
||||||
declarations.forEach { it.accept(visitor, data) }
|
(listOf(modifierList, name) + declarations).forEach { it.accept(visitor, data) }
|
||||||
}
|
}
|
||||||
|
|
||||||
override val declarations = mutableListOf<JKDeclaration>()
|
override val declarations = mutableListOf<JKDeclaration>()
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
class JKNameIdentifierImpl(override val name: String) : JKNameIdentifier, JKElementBase() {
|
||||||
|
override fun <R, D> accept(visitor: JKVisitor<R, D>, data: D): R = visitor.visitNameIdentifier(this, data)
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
class JKModifierListImpl : JKModifierList, JKElementBase() {
|
||||||
|
override val modifiers = mutableListOf<JKModifier>()
|
||||||
|
|
||||||
|
override fun <R, D> accept(visitor: JKVisitor<R, D>, data: D): R = visitor.visitModifierList(this, data)
|
||||||
|
|
||||||
|
override fun <D> acceptChildren(visitor: JKVisitor<Unit, D>, data: D) {
|
||||||
|
modifiers.forEach { it.accept(visitor, data) }
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@@ -17,10 +17,31 @@
|
|||||||
package org.jetbrains.kotlin.j2k.tree
|
package org.jetbrains.kotlin.j2k.tree
|
||||||
|
|
||||||
interface JKJavaField : JKDeclaration {
|
interface JKJavaField : JKDeclaration {
|
||||||
val name: String
|
var type: JKTypeIdentifier
|
||||||
|
var name: JKNameIdentifier
|
||||||
var initializer: JKExpression?
|
var initializer: JKExpression?
|
||||||
}
|
}
|
||||||
|
|
||||||
interface JKJavaMethod : JKDeclaration
|
interface JKJavaMethod : JKDeclaration
|
||||||
|
|
||||||
interface JKJavaForLoop : JKLoop
|
interface JKJavaForLoop : JKLoop
|
||||||
|
|
||||||
|
interface JKJavaAssignmentExpression : JKExpression
|
||||||
|
|
||||||
|
interface JKJavaCall : JKCall
|
||||||
|
|
||||||
|
interface JKJavaTypeIdentifier : JKTypeIdentifier {
|
||||||
|
val typeName: String
|
||||||
|
}
|
||||||
|
|
||||||
|
interface JKJavaStringLiteralExpression : JKLiteralExpression {
|
||||||
|
val text: String
|
||||||
|
}
|
||||||
|
|
||||||
|
interface JKJavaAccessModifier : JKAccessModifier {
|
||||||
|
val type: AccessModifierType
|
||||||
|
|
||||||
|
enum class AccessModifierType {
|
||||||
|
PUBLIC, PROTECTED, PRIVATE
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -24,15 +24,37 @@ interface JKElement {
|
|||||||
}
|
}
|
||||||
|
|
||||||
interface JKClass : JKDeclaration {
|
interface JKClass : JKDeclaration {
|
||||||
|
var modifierList: JKModifierList
|
||||||
|
var name: JKNameIdentifier
|
||||||
val declarations: MutableList<JKDeclaration>
|
val declarations: MutableList<JKDeclaration>
|
||||||
}
|
}
|
||||||
|
|
||||||
interface JKExpression : JKElement
|
|
||||||
|
|
||||||
interface JKStatement : JKElement
|
interface JKStatement : JKElement
|
||||||
|
|
||||||
|
interface JKExpression : JKStatement
|
||||||
|
|
||||||
interface JKLoop : JKStatement
|
interface JKLoop : JKStatement
|
||||||
|
|
||||||
interface JKDeclaration : JKElement
|
interface JKDeclaration : JKElement
|
||||||
|
|
||||||
interface JKBlock : JKElement
|
interface JKBlock : JKElement
|
||||||
|
|
||||||
|
interface JKCall : JKExpression
|
||||||
|
|
||||||
|
interface JKIdentifier : JKElement
|
||||||
|
|
||||||
|
interface JKTypeIdentifier : JKIdentifier
|
||||||
|
|
||||||
|
interface JKNameIdentifier : JKIdentifier {
|
||||||
|
val name: String
|
||||||
|
}
|
||||||
|
|
||||||
|
interface JKLiteralExpression : JKExpression
|
||||||
|
|
||||||
|
interface JKModifierList : JKElement {
|
||||||
|
val modifiers: MutableList<JKModifier>
|
||||||
|
}
|
||||||
|
|
||||||
|
interface JKModifier : JKElement
|
||||||
|
|
||||||
|
interface JKAccessModifier : JKModifier
|
||||||
@@ -16,8 +16,12 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.j2k.tree
|
package org.jetbrains.kotlin.j2k.tree
|
||||||
|
|
||||||
interface JKKtFun: JKDeclaration
|
interface JKKtFun : JKDeclaration
|
||||||
|
|
||||||
interface JKKtConstructor: JKDeclaration
|
interface JKKtConstructor : JKDeclaration
|
||||||
|
|
||||||
interface JKKtPrimaryConstructor: JKKtConstructor
|
interface JKKtPrimaryConstructor : JKKtConstructor
|
||||||
|
|
||||||
|
interface JKKtAssignmentStatement : JKStatement
|
||||||
|
|
||||||
|
interface JKKtCall : JKCall
|
||||||
Reference in New Issue
Block a user