New J2K: Support relaxed visibility for members of package-local classes
This commit is contained in:
committed by
Ilya Kirillov
parent
1b7c980c83
commit
61fd76a89a
@@ -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
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user