New J2K: Introduce JKFile
This commit is contained in:
committed by
Ilya Kirillov
parent
e4fc4b8218
commit
0ec2fb3d17
@@ -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
|
||||
}
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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 <R, D> accept(visitor: JKVisitor<R, D>, data: D): R = visitor.visitFile(this, data)
|
||||
|
||||
override var declarationList by children<JKDeclaration>()
|
||||
}
|
||||
|
||||
class JKClassImpl(
|
||||
modifierList: JKModifierList,
|
||||
name: JKNameIdentifier,
|
||||
|
||||
@@ -33,6 +33,10 @@ interface JKTreeElement : JKElement {
|
||||
|
||||
interface JKDeclaration : JKTreeElement
|
||||
|
||||
interface JKFile : JKTreeElement, JKBranchElement {
|
||||
var declarationList: List<JKDeclaration>
|
||||
}
|
||||
|
||||
interface JKClass : JKDeclaration, JKModifierListOwner {
|
||||
val name: JKNameIdentifier
|
||||
var declarationList: List<JKDeclaration>
|
||||
|
||||
@@ -5,6 +5,7 @@ import org.jetbrains.kotlin.j2k.tree.*
|
||||
interface JKVisitor<out R, in D> {
|
||||
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)
|
||||
|
||||
@@ -7,6 +7,8 @@ interface JKVisitorVoid : JKVisitor<Unit, Nothing?> {
|
||||
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)
|
||||
|
||||
Reference in New Issue
Block a user