New J2K: Simple code builder
This commit is contained in:
committed by
Ilya Kirillov
parent
dc73d415ad
commit
a4630af109
@@ -0,0 +1,62 @@
|
||||
/*
|
||||
* Copyright 2010-2017 JetBrains s.r.o.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package org.jetbrains.kotlin.j2k
|
||||
|
||||
import org.jetbrains.kotlin.j2k.tree.JKClass
|
||||
import org.jetbrains.kotlin.j2k.tree.JKElement
|
||||
import org.jetbrains.kotlin.j2k.tree.visitors.JKVisitor
|
||||
import org.jetbrains.kotlin.utils.Printer
|
||||
|
||||
class NewCodeBuilder {
|
||||
|
||||
val builder = StringBuilder()
|
||||
val printer = Printer(builder)
|
||||
|
||||
private fun classKindString(kind: JKClass.ClassKind): String = when (kind) {
|
||||
JKClass.ClassKind.ABSTRACT -> "abstract class"
|
||||
JKClass.ClassKind.ANNOTATION -> "annotation class"
|
||||
JKClass.ClassKind.CLASS -> "class"
|
||||
JKClass.ClassKind.ENUM -> "enum class"
|
||||
JKClass.ClassKind.INTERFACE -> "interface"
|
||||
}
|
||||
|
||||
|
||||
inner class Visitor : JKVisitor<Unit, Unit> {
|
||||
override fun visitElement(element: JKElement, data: Unit) {
|
||||
builder.append("/* !!! Hit visitElement !!! */")
|
||||
}
|
||||
|
||||
override fun visitClass(klass: JKClass, data: Unit) {
|
||||
printer.print(classKindString(klass.classKind))
|
||||
builder.append(" ")
|
||||
printer.print(klass.name.name)
|
||||
if (klass.declarations.isNotEmpty()) {
|
||||
printer.println("{")
|
||||
printer.pushIndent()
|
||||
klass.declarations.forEach { it.accept(this, data) }
|
||||
printer.popIndent()
|
||||
printer.println("}")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
fun printCodeOut(root: JKElement): String {
|
||||
Visitor().also { root.accept(it, Unit) }
|
||||
return builder.toString()
|
||||
}
|
||||
}
|
||||
@@ -36,7 +36,7 @@ class NewJavaToKotlinConverter(
|
||||
}
|
||||
}
|
||||
|
||||
fun filesToKotlin(files: List<PsiJavaFile>, progressIndicator: ProgressIndicator = EmptyProgressIndicator()): String {
|
||||
fun filesToKotlin(files: List<PsiJavaFile>, progressIndicator: ProgressIndicator = EmptyProgressIndicator()): List<String> {
|
||||
val treeBuilder = JavaToJKTreeBuilder()
|
||||
val fileTrees = files.mapNotNull(treeBuilder::buildTree)
|
||||
|
||||
@@ -44,9 +44,10 @@ class NewJavaToKotlinConverter(
|
||||
|
||||
ConversionsRunner.doApply(fileTrees)
|
||||
|
||||
val result = fileTrees.prettyPrintTrees()
|
||||
val resultTree = fileTrees.prettyPrintTrees()
|
||||
|
||||
println(result)
|
||||
return result
|
||||
println(resultTree)
|
||||
|
||||
return fileTrees.map { NewCodeBuilder().run { printCodeOut(it) } }
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,3 @@
|
||||
class Some {
|
||||
/* !!! Hit visitElement !!! */
|
||||
}
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
class Some
|
||||
+1
-1
@@ -22,6 +22,6 @@ abstract class AbstractNewJavaToKotlinConverterNewSingleFileTest : AbstractJavaT
|
||||
|
||||
override fun fileToKotlin(text: String, settings: ConverterSettings, project: Project): String {
|
||||
val file = createJavaFile(text)
|
||||
return NewJavaToKotlinConverter(project, settings).filesToKotlin(listOf(file))
|
||||
return NewJavaToKotlinConverter(project, settings).filesToKotlin(listOf(file)).single()
|
||||
}
|
||||
}
|
||||
+1
-1
@@ -22,6 +22,6 @@ abstract class AbstractNewJavaToKotlinConverterSingleFileTest : AbstractJavaToKo
|
||||
|
||||
override fun fileToKotlin(text: String, settings: ConverterSettings, project: Project): String {
|
||||
val file = createJavaFile(text)
|
||||
return NewJavaToKotlinConverter(project, settings).filesToKotlin(listOf(file))
|
||||
return NewJavaToKotlinConverter(project, settings).filesToKotlin(listOf(file)).single()
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user