[FIR] Consider getter and setter for CANNOT_WEAKEN_ACCESS_PRIVILEGE
Fill source with correct value instead of null for FirDefaultPropertySetter in light tree converter
This commit is contained in:
committed by
teamcityserver
parent
b3d7ed569d
commit
0e2d765a2d
+24
-8
@@ -117,6 +117,7 @@ object FirOverrideChecker : FirClassChecker() {
|
||||
overriddenSymbols: List<FirCallableSymbol<*>>,
|
||||
context: CheckerContext
|
||||
) {
|
||||
if (overriddenSymbols.isEmpty()) return
|
||||
val visibilities = overriddenSymbols.map {
|
||||
it to it.visibility
|
||||
}.sortedBy { pair ->
|
||||
@@ -124,14 +125,29 @@ object FirOverrideChecker : FirClassChecker() {
|
||||
Visibilities.compare(visibility, pair.second) ?: Int.MIN_VALUE
|
||||
}
|
||||
|
||||
for ((overridden, overriddenVisibility) in visibilities) {
|
||||
val compare = Visibilities.compare(visibility, overriddenVisibility)
|
||||
if (compare == null) {
|
||||
reporter.reportCannotChangeAccessPrivilege(this, overridden, context)
|
||||
return
|
||||
} else if (compare < 0) {
|
||||
reporter.reportCannotWeakenAccessPrivilege(this, overridden, context)
|
||||
return
|
||||
if (this is FirPropertySymbol) {
|
||||
getterSymbol?.checkVisibility(
|
||||
containingClass,
|
||||
reporter,
|
||||
overriddenSymbols.map { (it as FirPropertySymbol).getterSymbol ?: it },
|
||||
context
|
||||
)
|
||||
setterSymbol?.checkVisibility(
|
||||
containingClass,
|
||||
reporter,
|
||||
overriddenSymbols.mapNotNull { (it as FirPropertySymbol).setterSymbol },
|
||||
context
|
||||
)
|
||||
} else {
|
||||
for ((overridden, overriddenVisibility) in visibilities) {
|
||||
val compare = Visibilities.compare(visibility, overriddenVisibility)
|
||||
if (compare == null) {
|
||||
reporter.reportCannotChangeAccessPrivilege(this, overridden, context)
|
||||
break
|
||||
} else if (compare < 0) {
|
||||
reporter.reportCannotWeakenAccessPrivilege(this, overridden, context)
|
||||
break
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+16
-4
@@ -623,7 +623,11 @@ class DeclarationsConverter(
|
||||
)
|
||||
//parse primary constructor
|
||||
convertPrimaryConstructor(
|
||||
primaryConstructor, delegatedSelfType.source, classWrapper, delegatedConstructorSource, containingClassIsExpectClass = false
|
||||
primaryConstructor,
|
||||
delegatedSelfType.source,
|
||||
classWrapper,
|
||||
delegatedConstructorSource,
|
||||
containingClassIsExpectClass = false
|
||||
)?.let { this.declarations += it.firConstructor }
|
||||
delegateFields?.let { this.declarations += it }
|
||||
|
||||
@@ -710,7 +714,7 @@ class DeclarationsConverter(
|
||||
enumClassWrapper,
|
||||
superTypeCallEntry?.toFirSourceElement(),
|
||||
isEnumEntry = true,
|
||||
containingClassIsExpectClass = false
|
||||
containingClassIsExpectClass = false
|
||||
)?.let { declarations += it.firConstructor }
|
||||
classBodyNode?.also {
|
||||
// Use ANONYMOUS_OBJECT_NAME for the owner class id of enum entry declarations
|
||||
@@ -1117,7 +1121,11 @@ class DeclarationsConverter(
|
||||
val convertedAccessors = accessors.map { convertGetterOrSetter(it, returnType, propertyVisibility, modifiers) }
|
||||
this.getter = convertedAccessors.find { it.isGetter }
|
||||
?: FirDefaultPropertyGetter(
|
||||
null, moduleData, FirDeclarationOrigin.Source, returnType, propertyVisibility
|
||||
property.toFirSourceElement(FirFakeSourceElementKind.DefaultAccessor),
|
||||
moduleData,
|
||||
FirDeclarationOrigin.Source,
|
||||
returnType,
|
||||
propertyVisibility
|
||||
).also {
|
||||
it.status = defaultAccessorStatus()
|
||||
it.initContainingClassAttr()
|
||||
@@ -1126,7 +1134,11 @@ class DeclarationsConverter(
|
||||
this.setter = convertedAccessors.find { it.isSetter }
|
||||
?: if (isVar) {
|
||||
FirDefaultPropertySetter(
|
||||
null, moduleData, FirDeclarationOrigin.Source, returnType, propertyVisibility
|
||||
property.toFirSourceElement(FirFakeSourceElementKind.DefaultAccessor),
|
||||
moduleData,
|
||||
FirDeclarationOrigin.Source,
|
||||
returnType,
|
||||
propertyVisibility
|
||||
).also {
|
||||
it.status = defaultAccessorStatus()
|
||||
it.initContainingClassAttr()
|
||||
|
||||
+3
-2
@@ -75,15 +75,16 @@ class ValueParameter(
|
||||
isLateInit = false
|
||||
}
|
||||
annotations += this@ValueParameter.firValueParameter.annotations
|
||||
val defaultAccessorSource = propertySource?.fakeElement(FirFakeSourceElementKind.DefaultAccessor)
|
||||
getter = FirDefaultPropertyGetter(
|
||||
null,
|
||||
defaultAccessorSource,
|
||||
moduleData,
|
||||
FirDeclarationOrigin.Source,
|
||||
type.copyWithNewSourceKind(FirFakeSourceElementKind.DefaultAccessor),
|
||||
modifiers.getVisibility()
|
||||
)
|
||||
setter = if (this.isVar) FirDefaultPropertySetter(
|
||||
null,
|
||||
defaultAccessorSource,
|
||||
moduleData,
|
||||
FirDeclarationOrigin.Source,
|
||||
type.copyWithNewSourceKind(FirFakeSourceElementKind.DefaultAccessor),
|
||||
|
||||
Reference in New Issue
Block a user