package scotch.symbol;
import static me.qmx.jitescript.CodeBlock.ACC_STATIC;
import java.util.Optional;
import lombok.AllArgsConstructor;
import lombok.EqualsAndHashCode;
import lombok.ToString;
import me.qmx.jitescript.CodeBlock;
import me.qmx.jitescript.JiteClass;
@AllArgsConstructor(staticName = "fieldSignature")
@EqualsAndHashCode(callSuper = false)
@ToString
public class FieldSignature {
public static FieldSignature fieldSignature(String classSignature, int fieldAccess, String fieldName, String fieldSignature) {
return new FieldSignature(classSignature, fieldAccess, fieldName, fieldSignature, Optional.empty());
}
private final String classSignature;
private final int fieldAccess;
private final String fieldName;
private final String fieldSignature;
private final Optional<Object> defaultValue;
public void defineOn(JiteClass jiteClass) {
jiteClass.defineField(fieldName, fieldAccess, fieldSignature, defaultValue.orElse(null));
}
public CodeBlock getValue() {
return new CodeBlock() {{
if (isStatic()) {
getstatic(classSignature, fieldName, fieldSignature);
} else {
getfield(classSignature, fieldName, fieldSignature);
}
}};
}
public CodeBlock putValue() {
return new CodeBlock() {{
if (isStatic()) {
putstatic(classSignature, fieldName, fieldSignature);
} else {
putfield(classSignature, fieldName, fieldSignature);
}
}};
}
private boolean isStatic() {
return (fieldAccess & ACC_STATIC) == ACC_STATIC;
}
}