Serialize flags

This commit is contained in:
Alexey Tsvetkov
2015-10-16 16:18:53 +03:00
parent 8d22aabd9f
commit ea40f8af92
5 changed files with 37 additions and 6 deletions
@@ -212,6 +212,7 @@ public class DescriptorSerializer {
hasAnnotations, hasAnnotations,
descriptor.getVisibility(), descriptor.getVisibility(),
descriptor.getModality(), descriptor.getModality(),
false,
false false
); );
@@ -284,7 +285,8 @@ public class DescriptorSerializer {
int flags = Flags.getFunctionFlags( int flags = Flags.getFunctionFlags(
hasAnnotations(descriptor), descriptor.getVisibility(), descriptor.getModality(), descriptor.getKind(), hasAnnotations(descriptor), descriptor.getVisibility(), descriptor.getModality(), descriptor.getKind(),
descriptor.isOperator(), descriptor.isInfix() descriptor.isOperator(), descriptor.isInfix(), descriptor.isInline(), descriptor.isTailrec(),
descriptor.isExternal()
); );
if (flags != builder.getFlags()) { if (flags != builder.getFlags()) {
builder.setFlags(flags); builder.setFlags(flags);
@@ -356,7 +358,8 @@ public class DescriptorSerializer {
hasAnnotations(accessor), hasAnnotations(accessor),
accessor.getVisibility(), accessor.getVisibility(),
accessor.getModality(), accessor.getModality(),
!accessor.isDefault() !accessor.isDefault(),
accessor.isExternal()
); );
} }
@@ -364,7 +367,8 @@ public class DescriptorSerializer {
private ProtoBuf.ValueParameter.Builder valueParameter(@NotNull ValueParameterDescriptor descriptor) { private ProtoBuf.ValueParameter.Builder valueParameter(@NotNull ValueParameterDescriptor descriptor) {
ProtoBuf.ValueParameter.Builder builder = ProtoBuf.ValueParameter.newBuilder(); ProtoBuf.ValueParameter.Builder builder = ProtoBuf.ValueParameter.newBuilder();
int flags = Flags.getValueParameterFlags(hasAnnotations(descriptor), descriptor.declaresDefaultValue()); int flags = Flags.getValueParameterFlags(hasAnnotations(descriptor), descriptor.declaresDefaultValue(),
descriptor.isCrossinline(), descriptor.isNoinline());
if (flags != builder.getFlags()) { if (flags != builder.getFlags()) {
builder.setFlags(flags); builder.setFlags(flags);
} }
@@ -45,4 +45,10 @@ public interface FunctionDescriptor extends CallableMemberDescriptor {
boolean isOperator(); boolean isOperator();
boolean isInfix(); boolean isInfix();
boolean isInline();
boolean isTailrec();
boolean isExternal();
} }
@@ -45,4 +45,6 @@ public interface PropertyAccessorDescriptor extends FunctionDescriptor {
Kind kind, Kind kind,
boolean copyOverrides boolean copyOverrides
); );
boolean isExternal();
} }
@@ -59,4 +59,8 @@ public interface ValueParameterDescriptor extends VariableDescriptor, ParameterD
@NotNull @NotNull
@Override @Override
Collection<? extends ValueParameterDescriptor> getOverriddenDescriptors(); Collection<? extends ValueParameterDescriptor> getOverriddenDescriptors();
boolean isCrossinline();
boolean isNoinline();
} }
@@ -143,7 +143,10 @@ public class Flags {
@NotNull Modality modality, @NotNull Modality modality,
@NotNull CallableMemberDescriptor.Kind memberKind, @NotNull CallableMemberDescriptor.Kind memberKind,
boolean isOperator, boolean isOperator,
boolean isInfix boolean isInfix,
boolean isInline,
boolean isTailrec,
boolean isExternal
) { ) {
return HAS_ANNOTATIONS.toFlags(hasAnnotations) return HAS_ANNOTATIONS.toFlags(hasAnnotations)
| VISIBILITY.toFlags(visibility(visibility)) | VISIBILITY.toFlags(visibility(visibility))
@@ -151,6 +154,9 @@ public class Flags {
| MEMBER_KIND.toFlags(memberKind(memberKind)) | MEMBER_KIND.toFlags(memberKind(memberKind))
| IS_OPERATOR.toFlags(isOperator) | IS_OPERATOR.toFlags(isOperator)
| IS_INFIX.toFlags(isInfix) | IS_INFIX.toFlags(isInfix)
| IS_INLINE.toFlags(isInline)
| IS_TAILREC.toFlags(isTailrec)
| IS_EXTERNAL_FUNCTION.toFlags(isExternal)
; ;
} }
@@ -183,12 +189,14 @@ public class Flags {
boolean hasAnnotations, boolean hasAnnotations,
@NotNull Visibility visibility, @NotNull Visibility visibility,
@NotNull Modality modality, @NotNull Modality modality,
boolean isNotDefault boolean isNotDefault,
boolean isExternal
) { ) {
return HAS_ANNOTATIONS.toFlags(hasAnnotations) return HAS_ANNOTATIONS.toFlags(hasAnnotations)
| MODALITY.toFlags(modality(modality)) | MODALITY.toFlags(modality(modality))
| VISIBILITY.toFlags(visibility(visibility)) | VISIBILITY.toFlags(visibility(visibility))
| IS_NOT_DEFAULT.toFlags(isNotDefault) | IS_NOT_DEFAULT.toFlags(isNotDefault)
| IS_EXTERNAL_ACCESSOR.toFlags(isExternal)
; ;
} }
@@ -245,9 +253,16 @@ public class Flags {
throw new IllegalArgumentException("Unknown member kind: " + kind); throw new IllegalArgumentException("Unknown member kind: " + kind);
} }
public static int getValueParameterFlags(boolean hasAnnotations, boolean declaresDefaultValue) { public static int getValueParameterFlags(
boolean hasAnnotations,
boolean declaresDefaultValue,
boolean isCrossinline,
boolean isNoinline
) {
return HAS_ANNOTATIONS.toFlags(hasAnnotations) return HAS_ANNOTATIONS.toFlags(hasAnnotations)
| DECLARES_DEFAULT_VALUE.toFlags(declaresDefaultValue) | DECLARES_DEFAULT_VALUE.toFlags(declaresDefaultValue)
| IS_CROSSINLINE.toFlags(isCrossinline)
| IS_NOINLINE.toFlags(isNoinline)
; ;
} }