Check if modality is refined in "Redundant modifier" inspection

This commit is contained in:
Yan Zhulanow
2016-12-05 22:15:49 +03:00
parent 0a2b52c1ed
commit 3b65cb1ef2
9 changed files with 111 additions and 18 deletions
@@ -16,6 +16,8 @@
package org.jetbrains.kotlin.allopen
import org.jetbrains.annotations.TestOnly
import org.jetbrains.kotlin.descriptors.ClassDescriptor
import org.jetbrains.kotlin.descriptors.DeclarationDescriptor
import org.jetbrains.kotlin.descriptors.Modality
import org.jetbrains.kotlin.extensions.AnnotationBasedExtension
@@ -31,6 +33,11 @@ class CliAllOpenDeclarationAttributeAltererExtension(
}
abstract class AbstractAllOpenDeclarationAttributeAltererExtension : DeclarationAttributeAltererExtension, AnnotationBasedExtension {
companion object {
@TestOnly
val ANNOTATIONS_FOR_TESTS = listOf("AllOpen", "AllOpen2", "test.AllOpen")
}
override fun refineDeclarationModality(
modifierListOwner: KtModifierListOwner,
declaration: DeclarationDescriptor?,
@@ -42,14 +49,14 @@ abstract class AbstractAllOpenDeclarationAttributeAltererExtension : Declaration
return null
}
// Explicit final
if (modifierListOwner.hasModifier(KtTokens.FINAL_KEYWORD)) {
return Modality.FINAL
val descriptor = declaration as? ClassDescriptor ?: containingDeclaration ?: return null
if (descriptor.hasSpecialAnnotation(modifierListOwner)) {
return if (modifierListOwner.hasModifier(KtTokens.FINAL_KEYWORD))
Modality.FINAL // Explicit final
else
Modality.OPEN
}
val descriptor = declaration ?: containingDeclaration ?: return null
if (descriptor.hasSpecialAnnotation(modifierListOwner)) return Modality.OPEN
return null
}
}