K2: generate Java synthetics for Kotlin get/sets w/out type parameters

This commit is a follow-up to d8a20f19 and
provides additional K1 compatibility.
#KT-59550 Fixed
This commit is contained in:
Mikhail Glukhikh
2023-06-21 16:55:29 +02:00
parent 08a355756a
commit 0d8f3a6026
7 changed files with 61 additions and 3 deletions
@@ -196,7 +196,7 @@ class JavaClassUseSiteMemberScope(
candidateSymbol.takeIf {
when {
candidate.isJavaOrEnhancement ->
candidate.isAcceptableAsAccessorOverride() ->
// TODO: Decide something for the case when property type is not computed yet
expectedReturnType == null ||
AbstractTypeChecker.isSubtypeOf(session.typeContext, candidateReturnType, expectedReturnType)
@@ -220,11 +220,20 @@ class JavaClassUseSiteMemberScope(
candidate.valueParameters.single().returnTypeRef.toConeKotlinTypeProbablyFlexible(session, typeParameterStack)
candidateSymbol.takeIf {
candidate.isJavaOrEnhancement && AbstractTypeChecker.equalTypes(session.typeContext, parameterType, propertyType)
candidate.isAcceptableAsAccessorOverride() && AbstractTypeChecker.equalTypes(
session.typeContext, parameterType, propertyType
)
}
}
}
private fun FirSimpleFunction.isAcceptableAsAccessorOverride(): Boolean {
// We don't accept here accessors with type parameters from Kotlin to avoid strange cases like KT-59038
// However, we (temporarily, see below) accept accessors from Kotlin in general to keep K1 compatibility in cases like KT-59550
// KT-59601: we are going to forbid accessors from Kotlin in general after some investigation and/or deprecation period
return isJavaOrEnhancement || typeParameters.isEmpty()
}
private fun FirPropertySymbol.getBuiltinSpecialPropertyGetterName(): Name? {
var result: Name? = null
superTypeScopes.processOverriddenPropertiesAndSelf(this) { overridden ->