New J2K: Stub for JavaField initializer

This commit is contained in:
Simon Ogorodnik
2017-10-12 02:58:58 +03:00
committed by Ilya Kirillov
parent e77fe74284
commit 3ff0287c9f
3 changed files with 22 additions and 6 deletions
@@ -17,17 +17,24 @@
package org.jetbrains.kotlin.j2k
import com.intellij.lang.java.JavaLanguage
import com.intellij.psi.JavaElementVisitor
import com.intellij.psi.PsiClass
import com.intellij.psi.PsiElement
import com.intellij.psi.PsiField
import com.intellij.psi.*
import org.jetbrains.kotlin.j2k.tree.JKClass
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.JKElementBase
import org.jetbrains.kotlin.j2k.tree.impl.JKJavaFieldImpl
class JavaToJKTreeBuilder {
private class ExpressionTreeVisitor : JavaElementVisitor() {
override fun visitElement(element: PsiElement) {
element.acceptChildren(this)
}
fun extractExpression(): JKExpression? = object : JKElementBase(), JKExpression {}
}
private class ElementVisitor : JavaElementVisitor() {
override fun visitElement(element: PsiElement) {
@@ -42,9 +49,12 @@ class JavaToJKTreeBuilder {
}
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)
}
}
fun buildTree(psi: PsiElement): JKElement? {
@@ -16,11 +16,13 @@
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.JKJavaVisitor
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 {
return if (visitor is JKJavaVisitor) {
@@ -30,4 +32,7 @@ class JKJavaFieldImpl(override val name: String) : JKJavaField, JKElementBase()
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 {
val name: String
var initializer: JKExpression?
}
interface JKJavaMethod : JKDeclaration