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,
descriptor.getVisibility(),
descriptor.getModality(),
false,
false
);
@@ -284,7 +285,8 @@ public class DescriptorSerializer {
int flags = Flags.getFunctionFlags(
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()) {
builder.setFlags(flags);
@@ -356,7 +358,8 @@ public class DescriptorSerializer {
hasAnnotations(accessor),
accessor.getVisibility(),
accessor.getModality(),
!accessor.isDefault()
!accessor.isDefault(),
accessor.isExternal()
);
}
@@ -364,7 +367,8 @@ public class DescriptorSerializer {
private ProtoBuf.ValueParameter.Builder valueParameter(@NotNull ValueParameterDescriptor descriptor) {
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()) {
builder.setFlags(flags);
}
@@ -45,4 +45,10 @@ public interface FunctionDescriptor extends CallableMemberDescriptor {
boolean isOperator();
boolean isInfix();
boolean isInline();
boolean isTailrec();
boolean isExternal();
}
@@ -45,4 +45,6 @@ public interface PropertyAccessorDescriptor extends FunctionDescriptor {
Kind kind,
boolean copyOverrides
);
boolean isExternal();
}
@@ -59,4 +59,8 @@ public interface ValueParameterDescriptor extends VariableDescriptor, ParameterD
@NotNull
@Override
Collection<? extends ValueParameterDescriptor> getOverriddenDescriptors();
boolean isCrossinline();
boolean isNoinline();
}
@@ -143,7 +143,10 @@ public class Flags {
@NotNull Modality modality,
@NotNull CallableMemberDescriptor.Kind memberKind,
boolean isOperator,
boolean isInfix
boolean isInfix,
boolean isInline,
boolean isTailrec,
boolean isExternal
) {
return HAS_ANNOTATIONS.toFlags(hasAnnotations)
| VISIBILITY.toFlags(visibility(visibility))
@@ -151,6 +154,9 @@ public class Flags {
| MEMBER_KIND.toFlags(memberKind(memberKind))
| IS_OPERATOR.toFlags(isOperator)
| 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,
@NotNull Visibility visibility,
@NotNull Modality modality,
boolean isNotDefault
boolean isNotDefault,
boolean isExternal
) {
return HAS_ANNOTATIONS.toFlags(hasAnnotations)
| MODALITY.toFlags(modality(modality))
| VISIBILITY.toFlags(visibility(visibility))
| IS_NOT_DEFAULT.toFlags(isNotDefault)
| IS_EXTERNAL_ACCESSOR.toFlags(isExternal)
;
}
@@ -245,9 +253,16 @@ public class Flags {
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)
| DECLARES_DEFAULT_VALUE.toFlags(declaresDefaultValue)
| IS_CROSSINLINE.toFlags(isCrossinline)
| IS_NOINLINE.toFlags(isNoinline)
;
}