Fix default visibility for class object in eager and lazy resolve
This commit is contained in:
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
@@ -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<TypeParameterDescriptor>(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));
|
||||
|
||||
@@ -0,0 +1,14 @@
|
||||
package test
|
||||
|
||||
public class Pub {
|
||||
class object {}
|
||||
}
|
||||
|
||||
private class Pri {
|
||||
class object {}
|
||||
}
|
||||
|
||||
class Int {
|
||||
class object {}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,25 @@
|
||||
package test
|
||||
|
||||
internal final class Int {
|
||||
/*primary*/ public constructor Int()
|
||||
|
||||
internal class object <class-object-for-Int> {
|
||||
/*primary*/ private constructor <class-object-for-Int>()
|
||||
}
|
||||
}
|
||||
|
||||
private final class Pri {
|
||||
/*primary*/ public constructor Pri()
|
||||
|
||||
private class object <class-object-for-Pri> {
|
||||
/*primary*/ private constructor <class-object-for-Pri>()
|
||||
}
|
||||
}
|
||||
|
||||
public final class Pub {
|
||||
/*primary*/ public constructor Pub()
|
||||
|
||||
public class object <class-object-for-Pub> {
|
||||
/*primary*/ private constructor <class-object-for-Pub>()
|
||||
}
|
||||
}
|
||||
@@ -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 {}
|
||||
}
|
||||
@@ -0,0 +1,73 @@
|
||||
package test
|
||||
|
||||
internal final class IntInt {
|
||||
/*primary*/ public constructor IntInt()
|
||||
|
||||
internal class object <class-object-for-IntInt> {
|
||||
/*primary*/ private constructor <class-object-for-IntInt>()
|
||||
}
|
||||
}
|
||||
|
||||
internal final class IntPri {
|
||||
/*primary*/ public constructor IntPri()
|
||||
|
||||
private class object <class-object-for-IntPri> {
|
||||
/*primary*/ private constructor <class-object-for-IntPri>()
|
||||
}
|
||||
}
|
||||
|
||||
internal final class IntPub {
|
||||
/*primary*/ public constructor IntPub()
|
||||
|
||||
public class object <class-object-for-IntPub> {
|
||||
/*primary*/ private constructor <class-object-for-IntPub>()
|
||||
}
|
||||
}
|
||||
|
||||
private final class PriInt {
|
||||
/*primary*/ public constructor PriInt()
|
||||
|
||||
internal class object <class-object-for-PriInt> {
|
||||
/*primary*/ private constructor <class-object-for-PriInt>()
|
||||
}
|
||||
}
|
||||
|
||||
private final class PriPri {
|
||||
/*primary*/ public constructor PriPri()
|
||||
|
||||
private class object <class-object-for-PriPri> {
|
||||
/*primary*/ private constructor <class-object-for-PriPri>()
|
||||
}
|
||||
}
|
||||
|
||||
private final class PriPub {
|
||||
/*primary*/ public constructor PriPub()
|
||||
|
||||
public class object <class-object-for-PriPub> {
|
||||
/*primary*/ private constructor <class-object-for-PriPub>()
|
||||
}
|
||||
}
|
||||
|
||||
public final class PubInt {
|
||||
/*primary*/ public constructor PubInt()
|
||||
|
||||
internal class object <class-object-for-PubInt> {
|
||||
/*primary*/ private constructor <class-object-for-PubInt>()
|
||||
}
|
||||
}
|
||||
|
||||
public final class PubPri {
|
||||
/*primary*/ public constructor PubPri()
|
||||
|
||||
private class object <class-object-for-PubPri> {
|
||||
/*primary*/ private constructor <class-object-for-PubPri>()
|
||||
}
|
||||
}
|
||||
|
||||
public final class PubPub {
|
||||
/*primary*/ public constructor PubPub()
|
||||
|
||||
public class object <class-object-for-PubPub> {
|
||||
/*primary*/ private constructor <class-object-for-PubPub>()
|
||||
}
|
||||
}
|
||||
+10
@@ -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");
|
||||
|
||||
@@ -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");
|
||||
|
||||
+10
@@ -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");
|
||||
|
||||
Reference in New Issue
Block a user