package me.august.lumen.compile.parser.ast;
import me.august.lumen.common.ModifierSet;
import me.august.lumen.compile.codegen.BuildContext;
import me.august.lumen.compile.codegen.ClassCodeGen;
import me.august.lumen.compile.parser.ast.expr.Expression;
import me.august.lumen.compile.resolve.type.UnresolvedType;
import org.objectweb.asm.ClassVisitor;
public class FieldNode extends Typed implements ClassCodeGen {
private String name;
private ModifierSet modifiers;
private Expression defaultValue;
public FieldNode(String name, UnresolvedType type, ModifierSet modifiers) {
super(type);
this.name = name;
this.modifiers = modifiers;
}
public Expression getDefaultValue() {
return defaultValue;
}
public void setDefaultValue(Expression defaultValue) {
this.defaultValue = defaultValue;
}
public String getName() {
return name;
}
public ModifierSet getModifiers() {
return modifiers;
}
@Override
public void generate(ClassVisitor visitor, BuildContext context) {
// `null, null` represents `signature (generics), value`
visitor.visitField(
modifiers.getValue(), getName(), getResolvedType().getDescriptor(),
null, null // signature, value
);
}
@Override
public String toString() {
return "FieldNode{" +
"name='" + name + '\'' +
", type='" + unresolvedType + '\'' +
", modifiers=" + modifiers +
", defaultValue=" + defaultValue +
'}';
}
}