home *** CD-ROM | disk | FTP | other *** search
- package sun.tools.java;
-
- import java.io.ByteArrayInputStream;
- import java.io.DataInputStream;
- import java.io.IOException;
- import java.util.Vector;
- import sun.tools.tree.BooleanExpression;
- import sun.tools.tree.DoubleExpression;
- import sun.tools.tree.Expression;
- import sun.tools.tree.FloatExpression;
- import sun.tools.tree.IntExpression;
- import sun.tools.tree.LocalField;
- import sun.tools.tree.LongExpression;
- import sun.tools.tree.Node;
- import sun.tools.tree.StringExpression;
-
- public final class BinaryField extends FieldDefinition {
- Expression value;
- BinaryAttribute atts;
-
- public BinaryField(ClassDefinition var1, int var2, Type var3, Identifier var4, BinaryAttribute var5) {
- super(0, var1, var2, var3, var4, (IdentifierToken[])null, (Node)null);
- this.atts = var5;
- if (this.getAttribute(Constants.idDeprecated) != null) {
- super.modifiers |= 262144;
- }
-
- if (this.getAttribute(Constants.idSynthetic) != null) {
- super.modifiers |= 524288;
- }
-
- }
-
- public BinaryField(ClassDefinition var1) {
- super(var1);
- }
-
- public boolean isInlineable(Environment var1, boolean var2) {
- return ((FieldDefinition)this).isConstructor() && ((FieldDefinition)this).getClassDefinition().getSuperClass() == null;
- }
-
- public Vector getArguments() {
- if (((FieldDefinition)this).isConstructor() && ((FieldDefinition)this).getClassDefinition().getSuperClass() == null) {
- Vector var1 = new Vector();
- var1.addElement(new LocalField(0, ((FieldDefinition)this).getClassDefinition(), 0, ((FieldDefinition)this).getClassDefinition().getType(), Constants.idThis));
- return var1;
- } else {
- return null;
- }
- }
-
- public ClassDeclaration[] getExceptions(Environment var1) {
- if (((FieldDefinition)this).isMethod() && super.exp == null) {
- byte[] var2 = this.getAttribute(Constants.idExceptions);
- if (var2 == null) {
- return new ClassDeclaration[0];
- } else {
- try {
- BinaryConstantPool var3 = ((BinaryClass)((FieldDefinition)this).getClassDefinition()).getConstants();
- DataInputStream var4 = new DataInputStream(new ByteArrayInputStream(var2));
- short var5 = var4.readShort();
- super.exp = new ClassDeclaration[var5];
-
- for(int var6 = 0; var6 < var5; ++var6) {
- super.exp[var6] = var3.getDeclaration(var1, var4.readShort());
- }
-
- return super.exp;
- } catch (IOException var7) {
- throw new CompilerError(var7);
- }
- }
- } else {
- return super.exp;
- }
- }
-
- public String getDocumentation() {
- if (super.documentation != null) {
- return super.documentation;
- } else {
- byte[] var1 = this.getAttribute(Constants.idDocumentation);
- if (var1 == null) {
- return null;
- } else {
- try {
- return super.documentation = (new DataInputStream(new ByteArrayInputStream(var1))).readUTF();
- } catch (IOException var3) {
- throw new CompilerError(var3);
- }
- }
- }
- }
-
- public Node getValue(Environment var1) {
- if (((FieldDefinition)this).isMethod()) {
- return null;
- } else if (!((FieldDefinition)this).isFinal()) {
- return null;
- } else if (((FieldDefinition)this).getValue() != null) {
- return (Expression)((FieldDefinition)this).getValue();
- } else {
- byte[] var2 = this.getAttribute(Constants.idConstantValue);
- if (var2 == null) {
- return null;
- } else {
- try {
- BinaryConstantPool var3 = ((BinaryClass)((FieldDefinition)this).getClassDefinition()).getConstants();
- Object var4 = var3.getValue((new DataInputStream(new ByteArrayInputStream(var2))).readShort());
- switch (((FieldDefinition)this).getType().getTypeCode()) {
- case 0:
- ((FieldDefinition)this).setValue(new BooleanExpression(0, ((Number)var4).intValue() != 0));
- break;
- case 1:
- case 2:
- case 3:
- case 4:
- ((FieldDefinition)this).setValue(new IntExpression(0, ((Number)var4).intValue()));
- break;
- case 5:
- ((FieldDefinition)this).setValue(new LongExpression(0, ((Number)var4).longValue()));
- break;
- case 6:
- ((FieldDefinition)this).setValue(new FloatExpression(0, ((Number)var4).floatValue()));
- break;
- case 7:
- ((FieldDefinition)this).setValue(new DoubleExpression(0, ((Number)var4).doubleValue()));
- case 8:
- case 9:
- default:
- break;
- case 10:
- ((FieldDefinition)this).setValue(new StringExpression(0, (String)var3.getValue(((Number)var4).intValue())));
- }
-
- return (Expression)((FieldDefinition)this).getValue();
- } catch (IOException var5) {
- throw new CompilerError(var5);
- }
- }
- }
- }
-
- public byte[] getAttribute(Identifier var1) {
- for(BinaryAttribute var2 = this.atts; var2 != null; var2 = var2.next) {
- if (var2.name.equals(var1)) {
- return var2.data;
- }
- }
-
- return null;
- }
-
- public boolean deleteAttribute(Identifier var1) {
- Object var2 = null;
- Object var3 = null;
-
- boolean var4;
- for(var4 = false; this.atts.name.equals(var1); var4 = true) {
- this.atts = this.atts.next;
- }
-
- for(BinaryAttribute var5 = this.atts; var5 != null; var5 = var7) {
- var7 = var5.next;
- if (var7 != null && var7.name.equals(var1)) {
- var5.next = var7.next;
- var7 = var7.next;
- var4 = true;
- }
- }
-
- for(BinaryAttribute var6 = this.atts; var6 != null; var6 = var6.next) {
- if (var6.name.equals(var1)) {
- throw new InternalError("Found attribute " + var1);
- }
- }
-
- return var4;
- }
-
- public void addAttribute(Identifier var1, byte[] var2, Environment var3) {
- this.atts = new BinaryAttribute(var1, var2, this.atts);
- ((BinaryClass)super.clazz).cpool.indexString(var1.toString(), var3);
- }
- }
-