KT-2704 Remove support for enum-entry constructor generation in the front-end code

#KT-2704 Fixed
This commit is contained in:
Andrey Breslav
2012-08-30 15:23:38 +04:00
parent a45bae63ab
commit 42bf62f870
5 changed files with 12 additions and 37 deletions
@@ -1047,7 +1047,7 @@ public class ImplementationBodyCodegen extends ClassBodyCodegen {
if (declaration instanceof JetClassObject) {
// done earlier in order to have accessors
}
else if (declaration instanceof JetEnumEntry && !((JetEnumEntry) declaration).hasPrimaryConstructor()) {
else if (declaration instanceof JetEnumEntry) {
String name = declaration.getName();
final String desc = "L" + typeMapper.mapType(descriptor.getDefaultType(), JetTypeMapperMode.IMPL).getInternalName() + ";";
v.newField(declaration, ACC_PUBLIC | ACC_ENUM | ACC_STATIC | ACC_FINAL, name, desc, null, null);
@@ -203,15 +203,13 @@ public class DeclarationResolver {
@Override
public void visitEnumEntry(JetEnumEntry enumEntry) {
if (enumEntry.getPrimaryConstructorParameterList() == null) {
// FIX: Bad cast
MutableClassDescriptorLite classObjectDescriptor =
((MutableClassDescriptorLite)namespaceLike.getOwnerForChildren()).getClassObjectDescriptor();
assert classObjectDescriptor != null;
PropertyDescriptor propertyDescriptor = descriptorResolver.resolveObjectDeclarationAsPropertyDescriptor(
classObjectDescriptor, enumEntry, context.getClasses().get(enumEntry), trace);
classObjectDescriptor.getBuilder().addPropertyDescriptor(propertyDescriptor);
}
// FIX: Bad cast
MutableClassDescriptorLite classObjectDescriptor =
((MutableClassDescriptorLite)namespaceLike.getOwnerForChildren()).getClassObjectDescriptor();
assert classObjectDescriptor != null;
PropertyDescriptor propertyDescriptor = descriptorResolver.resolveObjectDeclarationAsPropertyDescriptor(
classObjectDescriptor, enumEntry, context.getClasses().get(enumEntry), trace);
classObjectDescriptor.getBuilder().addPropertyDescriptor(propertyDescriptor);
}
});
}
@@ -1028,7 +1028,7 @@ public class DescriptorResolver {
@NotNull JetClass classElement,
BindingTrace trace
) {
if (classDescriptor.getKind() == ClassKind.ENUM_ENTRY && !classElement.hasPrimaryConstructor()) return null;
if (classDescriptor.getKind() == ClassKind.ENUM_ENTRY) return null;
return createConstructorDescriptor(
scope,
classDescriptor,
@@ -245,23 +245,7 @@ public class TypeHierarchyResolver {
MutableClassDescriptorLite classObjectDescriptor = ownerClassDescriptor.getClassObjectDescriptor();
assert classObjectDescriptor != null : enumEntry.getParent().getText();
if (enumEntry.getPrimaryConstructorParameterList() == null) {
// Simple enum entry
createClassDescriptorForEnumEntry(enumEntry, classObjectDescriptor.getBuilder());
}
else {
// Advanced enum entry like "Cons<out T>(val head : T, val tail : List<T>) : List<T>(tail.size + 1)"
MutableClassDescriptor mutableClassDescriptor = new MutableClassDescriptor(
classObjectDescriptor, outerScope, ClassKind.ENUM_ENTRY, JetPsiUtil.safeName(enumEntry.getName()));
context.getClasses().put(enumEntry, mutableClassDescriptor);
JetScope classScope = mutableClassDescriptor.getScopeForMemberResolution();
prepareForDeferredCall(classScope, mutableClassDescriptor, enumEntry);
classObjectDescriptor.getBuilder().addObjectDescriptor(mutableClassDescriptor);
}
createClassDescriptorForEnumEntry(enumEntry, classObjectDescriptor.getBuilder());
}
@Override
@@ -70,7 +70,7 @@ public abstract class AbstractLazyMemberScope<D extends DeclarationDescriptor, D
if (classOrObjectDeclaration == null) return null;
// TODO: when enum entries with constructors are dropped, replace with declaresObjectOrEnumConstant()
if (object != mayDeclareObject(classOrObjectDeclaration)) return null;
if (object != declaresObjectOrEnumConstant(classOrObjectDeclaration)) return null;
ClassDescriptor classDescriptor = new LazyClassDescriptor(resolveSession, thisDescriptor, name,
JetClassInfoUtil.createClassLikeInfo(classOrObjectDeclaration));
@@ -83,17 +83,10 @@ public abstract class AbstractLazyMemberScope<D extends DeclarationDescriptor, D
return classDescriptor;
}
private static boolean mayDeclareObject(JetClassOrObject declaration) {
private static boolean declaresObjectOrEnumConstant(JetClassOrObject declaration) {
return declaration instanceof JetObjectDeclaration || declaration instanceof JetEnumEntry;
}
protected static boolean declaresObjectOrEnumConstant(JetClassOrObject declaration) {
if (declaration instanceof JetObjectDeclaration) {
return true;
}
return declaration instanceof JetEnumEntry && !declaration.hasPrimaryConstructor();
}
@Override
public ClassifierDescriptor getClassifier(@NotNull Name name) {
return getClassOrObjectDescriptor(classDescriptors, name, false);