New J2K: Add filter & sort modifiers conversion
This commit is contained in:
committed by
Ilya Kirillov
parent
a7e0f18a57
commit
d688b6c6da
@@ -6,8 +6,10 @@
|
|||||||
package org.jetbrains.kotlin.j2k.conversions
|
package org.jetbrains.kotlin.j2k.conversions
|
||||||
|
|
||||||
import org.jetbrains.kotlin.j2k.ConversionContext
|
import org.jetbrains.kotlin.j2k.ConversionContext
|
||||||
|
import org.jetbrains.kotlin.j2k.ast.Mutability
|
||||||
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.mutability
|
||||||
import org.jetbrains.kotlin.j2k.tree.impl.visibility
|
import org.jetbrains.kotlin.j2k.tree.impl.visibility
|
||||||
|
|
||||||
class ModifiersConversion(private val context: ConversionContext) : RecursiveApplicableConversionBase() {
|
class ModifiersConversion(private val context: ConversionContext) : RecursiveApplicableConversionBase() {
|
||||||
@@ -24,10 +26,34 @@ class ModifiersConversion(private val context: ConversionContext) : RecursiveApp
|
|||||||
if (context.converter.settings.noInternalForMembersOfInternal) {
|
if (context.converter.settings.noInternalForMembersOfInternal) {
|
||||||
relaxVisibility(element)
|
relaxVisibility(element)
|
||||||
}
|
}
|
||||||
|
if (element is JKParameter) {
|
||||||
|
convertParameterModifiers(element)
|
||||||
|
}
|
||||||
|
element.sortModifiers()
|
||||||
}
|
}
|
||||||
return recurse(element)
|
return recurse(element)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private fun convertParameterModifiers(jkParameter: JKParameter) {
|
||||||
|
jkParameter.filterModifiers {
|
||||||
|
when (it) {
|
||||||
|
is JKModalityModifier -> it.modality != JKModalityModifier.Modality.OPEN
|
||||||
|
else -> true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (jkParameter.parent is JKKtPrimaryConstructor) {
|
||||||
|
val hasNonDefaultMutabilityModifier =
|
||||||
|
jkParameter.modifierList.modifiers.find {
|
||||||
|
it is JKMutabilityModifier && it.mutability != Mutability.Default
|
||||||
|
} != null
|
||||||
|
if (!hasNonDefaultMutabilityModifier)
|
||||||
|
jkParameter.modifierList.modifiers = emptyList()
|
||||||
|
} else {
|
||||||
|
jkParameter.modifierList.modifiers = emptyList()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
private fun relaxVisibility(element: JKTreeElement) {
|
private fun relaxVisibility(element: JKTreeElement) {
|
||||||
if (element is JKParameter) return
|
if (element is JKParameter) return
|
||||||
element as JKModifierListOwner // TODO: Assert
|
element as JKModifierListOwner // TODO: Assert
|
||||||
@@ -35,7 +61,8 @@ class ModifiersConversion(private val context: ConversionContext) : RecursiveApp
|
|||||||
val parent = element.parent as? JKClass
|
val parent = element.parent as? JKClass
|
||||||
if (parent == null
|
if (parent == null
|
||||||
|| modifierList.visibility != JKAccessModifier.Visibility.PACKAGE_PRIVATE
|
|| modifierList.visibility != JKAccessModifier.Visibility.PACKAGE_PRIVATE
|
||||||
|| parent.modifierList.visibility != JKAccessModifier.Visibility.PACKAGE_PRIVATE) return
|
|| parent.modifierList.visibility != JKAccessModifier.Visibility.PACKAGE_PRIVATE
|
||||||
|
) return
|
||||||
modifierList.visibility = JKAccessModifier.Visibility.PUBLIC
|
modifierList.visibility = JKAccessModifier.Visibility.PUBLIC
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -50,4 +77,27 @@ class ModifiersConversion(private val context: ConversionContext) : RecursiveApp
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private fun JKModifierListOwner.sortModifiers() {
|
||||||
|
modifierList.modifiers = modifierList.modifiers.sortedBy { it.priority }
|
||||||
|
}
|
||||||
|
|
||||||
|
private val JKModifier.priority: Int
|
||||||
|
get() =
|
||||||
|
when (this) {
|
||||||
|
is JKAccessModifier -> 0
|
||||||
|
is JKModalityModifier ->
|
||||||
|
when (this.modality) {
|
||||||
|
JKModalityModifier.Modality.FINAL, JKModalityModifier.Modality.OPEN, JKModalityModifier.Modality.ABSTRACT -> 1
|
||||||
|
JKModalityModifier.Modality.OVERRIDE -> 2
|
||||||
|
}
|
||||||
|
is JKJavaModifier -> 3
|
||||||
|
is JKMutabilityModifier -> 4
|
||||||
|
else -> TODO(this.toString())
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
private fun JKModifierListOwner.filterModifiers(filter: (JKModifier) -> Boolean) {
|
||||||
|
modifierList.modifiers = modifierList.modifiers.filter(filter)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user