Made JetMethodAnnotationWriter.writeFlags(BitSet) back public, since it is more convenient.

This commit is contained in:
Evgeny Gerashchenko
2012-06-09 20:31:07 +04:00
parent 7b71e192ec
commit 370f648140
4 changed files with 15 additions and 24 deletions
@@ -139,14 +139,13 @@ public class FunctionCodegen {
throw new IllegalStateException(); throw new IllegalStateException();
} }
JetMethodAnnotationWriter aw = JetMethodAnnotationWriter.visitAnnotation(mv); JetMethodAnnotationWriter aw = JetMethodAnnotationWriter.visitAnnotation(mv);
BitSet kotlinFlags = new BitSet();
if (CodegenUtil.isInterface(functionDescriptor.getContainingDeclaration()) && modality != Modality.ABSTRACT) { if (CodegenUtil.isInterface(functionDescriptor.getContainingDeclaration()) && modality != Modality.ABSTRACT) {
aw.writeFlags(modality == Modality.FINAL kotlinFlags.set(modality == Modality.FINAL
? JvmStdlibNames.JET_METHOD_FLAG_FORCE_FINAL_BIT ? JvmStdlibNames.JET_METHOD_FLAG_FORCE_FINAL_BIT
: JvmStdlibNames.JET_METHOD_FLAG_FORCE_OPEN_BIT); : JvmStdlibNames.JET_METHOD_FLAG_FORCE_OPEN_BIT);
}
else {
aw.writeFlags();
} }
aw.writeFlags(kotlinFlags);
aw.writeNullableReturnType(functionDescriptor.getReturnType().isNullable()); aw.writeNullableReturnType(functionDescriptor.getReturnType().isNullable());
aw.writeTypeParameters(jvmSignature.getKotlinTypeParameter()); aw.writeTypeParameters(jvmSignature.getKotlinTypeParameter());
aw.writeReturnType(jvmSignature.getKotlinReturnType()); aw.writeReturnType(jvmSignature.getKotlinReturnType());
@@ -776,16 +776,17 @@ public class ImplementationBodyCodegen extends ClassBodyCodegen {
JvmMethodSignature jvmSignature = typeMapper.mapToCallableMethod(inheritedFun, false, OwnerKind.IMPLEMENTATION).getSignature(); JvmMethodSignature jvmSignature = typeMapper.mapToCallableMethod(inheritedFun, false, OwnerKind.IMPLEMENTATION).getSignature();
JetMethodAnnotationWriter aw = JetMethodAnnotationWriter.visitAnnotation(mv); JetMethodAnnotationWriter aw = JetMethodAnnotationWriter.visitAnnotation(mv);
BitSet kotlinFlags = new BitSet();
if (fun instanceof PropertyAccessorDescriptor) { if (fun instanceof PropertyAccessorDescriptor) {
aw.writeFlags(JvmStdlibNames.JET_METHOD_FLAG_PROPERTY_BIT); kotlinFlags.set(JvmStdlibNames.JET_METHOD_FLAG_PROPERTY_BIT);
aw.writeTypeParameters(jvmSignature.getKotlinTypeParameter()); aw.writeTypeParameters(jvmSignature.getKotlinTypeParameter());
aw.writePropertyType(jvmSignature.getKotlinReturnType()); aw.writePropertyType(jvmSignature.getKotlinReturnType());
} else { } else {
aw.writeFlags();
aw.writeNullableReturnType(fun.getReturnType().isNullable()); aw.writeNullableReturnType(fun.getReturnType().isNullable());
aw.writeTypeParameters(jvmSignature.getKotlinTypeParameter()); aw.writeTypeParameters(jvmSignature.getKotlinTypeParameter());
aw.writeReturnType(jvmSignature.getKotlinReturnType()); aw.writeReturnType(jvmSignature.getKotlinReturnType());
} }
aw.writeFlags(kotlinFlags);
aw.visitEnd(); aw.visitEnd();
if (state.getClassBuilderMode() == ClassBuilderMode.STUBS) { if (state.getClassBuilderMode() == ClassBuilderMode.STUBS) {
@@ -226,15 +226,14 @@ public class PropertyCodegen {
@NotNull PropertyDescriptor propertyDescriptor) { @NotNull PropertyDescriptor propertyDescriptor) {
JetMethodAnnotationWriter aw = JetMethodAnnotationWriter.visitAnnotation(mv); JetMethodAnnotationWriter aw = JetMethodAnnotationWriter.visitAnnotation(mv);
Modality modality = propertyDescriptor.getModality(); Modality modality = propertyDescriptor.getModality();
BitSet flags = new BitSet();
flags.set(JvmStdlibNames.JET_METHOD_FLAG_PROPERTY_BIT);
if (CodegenUtil.isInterface(propertyDescriptor.getContainingDeclaration()) && modality != Modality.ABSTRACT) { if (CodegenUtil.isInterface(propertyDescriptor.getContainingDeclaration()) && modality != Modality.ABSTRACT) {
aw.writeFlags(JvmStdlibNames.JET_METHOD_FLAG_PROPERTY_BIT, flags.set(modality == Modality.FINAL
modality == Modality.FINAL ? JvmStdlibNames.JET_METHOD_FLAG_FORCE_FINAL_BIT
? JvmStdlibNames.JET_METHOD_FLAG_FORCE_FINAL_BIT : JvmStdlibNames.JET_METHOD_FLAG_FORCE_OPEN_BIT);
: JvmStdlibNames.JET_METHOD_FLAG_FORCE_OPEN_BIT);
}
else {
aw.writeFlags(JvmStdlibNames.JET_METHOD_FLAG_PROPERTY_BIT);
} }
aw.writeFlags(flags);
aw.writeTypeParameters(typeParameters); aw.writeTypeParameters(typeParameters);
aw.writePropertyType(kotlinType); aw.writePropertyType(kotlinType);
aw.visitEnd(); aw.visitEnd();
@@ -33,15 +33,7 @@ public class JetMethodAnnotationWriter {
this.av = av; this.av = av;
} }
public void writeFlags(int... flagBits) { public void writeFlags(BitSet flags) {
BitSet bitSet = new BitSet();
for (int bit : flagBits) {
bitSet.set(bit);
}
writeFlags(bitSet);
}
private void writeFlags(BitSet flags) {
int flagsValue = 0; int flagsValue = 0;
for (int bit = 0; bit < flags.length(); bit++) { for (int bit = 0; bit < flags.length(); bit++) {
if (flags.get(bit)) { if (flags.get(bit)) {