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
|
||||
|
||||
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
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user