/** Creates the variable. * @param name the name * @param type the type * @param lhs the lhs * @return the variable * @throws UtilEvalError the util eval error */ protected Variable createVariable(final String name, final Class<?> type, final LHS lhs) throws UtilEvalError { return new Variable(name, type, lhs); }
public void setConstant() { if (hasModifier("private") || hasModifier("protected")) throw new IllegalArgumentException("Illegal modifier for interface field " + getName() + ". Only public static & final are permitted."); getModifiers().setConstant(); }
/** Produce a string representation of a bsh variable declaration. * Shows modifiers, type and name. * @param var the variable to reflect * @return string representation of variable declaration */ public static String variableString(Variable var) { StringBuilder sb = new StringBuilder(); sb.append(var.getModifiers().toString().substring(11)) .append(" ").append(getTypeName(var.getType())) .append(" ").append(var.getName()); return sb.append(";").toString(); }
/** @param value may be null if this */ Variable( String name, Class<?> type, Object value, Modifiers modifiers ) throws UtilEvalError { this.name=name; this.type = type; this.setModifiers( modifiers ); this.setValue( value, DECLARATION ); }
String type = var.getTypeDescriptor(); if (var.hasModifier("private") || type == null) { continue; modifiers = ACC_PUBLIC | ACC_STATIC | ACC_FINAL; } else { modifiers = getASMModifiers(var.getModifiers()); generateField(var.getName(), type, modifiers, cw);
void validateFinalIsSet(boolean isStatic) { if (!hasModifier("final") || this.value != null) return; if (isStatic == hasModifier("static")) throw new RuntimeException((isStatic ? "Static f" : "F") +"inal variable "+name+" is not initialized."); }
if (existing != null && existing.getType() != null) if (existing.getType() != type) throw new UtilEvalError("Typed variable: " + name + " was previously declared with type: " + existing.getType()); else { if (existing.modifiers == null) existing.modifiers = modifiers; existing.setValue(value, Variable.DECLARATION); return;
/** Generate the static initialization of the enum constants. Called from clinit. * @param fqClassName fully qualified class name * @param classDescript class descriptor string * @param cv clinit method visitor */ private void generateEnumStaticInit(String fqClassName, String classDescript, MethodVisitor cv) { int ordinal = ICONST_0; for ( Variable var : vars ) if ( var.hasModifier("enum") ) { cv.visitTypeInsn(NEW, fqClassName); cv.visitInsn(DUP); cv.visitLdcInsn(var.getName()); if ( ICONST_5 >= ordinal ) cv.visitInsn(ordinal++); else cv.visitIntInsn(BIPUSH, ordinal++ - ICONST_0); cv.visitMethodInsn(INVOKESPECIAL, fqClassName, "<init>", "(Ljava/lang/String;I)V", false); cv.visitFieldInsn(PUTSTATIC, fqClassName, var.getName(), classDescript); } }
/** Unwrap a variable to its value. @return return the variable value. A null var is mapped to Primitive.VOID */ protected Object unwrapVariable( Variable var ) throws UtilEvalError { return (var == null) ? Primitive.VOID : var.getValue(); }
/** @param value may be null if this */ Variable( String name, Class type, Object value, Modifiers modifiers ) throws UtilEvalError { this.name=name; this.type = type; this.modifiers = modifiers; setValue( value, DECLARATION ); }
public Class<?> getType() { if ( null != field ) return field.getReturnType(); if ( null != var ) return var.getType(); try { return Types.getType(getValue()); } catch ( UtilEvalError e ) { return null; } }
public boolean hasModifier( String name ) { return getModifiers().hasModifier(name); }
public Modifiers getModifiers() { if (modifiers == null) this.setModifiers(new Modifiers(Modifiers.FIELD)); return this.modifiers; }
if (var.hasModifier("private")) continue; String fType = var.getTypeDescriptor(); int modifiers = getASMModifiers(var.getModifiers()); var.setConstant(); classStaticNameSpace.setVariableImpl(var); } else if ( type == ENUM && var.hasModifier("enum") ) { modifiers |= ACC_ENUM | ACC_FINAL; fType = classDescript; generateField(var.getName(), fType, modifiers, cw);
public boolean isStatic() { if ( null != field ) return field.isStatic(); if ( null == this.var ) return false; return var.hasModifier("static"); }
/** Unwrap a variable to its value. * @param var the var * @return return the variable value. A null var is mapped to Primitive.VOID * @throws UtilEvalError the util eval error */ protected Object unwrapVariable(final Variable var) throws UtilEvalError { return var == null ? Primitive.VOID : var.getValue(); }