diff --git a/src/main/java/bytecode/ClassCodeGen.java b/src/main/java/bytecode/ClassCodeGen.java index af003bc..a59a632 100644 --- a/src/main/java/bytecode/ClassCodeGen.java +++ b/src/main/java/bytecode/ClassCodeGen.java @@ -13,7 +13,8 @@ import java.io.IOException; public class ClassCodeGen { public void generateClassCode(ClassNode classNode) { ClassWriter classWriter = new ClassWriter(ClassWriter.COMPUTE_FRAMES | ClassWriter.COMPUTE_MAXS); - classWriter.visit(Opcodes.V1_8, Opcodes.ACC_PUBLIC, classNode.name, null, + Mapper mapper = new Mapper(); + classWriter.visit(Opcodes.V1_8, mapper.mapAccesTypeToOpcode(classNode.accessType), classNode.name, null, "java/lang/Object", null); for (MemberNode memberNode : classNode.members) { diff --git a/src/main/java/bytecode/FieldCodeGen.java b/src/main/java/bytecode/FieldCodeGen.java index abe7ebb..8dd6a99 100644 --- a/src/main/java/bytecode/FieldCodeGen.java +++ b/src/main/java/bytecode/FieldCodeGen.java @@ -8,6 +8,7 @@ import org.objectweb.asm.Opcodes; public class FieldCodeGen { public void generateFieldCode(ClassWriter classWriter, FieldNode fieldNode) { - FieldVisitor fieldVisitor = classWriter.visitField(Opcodes.ACC_PUBLIC, fieldNode.name, "", null, null); + Mapper mapper = new Mapper(); + FieldVisitor fieldVisitor = classWriter.visitField(mapper.mapAccesTypeToOpcode(fieldNode.accessTypeNode), fieldNode.name, "", null, null); } } diff --git a/src/main/java/bytecode/Mapper.java b/src/main/java/bytecode/Mapper.java new file mode 100644 index 0000000..872f8e1 --- /dev/null +++ b/src/main/java/bytecode/Mapper.java @@ -0,0 +1,17 @@ +package bytecode; + +import ast.AccessTypeNode; +import ast.EnumAccessTypeNode; +import org.objectweb.asm.Opcodes; + +public class Mapper { + public int mapAccesTypeToOpcode(AccessTypeNode type) { + switch (type.enumAccessTypeNode) { + case EnumAccessTypeNode.PUBLIC: + return Opcodes.ACC_PUBLIC; + case EnumAccessTypeNode.PRIVATE: + return Opcodes.ACC_PRIVATE; + } + return 0; + } +} diff --git a/src/main/java/bytecode/MethodCodeGen.java b/src/main/java/bytecode/MethodCodeGen.java index c7c1bd3..6f217ac 100644 --- a/src/main/java/bytecode/MethodCodeGen.java +++ b/src/main/java/bytecode/MethodCodeGen.java @@ -7,8 +7,9 @@ import org.objectweb.asm.Opcodes; public class MethodCodeGen { public void generateMethodCode(ClassWriter classWriter, MethodNode methodNode) { + Mapper mapper = new Mapper(); MethodVisitor constructor = - classWriter.visitMethod(Opcodes.ACC_PUBLIC, + classWriter.visitMethod(mapper.mapAccesTypeToOpcode(methodNode.visibility), "", "()V", null,