package com.github.geequery.codegen.ast;
import java.lang.reflect.Modifier;
import com.github.geequery.codegen.ast.IClass.RealClass;
public class JavaField extends DefaultJavaElement implements JavaElement{
private int modifiers;
private String name;
private IClass type;
private String initValue;
public boolean isPublic(){
return Modifier.isPublic(modifiers);
}
public boolean isStatic(){
return Modifier.isStatic(modifiers);
}
public boolean isFinal(){
return Modifier.isFinal(modifiers);
}
public String getInitValue() {
return initValue;
}
public void setInitValue(String initValue) {
this.initValue = initValue;
}
public void setInitStringValue(String initValue) {
this.initValue = "\""+initValue+"\"";
}
public void setInitValue(int initValue) {
this.initValue=String.valueOf(initValue);
}
public void setInitValue(long initValue){
this.initValue=String.valueOf(initValue).concat("L");
}
public void setInitValue(float initValue){
this.initValue=String.valueOf(initValue).concat("F");
}
public JavaField(Class<?> type, String name) {
this.name=name;
this.type=new RealClass(type);
}
public JavaField(String type, String name) {
this.name=name;
this.type=IClassUtil.getIClass(type);
}
public JavaField(IClass type, String name) {
this.name=name;
this.type=type;
}
public int getModifiers() {
return modifiers;
}
public void setModifiers(int modifiers) {
this.modifiers = modifiers;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public IClass getType() {
return type;
}
public void setType(IClass type) {
this.type = type;
}
public String toCode(JavaUnit main) {
if(code!=null)return code;
StringBuilder sb = new StringBuilder();
sb.append(super.generateComments());
if (this.getAnnotation()!=null) {
for (String a : annotation) {
if (a != null && a.length() > 0){
sb.append(a).append("\r\n\t");
}
}
}
JavaUnit.appendModifier(sb, modifiers,false);
sb.append(main.getJavaClassName(type)).append(" ");
sb.append(name);
if(initValue!=null){
sb.append(" = ").append(initValue);
}
sb.append(";\r\n");
return sb.toString();
}
// 当使用toCode方法生成imports时已经太迟了,所以生成要提前
private String code=null;
public void buildImport(JavaUnit javaUnit) {
super.buildImport(javaUnit);
this.code=toCode(javaUnit);
}
public void clear(){
this.code=null;
}
}