[FE] Allow declare sealed class inheritors in different files in one module
#KT-13495
This commit is contained in:
committed by
TeamCityServer
parent
1a377069dd
commit
f5f1984a60
@@ -35,10 +35,14 @@ import static org.jetbrains.kotlin.resolve.descriptorUtil.DescriptorUtilsKt.getB
|
||||
|
||||
public class DescriptorFactory {
|
||||
private static class DefaultClassConstructorDescriptor extends ClassConstructorDescriptorImpl {
|
||||
public DefaultClassConstructorDescriptor(@NotNull ClassDescriptor containingClass, @NotNull SourceElement source) {
|
||||
public DefaultClassConstructorDescriptor(
|
||||
@NotNull ClassDescriptor containingClass,
|
||||
@NotNull SourceElement source,
|
||||
boolean freedomForSealedInterfacesSupported
|
||||
) {
|
||||
super(containingClass, null, Annotations.Companion.getEMPTY(), true, Kind.DECLARATION, source);
|
||||
initialize(Collections.<ValueParameterDescriptor>emptyList(),
|
||||
getDefaultConstructorVisibility(containingClass));
|
||||
getDefaultConstructorVisibility(containingClass, freedomForSealedInterfacesSupported));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -130,7 +134,11 @@ public class DescriptorFactory {
|
||||
@NotNull ClassDescriptor containingClass,
|
||||
@NotNull SourceElement source
|
||||
) {
|
||||
return new DefaultClassConstructorDescriptor(containingClass, source);
|
||||
/*
|
||||
* Language version settings are needed here only for computing default visibility of constructors of sealed classes
|
||||
* Since object can not be sealed class it's OK to pass default settings here
|
||||
*/
|
||||
return new DefaultClassConstructorDescriptor(containingClass, source, false);
|
||||
}
|
||||
|
||||
@NotNull
|
||||
|
||||
@@ -380,11 +380,21 @@ public class DescriptorUtils {
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public static DescriptorVisibility getDefaultConstructorVisibility(@NotNull ClassDescriptor classDescriptor) {
|
||||
public static DescriptorVisibility getDefaultConstructorVisibility(
|
||||
@NotNull ClassDescriptor classDescriptor,
|
||||
boolean freedomForSealedInterfacesSupported
|
||||
) {
|
||||
ClassKind classKind = classDescriptor.getKind();
|
||||
if (classKind == ClassKind.ENUM_CLASS || classKind.isSingleton() || isSealedClass(classDescriptor)) {
|
||||
if (classKind == ClassKind.ENUM_CLASS || classKind.isSingleton()) {
|
||||
return DescriptorVisibilities.PRIVATE;
|
||||
}
|
||||
if (isSealedClass(classDescriptor)) {
|
||||
if (freedomForSealedInterfacesSupported) {
|
||||
return DescriptorVisibilities.INTERNAL;
|
||||
} else {
|
||||
return DescriptorVisibilities.PRIVATE;
|
||||
}
|
||||
}
|
||||
if (isAnonymousObject(classDescriptor)) {
|
||||
return DescriptorVisibilities.DEFAULT_VISIBILITY;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user