Constructors for enum entries and class objects have private visibility in frontend.

Introduce DescriptorUtils#getDefaultConstructorVisibility.
DescriptorResolver: remove exception wrapping.
Hardcode package-private visibility for enum entries in JetTypeMapper.

Refactoring:
DescriptorResolver: rename createPrimaryConstructorForObject -> createAndRecordPrimaryConstructorForObject, createPrimaryConstructorForObject now a separate method.
JavaDescriptorResolver: extract containingDeclaration variable.
JetTypeMapper: rename variable declaration -> containingDeclaration.
This commit is contained in:
Pavel V. Talanov
2012-08-28 16:56:23 +04:00
parent bb3bef41ce
commit 00a12bd013
6 changed files with 67 additions and 44 deletions
@@ -44,6 +44,8 @@ import java.util.List;
import java.util.Map;
import static org.jetbrains.asm4.Opcodes.*;
import static org.jetbrains.jet.lang.resolve.DescriptorUtils.isClassObject;
import static org.jetbrains.jet.lang.resolve.DescriptorUtils.isEnumEntry;
import static org.jetbrains.jet.codegen.context.CodegenBinding.*;
import static org.jetbrains.jet.lang.resolve.BindingContextUtils.descriptorToDeclaration;
@@ -980,8 +982,8 @@ public class JetTypeMapper {
public static int getAccessModifiers(@NotNull MemberDescriptor p, int defaultFlags) {
DeclarationDescriptor declaration = p.getContainingDeclaration();
if (CodegenUtil.isInterface(declaration)) {
DeclarationDescriptor containingDeclaration = p.getContainingDeclaration();
if (CodegenUtil.isInterface(containingDeclaration)) {
return ACC_PUBLIC;
}
if (p.getVisibility() == Visibilities.PUBLIC) {
@@ -991,10 +993,13 @@ public class JetTypeMapper {
return ACC_PROTECTED;
}
else if (p.getVisibility() == Visibilities.PRIVATE) {
if (DescriptorUtils.isClassObject(declaration)) {
if (isClassObject(containingDeclaration)) {
return defaultFlags;
}
if (p.getContainingDeclaration() instanceof NamespaceDescriptor) {
if (p instanceof ConstructorDescriptor && isEnumEntry(containingDeclaration)) {
return 0;
}
if (containingDeclaration instanceof NamespaceDescriptor) {
return 0;
}
return ACC_PRIVATE;