reading abstract and final modifiers from binary classes

This commit is contained in:
Stepan Koltsov
2011-12-21 00:07:00 +04:00
parent c858de758e
commit 0655a5de85
5 changed files with 45 additions and 6 deletions
@@ -68,6 +68,10 @@ public class FunctionCodegen {
{
flags |= ACC_VARARGS;
}
if (functionDescriptor.getModality() == Modality.FINAL) {
flags |= ACC_FINAL;
}
OwnerKind kind = context.getContextKind();
@@ -47,19 +47,33 @@ public class ImplementationBodyCodegen extends ClassBodyCodegen {
boolean isAbstract = false;
boolean isInterface = false;
boolean isFinal = false;
if(myClass instanceof JetClass) {
if(((JetClass) myClass).hasModifier(JetTokens.ABSTRACT_KEYWORD))
JetClass jetClass = (JetClass) myClass;
if (jetClass.hasModifier(JetTokens.ABSTRACT_KEYWORD))
isAbstract = true;
if(((JetClass) myClass).isTrait()) {
if (jetClass.isTrait()) {
isAbstract = true;
isInterface = true;
}
if (!jetClass.hasModifier(JetTokens.OPEN_KEYWORD)) {
isFinal = true;
}
}
int access = 0;
access |= Opcodes.ACC_PUBLIC;
if (isAbstract) {
access |= Opcodes.ACC_ABSTRACT;
}
if (isInterface) {
access |= Opcodes.ACC_INTERFACE; // ACC_SUPER
}
if (isFinal) {
access |= Opcodes.ACC_FINAL;
}
v.defineClass(myClass, Opcodes.V1_6,
Opcodes.ACC_PUBLIC | (isAbstract ? Opcodes.ACC_ABSTRACT : 0) | (isInterface
? Opcodes.ACC_INTERFACE
: 0/*Opcodes.ACC_SUPER*/),
access,
signature.getName(),
signature.getJavaGenericSignature(),
signature.getSuperclassName(),