JavaClassUseSiteMemberScope: optimize createOverridePropertyIfExists

Avoid calculating getter & setter twice
This commit is contained in:
Mikhail Glukhikh
2021-02-25 10:35:02 +03:00
parent 07d11508a7
commit 750a39a053
@@ -104,31 +104,18 @@ class JavaClassUseSiteMemberScope(
}
private fun FirVariableSymbol<*>.createOverridePropertyIfExists(scope: FirScope): FirPropertySymbol? {
if (this !is FirPropertySymbol || !doesClassOverridesProperty(this, scope)) return null
val getterSymbol = this.findGetterOverride(scope)!!
if (this !is FirPropertySymbol) return null
val getterSymbol = this.findGetterOverride(scope) ?: return null
val setterSymbol =
if (this.fir.isVar)
this.findSetterOverride(scope)!!
this.findSetterOverride(scope) ?: return null
else
null
if (setterSymbol != null && setterSymbol.fir.modality != getterSymbol.fir.modality) return null
return generateAccessorSymbol(getterSymbol, setterSymbol, fir.name)
}
private fun doesClassOverridesProperty(
propertySymbolFromSupertype: FirPropertySymbol,
scope: FirScope,
): Boolean {
val getter = propertySymbolFromSupertype.findGetterOverride(scope)
val setter = propertySymbolFromSupertype.findSetterOverride(scope)
if (getter == null) return false
if (!propertySymbolFromSupertype.fir.isVar) return true
return setter != null && setter.fir.modality == getter.fir.modality
}
private fun FirPropertySymbol.findGetterOverride(
scope: FirScope,
): FirNamedFunctionSymbol? {