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
}
}
@@ -16,10 +16,10 @@
package org.jetbrains.kotlin.allopen.ide
import com.intellij.openapi.application.ApplicationManager
import com.intellij.openapi.module.Module
import com.intellij.openapi.module.ModuleUtilCore
import com.intellij.openapi.project.Project
import com.intellij.openapi.roots.ProjectRootManager
import com.intellij.openapi.roots.ProjectRootModificationTracker
import com.intellij.psi.util.CachedValue
import com.intellij.psi.util.CachedValueProvider
@@ -41,6 +41,10 @@ class IdeAllOpenDeclarationAttributeAltererExtension(val project: Project) : Abs
}
override fun getAnnotationFqNames(modifierListOwner: KtModifierListOwner): List<String> {
if (ApplicationManager.getApplication().isUnitTestMode) {
return ANNOTATIONS_FOR_TESTS
}
val module = ModuleUtilCore.findModuleForPsiElement(modifierListOwner) ?: return emptyList()
return cache.value.getOrPut(module) {