[FIR] Cleanup and refactoring for checkers
This commit is contained in:
committed by
Mikhail Glukhikh
parent
fb946a6a3f
commit
2b0639d4ad
+15
-5
@@ -1,12 +1,22 @@
|
||||
object O {
|
||||
fun foo() {}
|
||||
}
|
||||
|
||||
// Interface
|
||||
interface Interface {
|
||||
// Redundant
|
||||
// Questionable cuz compiler reports warning here in FE 1.0
|
||||
<!REDUNDANT_MODALITY_MODIFIER!>open<!> val gav: Int
|
||||
get() = 42
|
||||
// Redundant
|
||||
<!REDUNDANT_MODALITY_MODIFIER!>abstract<!> fun foo()
|
||||
// Redundant
|
||||
private <!REDUNDANT_MODALITY_MODIFIER!>final<!> fun bar() {}
|
||||
// error
|
||||
private final fun bar() {}
|
||||
|
||||
<!REDUNDANT_MODALITY_MODIFIER!>open<!> fun goo() {}
|
||||
<!REDUNDANT_MODALITY_MODIFIER!>abstract<!> fun tar()
|
||||
|
||||
// error
|
||||
abstract fun too() {}
|
||||
}
|
||||
interface B {
|
||||
<!REDUNDANT_MODALITY_MODIFIER!>abstract<!> var bar: Unit
|
||||
@@ -51,8 +61,8 @@ open class OpenDerived : Base() {
|
||||
interface Derived : Interface {
|
||||
// Redundant
|
||||
override <!REDUNDANT_MODALITY_MODIFIER!>open<!> fun foo() {}
|
||||
// Redundant
|
||||
<!REDUNDANT_MODALITY_MODIFIER!>final<!> class Nested
|
||||
// error
|
||||
final class Nested
|
||||
}
|
||||
// Derived abstract class
|
||||
abstract class AbstractDerived1(override final val gav: Int) : Interface {
|
||||
|
||||
+17
@@ -1,4 +1,13 @@
|
||||
FILE: RedundantModalityModifierChecker.kt
|
||||
public final object O : R|kotlin/Any| {
|
||||
private constructor(): R|O| {
|
||||
super<R|kotlin/Any|>()
|
||||
}
|
||||
|
||||
public final fun foo(): R|kotlin/Unit| {
|
||||
}
|
||||
|
||||
}
|
||||
public abstract interface Interface : R|kotlin/Any| {
|
||||
public open val gav: R|kotlin/Int|
|
||||
public get(): R|kotlin/Int| {
|
||||
@@ -10,6 +19,14 @@ FILE: RedundantModalityModifierChecker.kt
|
||||
private final fun bar(): R|kotlin/Unit| {
|
||||
}
|
||||
|
||||
public open fun goo(): R|kotlin/Unit| {
|
||||
}
|
||||
|
||||
public abstract fun tar(): R|kotlin/Unit|
|
||||
|
||||
public abstract fun too(): R|kotlin/Unit| {
|
||||
}
|
||||
|
||||
}
|
||||
public abstract interface B : R|kotlin/Any| {
|
||||
public abstract var bar: R|kotlin/Unit|
|
||||
|
||||
-1
@@ -22,7 +22,6 @@ import org.jetbrains.kotlin.fir.types.ConeKotlinType
|
||||
import org.jetbrains.kotlin.fir.types.FirTypeRef
|
||||
import org.jetbrains.kotlin.fir.types.classId
|
||||
import org.jetbrains.kotlin.fir.types.coneType
|
||||
import org.jetbrains.kotlin.fir.types.impl.FirResolvedTypeRefImpl
|
||||
import org.jetbrains.kotlin.name.ClassId
|
||||
|
||||
object RedundantExplicitTypeChecker : FirMemberDeclarationChecker() {
|
||||
|
||||
+7
@@ -6,12 +6,14 @@
|
||||
package org.jetbrains.kotlin.fir.analysis.checkers.extended
|
||||
|
||||
import com.intellij.psi.impl.source.tree.LeafPsiElement
|
||||
import org.jetbrains.kotlin.descriptors.ClassKind
|
||||
import org.jetbrains.kotlin.fir.FirFakeSourceElement
|
||||
import org.jetbrains.kotlin.fir.analysis.checkers.context.CheckerContext
|
||||
import org.jetbrains.kotlin.fir.analysis.checkers.declaration.FirMemberDeclarationChecker
|
||||
import org.jetbrains.kotlin.fir.analysis.checkers.implicitModality
|
||||
import org.jetbrains.kotlin.fir.analysis.diagnostics.DiagnosticReporter
|
||||
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.REDUNDANT_MODALITY_MODIFIER
|
||||
import org.jetbrains.kotlin.fir.declarations.FirClass
|
||||
import org.jetbrains.kotlin.fir.declarations.FirMemberDeclaration
|
||||
import org.jetbrains.kotlin.fir.psi
|
||||
import org.jetbrains.kotlin.fir.toFirPsiSourceElement
|
||||
@@ -26,6 +28,11 @@ object RedundantModalityModifierChecker : FirMemberDeclarationChecker() {
|
||||
|
||||
val modalityModifier = (declaration.psi as? KtDeclaration)?.modalityModifier() ?: return
|
||||
val modality = (modalityModifier as? LeafPsiElement)?.elementType as? KtModifierKeywordToken ?: return
|
||||
if (
|
||||
modality == KtTokens.FINAL_KEYWORD
|
||||
&& (context.containingDeclarations.last() as? FirClass<*>)?.classKind == ClassKind.INTERFACE
|
||||
) return
|
||||
|
||||
val implicitModality = declaration.implicitModality(context)
|
||||
|
||||
if (modality != implicitModality) return
|
||||
|
||||
+3
-3
@@ -26,7 +26,7 @@ object RedundantVisibilityModifierChecker : FirBasicDeclarationChecker() {
|
||||
if (declaration.source is FirFakeSourceElement<*>) return
|
||||
if (
|
||||
declaration !is FirMemberDeclaration
|
||||
&& !(declaration is FirPropertyAccessor && declaration.visibility == context.lastInContainingDeclarationsVisibility)
|
||||
&& !(declaration is FirPropertyAccessor && declaration.visibility == context.containingPropertyVisibility)
|
||||
) return
|
||||
|
||||
val modifierList = (declaration.source.getModifierList() as? FirPsiModifierList)?.modifierList ?: return
|
||||
@@ -122,6 +122,6 @@ object RedundantVisibilityModifierChecker : FirBasicDeclarationChecker() {
|
||||
else -> false
|
||||
}
|
||||
|
||||
private val CheckerContext.lastInContainingDeclarationsVisibility
|
||||
get() = (this.containingDeclarations.last() as FirProperty).visibility
|
||||
private val CheckerContext.containingPropertyVisibility
|
||||
get() = (this.containingDeclarations.last() as? FirProperty)?.visibility
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user