Don't serialize default primary constructors

Drop "Callable primary_constructor" field, because it requires serializer to
serialize the fact that a class has a primary constructor. Default primary
constructors for objects etc. may not be serialized, because they can be
re-created trivially when they're loaded. There are three options: a class
doesn't have a primary constructor, a class has a default primary constructor,
a class has a custom primary constructor. This explains the change in
descriptors.proto
This commit is contained in:
Alexander Udalov
2013-11-01 17:12:33 +04:00
parent 606b3aa4a9
commit 008e5f0b13
71 changed files with 724 additions and 245 deletions
@@ -35,6 +35,14 @@ public class DescriptorFactory {
public static final Name VALUE_OF_METHOD_NAME = Name.identifier("valueOf");
public static final Name VALUES_METHOD_NAME = Name.identifier("values");
private static class DefaultConstructorDescriptor extends ConstructorDescriptorImpl {
public DefaultConstructorDescriptor(@NotNull ClassDescriptor containingClass) {
super(containingClass, Collections.<AnnotationDescriptor>emptyList(), true);
initialize(Collections.<TypeParameterDescriptor>emptyList(), Collections.<ValueParameterDescriptor>emptyList(),
getDefaultConstructorVisibility(containingClass));
}
}
private DescriptorFactory() {
}
@@ -68,12 +76,11 @@ public class DescriptorFactory {
@NotNull
public static ConstructorDescriptorImpl createPrimaryConstructorForObject(@NotNull ClassDescriptor containingClass) {
ConstructorDescriptorImpl constructorDescriptor =
new ConstructorDescriptorImpl(containingClass, Collections.<AnnotationDescriptor>emptyList(), true);
constructorDescriptor.initialize(Collections.<TypeParameterDescriptor>emptyList(),
Collections.<ValueParameterDescriptor>emptyList(),
getDefaultConstructorVisibility(containingClass));
return constructorDescriptor;
return new DefaultConstructorDescriptor(containingClass);
}
public static boolean isDefaultPrimaryConstructor(@NotNull ConstructorDescriptor constructor) {
return constructor instanceof DefaultConstructorDescriptor;
}
@NotNull