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