From f2a4850f03fd11002e2c026b3a3205c2d6cfd7ac Mon Sep 17 00:00:00 2001 From: Anna Antonova Date: Wed, 28 Jan 2026 16:50:37 +0100 Subject: [PATCH] [kotlin] KTIJ-37293 do not convert properties with two getters GitOrigin-RevId: c44175bdf7fd97d55f19ada5486063957dd5cac2 --- .../ConvertToExplicitBackingFieldsInspection.kt | 10 ++++++---- .../tests/K2LocalInspectionTestGenerated.java | 5 +++++ .../convertToExplicitBackingFields/twoGetters.kt | 6 ++++++ 3 files changed, 17 insertions(+), 4 deletions(-) create mode 100644 plugins/kotlin/code-insight/inspections-k2/tests/testData/inspectionsLocal/convertToExplicitBackingFields/twoGetters.kt diff --git a/plugins/kotlin/code-insight/inspections-k2/src/org/jetbrains/kotlin/idea/k2/codeinsight/inspections/ConvertToExplicitBackingFieldsInspection.kt b/plugins/kotlin/code-insight/inspections-k2/src/org/jetbrains/kotlin/idea/k2/codeinsight/inspections/ConvertToExplicitBackingFieldsInspection.kt index fe37e399008d..eb6bb1f5d52a 100644 --- a/plugins/kotlin/code-insight/inspections-k2/src/org/jetbrains/kotlin/idea/k2/codeinsight/inspections/ConvertToExplicitBackingFieldsInspection.kt +++ b/plugins/kotlin/code-insight/inspections-k2/src/org/jetbrains/kotlin/idea/k2/codeinsight/inspections/ConvertToExplicitBackingFieldsInspection.kt @@ -115,9 +115,6 @@ internal class ConvertToExplicitBackingFieldsInspection : override fun KaSession.prepareContext(element: KtProperty): Context? { val returnedProperty = getReturnedPropertyFromGetter(element.getter) ?: return null - if (!returnedProperty.isPrivate()) return null - if (returnedProperty.isVar) return null - if (returnedProperty.hasDelegate()) return null val allProperties = (element.parent as? KtElement) ?.childrenOfType() @@ -147,7 +144,12 @@ internal class ConvertToExplicitBackingFieldsInspection : else -> null } - return returnedExpr?.let { resolveToProperty(it) } + val returnedProperty = returnedExpr?.let { resolveToProperty(it) } ?: return null + if (!returnedProperty.isPrivate()) return null + if (returnedProperty.isVar) return null + if (returnedProperty.hasDelegate()) return null + if (returnedProperty.getter != null) return null + return returnedProperty } context(_: KaSession) diff --git a/plugins/kotlin/code-insight/inspections-k2/tests/test/org/jetbrains/kotlin/idea/k2/inspections/tests/K2LocalInspectionTestGenerated.java b/plugins/kotlin/code-insight/inspections-k2/tests/test/org/jetbrains/kotlin/idea/k2/inspections/tests/K2LocalInspectionTestGenerated.java index 6b38c949b664..2a7ef5deb708 100644 --- a/plugins/kotlin/code-insight/inspections-k2/tests/test/org/jetbrains/kotlin/idea/k2/inspections/tests/K2LocalInspectionTestGenerated.java +++ b/plugins/kotlin/code-insight/inspections-k2/tests/test/org/jetbrains/kotlin/idea/k2/inspections/tests/K2LocalInspectionTestGenerated.java @@ -13470,6 +13470,11 @@ public abstract class K2LocalInspectionTestGenerated extends AbstractK2LocalInsp runTest("testData/inspectionsLocal/convertToExplicitBackingFields/simpleWithInheritance.kt"); } + @TestMetadata("twoGetters.kt") + public void testTwoGetters() throws Exception { + runTest("testData/inspectionsLocal/convertToExplicitBackingFields/twoGetters.kt"); + } + @TestMetadata("withCustomFunctions.kt") public void testWithCustomFunctions() throws Exception { runTest("testData/inspectionsLocal/convertToExplicitBackingFields/withCustomFunctions.kt"); diff --git a/plugins/kotlin/code-insight/inspections-k2/tests/testData/inspectionsLocal/convertToExplicitBackingFields/twoGetters.kt b/plugins/kotlin/code-insight/inspections-k2/tests/testData/inspectionsLocal/convertToExplicitBackingFields/twoGetters.kt new file mode 100644 index 000000000000..72fb94217542 --- /dev/null +++ b/plugins/kotlin/code-insight/inspections-k2/tests/testData/inspectionsLocal/convertToExplicitBackingFields/twoGetters.kt @@ -0,0 +1,6 @@ +// COMPILER_ARGUMENTS: -Xexplicit-backing-fields +// PROBLEM: none +class Foo { + private val _x get() = mutableListOf() + val x: List get() = _x +} \ No newline at end of file