Skip to content

Commit dbe87dc

Browse files
sandwwraithSpace Team
authored andcommitted
[FIR] Also enhance declaration status with MustUse for Java methods converted to synthetic properties
#KT-80179 Fixed
1 parent fb7534e commit dbe87dc

File tree

7 files changed

+35
-10
lines changed

7 files changed

+35
-10
lines changed

compiler/fir/fir-jvm/src/org/jetbrains/kotlin/fir/java/enhancement/SignatureEnhancement.kt

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -219,7 +219,7 @@ class FirSignatureEnhancement(
219219
symbol = FirJavaOverriddenSyntheticPropertySymbol(propertySymbol.callableId, propertySymbol.getterId)
220220
delegateGetter = enhancedGetterSymbol?.fir as FirSimpleFunction? ?: getterDelegate
221221
delegateSetter = enhancedSetterSymbol?.fir as FirSimpleFunction? ?: setterDelegate
222-
customStatus = firElement.status
222+
customStatus = enhanceStatus(firElement.status, predefinedEnhancementInfo = null, overriddenMembers = overridden)
223223
deprecationsProvider = getDeprecationsProviderFromAccessors(session, delegateGetter, delegateSetter)
224224
dispatchReceiverType = firElement.dispatchReceiverType
225225
}.symbol
@@ -409,7 +409,7 @@ class FirSignatureEnhancement(
409409
origin = declarationOrigin
410410

411411
this.name = name!!
412-
status = enhanceStatus(firMethod, predefinedEnhancementInfo, overriddenMembers)
412+
status = enhanceStatus(firMethod.status, predefinedEnhancementInfo, overriddenMembers)
413413
symbol = if (isIntersectionOverride) {
414414
FirIntersectionOverrideFunctionSymbol(
415415
methodId, overriddenMembers.map { it.symbol },
@@ -506,11 +506,10 @@ class FirSignatureEnhancement(
506506
}
507507

508508
private fun enhanceStatus(
509-
method: FirSimpleFunction,
509+
original: FirDeclarationStatus,
510510
predefinedEnhancementInfo: PredefinedFunctionEnhancementInfo?,
511511
overriddenMembers: List<FirCallableDeclaration>,
512512
): FirDeclarationStatus {
513-
val original = method.status
514513
if (original.returnValueStatus != ReturnValueStatus.Unspecified) return original
515514
predefinedEnhancementInfo?.returnValueStatus?.takeIf { it != ReturnValueStatus.Unspecified }?.let { newRvStatus ->
516515
return original.copy(returnValueStatus = newRvStatus)

compiler/testData/diagnostics/tests/crv/collectionsAndJavaTypes.fir.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ fun optional(s: String?) {
5959

6060
fun stringBuilder(sb: StringBuilder, ss: CharSequence) {
6161
sb.append("")
62-
sb.length // .length is not reported because of KT-80179
62+
<!RETURN_VALUE_NOT_USED!>sb.length<!>
6363
<!RETURN_VALUE_NOT_USED!>sb.get(0)<!>
6464
<!RETURN_VALUE_NOT_USED!>ss.length<!>
6565
<!RETURN_VALUE_NOT_USED!>ss.get(0)<!>

compiler/testData/diagnostics/tests/crv/collectionsAndJavaTypes.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ fun optional(s: String?) {
5959

6060
fun stringBuilder(sb: StringBuilder, ss: CharSequence) {
6161
sb.append("")
62-
sb.length // .length is not reported because of KT-80179
62+
sb.length
6363
sb.get(0)
6464
ss.length
6565
ss.get(0)

compiler/testData/diagnostics/tests/crv/javaAnnotationsOverride.fir.kt

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -130,18 +130,18 @@ fun test2(l: List2) {
130130
}
131131

132132
fun test3(l: List3) {
133-
// Due to enhancements, UnnanotatedList.get gets @MURV from kotlin.collections.List.get
133+
// Due to enhancements, UnnanotatedList.get/size get @MURV from kotlin.collections.List.get/size
134134
<!RETURN_VALUE_NOT_USED!>l.get(0)<!>
135135
l.notAListMember()
136-
l.size
136+
<!RETURN_VALUE_NOT_USED!>l.size<!>
137137
l.set(0, "")
138138
l.add("")
139139
}
140140

141141
fun test4(l: List4) {
142142
<!RETURN_VALUE_NOT_USED!>l.get(0)<!>
143143
l.notAListMember()
144-
l.size
144+
<!RETURN_VALUE_NOT_USED!>l.size<!>
145145
l.set(0, "")
146146
<!RETURN_VALUE_NOT_USED!>l.add("")<!>
147147
}

compiler/testData/diagnostics/tests/crv/javaAnnotationsOverride.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -130,7 +130,7 @@ fun test2(l: List2) {
130130
}
131131

132132
fun test3(l: List3) {
133-
// Due to enhancements, UnnanotatedList.get gets @MURV from kotlin.collections.List.get
133+
// Due to enhancements, UnnanotatedList.get/size get @MURV from kotlin.collections.List.get/size
134134
l.get(0)
135135
l.notAListMember()
136136
l.size

compiler/testData/diagnostics/tests/crv/kotlinJavaKotlin.fir.kt

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,13 +7,15 @@
77
interface KotlinBase {
88
fun x(): String
99
@IgnorableReturnValue fun ign(): String
10+
val p: String
1011
}
1112

1213
// FILE: JavaI1.java
1314

1415
public interface JavaI1 extends KotlinBase {
1516
String x();
1617
String ign();
18+
String getP();
1719
}
1820

1921
// FILE: JavaI2.java
@@ -24,18 +26,21 @@ public interface JavaI2 extends KotlinBase {
2426
@IgnorableReturnValue
2527
String x();
2628
String ign();
29+
String getP();
2730
}
2831

2932
// FILE: KtFile.kt
3033

3134
class K1: JavaI1 {
3235
override fun x() = ""
3336
override fun ign() = ""
37+
override val p = ""
3438
}
3539

3640
class K2: JavaI2 {
3741
override fun x() = ""
3842
override fun ign() = ""
43+
override val p = ""
3944
}
4045

4146
fun testX(b: KotlinBase, j1: JavaI1, j2: JavaI2, k1: K1, k2: K2) {
@@ -46,6 +51,14 @@ fun testX(b: KotlinBase, j1: JavaI1, j2: JavaI2, k1: K1, k2: K2) {
4651
k2.x()
4752
}
4853

54+
fun testP(b: KotlinBase, j1: JavaI1, j2: JavaI2, k1: K1, k2: K2) {
55+
<!RETURN_VALUE_NOT_USED!>b.p<!>
56+
<!RETURN_VALUE_NOT_USED!>j1.p<!>
57+
<!RETURN_VALUE_NOT_USED!>k1.p<!>
58+
<!RETURN_VALUE_NOT_USED!>j2.p<!>
59+
<!RETURN_VALUE_NOT_USED!>k2.p<!>
60+
}
61+
4962
fun testIgn(b: KotlinBase, j1: JavaI1, j2: JavaI2, k1: K1, k2: K2) {
5063
b.ign()
5164
j1.ign()

compiler/testData/diagnostics/tests/crv/kotlinJavaKotlin.kt

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,13 +7,15 @@
77
interface KotlinBase {
88
fun x(): String
99
@IgnorableReturnValue fun ign(): String
10+
val p: String
1011
}
1112

1213
// FILE: JavaI1.java
1314

1415
public interface JavaI1 extends KotlinBase {
1516
String x();
1617
String ign();
18+
String getP();
1719
}
1820

1921
// FILE: JavaI2.java
@@ -24,18 +26,21 @@ public interface JavaI2 extends KotlinBase {
2426
@IgnorableReturnValue
2527
String x();
2628
String ign();
29+
String getP();
2730
}
2831

2932
// FILE: KtFile.kt
3033

3134
class K1: JavaI1 {
3235
override fun x() = ""
3336
override fun ign() = ""
37+
override val p = ""
3438
}
3539

3640
class K2: JavaI2 {
3741
override fun x() = ""
3842
override fun ign() = ""
43+
override val p = ""
3944
}
4045

4146
fun testX(b: KotlinBase, j1: JavaI1, j2: JavaI2, k1: K1, k2: K2) {
@@ -46,6 +51,14 @@ fun testX(b: KotlinBase, j1: JavaI1, j2: JavaI2, k1: K1, k2: K2) {
4651
k2.x()
4752
}
4853

54+
fun testP(b: KotlinBase, j1: JavaI1, j2: JavaI2, k1: K1, k2: K2) {
55+
b.p
56+
j1.p
57+
k1.p
58+
j2.p
59+
k2.p
60+
}
61+
4962
fun testIgn(b: KotlinBase, j1: JavaI1, j2: JavaI2, k1: K1, k2: K2) {
5063
b.ign()
5164
j1.ign()

0 commit comments

Comments
 (0)