diff --git a/j2k/newSrc/org/jetbrains/kotlin/j2k/JavaToJKTreeBuilder.kt b/j2k/newSrc/org/jetbrains/kotlin/j2k/JavaToJKTreeBuilder.kt index bb409e008f8..431d5590821 100644 --- a/j2k/newSrc/org/jetbrains/kotlin/j2k/JavaToJKTreeBuilder.kt +++ b/j2k/newSrc/org/jetbrains/kotlin/j2k/JavaToJKTreeBuilder.kt @@ -226,8 +226,9 @@ class JavaToJKTreeBuilder(var symbolProvider: JKSymbolProvider) { val psi = this return JKClassImpl(with(modifierMapper) { modifierList.toJK() }, JKNameIdentifierImpl(name!!), classKind).also { it.declarationList = psi.children.mapNotNull { - ElementVisitor(this@DeclarationMapper).apply { it.accept(this) }.resultElement as? JKDeclaration + ElementVisitor().apply { it.accept(this) }.resultElement as? JKDeclaration } + backAnnotation[it] = this (symbolProvider.provideDirectSymbol(psi) as? JKUniverseClassSymbol)?.run { target = it } } } @@ -346,7 +347,7 @@ class JavaToJKTreeBuilder(var symbolProvider: JKSymbolProvider) { } } - private inner class ElementVisitor(val declarationMapper: DeclarationMapper) : JavaElementVisitor() { + private inner class ElementVisitor : JavaElementVisitor() { var resultElement: JKTreeElement? = null @@ -363,14 +364,16 @@ class JavaToJKTreeBuilder(var symbolProvider: JKSymbolProvider) { } override fun visitFile(file: PsiFile) { - file.acceptChildren(this) + resultElement = JKFileImpl().apply { + declarationList += file.children.mapNotNull { ElementVisitor().apply { it.accept(this) }.resultElement as? JKDeclaration } + } } } fun buildTree(psi: PsiElement): JKTreeElement? { assert(psi.language.`is`(JavaLanguage.INSTANCE)) { "Unable to build JK Tree using Java Visitor for language ${psi.language}" } - val elementVisitor = ElementVisitor(declarationMapper) + val elementVisitor = ElementVisitor() psi.accept(elementVisitor) return elementVisitor.resultElement } diff --git a/j2k/newSrc/org/jetbrains/kotlin/j2k/NewCodeBuilder.kt b/j2k/newSrc/org/jetbrains/kotlin/j2k/NewCodeBuilder.kt index 0ea53cd154c..31b99bb253b 100644 --- a/j2k/newSrc/org/jetbrains/kotlin/j2k/NewCodeBuilder.kt +++ b/j2k/newSrc/org/jetbrains/kotlin/j2k/NewCodeBuilder.kt @@ -48,6 +48,10 @@ class NewCodeBuilder { printer.print("/* !!! Hit visitElement for element type: ${treeElement::class} !!! */") } + override fun visitFile(file: JKFile) { + file.acceptChildren(this) + } + override fun visitModifierList(modifierList: JKModifierList) { modifierList.modifiers.firstOrNull()?.accept(this) for (i in 1..modifierList.modifiers.lastIndex) { 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 05dd46adf7b..ff4d44467c3 100644 --- a/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/impl/jk.kt +++ b/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/impl/jk.kt @@ -23,6 +23,12 @@ import org.jetbrains.kotlin.j2k.tree.JKLiteralExpression.LiteralType.BOOLEAN import org.jetbrains.kotlin.j2k.tree.JKLiteralExpression.LiteralType.NULL import org.jetbrains.kotlin.j2k.tree.visitors.JKVisitor +class JKFileImpl : JKFile, JKBranchElementBase() { + override fun accept(visitor: JKVisitor, data: D): R = visitor.visitFile(this, data) + + override var declarationList by children() +} + class JKClassImpl( modifierList: JKModifierList, name: JKNameIdentifier, diff --git a/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/jk.kt b/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/jk.kt index 8b09675a571..acd6eaebcc6 100644 --- a/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/jk.kt +++ b/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/jk.kt @@ -33,6 +33,10 @@ interface JKTreeElement : JKElement { interface JKDeclaration : JKTreeElement +interface JKFile : JKTreeElement, JKBranchElement { + var declarationList: List +} + interface JKClass : JKDeclaration, JKModifierListOwner { val name: JKNameIdentifier var declarationList: List diff --git a/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/visitors/JKVisitor.kt b/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/visitors/JKVisitor.kt index a197184dfc8..c60e55e8ce2 100644 --- a/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/visitors/JKVisitor.kt +++ b/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/visitors/JKVisitor.kt @@ -5,6 +5,7 @@ import org.jetbrains.kotlin.j2k.tree.* interface JKVisitor { fun visitTreeElement(treeElement: JKTreeElement, data: D): R fun visitDeclaration(declaration: JKDeclaration, data: D): R = visitTreeElement(declaration, data) + fun visitFile(file: JKFile, data: D): R = visitTreeElement(file, data) fun visitClass(klass: JKClass, data: D): R = visitDeclaration(klass, data) fun visitMethod(method: JKMethod, data: D): R = visitDeclaration(method, data) fun visitField(field: JKField, data: D): R = visitDeclaration(field, data) diff --git a/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/visitors/JKVisitorVoid.kt b/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/visitors/JKVisitorVoid.kt index 43a36e05659..118a0d6b830 100644 --- a/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/visitors/JKVisitorVoid.kt +++ b/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/visitors/JKVisitorVoid.kt @@ -7,6 +7,8 @@ interface JKVisitorVoid : JKVisitor { override fun visitTreeElement(treeElement: JKTreeElement, data: Nothing?) = visitTreeElement(treeElement) fun visitDeclaration(declaration: JKDeclaration) = visitTreeElement(declaration, null) override fun visitDeclaration(declaration: JKDeclaration, data: Nothing?) = visitDeclaration(declaration) + fun visitFile(file: JKFile) = visitTreeElement(file, null) + override fun visitFile(file: JKFile, data: Nothing?) = visitFile(file) fun visitClass(klass: JKClass) = visitDeclaration(klass, null) override fun visitClass(klass: JKClass, data: Nothing?) = visitClass(klass) fun visitMethod(method: JKMethod) = visitDeclaration(method, null)