From 9d7585207c5b11fab6efae102d39b20b0942d8ba Mon Sep 17 00:00:00 2001 From: Natalia Ukhorskaya Date: Wed, 7 Oct 2015 14:11:32 +0300 Subject: [PATCH] Completion for codeFragments: no duplicates for synthetic properties --- .../noDuplicatesForSyntheticProperties.kt | 13 +++++++++++++ .../noDuplicatesForSyntheticProperties.kt.fragment | 1 + .../jetbrains/kotlin/idea/core/descriptorUtils.kt | 5 +++++ .../CodeFragmentCompletionTestGenerated.java | 6 ++++++ 4 files changed, 25 insertions(+) create mode 100644 idea/idea-completion/testData/basic/codeFragments/noDuplicatesForSyntheticProperties.kt create mode 100644 idea/idea-completion/testData/basic/codeFragments/noDuplicatesForSyntheticProperties.kt.fragment diff --git a/idea/idea-completion/testData/basic/codeFragments/noDuplicatesForSyntheticProperties.kt b/idea/idea-completion/testData/basic/codeFragments/noDuplicatesForSyntheticProperties.kt new file mode 100644 index 00000000000..e72bc189d64 --- /dev/null +++ b/idea/idea-completion/testData/basic/codeFragments/noDuplicatesForSyntheticProperties.kt @@ -0,0 +1,13 @@ +import java.io.File + +fun main(args: Array) { + val f: File = MyFile() + f.absoluteFile +} + +class MyFile: File("") + +// EXIST: absoluteFile, getAbsoluteFile +// NOTHING_ELSE + +// RUNTIME_TYPE: MyFile \ No newline at end of file diff --git a/idea/idea-completion/testData/basic/codeFragments/noDuplicatesForSyntheticProperties.kt.fragment b/idea/idea-completion/testData/basic/codeFragments/noDuplicatesForSyntheticProperties.kt.fragment new file mode 100644 index 00000000000..60e6f6f63c6 --- /dev/null +++ b/idea/idea-completion/testData/basic/codeFragments/noDuplicatesForSyntheticProperties.kt.fragment @@ -0,0 +1 @@ +f.absoluteF \ No newline at end of file diff --git a/idea/idea-core/src/org/jetbrains/kotlin/idea/core/descriptorUtils.kt b/idea/idea-core/src/org/jetbrains/kotlin/idea/core/descriptorUtils.kt index ca57ec056cf..2591bba7a4f 100644 --- a/idea/idea-core/src/org/jetbrains/kotlin/idea/core/descriptorUtils.kt +++ b/idea/idea-core/src/org/jetbrains/kotlin/idea/core/descriptorUtils.kt @@ -28,6 +28,7 @@ import org.jetbrains.kotlin.resolve.BindingContext import org.jetbrains.kotlin.resolve.OverridingUtil import org.jetbrains.kotlin.resolve.scopes.receivers.ExpressionReceiver import org.jetbrains.kotlin.resolve.scopes.receivers.ReceiverValue +import org.jetbrains.kotlin.synthetic.SyntheticJavaPropertyDescriptor import org.jetbrains.kotlin.types.expressions.ExpressionTypingUtils fun DeclarationDescriptorWithVisibility.isVisible( @@ -77,6 +78,10 @@ private fun compareDescriptorsText(project: Project, d1: DeclarationDescriptor?, public fun compareDescriptors(project: Project, currentDescriptor: DeclarationDescriptor?, originalDescriptor: DeclarationDescriptor?): Boolean { if (currentDescriptor?.name != originalDescriptor?.name) return false + if (originalDescriptor is SyntheticJavaPropertyDescriptor && currentDescriptor is SyntheticJavaPropertyDescriptor) { + return compareDescriptors(project, currentDescriptor.getMethod, originalDescriptor.getMethod) + } + if (compareDescriptorsText(project, currentDescriptor, originalDescriptor)) return true if (originalDescriptor is CallableDescriptor && currentDescriptor is CallableDescriptor) { diff --git a/idea/tests/org/jetbrains/kotlin/idea/debugger/evaluate/CodeFragmentCompletionTestGenerated.java b/idea/tests/org/jetbrains/kotlin/idea/debugger/evaluate/CodeFragmentCompletionTestGenerated.java index 116c022dc08..1df2ebecc30 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/debugger/evaluate/CodeFragmentCompletionTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/idea/debugger/evaluate/CodeFragmentCompletionTestGenerated.java @@ -77,6 +77,12 @@ public class CodeFragmentCompletionTestGenerated extends AbstractCodeFragmentCom doTest(fileName); } + @TestMetadata("noDuplicatesForSyntheticProperties.kt") + public void testNoDuplicatesForSyntheticProperties() throws Exception { + String fileName = JetTestUtils.navigationMetadata("idea/idea-completion/testData/basic/codeFragments/noDuplicatesForSyntheticProperties.kt"); + doTest(fileName); + } + @TestMetadata("topLevel.kt") public void testTopLevel() throws Exception { String fileName = JetTestUtils.navigationMetadata("idea/idea-completion/testData/basic/codeFragments/topLevel.kt");