1 46 package org.codehaus.groovy.ast; 47 48 import java.lang.reflect.Field ; 49 50 import org.codehaus.groovy.ast.expr.Expression; 51 import org.codehaus.groovy.classgen.BytecodeHelper; 52 import org.objectweb.asm.Constants; 53 54 60 public class FieldNode extends MetadataNode implements Constants { 61 62 private String name; 63 private int modifiers; 64 private String type; 65 private String owner; 66 private Expression initialValueExpression; 67 private boolean dynamicType; 68 private boolean holder; 69 70 public static FieldNode newStatic(Class theClass, String name) throws SecurityException , NoSuchFieldException { 71 Field field = theClass.getField(name); 72 String fldType = field.getType().getName(); 73 return new FieldNode(name, ACC_PUBLIC | ACC_STATIC, fldType, theClass.getName(), null); 74 } 75 76 public FieldNode(String name, int modifiers, String type, String owner, Expression initialValueExpression) { 77 this.name = name; 78 this.modifiers = modifiers; 79 this.type = type; 80 this.owner = owner; 81 this.initialValueExpression = initialValueExpression; 82 if (type == null || type.length() == 0) { 83 this.dynamicType = true; 84 if (initialValueExpression != null) { 85 String initType = initialValueExpression.getType(); 86 if (initType != null && initType.length() > 0){ 87 this.type = initType; 88 } 90 else { 91 this.type = "java.lang.Object"; 92 } 94 } 95 else { 96 this.type = "java.lang.Object"; 97 } 99 } 100 else { 101 String boxedType = BytecodeHelper.getObjectTypeForPrimitive(type); 102 boxedType = BytecodeHelper.getObjectArrayTypeForPrimitiveArray(boxedType); 103 this.type = boxedType; 104 dynamicType = false; 105 } 106 } 107 108 public Expression getInitialValueExpression() { 109 return initialValueExpression; 110 } 111 112 public int getModifiers() { 113 return modifiers; 114 } 115 116 public String getName() { 117 return name; 118 } 119 120 public String getType() { 121 return type; 122 } 123 124 public void setType(String type) { 125 this.type = type; 126 } 127 128 public String getOwner() { 129 return owner; 130 } 131 132 public boolean isHolder() { 133 return holder; 134 } 135 136 public void setHolder(boolean holder) { 137 this.holder = holder; 138 } 139 140 public boolean isDynamicType() { 141 return dynamicType; 142 } 143 144 public void setModifiers(int modifiers) { 145 this.modifiers = modifiers; 146 } 147 148 151 public boolean isStatic() { 152 return (modifiers & Constants.ACC_STATIC) != 0; 153 } 154 157 public void setOwner(String owner) { 158 this.owner = owner; 159 } 160 } 161 | Popular Tags |