New J2K: Stub for JavaField initializer
This commit is contained in:
committed by
Ilya Kirillov
parent
e77fe74284
commit
3ff0287c9f
@@ -17,17 +17,24 @@
|
|||||||
package org.jetbrains.kotlin.j2k
|
package org.jetbrains.kotlin.j2k
|
||||||
|
|
||||||
import com.intellij.lang.java.JavaLanguage
|
import com.intellij.lang.java.JavaLanguage
|
||||||
import com.intellij.psi.JavaElementVisitor
|
import com.intellij.psi.*
|
||||||
import com.intellij.psi.PsiClass
|
|
||||||
import com.intellij.psi.PsiElement
|
|
||||||
import com.intellij.psi.PsiField
|
|
||||||
import org.jetbrains.kotlin.j2k.tree.JKClass
|
import org.jetbrains.kotlin.j2k.tree.JKClass
|
||||||
import org.jetbrains.kotlin.j2k.tree.JKElement
|
import org.jetbrains.kotlin.j2k.tree.JKElement
|
||||||
|
import org.jetbrains.kotlin.j2k.tree.JKExpression
|
||||||
import org.jetbrains.kotlin.j2k.tree.impl.JKClassImpl
|
import org.jetbrains.kotlin.j2k.tree.impl.JKClassImpl
|
||||||
|
import org.jetbrains.kotlin.j2k.tree.impl.JKElementBase
|
||||||
import org.jetbrains.kotlin.j2k.tree.impl.JKJavaFieldImpl
|
import org.jetbrains.kotlin.j2k.tree.impl.JKJavaFieldImpl
|
||||||
|
|
||||||
class JavaToJKTreeBuilder {
|
class JavaToJKTreeBuilder {
|
||||||
|
|
||||||
|
private class ExpressionTreeVisitor : JavaElementVisitor() {
|
||||||
|
override fun visitElement(element: PsiElement) {
|
||||||
|
element.acceptChildren(this)
|
||||||
|
}
|
||||||
|
|
||||||
|
fun extractExpression(): JKExpression? = object : JKElementBase(), JKExpression {}
|
||||||
|
}
|
||||||
|
|
||||||
private class ElementVisitor : JavaElementVisitor() {
|
private class ElementVisitor : JavaElementVisitor() {
|
||||||
|
|
||||||
override fun visitElement(element: PsiElement) {
|
override fun visitElement(element: PsiElement) {
|
||||||
@@ -42,9 +49,12 @@ class JavaToJKTreeBuilder {
|
|||||||
}
|
}
|
||||||
|
|
||||||
override fun visitField(field: PsiField) {
|
override fun visitField(field: PsiField) {
|
||||||
currentClass!!.declarations += JKJavaFieldImpl(field.name!!)
|
val initializer = ExpressionTreeVisitor().also { field.initializer?.accept(it) }.extractExpression()
|
||||||
|
|
||||||
|
currentClass!!.declarations += JKJavaFieldImpl(field.name!!, initializer)
|
||||||
super.visitField(field)
|
super.visitField(field)
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
fun buildTree(psi: PsiElement): JKElement? {
|
fun buildTree(psi: PsiElement): JKElement? {
|
||||||
|
|||||||
@@ -16,11 +16,13 @@
|
|||||||
|
|
||||||
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.JKJavaField
|
import org.jetbrains.kotlin.j2k.tree.JKJavaField
|
||||||
import org.jetbrains.kotlin.j2k.tree.JKJavaVisitor
|
import org.jetbrains.kotlin.j2k.tree.JKJavaVisitor
|
||||||
import org.jetbrains.kotlin.j2k.tree.JKVisitor
|
import org.jetbrains.kotlin.j2k.tree.JKVisitor
|
||||||
|
|
||||||
class JKJavaFieldImpl(override val name: String) : JKJavaField, JKElementBase() {
|
class JKJavaFieldImpl(override val name: String,
|
||||||
|
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 {
|
||||||
return if (visitor is JKJavaVisitor) {
|
return if (visitor is JKJavaVisitor) {
|
||||||
@@ -30,4 +32,7 @@ class JKJavaFieldImpl(override val name: String) : JKJavaField, JKElementBase()
|
|||||||
visitor.visitDeclaration(this, data)
|
visitor.visitDeclaration(this, data)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override fun <D> acceptChildren(visitor: JKVisitor<Unit, D>, data: D)
|
||||||
|
= initializer?.accept(visitor, data) ?: Unit
|
||||||
}
|
}
|
||||||
@@ -18,6 +18,7 @@ package org.jetbrains.kotlin.j2k.tree
|
|||||||
|
|
||||||
interface JKJavaField : JKDeclaration {
|
interface JKJavaField : JKDeclaration {
|
||||||
val name: String
|
val name: String
|
||||||
|
var initializer: JKExpression?
|
||||||
}
|
}
|
||||||
|
|
||||||
interface JKJavaMethod : JKDeclaration
|
interface JKJavaMethod : JKDeclaration
|
||||||
|
|||||||
Reference in New Issue
Block a user