New J2K: Support relaxed visibility for members of package-local classes

This commit is contained in:
Simon Ogorodnik
2018-08-04 08:14:29 +03:00
committed by Ilya Kirillov
parent 1b7c980c83
commit 61fd76a89a
2 changed files with 31 additions and 11 deletions
@@ -5,20 +5,38 @@
package org.jetbrains.kotlin.j2k.conversions package org.jetbrains.kotlin.j2k.conversions
import org.jetbrains.kotlin.j2k.ConversionContext
import org.jetbrains.kotlin.j2k.tree.* import org.jetbrains.kotlin.j2k.tree.*
import org.jetbrains.kotlin.j2k.tree.impl.JKKtModifierImpl import org.jetbrains.kotlin.j2k.tree.impl.JKKtModifierImpl
import org.jetbrains.kotlin.j2k.tree.impl.visibility
class ModifiersConversion : RecursiveApplicableConversionBase() { class ModifiersConversion(private val context: ConversionContext) : RecursiveApplicableConversionBase() {
override fun applyToElement(element: JKTreeElement): JKTreeElement { override fun applyToElement(element: JKTreeElement): JKTreeElement {
return if (element is JKModifierListOwner && element !is JKLocalVariable) if (element is JKModifierListOwner && element !is JKLocalVariable) {
element.also { var modifiers = element.modifierList.modifiers
var modifiers = it.modifierList.modifiers if (element !is JKField) {
if (element !is JKField) { modifiers = mapOtherModifiers(modifiers)
modifiers = mapOtherModifiers(modifiers) }
} element.modifierList.modifiers = modifiers
it.modifierList.modifiers = modifiers // Is declared inside some class
} else recurse(element) // TODO: Cleanup
if (context.converter.settings.noInternalForMembersOfInternal) {
relaxVisibility(element)
}
}
return recurse(element)
}
private fun relaxVisibility(element: JKTreeElement) {
if (element is JKParameter) return
element as JKModifierListOwner // TODO: Assert
val modifierList = element.modifierList
val parent = element.parent as? JKClass
if (parent == null
|| modifierList.visibility != JKAccessModifier.Visibility.PACKAGE_PRIVATE
|| parent.modifierList.visibility != JKAccessModifier.Visibility.PACKAGE_PRIVATE) return
modifierList.visibility = JKAccessModifier.Visibility.PUBLIC
} }
private fun mapOtherModifiers(modifiers: List<JKModifier>): List<JKModifier> { private fun mapOtherModifiers(modifiers: List<JKModifier>): List<JKModifier> {
@@ -20,7 +20,8 @@ data class ConverterSettings(
var forceNotNullTypes: Boolean, var forceNotNullTypes: Boolean,
var specifyLocalVariableTypeByDefault: Boolean, var specifyLocalVariableTypeByDefault: Boolean,
var specifyFieldTypeByDefault: Boolean, var specifyFieldTypeByDefault: Boolean,
var openByDefault: Boolean var openByDefault: Boolean,
var noInternalForMembersOfInternal: Boolean
) { ) {
companion object { companion object {
@@ -28,7 +29,8 @@ data class ConverterSettings(
forceNotNullTypes = true, forceNotNullTypes = true,
specifyLocalVariableTypeByDefault = false, specifyLocalVariableTypeByDefault = false,
specifyFieldTypeByDefault = false, specifyFieldTypeByDefault = false,
openByDefault = false openByDefault = false,
noInternalForMembersOfInternal = true
) )
} }
} }