From cdecbc0915da5aaac4b4aacb50531d9526e02e14 Mon Sep 17 00:00:00 2001 From: Alexander Udalov Date: Tue, 29 Oct 2013 15:59:08 +0400 Subject: [PATCH] Class objects also can have delegated members --- .../lazy/descriptors/LazyClassMemberScope.java | 8 ++++---- .../testData/loadKotlin/classObject/Delegation.kt | 11 +++++++++++ .../loadKotlin/classObject/Delegation.txt | 15 +++++++++++++++ .../DescriptorSerializationTestGenerated.java | 5 +++++ .../compiler/LoadCompiledKotlinTestGenerated.java | 5 +++++ ...azyResolveNamespaceComparingTestGenerated.java | 5 +++++ 6 files changed, 45 insertions(+), 4 deletions(-) create mode 100644 compiler/testData/loadKotlin/classObject/Delegation.kt create mode 100644 compiler/testData/loadKotlin/classObject/Delegation.txt diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/lazy/descriptors/LazyClassMemberScope.java b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/lazy/descriptors/LazyClassMemberScope.java index 1bcafa9c40d..675bc736d45 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/lazy/descriptors/LazyClassMemberScope.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/lazy/descriptors/LazyClassMemberScope.java @@ -261,10 +261,12 @@ public class LazyClassMemberScope extends AbstractLazyMemberScope extractor, @NotNull Collection existingDescriptors ) { - //class objects do not have delegated members - if (thisDescriptor.getKind() == ClassKind.CLASS_OBJECT) { + JetClassOrObject classOrObject = declarationProvider.getOwnerInfo().getCorrespondingClassOrObject(); + if (classOrObject == null) { + // Enum class objects do not have delegated members return Collections.emptySet(); } + DelegationResolver.TypeResolver lazyTypeResolver = new DelegationResolver.TypeResolver() { @Nullable @Override @@ -283,8 +285,6 @@ public class LazyClassMemberScope extends AbstractLazyMemberScope : test.T { + /*primary*/ private constructor () + internal open override /*1*/ /*delegation*/ fun foo(): jet.Int + } +} + +internal trait T { + internal abstract fun foo(): jet.Int +} diff --git a/compiler/tests/org/jetbrains/jet/descriptors/serialization/DescriptorSerializationTestGenerated.java b/compiler/tests/org/jetbrains/jet/descriptors/serialization/DescriptorSerializationTestGenerated.java index caa0584f4e9..22bcfa35274 100644 --- a/compiler/tests/org/jetbrains/jet/descriptors/serialization/DescriptorSerializationTestGenerated.java +++ b/compiler/tests/org/jetbrains/jet/descriptors/serialization/DescriptorSerializationTestGenerated.java @@ -294,6 +294,11 @@ public class DescriptorSerializationTestGenerated extends AbstractDescriptorSeri doTest("compiler/testData/loadKotlin/classObject/ClassObjectPropertyInClass.kt"); } + @TestMetadata("Delegation.kt") + public void testDelegation() throws Exception { + doTest("compiler/testData/loadKotlin/classObject/Delegation.kt"); + } + @TestMetadata("InnerClassInClassObject.kt") public void testInnerClassInClassObject() throws Exception { doTest("compiler/testData/loadKotlin/classObject/InnerClassInClassObject.kt"); diff --git a/compiler/tests/org/jetbrains/jet/jvm/compiler/LoadCompiledKotlinTestGenerated.java b/compiler/tests/org/jetbrains/jet/jvm/compiler/LoadCompiledKotlinTestGenerated.java index 1440a061433..65f29e004dd 100644 --- a/compiler/tests/org/jetbrains/jet/jvm/compiler/LoadCompiledKotlinTestGenerated.java +++ b/compiler/tests/org/jetbrains/jet/jvm/compiler/LoadCompiledKotlinTestGenerated.java @@ -568,6 +568,11 @@ public class LoadCompiledKotlinTestGenerated extends AbstractLoadCompiledKotlinT doTestWithAccessors("compiler/testData/loadKotlin/classObject/ClassObjectPropertyInClass.kt"); } + @TestMetadata("Delegation.kt") + public void testDelegation() throws Exception { + doTestWithAccessors("compiler/testData/loadKotlin/classObject/Delegation.kt"); + } + @TestMetadata("InnerClassInClassObject.kt") public void testInnerClassInClassObject() throws Exception { doTestWithAccessors("compiler/testData/loadKotlin/classObject/InnerClassInClassObject.kt"); diff --git a/compiler/tests/org/jetbrains/jet/lang/resolve/lazy/LazyResolveNamespaceComparingTestGenerated.java b/compiler/tests/org/jetbrains/jet/lang/resolve/lazy/LazyResolveNamespaceComparingTestGenerated.java index 57f095ae549..f2ae81447da 100644 --- a/compiler/tests/org/jetbrains/jet/lang/resolve/lazy/LazyResolveNamespaceComparingTestGenerated.java +++ b/compiler/tests/org/jetbrains/jet/lang/resolve/lazy/LazyResolveNamespaceComparingTestGenerated.java @@ -570,6 +570,11 @@ public class LazyResolveNamespaceComparingTestGenerated extends AbstractLazyReso doTestCheckingPrimaryConstructorsAndAccessors("compiler/testData/loadKotlin/classObject/ClassObjectPropertyInClass.kt"); } + @TestMetadata("Delegation.kt") + public void testDelegation() throws Exception { + doTestCheckingPrimaryConstructorsAndAccessors("compiler/testData/loadKotlin/classObject/Delegation.kt"); + } + @TestMetadata("InnerClassInClassObject.kt") public void testInnerClassInClassObject() throws Exception { doTestCheckingPrimaryConstructorsAndAccessors("compiler/testData/loadKotlin/classObject/InnerClassInClassObject.kt");