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) {
|
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
|
||||||
|
|||||||
+2
-9
@@ -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);
|
||||||
|
|||||||
Reference in New Issue
Block a user