diff --git a/j2k/newSrc/org/jetbrains/kotlin/j2k/NewCodeBuilder.kt b/j2k/newSrc/org/jetbrains/kotlin/j2k/NewCodeBuilder.kt new file mode 100644 index 00000000000..09f0c558a43 --- /dev/null +++ b/j2k/newSrc/org/jetbrains/kotlin/j2k/NewCodeBuilder.kt @@ -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 { + 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() + } +} \ No newline at end of file diff --git a/j2k/newSrc/org/jetbrains/kotlin/j2k/NewJavaToKotlinConverter.kt b/j2k/newSrc/org/jetbrains/kotlin/j2k/NewJavaToKotlinConverter.kt index 957f4660ebf..30a6c21fa66 100644 --- a/j2k/newSrc/org/jetbrains/kotlin/j2k/NewJavaToKotlinConverter.kt +++ b/j2k/newSrc/org/jetbrains/kotlin/j2k/NewJavaToKotlinConverter.kt @@ -36,7 +36,7 @@ class NewJavaToKotlinConverter( } } - fun filesToKotlin(files: List, progressIndicator: ProgressIndicator = EmptyProgressIndicator()): String { + fun filesToKotlin(files: List, progressIndicator: ProgressIndicator = EmptyProgressIndicator()): List { 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) } } } } \ No newline at end of file diff --git a/j2k/testData/newFileOrElement/first/First.kt b/j2k/testData/newFileOrElement/first/First.kt index e69de29bb2d..5e8b36f4bbc 100644 --- a/j2k/testData/newFileOrElement/first/First.kt +++ b/j2k/testData/newFileOrElement/first/First.kt @@ -0,0 +1,3 @@ +class Some { +/* !!! Hit visitElement !!! */ +} diff --git a/j2k/testData/newFileOrElement/first/Modifiers.kt b/j2k/testData/newFileOrElement/first/Modifiers.kt index e69de29bb2d..0bfdbcff9f7 100644 --- a/j2k/testData/newFileOrElement/first/Modifiers.kt +++ b/j2k/testData/newFileOrElement/first/Modifiers.kt @@ -0,0 +1 @@ +class Some \ No newline at end of file diff --git a/j2k/tests/org/jetbrains/kotlin/j2k/AbstractNewJavaToKotlinConverterNewSingleFileTest.kt b/j2k/tests/org/jetbrains/kotlin/j2k/AbstractNewJavaToKotlinConverterNewSingleFileTest.kt index 36573205dcc..f91f88dedbe 100644 --- a/j2k/tests/org/jetbrains/kotlin/j2k/AbstractNewJavaToKotlinConverterNewSingleFileTest.kt +++ b/j2k/tests/org/jetbrains/kotlin/j2k/AbstractNewJavaToKotlinConverterNewSingleFileTest.kt @@ -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() } } \ No newline at end of file diff --git a/j2k/tests/org/jetbrains/kotlin/j2k/AbstractNewJavaToKotlinConverterSingleFileTest.kt b/j2k/tests/org/jetbrains/kotlin/j2k/AbstractNewJavaToKotlinConverterSingleFileTest.kt index f7df1a90530..76744fd197f 100644 --- a/j2k/tests/org/jetbrains/kotlin/j2k/AbstractNewJavaToKotlinConverterSingleFileTest.kt +++ b/j2k/tests/org/jetbrains/kotlin/j2k/AbstractNewJavaToKotlinConverterSingleFileTest.kt @@ -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() } } \ No newline at end of file