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();
}
JetMethodAnnotationWriter aw = JetMethodAnnotationWriter.visitAnnotation(mv);
BitSet kotlinFlags = new BitSet();
if (CodegenUtil.isInterface(functionDescriptor.getContainingDeclaration()) && modality != Modality.ABSTRACT) {
aw.writeFlags(modality == Modality.FINAL
? JvmStdlibNames.JET_METHOD_FLAG_FORCE_FINAL_BIT
: JvmStdlibNames.JET_METHOD_FLAG_FORCE_OPEN_BIT);
}
else {
aw.writeFlags();
kotlinFlags.set(modality == Modality.FINAL
? JvmStdlibNames.JET_METHOD_FLAG_FORCE_FINAL_BIT
: JvmStdlibNames.JET_METHOD_FLAG_FORCE_OPEN_BIT);
}
aw.writeFlags(kotlinFlags);
aw.writeNullableReturnType(functionDescriptor.getReturnType().isNullable());
aw.writeTypeParameters(jvmSignature.getKotlinTypeParameter());
aw.writeReturnType(jvmSignature.getKotlinReturnType());
@@ -776,16 +776,17 @@ public class ImplementationBodyCodegen extends ClassBodyCodegen {
JvmMethodSignature jvmSignature = typeMapper.mapToCallableMethod(inheritedFun, false, OwnerKind.IMPLEMENTATION).getSignature();
JetMethodAnnotationWriter aw = JetMethodAnnotationWriter.visitAnnotation(mv);
BitSet kotlinFlags = new BitSet();
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.writePropertyType(jvmSignature.getKotlinReturnType());
} else {
aw.writeFlags();
aw.writeNullableReturnType(fun.getReturnType().isNullable());
aw.writeTypeParameters(jvmSignature.getKotlinTypeParameter());
aw.writeReturnType(jvmSignature.getKotlinReturnType());
}
aw.writeFlags(kotlinFlags);
aw.visitEnd();
if (state.getClassBuilderMode() == ClassBuilderMode.STUBS) {
@@ -226,15 +226,14 @@ public class PropertyCodegen {
@NotNull PropertyDescriptor propertyDescriptor) {
JetMethodAnnotationWriter aw = JetMethodAnnotationWriter.visitAnnotation(mv);
Modality modality = propertyDescriptor.getModality();
BitSet flags = new BitSet();
flags.set(JvmStdlibNames.JET_METHOD_FLAG_PROPERTY_BIT);
if (CodegenUtil.isInterface(propertyDescriptor.getContainingDeclaration()) && modality != Modality.ABSTRACT) {
aw.writeFlags(JvmStdlibNames.JET_METHOD_FLAG_PROPERTY_BIT,
modality == Modality.FINAL
? JvmStdlibNames.JET_METHOD_FLAG_FORCE_FINAL_BIT
: JvmStdlibNames.JET_METHOD_FLAG_FORCE_OPEN_BIT);
}
else {
aw.writeFlags(JvmStdlibNames.JET_METHOD_FLAG_PROPERTY_BIT);
flags.set(modality == Modality.FINAL
? JvmStdlibNames.JET_METHOD_FLAG_FORCE_FINAL_BIT
: JvmStdlibNames.JET_METHOD_FLAG_FORCE_OPEN_BIT);
}
aw.writeFlags(flags);
aw.writeTypeParameters(typeParameters);
aw.writePropertyType(kotlinType);
aw.visitEnd();
@@ -33,15 +33,7 @@ public class JetMethodAnnotationWriter {
this.av = av;
}
public void writeFlags(int... flagBits) {
BitSet bitSet = new BitSet();
for (int bit : flagBits) {
bitSet.set(bit);
}
writeFlags(bitSet);
}
private void writeFlags(BitSet flags) {
public void writeFlags(BitSet flags) {
int flagsValue = 0;
for (int bit = 0; bit < flags.length(); bit++) {
if (flags.get(bit)) {