KT-2704 Remove support for enum-entry constructor generation in the front-end code
#KT-2704 Fixed
This commit is contained in:
@@ -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
|
||||
|
||||
+2
-9
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user