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:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user