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 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