Only private constructors for sealed / enum classes #KT-12377 Fixed

Also #KT-8497 Fixed
This commit is contained in:
Mikhail Glukhikh
2016-05-18 17:02:50 +03:00
parent cffdce908e
commit 1a8181bdc4
14 changed files with 132 additions and 27 deletions
@@ -198,18 +198,21 @@ fun KtModifierListOwner.setVisibility(visibilityModifier: KtModifierKeywordToken
addModifier(visibilityModifier)
}
fun KtDeclaration.implicitVisibility(): KtModifierKeywordToken? {
val defaultVisibilityKeyword = if (hasModifier(KtTokens.OVERRIDE_KEYWORD)) {
(resolveToDescriptor() as? CallableMemberDescriptor)
?.overriddenDescriptors
?.let { OverridingUtil.findMaxVisibility(it) }
?.toKeywordToken()
}
else {
KtTokens.DEFAULT_VISIBILITY_KEYWORD
}
return defaultVisibilityKeyword
}
fun KtDeclaration.implicitVisibility(): KtModifierKeywordToken? =
if (this is KtConstructor<*>) {
val klass = getContainingClassOrObject()
if (klass is KtClass && (klass.isEnum() || klass.isSealed())) KtTokens.PRIVATE_KEYWORD
else KtTokens.DEFAULT_VISIBILITY_KEYWORD
}
else if (hasModifier(KtTokens.OVERRIDE_KEYWORD)) {
(resolveToDescriptor() as? CallableMemberDescriptor)
?.overriddenDescriptors
?.let { OverridingUtil.findMaxVisibility(it) }
?.toKeywordToken()
}
else {
KtTokens.DEFAULT_VISIBILITY_KEYWORD
}
fun KtModifierListOwner.canBePrivate(): Boolean {
if (modifierList?.hasModifier(KtTokens.ABSTRACT_KEYWORD) ?: false) return false