Skip to content

Commit 993925f

Browse files
cypressiousSpace Team
authored and
Space Team
committed
[FIR] Ignore private properties in accessor override check
JavaClassUseSiteMemberScope won't return a Java method getFoo if there is an inherited Kotlin property foo in scope because calling this method would effectively call the property accessor which is not possible in Kotlin. This commit excludes private properties from this consideration because no accessor methods are generated for them, and so calling a Java method getFoo is ok. #KT-58577 Fixed
1 parent 442844f commit 993925f

File tree

8 files changed

+82
-0
lines changed

8 files changed

+82
-0
lines changed

analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/DiagnosticCompilerTestFE10TestdataTestGenerated.java

Lines changed: 6 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/LLFirPreresolvedReversedDiagnosticCompilerFE10TestDataTestGenerated.java

Lines changed: 6 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

compiler/fir/analysis-tests/testData/resolve/scopes/publicJavaAndPrivateKotlinVar.overrides.txt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,9 @@ C:
99
D:
1010
[Source]: public open override fun getName(): R|kotlin/String| from Java enhancement scope for /D [id: 0]
1111
[Enhancement]: public abstract fun getName(): R|kotlin/String!| from Substitution scope for [Java enhancement scope for /B] for type C [id: 1]
12+
[Source]: public open override fun setName(newName: R|kotlin/String|): R|kotlin/Any?| from Java enhancement scope for /D [id: 0]
13+
[SubstitutionOverride]: public abstract fun setName(newName: R|kotlin/String!|): R|kotlin/Any!| from Substitution scope for [Java enhancement scope for /B] for type C [id: 1]
14+
[Enhancement]: public abstract fun setName(newName: R|kotlin/String!|): R|ft<T & Any, T?>| from Java enhancement scope for /B [id: 2]
1215
[Source]: private final var name: R|kotlin/String| = R|<local>/name| from Java enhancement scope for /D [id: 0]
1316
[Source]: private final var name: R|kotlin/String| = R|<local>/name| from Use site scope of /C [id: 0]
1417

compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirLightTreeOldFrontendDiagnosticsTestGenerated.java

Lines changed: 6 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirPsiOldFrontendDiagnosticsTestGenerated.java

Lines changed: 6 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

compiler/fir/java/src/org/jetbrains/kotlin/fir/java/scopes/JavaClassUseSiteMemberScope.kt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ package org.jetbrains.kotlin.fir.java.scopes
77

88
import org.jetbrains.kotlin.builtins.StandardNames
99
import org.jetbrains.kotlin.descriptors.Modality
10+
import org.jetbrains.kotlin.descriptors.Visibilities
1011
import org.jetbrains.kotlin.fir.*
1112
import org.jetbrains.kotlin.fir.declarations.*
1213
import org.jetbrains.kotlin.fir.declarations.builder.buildSimpleFunctionCopy
@@ -549,6 +550,8 @@ class JavaClassUseSiteMemberScope(
549550
}
550551

551552
private fun FirPropertySymbol.isOverriddenInClassBy(functionSymbol: FirNamedFunctionSymbol): Boolean {
553+
if (rawStatus.visibility == Visibilities.Private) return false
554+
552555
val accessorDescriptors = when (val fir = fir) {
553556
is FirSyntheticProperty -> {
554557
if (fir.getter.delegate.symbol == functionSymbol || fir.setter?.delegate?.symbol == functionSymbol) return true
Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
// FIR_IDENTICAL
2+
// SKIP_TXT
3+
4+
// MODULE: lib
5+
6+
// FILE: JBaseInterface.java
7+
public interface JBaseInterface {
8+
String getData2();
9+
void setData2(String data);
10+
11+
String getData4();
12+
void setData4(String data);
13+
14+
String getData5();
15+
void setData5(String data);
16+
}
17+
18+
// FILE: KIntermediateClass.kt
19+
open class KIntermediateClass : JBaseInterface {
20+
private var data2: String? = ""
21+
override fun getData2(): String = ""
22+
override fun setData2(data: String) {}
23+
24+
private var data4: String? = ""
25+
override fun getData4(): String? = ""
26+
override fun setData4(data: String) {}
27+
28+
private var data5: String = ""
29+
override fun getData5(): String = ""
30+
override fun setData5(data: String?) {}
31+
}
32+
33+
// FILE: JChildClass.java
34+
public class JChildClass extends KIntermediateClass {}
35+
36+
// MODULE: main(lib)
37+
38+
// FILE: Main.kt
39+
fun main(editorTabs: JChildClass) {
40+
editorTabs.getData2()
41+
editorTabs.setData2("")
42+
editorTabs.getData4()
43+
editorTabs.setData4("")
44+
editorTabs.getData5()
45+
editorTabs.setData5("")
46+
}

compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/DiagnosticTestGenerated.java

Lines changed: 6 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)