home *** CD-ROM | disk | FTP | other *** search
/ Symantec Visual Cafe for Java 2.5 / symantec-visual-cafe-2.5-database-dev-edition.iso / VPage / Java.bin / CLASSES.ZIP / sun / tools / java / BinaryField.class (.txt) < prev    next >
Encoding:
Java Class File  |  1997-07-08  |  5.3 KB  |  186 lines

  1. package sun.tools.java;
  2.  
  3. import java.io.ByteArrayInputStream;
  4. import java.io.DataInputStream;
  5. import java.io.IOException;
  6. import java.util.Vector;
  7. import sun.tools.tree.BooleanExpression;
  8. import sun.tools.tree.DoubleExpression;
  9. import sun.tools.tree.Expression;
  10. import sun.tools.tree.FloatExpression;
  11. import sun.tools.tree.IntExpression;
  12. import sun.tools.tree.LocalField;
  13. import sun.tools.tree.LongExpression;
  14. import sun.tools.tree.Node;
  15. import sun.tools.tree.StringExpression;
  16.  
  17. public final class BinaryField extends FieldDefinition {
  18.    Expression value;
  19.    BinaryAttribute atts;
  20.  
  21.    public BinaryField(ClassDefinition var1, int var2, Type var3, Identifier var4, BinaryAttribute var5) {
  22.       super(0, var1, var2, var3, var4, (IdentifierToken[])null, (Node)null);
  23.       this.atts = var5;
  24.       if (this.getAttribute(Constants.idDeprecated) != null) {
  25.          super.modifiers |= 262144;
  26.       }
  27.  
  28.       if (this.getAttribute(Constants.idSynthetic) != null) {
  29.          super.modifiers |= 524288;
  30.       }
  31.  
  32.    }
  33.  
  34.    public BinaryField(ClassDefinition var1) {
  35.       super(var1);
  36.    }
  37.  
  38.    public boolean isInlineable(Environment var1, boolean var2) {
  39.       return ((FieldDefinition)this).isConstructor() && ((FieldDefinition)this).getClassDefinition().getSuperClass() == null;
  40.    }
  41.  
  42.    public Vector getArguments() {
  43.       if (((FieldDefinition)this).isConstructor() && ((FieldDefinition)this).getClassDefinition().getSuperClass() == null) {
  44.          Vector var1 = new Vector();
  45.          var1.addElement(new LocalField(0, ((FieldDefinition)this).getClassDefinition(), 0, ((FieldDefinition)this).getClassDefinition().getType(), Constants.idThis));
  46.          return var1;
  47.       } else {
  48.          return null;
  49.       }
  50.    }
  51.  
  52.    public ClassDeclaration[] getExceptions(Environment var1) {
  53.       if (((FieldDefinition)this).isMethod() && super.exp == null) {
  54.          byte[] var2 = this.getAttribute(Constants.idExceptions);
  55.          if (var2 == null) {
  56.             return new ClassDeclaration[0];
  57.          } else {
  58.             try {
  59.                BinaryConstantPool var3 = ((BinaryClass)((FieldDefinition)this).getClassDefinition()).getConstants();
  60.                DataInputStream var4 = new DataInputStream(new ByteArrayInputStream(var2));
  61.                short var5 = var4.readShort();
  62.                super.exp = new ClassDeclaration[var5];
  63.  
  64.                for(int var6 = 0; var6 < var5; ++var6) {
  65.                   super.exp[var6] = var3.getDeclaration(var1, var4.readShort());
  66.                }
  67.  
  68.                return super.exp;
  69.             } catch (IOException var7) {
  70.                throw new CompilerError(var7);
  71.             }
  72.          }
  73.       } else {
  74.          return super.exp;
  75.       }
  76.    }
  77.  
  78.    public String getDocumentation() {
  79.       if (super.documentation != null) {
  80.          return super.documentation;
  81.       } else {
  82.          byte[] var1 = this.getAttribute(Constants.idDocumentation);
  83.          if (var1 == null) {
  84.             return null;
  85.          } else {
  86.             try {
  87.                return super.documentation = (new DataInputStream(new ByteArrayInputStream(var1))).readUTF();
  88.             } catch (IOException var3) {
  89.                throw new CompilerError(var3);
  90.             }
  91.          }
  92.       }
  93.    }
  94.  
  95.    public Node getValue(Environment var1) {
  96.       if (((FieldDefinition)this).isMethod()) {
  97.          return null;
  98.       } else if (!((FieldDefinition)this).isFinal()) {
  99.          return null;
  100.       } else if (((FieldDefinition)this).getValue() != null) {
  101.          return (Expression)((FieldDefinition)this).getValue();
  102.       } else {
  103.          byte[] var2 = this.getAttribute(Constants.idConstantValue);
  104.          if (var2 == null) {
  105.             return null;
  106.          } else {
  107.             try {
  108.                BinaryConstantPool var3 = ((BinaryClass)((FieldDefinition)this).getClassDefinition()).getConstants();
  109.                Object var4 = var3.getValue((new DataInputStream(new ByteArrayInputStream(var2))).readShort());
  110.                switch (((FieldDefinition)this).getType().getTypeCode()) {
  111.                   case 0:
  112.                      ((FieldDefinition)this).setValue(new BooleanExpression(0, ((Number)var4).intValue() != 0));
  113.                      break;
  114.                   case 1:
  115.                   case 2:
  116.                   case 3:
  117.                   case 4:
  118.                      ((FieldDefinition)this).setValue(new IntExpression(0, ((Number)var4).intValue()));
  119.                      break;
  120.                   case 5:
  121.                      ((FieldDefinition)this).setValue(new LongExpression(0, ((Number)var4).longValue()));
  122.                      break;
  123.                   case 6:
  124.                      ((FieldDefinition)this).setValue(new FloatExpression(0, ((Number)var4).floatValue()));
  125.                      break;
  126.                   case 7:
  127.                      ((FieldDefinition)this).setValue(new DoubleExpression(0, ((Number)var4).doubleValue()));
  128.                   case 8:
  129.                   case 9:
  130.                   default:
  131.                      break;
  132.                   case 10:
  133.                      ((FieldDefinition)this).setValue(new StringExpression(0, (String)var3.getValue(((Number)var4).intValue())));
  134.                }
  135.  
  136.                return (Expression)((FieldDefinition)this).getValue();
  137.             } catch (IOException var5) {
  138.                throw new CompilerError(var5);
  139.             }
  140.          }
  141.       }
  142.    }
  143.  
  144.    public byte[] getAttribute(Identifier var1) {
  145.       for(BinaryAttribute var2 = this.atts; var2 != null; var2 = var2.next) {
  146.          if (var2.name.equals(var1)) {
  147.             return var2.data;
  148.          }
  149.       }
  150.  
  151.       return null;
  152.    }
  153.  
  154.    public boolean deleteAttribute(Identifier var1) {
  155.       Object var2 = null;
  156.       Object var3 = null;
  157.  
  158.       boolean var4;
  159.       for(var4 = false; this.atts.name.equals(var1); var4 = true) {
  160.          this.atts = this.atts.next;
  161.       }
  162.  
  163.       for(BinaryAttribute var5 = this.atts; var5 != null; var5 = var7) {
  164.          var7 = var5.next;
  165.          if (var7 != null && var7.name.equals(var1)) {
  166.             var5.next = var7.next;
  167.             var7 = var7.next;
  168.             var4 = true;
  169.          }
  170.       }
  171.  
  172.       for(BinaryAttribute var6 = this.atts; var6 != null; var6 = var6.next) {
  173.          if (var6.name.equals(var1)) {
  174.             throw new InternalError("Found attribute " + var1);
  175.          }
  176.       }
  177.  
  178.       return var4;
  179.    }
  180.  
  181.    public void addAttribute(Identifier var1, byte[] var2, Environment var3) {
  182.       this.atts = new BinaryAttribute(var1, var2, this.atts);
  183.       ((BinaryClass)super.clazz).cpool.indexString(var1.toString(), var3);
  184.    }
  185. }
  186.