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
import org.jetbrains.kotlin.j2k.ConversionContext
import org.jetbrains.kotlin.j2k.tree.*
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 {
return if (element is JKModifierListOwner && element !is JKLocalVariable)
element.also {
var modifiers = it.modifierList.modifiers
if (element !is JKField) {
modifiers = mapOtherModifiers(modifiers)
}
it.modifierList.modifiers = modifiers
} else recurse(element)
if (element is JKModifierListOwner && element !is JKLocalVariable) {
var modifiers = element.modifierList.modifiers
if (element !is JKField) {
modifiers = mapOtherModifiers(modifiers)
}
element.modifierList.modifiers = modifiers
// Is declared inside some class
// 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> {
@@ -20,7 +20,8 @@ data class ConverterSettings(
var forceNotNullTypes: Boolean,
var specifyLocalVariableTypeByDefault: Boolean,
var specifyFieldTypeByDefault: Boolean,
var openByDefault: Boolean
var openByDefault: Boolean,
var noInternalForMembersOfInternal: Boolean
) {
companion object {
@@ -28,7 +29,8 @@ data class ConverterSettings(
forceNotNullTypes = true,
specifyLocalVariableTypeByDefault = false,
specifyFieldTypeByDefault = false,
openByDefault = false
openByDefault = false,
noInternalForMembersOfInternal = true
)
}
}