kotlin-allopen/kotlin-allopen-plugin/src/main/kotlin/dev/tilera/kotlin/AllopenExtension.kt

34 lines
1.1 KiB
Kotlin

package dev.tilera.kotlin
import org.jetbrains.kotlin.descriptors.ClassDescriptor
import org.jetbrains.kotlin.descriptors.DeclarationDescriptor
import org.jetbrains.kotlin.descriptors.Modality
import org.jetbrains.kotlin.extensions.DeclarationAttributeAltererExtension
import org.jetbrains.kotlin.lexer.KtTokens
import org.jetbrains.kotlin.psi.KtModifierListOwner
class AllopenExtension: DeclarationAttributeAltererExtension {
override fun refineDeclarationModality(
modifierListOwner: KtModifierListOwner,
declaration: DeclarationDescriptor?,
containingDeclaration: DeclarationDescriptor?,
currentModality: Modality,
isImplicitModality: Boolean
): Modality? {
if (currentModality != Modality.FINAL) {
return null
}
if (declaration is ClassDescriptor || containingDeclaration != null) {
return if (!isImplicitModality && modifierListOwner.hasModifier(KtTokens.FINAL_KEYWORD))
Modality.FINAL
else
Modality.OPEN
}
return null
}
}