New J2K: Fixed modifiers conversion, expression test now can pass.

This commit is contained in:
Dimach
2018-06-09 09:29:11 +03:00
committed by Ilya Kirillov
parent b33f5ec58f
commit 674b3ce02e
2 changed files with 25 additions and 8 deletions
@@ -192,7 +192,7 @@ class NewCodeBuilder {
val type = typeElement.type
when (type) {
is JKClassType -> if ((type.classReference as? JKClassSymbol)?.fqName != "kotlin.Unit") {
(type.classReference as JKClassSymbol).fqName?.let { printer.printWithNoIndent(": " + FqName(it).shortName().asString()) }
(type.classReference as JKClassSymbol).fqName?.let { printer.printWithNoIndent(":" + FqName(it).shortName().asString()) }
}
else -> printer.printWithNoIndent(":Unit /* TODO: ${type::class} */")
}
@@ -11,15 +11,23 @@ import org.jetbrains.kotlin.j2k.tree.impl.JKKtModifierImpl
class ModifiersConversion : RecursiveApplicableConversionBase() {
override fun applyToElement(element: JKTreeElement): JKTreeElement {
return if (element is JKModifierList) element.also {
if (element.parent !is JKLocalVariable && !it.modifiers.filter { it is JKJavaAccessModifier }.any()) {
it.modifiers += JKKtModifierImpl(JKKtModifier.KtModifierType.INTERNAL)
}
it.modifiers = mapModifiers(it.modifiers)
} else recurse(element)
return if (element is JKModifierListOwner && element !is JKLocalVariable)
element.also {
var modifiers = it.modifierList.modifiers
if (element !is JKField) {
if (!modifiers.any { it is JKJavaModifier && it.type == JKJavaModifier.JavaModifierType.FINAL }) {
modifiers += JKKtModifierImpl(JKKtModifier.KtModifierType.OPEN)
}
modifiers = mapOtherModifiers(modifiers)
}
if (!modifiers.any { it is JKJavaAccessModifier }) {
modifiers += JKKtModifierImpl(JKKtModifier.KtModifierType.INTERNAL)
}
it.modifierList.modifiers = mapAccessModifiers(modifiers)
} else recurse(element)
}
private fun mapModifiers(modifiers: List<JKModifier>): List<JKModifier> {
private fun mapAccessModifiers(modifiers: List<JKModifier>): List<JKModifier> {
return modifiers.mapNotNull {
when (it) {
is JKJavaAccessModifier -> when (it.type) {
@@ -27,6 +35,15 @@ class ModifiersConversion : RecursiveApplicableConversionBase() {
JKJavaAccessModifier.AccessModifierType.PRIVATE -> JKKtModifierImpl(JKKtModifier.KtModifierType.PRIVATE)
JKJavaAccessModifier.AccessModifierType.PROTECTED -> JKKtModifierImpl(JKKtModifier.KtModifierType.PROTECTED)
}
else -> it
}
}
}
private fun mapOtherModifiers(modifiers: List<JKModifier>): List<JKModifier> {
return modifiers.mapNotNull {
when (it) {
is JKJavaModifier -> when (it.type) {
JKJavaModifier.JavaModifierType.ABSTRACT -> JKKtModifierImpl(JKKtModifier.KtModifierType.ABSTRACT)
JKJavaModifier.JavaModifierType.FINAL -> null