From 9ca6829bdaf262f7966956082b44622457e47c13 Mon Sep 17 00:00:00 2001 From: Simon Ogorodnik Date: Mon, 14 May 2018 13:47:10 +0300 Subject: [PATCH] New J2K: Cleanup --- .../jetbrains/kotlin/j2k/JavaToJKTreeBuilder.kt | 17 +++++++++++------ .../org/jetbrains/kotlin/j2k/NewCodeBuilder.kt | 4 ++-- .../org/jetbrains/kotlin/j2k/tree/impl/jk.kt | 8 ++++---- j2k/newSrc/org/jetbrains/kotlin/j2k/tree/jk.kt | 8 ++++++-- .../Abstractions.kt | 2 +- .../Implementations.kt | 8 +++++--- .../ReferenceTargetProvider.kt | 8 +++++--- 7 files changed, 34 insertions(+), 21 deletions(-) rename j2k/newSrc/org/jetbrains/kotlin/j2k/tree/{conveersionCache => multiverse}/Abstractions.kt (91%) rename j2k/newSrc/org/jetbrains/kotlin/j2k/tree/{conveersionCache => multiverse}/Implementations.kt (87%) rename j2k/newSrc/org/jetbrains/kotlin/j2k/tree/{conveersionCache => multiverse}/ReferenceTargetProvider.kt (84%) diff --git a/j2k/newSrc/org/jetbrains/kotlin/j2k/JavaToJKTreeBuilder.kt b/j2k/newSrc/org/jetbrains/kotlin/j2k/JavaToJKTreeBuilder.kt index 0c2defd0cd1..4a9234be006 100644 --- a/j2k/newSrc/org/jetbrains/kotlin/j2k/JavaToJKTreeBuilder.kt +++ b/j2k/newSrc/org/jetbrains/kotlin/j2k/JavaToJKTreeBuilder.kt @@ -23,8 +23,9 @@ import com.intellij.psi.impl.source.tree.java.PsiLiteralExpressionImpl import com.intellij.psi.impl.source.tree.java.PsiNewExpressionImpl import com.intellij.psi.impl.source.tree.java.PsiReferenceExpressionImpl import org.jetbrains.kotlin.j2k.tree.* -import org.jetbrains.kotlin.j2k.tree.conveersionCache.JKMultiverseClass -import org.jetbrains.kotlin.j2k.tree.conveersionCache.ReferenceTargetProvider +import org.jetbrains.kotlin.j2k.tree.multiverse.JKMDeclarationList +import org.jetbrains.kotlin.j2k.tree.multiverse.JKMultiverseClass +import org.jetbrains.kotlin.j2k.tree.multiverse.ReferenceTargetProvider import org.jetbrains.kotlin.j2k.tree.impl.* @@ -32,7 +33,7 @@ class JavaToJKTreeBuilder : ReferenceTargetProvider { override fun resolveClassReference(clazz: PsiClass): JKClass { val name = clazz.qualifiedName ?: TODO() return universe[name] ?: multiverse[name] ?: run { - val clazz = JKMultiverseClass(JKNameIdentifierImpl(name), mutableListOf(), JKClass.ClassKind.CLASS, JKModifierListImpl()) + val clazz = JKMultiverseClass(JKNameIdentifierImpl(name), JKMDeclarationList(emptyList()), JKClass.ClassKind.CLASS, JKModifierListImpl()) multiverse[name] = clazz clazz } @@ -41,7 +42,7 @@ class JavaToJKTreeBuilder : ReferenceTargetProvider { override fun resolveClassReference(identifier: String): JKClass { return universe[identifier] ?: multiverse[identifier] ?: run { val clazz = - JKMultiverseClass(JKNameIdentifierImpl(identifier), mutableListOf(), JKClass.ClassKind.CLASS, JKModifierListImpl()) + JKMultiverseClass(JKNameIdentifierImpl(identifier), JKMDeclarationList(emptyList()), JKClass.ClassKind.CLASS, JKModifierListImpl()) multiverse[identifier] = clazz clazz } @@ -252,9 +253,13 @@ class JavaToJKTreeBuilder : ReferenceTargetProvider { isInterface -> JKClass.ClassKind.INTERFACE else -> JKClass.ClassKind.CLASS } + val psi = this return JKClassImpl(with(modifierMapper) { modifierList.toJK() }, JKNameIdentifierImpl(name!!), classKind).apply { - declarations = - children.mapNotNull { ElementVisitor(this@DeclarationMapper).apply { it.accept(this) }.resultElement as? JKUniverseDeclaration } + declarationList.apply { + declarations = psi.children.mapNotNull { + ElementVisitor(this@DeclarationMapper).apply { it.accept(this) }.resultElement as? JKUniverseDeclaration + } + } } } diff --git a/j2k/newSrc/org/jetbrains/kotlin/j2k/NewCodeBuilder.kt b/j2k/newSrc/org/jetbrains/kotlin/j2k/NewCodeBuilder.kt index 0278c01bf5e..d781b03ab7b 100644 --- a/j2k/newSrc/org/jetbrains/kotlin/j2k/NewCodeBuilder.kt +++ b/j2k/newSrc/org/jetbrains/kotlin/j2k/NewCodeBuilder.kt @@ -45,10 +45,10 @@ class NewCodeBuilder { printer.print(classKindString(universeClass.classKind)) builder.append(" ") printer.print(universeClass.name.name) - if (universeClass.declarations.isNotEmpty()) { + if (universeClass.declarationList.declarations.isNotEmpty()) { printer.println("{") printer.pushIndent() - universeClass.declarations.forEach { it.accept(this, data) } + universeClass.declarationList.declarations.forEach { it.accept(this, data) } printer.popIndent() printer.println("}") } diff --git a/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/impl/jk.kt b/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/impl/jk.kt index 492ca5c2ade..06a1557ff65 100644 --- a/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/impl/jk.kt +++ b/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/impl/jk.kt @@ -44,7 +44,7 @@ class JKListChild() : ReadWriteProperty) + thisRef.children.addAll(value) } } @@ -91,7 +91,7 @@ abstract class JKElementListBase: JKElementBase(), JKMutableBranchElement { } } -class JKDeclarationListImpl : JKElementListBase(), JKDeclarationList { +class JKUDeclarationListImpl : JKElementListBase(), JKUDeclarationList { override var declarations: List by children() } @@ -104,7 +104,7 @@ class JKClassImpl(modifierList: JKModifierList, name: JKNameIdentifier, override override var modifierList by child(modifierList) override val valid: Boolean = true - override val declarationList by child(JKDeclarationListImpl()) + override val declarationList by child(JKUDeclarationListImpl()) override fun accept(visitor: JKVisitor, data: D): R = visitor.visitUniverseClass(this, data) } @@ -145,7 +145,7 @@ class JKPostfixExpressionImpl(expression: JKExpression, override var operator: J override fun accept(visitor: JKVisitor, data: D): R = visitor.visitPostfixExpression(this, data) } -class JKExpressionListImpl(expressions: MutableList = mutableListOf()) : JKExpressionList, JKElementListBase() { +class JKExpressionListImpl(expressions: List = emptyList()) : JKExpressionList, JKElementListBase() { override var expressions by children(expressions) override fun accept(visitor: JKVisitor, data: D): R = visitor.visitExpressionList(this, data) } diff --git a/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/jk.kt b/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/jk.kt index 513283781a8..e5aa7eccd0b 100644 --- a/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/jk.kt +++ b/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/jk.kt @@ -28,11 +28,15 @@ interface JKTreeElement : JKElement { interface JKUniverseDeclaration : JKTreeElement, JKDeclaration interface JKDeclarationList : JKElement { - var declarations: List + val declarations: List +} + +interface JKUDeclarationList : JKDeclarationList { + override var declarations: List } interface JKUniverseClass : JKUniverseDeclaration, JKClass { - override val declarationList: JKDeclarationList + override val declarationList: JKUDeclarationList } interface JKModifier : JKTreeElement diff --git a/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/conveersionCache/Abstractions.kt b/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/multiverse/Abstractions.kt similarity index 91% rename from j2k/newSrc/org/jetbrains/kotlin/j2k/tree/conveersionCache/Abstractions.kt rename to j2k/newSrc/org/jetbrains/kotlin/j2k/tree/multiverse/Abstractions.kt index 10d450b7db3..93ff4de2942 100644 --- a/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/conveersionCache/Abstractions.kt +++ b/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/multiverse/Abstractions.kt @@ -14,4 +14,4 @@ * limitations under the License. */ -package org.jetbrains.kotlin.j2k.tree.conveersionCache \ No newline at end of file +package org.jetbrains.kotlin.j2k.tree.multiverse \ No newline at end of file diff --git a/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/conveersionCache/Implementations.kt b/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/multiverse/Implementations.kt similarity index 87% rename from j2k/newSrc/org/jetbrains/kotlin/j2k/tree/conveersionCache/Implementations.kt rename to j2k/newSrc/org/jetbrains/kotlin/j2k/tree/multiverse/Implementations.kt index d12ab430a9d..25a7ac1f4e2 100644 --- a/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/conveersionCache/Implementations.kt +++ b/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/multiverse/Implementations.kt @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.jetbrains.kotlin.j2k.tree.conveersionCache +package org.jetbrains.kotlin.j2k.tree.multiverse import org.jetbrains.kotlin.j2k.tree.* import org.jetbrains.kotlin.j2k.tree.impl.JKJavaPrimitiveTypeImpl @@ -46,9 +46,11 @@ class JKMultiverseMethod(override var name: JKNameIdentifier) : JKMethod, JKMult } class JKMultiverseClass( - override var name: JKNameIdentifier, override var declarations: List, + override var name: JKNameIdentifier, override val declarationList: JKMDeclarationList, override var classKind: JKClass.ClassKind, override var modifierList: JKModifierList ) : JKClass, JKMultiverseElementBase() { override val valid: Boolean get() = true -} \ No newline at end of file +} + +class JKMDeclarationList(override val declarations: List) : JKMultiverseElementBase(), JKDeclarationList \ No newline at end of file diff --git a/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/conveersionCache/ReferenceTargetProvider.kt b/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/multiverse/ReferenceTargetProvider.kt similarity index 84% rename from j2k/newSrc/org/jetbrains/kotlin/j2k/tree/conveersionCache/ReferenceTargetProvider.kt rename to j2k/newSrc/org/jetbrains/kotlin/j2k/tree/multiverse/ReferenceTargetProvider.kt index 49908ea464d..eeb93af5b89 100644 --- a/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/conveersionCache/ReferenceTargetProvider.kt +++ b/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/multiverse/ReferenceTargetProvider.kt @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.jetbrains.kotlin.j2k.tree.conveersionCache +package org.jetbrains.kotlin.j2k.tree.multiverse import com.intellij.psi.PsiClass import com.intellij.psi.PsiField @@ -37,7 +37,9 @@ interface ReferenceTargetProvider { } fun resolveFieldReference(clazz: JKClass, field: PsiField): JKField { - return clazz.declarations.asSequence().filter { it is JKJavaField && it.name.name == field.name }.firstOrNull() as JKField? - ?: JKMultiverseField(JKNameIdentifierImpl(field.name)).also { clazz.cast().declarations += it } + return clazz.declarationList.declarations.asSequence().filter { it is JKJavaField && it.name.name == field.name }.firstOrNull() as JKField? + ?: JKMultiverseField(JKNameIdentifierImpl(field.name)).also { + clazz.cast().declarationList.declarations += it + } } } \ No newline at end of file