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) { if (declaration instanceof JetClassObject) {
// done earlier in order to have accessors // done earlier in order to have accessors
} }
else if (declaration instanceof JetEnumEntry && !((JetEnumEntry) declaration).hasPrimaryConstructor()) { else if (declaration instanceof JetEnumEntry) {
String name = declaration.getName(); String name = declaration.getName();
final String desc = "L" + typeMapper.mapType(descriptor.getDefaultType(), JetTypeMapperMode.IMPL).getInternalName() + ";"; 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); v.newField(declaration, ACC_PUBLIC | ACC_ENUM | ACC_STATIC | ACC_FINAL, name, desc, null, null);
@@ -203,15 +203,13 @@ public class DeclarationResolver {
@Override @Override
public void visitEnumEntry(JetEnumEntry enumEntry) { public void visitEnumEntry(JetEnumEntry enumEntry) {
if (enumEntry.getPrimaryConstructorParameterList() == null) { // FIX: Bad cast
// FIX: Bad cast MutableClassDescriptorLite classObjectDescriptor =
MutableClassDescriptorLite classObjectDescriptor = ((MutableClassDescriptorLite)namespaceLike.getOwnerForChildren()).getClassObjectDescriptor();
((MutableClassDescriptorLite)namespaceLike.getOwnerForChildren()).getClassObjectDescriptor(); assert classObjectDescriptor != null;
assert classObjectDescriptor != null; PropertyDescriptor propertyDescriptor = descriptorResolver.resolveObjectDeclarationAsPropertyDescriptor(
PropertyDescriptor propertyDescriptor = descriptorResolver.resolveObjectDeclarationAsPropertyDescriptor( classObjectDescriptor, enumEntry, context.getClasses().get(enumEntry), trace);
classObjectDescriptor, enumEntry, context.getClasses().get(enumEntry), trace); classObjectDescriptor.getBuilder().addPropertyDescriptor(propertyDescriptor);
classObjectDescriptor.getBuilder().addPropertyDescriptor(propertyDescriptor);
}
} }
}); });
} }
@@ -1028,7 +1028,7 @@ public class DescriptorResolver {
@NotNull JetClass classElement, @NotNull JetClass classElement,
BindingTrace trace BindingTrace trace
) { ) {
if (classDescriptor.getKind() == ClassKind.ENUM_ENTRY && !classElement.hasPrimaryConstructor()) return null; if (classDescriptor.getKind() == ClassKind.ENUM_ENTRY) return null;
return createConstructorDescriptor( return createConstructorDescriptor(
scope, scope,
classDescriptor, classDescriptor,
@@ -245,23 +245,7 @@ public class TypeHierarchyResolver {
MutableClassDescriptorLite classObjectDescriptor = ownerClassDescriptor.getClassObjectDescriptor(); MutableClassDescriptorLite classObjectDescriptor = ownerClassDescriptor.getClassObjectDescriptor();
assert classObjectDescriptor != null : enumEntry.getParent().getText(); assert classObjectDescriptor != null : enumEntry.getParent().getText();
if (enumEntry.getPrimaryConstructorParameterList() == null) { createClassDescriptorForEnumEntry(enumEntry, classObjectDescriptor.getBuilder());
// 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);
}
} }
@Override @Override
@@ -70,7 +70,7 @@ public abstract class AbstractLazyMemberScope<D extends DeclarationDescriptor, D
if (classOrObjectDeclaration == null) return null; if (classOrObjectDeclaration == null) return null;
// TODO: when enum entries with constructors are dropped, replace with declaresObjectOrEnumConstant() // 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, ClassDescriptor classDescriptor = new LazyClassDescriptor(resolveSession, thisDescriptor, name,
JetClassInfoUtil.createClassLikeInfo(classOrObjectDeclaration)); JetClassInfoUtil.createClassLikeInfo(classOrObjectDeclaration));
@@ -83,17 +83,10 @@ public abstract class AbstractLazyMemberScope<D extends DeclarationDescriptor, D
return classDescriptor; return classDescriptor;
} }
private static boolean mayDeclareObject(JetClassOrObject declaration) { private static boolean declaresObjectOrEnumConstant(JetClassOrObject declaration) {
return declaration instanceof JetObjectDeclaration || declaration instanceof JetEnumEntry; 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 @Override
public ClassifierDescriptor getClassifier(@NotNull Name name) { public ClassifierDescriptor getClassifier(@NotNull Name name) {
return getClassOrObjectDescriptor(classDescriptors, name, false); return getClassOrObjectDescriptor(classDescriptors, name, false);