String getIdentifiableName() {
   OJClass declarer = getDeclaringClass();
   String declarername;
   if (declarer == null) {
     declarername = "*" + id;
   } else {
     declarername = declarer.getName();
   }
   return declarername + "." + getName();
 }
  public OJField getCopy() {
    /*if (isAlterable())  return substance.getCopy();*/
    /** **************** */
    // return (FieldDeclaration) substance.clone () ;
    try {

      if (substance instanceof OJFieldByteCode) {
        java.lang.reflect.Field field = ((OJFieldByteCode) substance).getByteCode();
        OJField result = (OJField) this.clone();
        // On remplace du ByteCode par du SourceCode
        FieldDeclaration fd =
            new FieldDeclaration(
                new ModifierList(field.getModifiers()),
                TypeName.forOJClass(OJClass.forClass(field.getDeclaringClass())),
                field.getName(),
                null);
        Environment env = substance.getDeclaringClass().getEnvironment();
        result.substance = new OJFieldSourceCode(env, substance.getDeclaringClass(), fd);
        return result;
      } else if (substance instanceof OJFieldSourceCode) {
        OJField result = (OJField) this.clone();
        result.substance =
            new OJFieldSourceCode(
                ((OJFieldSourceCode) this.substance).getEnvironment(),
                this.substance.getDeclaringClass(),
                (FieldDeclaration) this.substance.getSourceCode().makeRecursiveCopy());
        return result;
      }
    } catch (Exception e) {
      System.err.println("Failed to copy " + this + ": " + e);
      e.printStackTrace();
    }
    return null;
  }
  public String toString() {
    OJClass declarer = getDeclaringClass();
    String declarername = (declarer == null) ? "*" : declarer.getName();

    StringBuffer buf = new StringBuffer();
    String modif = getModifiers().toString();
    if (!modif.equals("")) {
      buf.append(modif);
      buf.append(" ");
    }
    buf.append(getType().getName());
    buf.append(" ");
    buf.append(declarername);
    buf.append(".");
    buf.append(getName());
    return buf.toString();
  }
 public OJField(OJClass declarer, OJModifier modif, OJClass type, String name) {
   Environment env = declarer.getEnvironment();
   ModifierList modlist = new ModifierList();
   TypeName tname = TypeName.forOJClass(type);
   modlist.add(modif.toModifier());
   FieldDeclaration d = new FieldDeclaration(modlist, tname, name, null);
   this.substance = new OJFieldSourceCode(env, declarer, d);
 }
 OJClass getType() {
   return OJClass.forClass(javaField.getType());
 }
 OJClass getDeclaringClass() {
   return OJClass.forClass(javaField.getDeclaringClass());
 }