[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:
Ivan Kochurkin
2021-07-29 23:57:30 +03:00
committed by teamcityserver
parent b3d7ed569d
commit 0e2d765a2d
7 changed files with 45 additions and 113 deletions
@@ -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
}
}
}
@@ -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()
@@ -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),