From 3ff0287c9fb0dbc2630b9c4f8133deb7f686b1b9 Mon Sep 17 00:00:00 2001 From: Simon Ogorodnik Date: Thu, 12 Oct 2017 02:58:58 +0300 Subject: [PATCH] New J2K: Stub for JavaField initializer --- .../kotlin/j2k/JavaToJKTreeBuilder.kt | 20 ++++++++++++++----- .../org/jetbrains/kotlin/j2k/tree/impl/j.kt | 7 ++++++- j2k/newSrc/org/jetbrains/kotlin/j2k/tree/j.kt | 1 + 3 files changed, 22 insertions(+), 6 deletions(-) diff --git a/j2k/newSrc/org/jetbrains/kotlin/j2k/JavaToJKTreeBuilder.kt b/j2k/newSrc/org/jetbrains/kotlin/j2k/JavaToJKTreeBuilder.kt index 692b1ddd12c..1fb75145d30 100644 --- a/j2k/newSrc/org/jetbrains/kotlin/j2k/JavaToJKTreeBuilder.kt +++ b/j2k/newSrc/org/jetbrains/kotlin/j2k/JavaToJKTreeBuilder.kt @@ -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? { 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 346a2593442..337fea81498 100644 --- a/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/impl/j.kt +++ b/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/impl/j.kt @@ -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 accept(visitor: JKVisitor, 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 acceptChildren(visitor: JKVisitor, data: D) + = initializer?.accept(visitor, data) ?: Unit } \ No newline at end of file diff --git a/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/j.kt b/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/j.kt index 27eab5fb230..49ee82cbe1c 100644 --- a/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/j.kt +++ b/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/j.kt @@ -18,6 +18,7 @@ package org.jetbrains.kotlin.j2k.tree interface JKJavaField : JKDeclaration { val name: String + var initializer: JKExpression? } interface JKJavaMethod : JKDeclaration