From 3ed04aea8a0de54823b1803f39aa02190f13fe9b Mon Sep 17 00:00:00 2001 From: "Pavel V. Talanov" Date: Mon, 5 Oct 2015 20:20:32 +0300 Subject: [PATCH] Imports from objects: Do not create new instances on getOriginal every time Also fixes a problem where DeclarationLookupObjectImpl didn't have stable hashCode --- .../kotlin/resolve/importedFromObject.kt | 12 ++++++++++-- .../basic/common/ImportedMemberFromObject.kt | 15 +++++++++++++++ .../test/JSBasicCompletionTestGenerated.java | 6 ++++++ .../test/JvmBasicCompletionTestGenerated.java | 6 ++++++ 4 files changed, 37 insertions(+), 2 deletions(-) create mode 100644 idea/idea-completion/testData/basic/common/ImportedMemberFromObject.kt diff --git a/compiler/frontend/src/org/jetbrains/kotlin/resolve/importedFromObject.kt b/compiler/frontend/src/org/jetbrains/kotlin/resolve/importedFromObject.kt index bdb7f6b7f0a..032ade25af7 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/resolve/importedFromObject.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/resolve/importedFromObject.kt @@ -29,7 +29,11 @@ class FunctionImportedFromObject(val functionFromObject: FunctionDescriptor) : override fun substitute(substitutor: TypeSubstitutor) = functionFromObject.substitute(substitutor).wrap() - override fun getOriginal() = functionFromObject.original.wrap() + private val _original by lazy { + functionFromObject.original.wrap() + } + + override fun getOriginal() = _original override fun copy( newOwner: DeclarationDescriptor?, modality: Modality?, visibility: Visibility?, @@ -46,7 +50,11 @@ class PropertyImportedFromObject(val propertyFromObject: PropertyDescriptor) : override fun substitute(substitutor: TypeSubstitutor) = propertyFromObject.substitute(substitutor)?.wrap() - override fun getOriginal() = propertyFromObject.original.wrap() + private val _original by lazy { + propertyFromObject.original.wrap() + } + + override fun getOriginal() = _original override fun copy( newOwner: DeclarationDescriptor?, modality: Modality?, visibility: Visibility?, diff --git a/idea/idea-completion/testData/basic/common/ImportedMemberFromObject.kt b/idea/idea-completion/testData/basic/common/ImportedMemberFromObject.kt new file mode 100644 index 00000000000..405a79a5f7a --- /dev/null +++ b/idea/idea-completion/testData/basic/common/ImportedMemberFromObject.kt @@ -0,0 +1,15 @@ +package a + +import a.O.uniqueName + +object O { + fun uniqueName() { + } +} + +fun main() { + uniqueN +} + +// EXIST: uniqueName +// NUMBER: 1 \ No newline at end of file diff --git a/idea/idea-completion/tests/org/jetbrains/kotlin/idea/completion/test/JSBasicCompletionTestGenerated.java b/idea/idea-completion/tests/org/jetbrains/kotlin/idea/completion/test/JSBasicCompletionTestGenerated.java index 8b75ad0c203..01b782d95ee 100644 --- a/idea/idea-completion/tests/org/jetbrains/kotlin/idea/completion/test/JSBasicCompletionTestGenerated.java +++ b/idea/idea-completion/tests/org/jetbrains/kotlin/idea/completion/test/JSBasicCompletionTestGenerated.java @@ -223,6 +223,12 @@ public class JSBasicCompletionTestGenerated extends AbstractJSBasicCompletionTes doTest(fileName); } + @TestMetadata("ImportedMemberFromObject.kt") + public void testImportedMemberFromObject() throws Exception { + String fileName = JetTestUtils.navigationMetadata("idea/idea-completion/testData/basic/common/ImportedMemberFromObject.kt"); + doTest(fileName); + } + @TestMetadata("InCallExpression.kt") public void testInCallExpression() throws Exception { String fileName = JetTestUtils.navigationMetadata("idea/idea-completion/testData/basic/common/InCallExpression.kt"); diff --git a/idea/idea-completion/tests/org/jetbrains/kotlin/idea/completion/test/JvmBasicCompletionTestGenerated.java b/idea/idea-completion/tests/org/jetbrains/kotlin/idea/completion/test/JvmBasicCompletionTestGenerated.java index a7587fb8ec2..e018bbcf8f7 100644 --- a/idea/idea-completion/tests/org/jetbrains/kotlin/idea/completion/test/JvmBasicCompletionTestGenerated.java +++ b/idea/idea-completion/tests/org/jetbrains/kotlin/idea/completion/test/JvmBasicCompletionTestGenerated.java @@ -223,6 +223,12 @@ public class JvmBasicCompletionTestGenerated extends AbstractJvmBasicCompletionT doTest(fileName); } + @TestMetadata("ImportedMemberFromObject.kt") + public void testImportedMemberFromObject() throws Exception { + String fileName = JetTestUtils.navigationMetadata("idea/idea-completion/testData/basic/common/ImportedMemberFromObject.kt"); + doTest(fileName); + } + @TestMetadata("InCallExpression.kt") public void testInCallExpression() throws Exception { String fileName = JetTestUtils.navigationMetadata("idea/idea-completion/testData/basic/common/InCallExpression.kt");