diff --git a/compiler/serialization/src/org/jetbrains/kotlin/serialization/DescriptorSerializer.java b/compiler/serialization/src/org/jetbrains/kotlin/serialization/DescriptorSerializer.java index 5e0df5a2f04..c87c51e8cca 100644 --- a/compiler/serialization/src/org/jetbrains/kotlin/serialization/DescriptorSerializer.java +++ b/compiler/serialization/src/org/jetbrains/kotlin/serialization/DescriptorSerializer.java @@ -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); } diff --git a/core/descriptors/src/org/jetbrains/kotlin/descriptors/FunctionDescriptor.java b/core/descriptors/src/org/jetbrains/kotlin/descriptors/FunctionDescriptor.java index 605a0aa52ae..320fb1a4331 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/descriptors/FunctionDescriptor.java +++ b/core/descriptors/src/org/jetbrains/kotlin/descriptors/FunctionDescriptor.java @@ -45,4 +45,10 @@ public interface FunctionDescriptor extends CallableMemberDescriptor { boolean isOperator(); boolean isInfix(); + + boolean isInline(); + + boolean isTailrec(); + + boolean isExternal(); } diff --git a/core/descriptors/src/org/jetbrains/kotlin/descriptors/PropertyAccessorDescriptor.java b/core/descriptors/src/org/jetbrains/kotlin/descriptors/PropertyAccessorDescriptor.java index 12786105e17..9b1d223eb43 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/descriptors/PropertyAccessorDescriptor.java +++ b/core/descriptors/src/org/jetbrains/kotlin/descriptors/PropertyAccessorDescriptor.java @@ -45,4 +45,6 @@ public interface PropertyAccessorDescriptor extends FunctionDescriptor { Kind kind, boolean copyOverrides ); + + boolean isExternal(); } diff --git a/core/descriptors/src/org/jetbrains/kotlin/descriptors/ValueParameterDescriptor.java b/core/descriptors/src/org/jetbrains/kotlin/descriptors/ValueParameterDescriptor.java index 2893a7e988c..569ce1b7f98 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/descriptors/ValueParameterDescriptor.java +++ b/core/descriptors/src/org/jetbrains/kotlin/descriptors/ValueParameterDescriptor.java @@ -59,4 +59,8 @@ public interface ValueParameterDescriptor extends VariableDescriptor, ParameterD @NotNull @Override Collection getOverriddenDescriptors(); + + boolean isCrossinline(); + + boolean isNoinline(); } diff --git a/core/deserialization/src/org/jetbrains/kotlin/serialization/Flags.java b/core/deserialization/src/org/jetbrains/kotlin/serialization/Flags.java index 9c8e49dae57..941112fd169 100644 --- a/core/deserialization/src/org/jetbrains/kotlin/serialization/Flags.java +++ b/core/deserialization/src/org/jetbrains/kotlin/serialization/Flags.java @@ -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) ; }