FIR: unwrap f/overrides when determining mutability of property reference

#KT-44010 Fixed
This commit is contained in:
Jinseong Jeon
2020-12-21 12:51:59 -08:00
committed by Mikhail Glukhikh
parent 0918e73dff
commit 78fa8814c4
5 changed files with 111 additions and 2 deletions
@@ -3004,6 +3004,12 @@ public class FirOldFrontendDiagnosticsTestGenerated extends AbstractFirDiagnosti
runTest("compiler/testData/diagnostics/tests/callableReference/property/memberFromTopLevel.kt");
}
@Test
@TestMetadata("propertyFromAbstractSuperClass.kt")
public void testPropertyFromAbstractSuperClass() throws Exception {
runTest("compiler/testData/diagnostics/tests/callableReference/property/propertyFromAbstractSuperClass.kt");
}
@Test
@TestMetadata("protectedVarFromClass.kt")
public void testProtectedVarFromClass() throws Exception {
@@ -401,6 +401,8 @@ private fun createKPropertyType(
private fun FirVariable<*>.canBeMutableReference(candidate: Candidate): Boolean {
if (!isVar) return false
if (this is FirField) return true
return source?.kind == FirFakeSourceElementKind.PropertyFromParameter ||
(setter is FirMemberDeclaration && candidate.callInfo.session.visibilityChecker.isVisible(setter!!, candidate))
val original = this.unwrapFakeOverrides()
return original.source?.kind == FirFakeSourceElementKind.PropertyFromParameter ||
(original.setter is FirMemberDeclaration &&
candidate.callInfo.session.visibilityChecker.isVisible(original.setter!!, candidate))
}