[FIR] DATA_CLASS_OVERRIDE_CONFLICT diagnostic
This commit is contained in:
committed by
teamcityserver
parent
b44785c24e
commit
b36f8ed8f5
+5
@@ -576,6 +576,11 @@ object DIAGNOSTICS_LIST : DiagnosticList("FirErrors") {
|
||||
parameter<FirCallableDeclaration<*>>("baseMember")
|
||||
}
|
||||
|
||||
val DATA_CLASS_OVERRIDE_CONFLICT by error<KtClassOrObject>(PositioningStrategy.DATA_MODIFIER) {
|
||||
parameter<FirCallableDeclaration<*>>("overridingMember")
|
||||
parameter<FirCallableDeclaration<*>>("baseMember")
|
||||
}
|
||||
|
||||
val CANNOT_WEAKEN_ACCESS_PRIVILEGE by error<KtModifierListOwner>(PositioningStrategy.VISIBILITY_MODIFIER) {
|
||||
parameter<Visibility>("overridingVisibility")
|
||||
parameter<FirCallableDeclaration>("overridden")
|
||||
|
||||
+1
@@ -74,6 +74,7 @@ enum class PositioningStrategy(private val strategy: String? = null) {
|
||||
ANNOTATION_USE_SITE,
|
||||
ASSIGNMENT_LHS,
|
||||
IMPORT_LAST_NAME,
|
||||
DATA_MODIFIER,
|
||||
|
||||
;
|
||||
|
||||
|
||||
@@ -345,6 +345,7 @@ object FirErrors {
|
||||
// overrides
|
||||
val NOTHING_TO_OVERRIDE by error1<KtModifierListOwner, FirMemberDeclaration>(SourceElementPositioningStrategies.OVERRIDE_MODIFIER)
|
||||
val CANNOT_OVERRIDE_INVISIBLE_MEMBER by error2<KtNamedDeclaration, FirCallableDeclaration<*>, FirCallableDeclaration<*>>(SourceElementPositioningStrategies.OVERRIDE_MODIFIER)
|
||||
val DATA_CLASS_OVERRIDE_CONFLICT by error2<KtClassOrObject, FirCallableDeclaration<*>, FirCallableDeclaration<*>>(SourceElementPositioningStrategies.DATA_MODIFIER)
|
||||
val CANNOT_WEAKEN_ACCESS_PRIVILEGE by error3<KtModifierListOwner, Visibility, FirCallableDeclaration, Name>(SourceElementPositioningStrategies.VISIBILITY_MODIFIER)
|
||||
val CANNOT_CHANGE_ACCESS_PRIVILEGE by error3<KtModifierListOwner, Visibility, FirCallableDeclaration, Name>(SourceElementPositioningStrategies.VISIBILITY_MODIFIER)
|
||||
val OVERRIDING_FINAL_MEMBER by error2<KtNamedDeclaration, FirCallableDeclaration, Name>(SourceElementPositioningStrategies.OVERRIDE_MODIFIER)
|
||||
|
||||
+14
@@ -202,6 +202,20 @@ object FirOverrideChecker : FirClassChecker() {
|
||||
}
|
||||
val kind = member.source?.kind
|
||||
// Only report if the current member has real source or it's a member property declared inside the primary constructor.
|
||||
|
||||
if (kind is FirFakeSourceElementKind.DataClassGeneratedMembers) {
|
||||
overriddenMemberSymbols.find { (it.fir as? FirCallableMemberDeclaration<*>)?.isFinal == true }?.let { base ->
|
||||
reporter.reportOn(
|
||||
containingClass.source,
|
||||
FirErrors.DATA_CLASS_OVERRIDE_CONFLICT,
|
||||
member,
|
||||
base.fir,
|
||||
context
|
||||
)
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
if (kind !is FirRealSourceElementKind && kind !is FirFakeSourceElementKind.PropertyFromParameter) return
|
||||
|
||||
val overridden = overriddenMemberSymbols.first().originalOrSelf()
|
||||
|
||||
+7
@@ -95,6 +95,7 @@ import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.CYCLIC_CONSTRUCTO
|
||||
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.CYCLIC_GENERIC_UPPER_BOUND
|
||||
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.CYCLIC_INHERITANCE_HIERARCHY
|
||||
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.DATA_CLASS_NOT_PROPERTY_PARAMETER
|
||||
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.DATA_CLASS_OVERRIDE_CONFLICT
|
||||
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.DATA_CLASS_VARARG_PARAMETER
|
||||
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.DATA_CLASS_WITHOUT_PARAMETERS
|
||||
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.DELEGATED_PROPERTY_INSIDE_INLINE_CLASS
|
||||
@@ -942,6 +943,12 @@ class FirDefaultErrorMessages {
|
||||
VIRTUAL_MEMBER_HIDDEN, "''{0}'' hides member of supertype ''{1}'' and needs ''override'' modifier", DECLARATION_NAME,
|
||||
DECLARATION_NAME
|
||||
)
|
||||
map.put(
|
||||
DATA_CLASS_OVERRIDE_CONFLICT,
|
||||
"Function ''{0}'' generated for the data class conflicts with member of supertype ''{1}''",
|
||||
FQ_NAMES_IN_TYPES,
|
||||
FQ_NAMES_IN_TYPES
|
||||
)
|
||||
|
||||
map.put(
|
||||
GENERIC_THROWABLE_SUBCLASS,
|
||||
|
||||
+3
@@ -354,6 +354,9 @@ object LightTreePositioningStrategies {
|
||||
val INNER_MODIFIER: LightTreePositioningStrategy =
|
||||
ModifierSetBasedLightTreePositioningStrategy(TokenSet.create(KtTokens.INNER_KEYWORD))
|
||||
|
||||
val DATA_MODIFIER: LightTreePositioningStrategy =
|
||||
ModifierSetBasedLightTreePositioningStrategy(TokenSet.create(KtTokens.DATA_KEYWORD))
|
||||
|
||||
val OPERATOR: LightTreePositioningStrategy = object : LightTreePositioningStrategy() {
|
||||
override fun mark(
|
||||
node: LighterASTNode,
|
||||
|
||||
+5
@@ -118,6 +118,11 @@ object SourceElementPositioningStrategies {
|
||||
PositioningStrategies.SUSPEND_MODIFIER
|
||||
)
|
||||
|
||||
val DATA_MODIFIER = SourceElementPositioningStrategy(
|
||||
LightTreePositioningStrategies.DATA_MODIFIER,
|
||||
PositioningStrategies.DATA_MODIFIER
|
||||
)
|
||||
|
||||
val OPERATOR = SourceElementPositioningStrategy(
|
||||
LightTreePositioningStrategies.OPERATOR,
|
||||
PositioningStrategies.OPERATOR
|
||||
|
||||
Reference in New Issue
Block a user