From 0f8d50b44f641dfa4c2132bd8c68f0f63b1d21c9 Mon Sep 17 00:00:00 2001 From: "Pavel V. Talanov" Date: Fri, 2 Aug 2013 16:50:47 +0400 Subject: [PATCH] Fix default visibility for class object in eager and lazy resolve --- .../jet/lang/resolve/ModifiersChecker.java | 3 + .../lang/resolve/TypeHierarchyResolver.java | 6 +- .../ClassObjectDefaultVisibility.kt | 14 ++++ .../ClassObjectDefaultVisibility.txt | 25 +++++++ .../ClassObjectExplicitVisibility.kt | 37 ++++++++++ .../ClassObjectExplicitVisibility.txt | 73 +++++++++++++++++++ .../DescriptorSerializationTestGenerated.java | 10 +++ .../LoadCompiledKotlinTestGenerated.java | 10 +++ ...esolveNamespaceComparingTestGenerated.java | 10 +++ 9 files changed, 186 insertions(+), 2 deletions(-) create mode 100644 compiler/testData/loadKotlin/classObject/ClassObjectDefaultVisibility.kt create mode 100644 compiler/testData/loadKotlin/classObject/ClassObjectDefaultVisibility.txt create mode 100644 compiler/testData/loadKotlin/classObject/ClassObjectExplicitVisibility.kt create mode 100644 compiler/testData/loadKotlin/classObject/ClassObjectExplicitVisibility.txt diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/ModifiersChecker.java b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/ModifiersChecker.java index 8c1637e933b..7e9e1eab8f7 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/ModifiersChecker.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/ModifiersChecker.java @@ -241,6 +241,9 @@ public class ModifiersChecker { if (kind == ClassKind.ENUM_ENTRY) { return Visibilities.PRIVATE; } + if (kind == ClassKind.CLASS_OBJECT) { + return ((ClassDescriptor) descriptor.getContainingDeclaration()).getVisibility(); + } return Visibilities.INTERNAL; } diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/TypeHierarchyResolver.java b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/TypeHierarchyResolver.java index d8bac9bb6c9..8b7b9ea28aa 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/TypeHierarchyResolver.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/TypeHierarchyResolver.java @@ -43,6 +43,8 @@ import static org.jetbrains.jet.lang.diagnostics.Errors.*; import static org.jetbrains.jet.lang.resolve.BindingContext.FQNAME_TO_CLASS_DESCRIPTOR; import static org.jetbrains.jet.lang.resolve.BindingContext.TYPE; import static org.jetbrains.jet.lang.resolve.DescriptorUtils.getClassObjectName; +import static org.jetbrains.jet.lang.resolve.ModifiersChecker.getDefaultClassVisibility; +import static org.jetbrains.jet.lang.resolve.ModifiersChecker.resolveVisibilityFromModifiers; public class TypeHierarchyResolver { @NotNull @@ -181,7 +183,7 @@ public class TypeHierarchyResolver { JetObjectDeclaration objectDeclaration = entry.getKey(); MutableClassDescriptor descriptor = entry.getValue(); descriptor.setModality(Modality.FINAL); - descriptor.setVisibility(ModifiersChecker.resolveVisibilityFromModifiers(objectDeclaration)); + descriptor.setVisibility(resolveVisibilityFromModifiers(objectDeclaration, getDefaultClassVisibility(descriptor))); descriptor.setTypeParameterDescriptors(new ArrayList(0)); descriptor.createTypeConstructor(); } @@ -516,7 +518,7 @@ public class TypeHierarchyResolver { private void createClassObjectForEnumClass(JetClass klass, MutableClassDescriptor mutableClassDescriptor) { if (mutableClassDescriptor.getKind() == ClassKind.ENUM_CLASS) { MutableClassDescriptor classObjectDescriptor = - createClassObjectDescriptor(mutableClassDescriptor, ModifiersChecker.resolveVisibilityFromModifiers(klass)); + createClassObjectDescriptor(mutableClassDescriptor, resolveVisibilityFromModifiers(klass)); mutableClassDescriptor.getBuilder().setClassObjectDescriptor(classObjectDescriptor); classObjectDescriptor.getBuilder().addFunctionDescriptor( DescriptorResolver.createEnumClassObjectValuesMethod(classObjectDescriptor, trace)); diff --git a/compiler/testData/loadKotlin/classObject/ClassObjectDefaultVisibility.kt b/compiler/testData/loadKotlin/classObject/ClassObjectDefaultVisibility.kt new file mode 100644 index 00000000000..8d8b4600196 --- /dev/null +++ b/compiler/testData/loadKotlin/classObject/ClassObjectDefaultVisibility.kt @@ -0,0 +1,14 @@ +package test + +public class Pub { + class object {} +} + +private class Pri { + class object {} +} + +class Int { + class object {} +} + diff --git a/compiler/testData/loadKotlin/classObject/ClassObjectDefaultVisibility.txt b/compiler/testData/loadKotlin/classObject/ClassObjectDefaultVisibility.txt new file mode 100644 index 00000000000..fde11e4be47 --- /dev/null +++ b/compiler/testData/loadKotlin/classObject/ClassObjectDefaultVisibility.txt @@ -0,0 +1,25 @@ +package test + +internal final class Int { + /*primary*/ public constructor Int() + + internal class object { + /*primary*/ private constructor () + } +} + +private final class Pri { + /*primary*/ public constructor Pri() + + private class object { + /*primary*/ private constructor () + } +} + +public final class Pub { + /*primary*/ public constructor Pub() + + public class object { + /*primary*/ private constructor () + } +} diff --git a/compiler/testData/loadKotlin/classObject/ClassObjectExplicitVisibility.kt b/compiler/testData/loadKotlin/classObject/ClassObjectExplicitVisibility.kt new file mode 100644 index 00000000000..d54a0129f17 --- /dev/null +++ b/compiler/testData/loadKotlin/classObject/ClassObjectExplicitVisibility.kt @@ -0,0 +1,37 @@ +package test + +public class PubPri { + private class object {} +} + +public class PubInt { + internal class object {} +} + +public class PubPub { + public class object {} +} + +internal class IntPri { + private class object {} +} + +internal class IntInt { + internal class object {} +} + +internal class IntPub { + public class object {} +} + +private class PriPri { + private class object {} +} + +private class PriInt { + internal class object {} +} + +private class PriPub { + public class object {} +} \ No newline at end of file diff --git a/compiler/testData/loadKotlin/classObject/ClassObjectExplicitVisibility.txt b/compiler/testData/loadKotlin/classObject/ClassObjectExplicitVisibility.txt new file mode 100644 index 00000000000..5350d89e9fc --- /dev/null +++ b/compiler/testData/loadKotlin/classObject/ClassObjectExplicitVisibility.txt @@ -0,0 +1,73 @@ +package test + +internal final class IntInt { + /*primary*/ public constructor IntInt() + + internal class object { + /*primary*/ private constructor () + } +} + +internal final class IntPri { + /*primary*/ public constructor IntPri() + + private class object { + /*primary*/ private constructor () + } +} + +internal final class IntPub { + /*primary*/ public constructor IntPub() + + public class object { + /*primary*/ private constructor () + } +} + +private final class PriInt { + /*primary*/ public constructor PriInt() + + internal class object { + /*primary*/ private constructor () + } +} + +private final class PriPri { + /*primary*/ public constructor PriPri() + + private class object { + /*primary*/ private constructor () + } +} + +private final class PriPub { + /*primary*/ public constructor PriPub() + + public class object { + /*primary*/ private constructor () + } +} + +public final class PubInt { + /*primary*/ public constructor PubInt() + + internal class object { + /*primary*/ private constructor () + } +} + +public final class PubPri { + /*primary*/ public constructor PubPri() + + private class object { + /*primary*/ private constructor () + } +} + +public final class PubPub { + /*primary*/ public constructor PubPub() + + public class object { + /*primary*/ private constructor () + } +} diff --git a/compiler/tests/org/jetbrains/jet/descriptors/serialization/DescriptorSerializationTestGenerated.java b/compiler/tests/org/jetbrains/jet/descriptors/serialization/DescriptorSerializationTestGenerated.java index 24b7a47150a..60dfde0f3ce 100644 --- a/compiler/tests/org/jetbrains/jet/descriptors/serialization/DescriptorSerializationTestGenerated.java +++ b/compiler/tests/org/jetbrains/jet/descriptors/serialization/DescriptorSerializationTestGenerated.java @@ -259,6 +259,16 @@ public class DescriptorSerializationTestGenerated extends AbstractDescriptorSeri doTest("compiler/testData/loadKotlin/classObject/ClassObjectDeclaresVar.kt"); } + @TestMetadata("ClassObjectDefaultVisibility.kt") + public void testClassObjectDefaultVisibility() throws Exception { + doTest("compiler/testData/loadKotlin/classObject/ClassObjectDefaultVisibility.kt"); + } + + @TestMetadata("ClassObjectExplicitVisibility.kt") + public void testClassObjectExplicitVisibility() throws Exception { + doTest("compiler/testData/loadKotlin/classObject/ClassObjectExplicitVisibility.kt"); + } + @TestMetadata("ClassObjectExtendsTrait.kt") public void testClassObjectExtendsTrait() throws Exception { doTest("compiler/testData/loadKotlin/classObject/ClassObjectExtendsTrait.kt"); diff --git a/compiler/tests/org/jetbrains/jet/jvm/compiler/LoadCompiledKotlinTestGenerated.java b/compiler/tests/org/jetbrains/jet/jvm/compiler/LoadCompiledKotlinTestGenerated.java index 99469e8fba2..077945f69d3 100644 --- a/compiler/tests/org/jetbrains/jet/jvm/compiler/LoadCompiledKotlinTestGenerated.java +++ b/compiler/tests/org/jetbrains/jet/jvm/compiler/LoadCompiledKotlinTestGenerated.java @@ -415,6 +415,16 @@ public class LoadCompiledKotlinTestGenerated extends AbstractLoadCompiledKotlinT doTestWithAccessors("compiler/testData/loadKotlin/classObject/ClassObjectDeclaresVar.kt"); } + @TestMetadata("ClassObjectDefaultVisibility.kt") + public void testClassObjectDefaultVisibility() throws Exception { + doTestWithAccessors("compiler/testData/loadKotlin/classObject/ClassObjectDefaultVisibility.kt"); + } + + @TestMetadata("ClassObjectExplicitVisibility.kt") + public void testClassObjectExplicitVisibility() throws Exception { + doTestWithAccessors("compiler/testData/loadKotlin/classObject/ClassObjectExplicitVisibility.kt"); + } + @TestMetadata("ClassObjectExtendsTrait.kt") public void testClassObjectExtendsTrait() throws Exception { doTestWithAccessors("compiler/testData/loadKotlin/classObject/ClassObjectExtendsTrait.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 0a4734679b0..48ea102aa9e 100644 --- a/compiler/tests/org/jetbrains/jet/lang/resolve/lazy/LazyResolveNamespaceComparingTestGenerated.java +++ b/compiler/tests/org/jetbrains/jet/lang/resolve/lazy/LazyResolveNamespaceComparingTestGenerated.java @@ -417,6 +417,16 @@ public class LazyResolveNamespaceComparingTestGenerated extends AbstractLazyReso doTestCheckingPrimaryConstructorsAndAccessors("compiler/testData/loadKotlin/classObject/ClassObjectDeclaresVar.kt"); } + @TestMetadata("ClassObjectDefaultVisibility.kt") + public void testClassObjectDefaultVisibility() throws Exception { + doTestCheckingPrimaryConstructorsAndAccessors("compiler/testData/loadKotlin/classObject/ClassObjectDefaultVisibility.kt"); + } + + @TestMetadata("ClassObjectExplicitVisibility.kt") + public void testClassObjectExplicitVisibility() throws Exception { + doTestCheckingPrimaryConstructorsAndAccessors("compiler/testData/loadKotlin/classObject/ClassObjectExplicitVisibility.kt"); + } + @TestMetadata("ClassObjectExtendsTrait.kt") public void testClassObjectExtendsTrait() throws Exception { doTestCheckingPrimaryConstructorsAndAccessors("compiler/testData/loadKotlin/classObject/ClassObjectExtendsTrait.kt");