From 127257aa27ce70d518baf54af20b6d8590650288 Mon Sep 17 00:00:00 2001 From: Vladimir Dolzhenko Date: Fri, 4 Sep 2020 17:37:51 +0200 Subject: [PATCH] Provide setter-method for LC for private property setter ^KT-41694 Fixed --- .../kotlin/asJava/classes/ultraLightMembersCreator.kt | 10 +++++----- .../asJava/fileLightClass/propWithPrivateSetter.kt | 7 +++++++ .../jetbrains/kotlin/asJava/KtFileLightClassTest.kt | 11 ++++++++++- 3 files changed, 22 insertions(+), 6 deletions(-) create mode 100644 idea/testData/asJava/fileLightClass/propWithPrivateSetter.kt diff --git a/compiler/light-classes/src/org/jetbrains/kotlin/asJava/classes/ultraLightMembersCreator.kt b/compiler/light-classes/src/org/jetbrains/kotlin/asJava/classes/ultraLightMembersCreator.kt index 3228d0993a1..6e8e53462bf 100644 --- a/compiler/light-classes/src/org/jetbrains/kotlin/asJava/classes/ultraLightMembersCreator.kt +++ b/compiler/light-classes/src/org/jetbrains/kotlin/asJava/classes/ultraLightMembersCreator.kt @@ -418,17 +418,17 @@ internal class UltraLightMembersCreator( if (isPrivate && declaration !is KtProperty) return emptyList() fun needsAccessor(accessor: KtPropertyAccessor?, type: MethodType): Boolean { - if (onlyJvmStatic && !declaration.isJvmStatic(support) && !(accessor != null && accessor.isJvmStatic(support))) return false if (declaration is KtProperty && declaration.hasDelegate()) return true - if (accessor?.hasModifier(PRIVATE_KEYWORD) == true || accessor?.hasAnnotation(JVM_SYNTHETIC_ANNOTATION_FQ_NAME) == true) - return false - - if (isPrivate && accessor?.hasBody() != true) return false + if (accessor?.hasBody() != true && + (accessor?.hasModifier(PRIVATE_KEYWORD) == true || + accessor?.hasAnnotation(JVM_SYNTHETIC_ANNOTATION_FQ_NAME) == true || + isPrivate) + ) return false if (!declaration.hasAnnotation(JVM_SYNTHETIC_ANNOTATION_FQ_NAME)) return true diff --git a/idea/testData/asJava/fileLightClass/propWithPrivateSetter.kt b/idea/testData/asJava/fileLightClass/propWithPrivateSetter.kt new file mode 100644 index 00000000000..40e9194bd48 --- /dev/null +++ b/idea/testData/asJava/fileLightClass/propWithPrivateSetter.kt @@ -0,0 +1,7 @@ +class Foo { + var prop = "V" + get() = "V" + private set(value) { + field = value + } +} \ No newline at end of file diff --git a/idea/tests/org/jetbrains/kotlin/asJava/KtFileLightClassTest.kt b/idea/tests/org/jetbrains/kotlin/asJava/KtFileLightClassTest.kt index 5cfc15720c4..fc3a52b6627 100644 --- a/idea/tests/org/jetbrains/kotlin/asJava/KtFileLightClassTest.kt +++ b/idea/tests/org/jetbrains/kotlin/asJava/KtFileLightClassTest.kt @@ -8,6 +8,7 @@ package org.jetbrains.kotlin.asJava import com.intellij.injected.editor.EditorWindow import com.intellij.psi.PsiElement import com.intellij.psi.PsiFile +import com.intellij.psi.PsiMethod import com.intellij.psi.search.GlobalSearchScope import com.intellij.testFramework.LightProjectDescriptor import junit.framework.TestCase @@ -93,9 +94,17 @@ class KtFileLightClassTest : KotlinLightCodeInsightFixtureTestCase() { assertEquals("Injected class should be `A`", "A", ((injectedFile as KtFile).declarations.single() as KtClass).toLightClass()!!.name) } + fun testPropertyWithPrivateSetter() { + val file = myFixture.configureByFile("propWithPrivateSetter.kt") as KtFile + val aClass = file.classes.single() + val methods = aClass.methods + val methodNames = methods.map(PsiMethod::getName) + assertEquals(methodNames.toString(), 3, methods.size) + assertTrue(methods.toString(), "getProp" in methodNames) + assertTrue(methods.toString(), "setProp" in methodNames) + } fun testSameVirtualFileForLightElement() { - val psiFile = myFixture.addFileToProject( "pkg/AnnotatedClass.kt", """ package pkg