?? fielddeclaration.java
字號:
package AST;
import java.util.HashSet;import java.util.LinkedHashSet;import java.io.FileNotFoundException;import java.io.File;import java.util.*;import beaver.*;import java.util.ArrayList;import java.util.zip.*;import java.io.*;public class FieldDeclaration extends MemberDecl implements Cloneable, SimpleSet, Iterator, Variable {
public void flushCache() { super.flushCache(); accessibleFrom_TypeDecl_values = null; exceptions_computed = false; exceptions_value = null; isDAafter_Variable_values = null; isDUafter_Variable_values = null; constant_computed = false; constant_value = null; attributes_computed = false; attributes_value = null; flags_computed = false; } @SuppressWarnings({"unchecked", "cast"}) public FieldDeclaration clone() throws CloneNotSupportedException { FieldDeclaration node = (FieldDeclaration)super.clone(); node.accessibleFrom_TypeDecl_values = null; node.exceptions_computed = false; node.exceptions_value = null; node.isDAafter_Variable_values = null; node.isDUafter_Variable_values = null; node.constant_computed = false; node.constant_value = null; node.attributes_computed = false; node.attributes_value = null; node.flags_computed = false; node.in$Circle(false); node.is$Final(false); return node; } @SuppressWarnings({"unchecked", "cast"}) public FieldDeclaration copy() { try { FieldDeclaration node = (FieldDeclaration)clone(); if(children != null) node.children = (ASTNode[])children.clone(); return node; } catch (CloneNotSupportedException e) { } System.err.println("Error: Could not clone node of type " + getClass().getName() + "!"); return null; } @SuppressWarnings({"unchecked", "cast"}) public FieldDeclaration fullCopy() { FieldDeclaration res = (FieldDeclaration)copy(); for(int i = 0; i < getNumChildNoTransform(); i++) { ASTNode node = getChildNoTransform(i); if(node != null) node = node.fullCopy(); res.setChild(node, i); } return res; } // Declared in BoundNames.jrag at line 11 public Access createQualifiedBoundAccess() { if(isStatic()) return hostType().createQualifiedAccess().qualifiesAccess(new BoundFieldAccess(this)); else return new ThisAccess("this").qualifiesAccess( new BoundFieldAccess(this)); } // Declared in BoundNames.jrag at line 86 public Access createBoundFieldAccess() { return createQualifiedBoundAccess(); } // Declared in DataStructures.jrag at line 69 public SimpleSet add(Object o) { return new SimpleSetImpl().add(this).add(o); } // Declared in DataStructures.jrag at line 75 private FieldDeclaration iterElem; // Declared in DataStructures.jrag at line 76 public Iterator iterator() { iterElem = this; return this; } // Declared in DataStructures.jrag at line 77 public boolean hasNext() { return iterElem != null; } // Declared in DataStructures.jrag at line 78 public Object next() { Object o = iterElem; iterElem = null; return o; } // Declared in DataStructures.jrag at line 79 public void remove() { throw new UnsupportedOperationException(); } // Declared in DefiniteAssignment.jrag at line 179 public void definiteAssignment() { super.definiteAssignment(); if(isBlank() && isFinal() && isClassVariable()) { boolean found = false; TypeDecl typeDecl = hostType(); for(int i = 0; i < typeDecl.getNumBodyDecl(); i++) { if(typeDecl.getBodyDecl(i) instanceof StaticInitializer) { StaticInitializer s = (StaticInitializer)typeDecl.getBodyDecl(i); if(s.isDAafter(this)) found = true; } else if(typeDecl.getBodyDecl(i) instanceof FieldDeclaration) { FieldDeclaration f = (FieldDeclaration)typeDecl.getBodyDecl(i); if(f.isStatic() && f.isDAafter(this)) found = true; } } if(!found) error("blank final class variable " + name() + " in " + hostType().typeName() + " is not definitely assigned in static initializer"); } if(isBlank() && isFinal() && isInstanceVariable()) { TypeDecl typeDecl = hostType(); boolean found = false; for(int i = 0; !found && i < typeDecl.getNumBodyDecl(); i++) { if(typeDecl.getBodyDecl(i) instanceof FieldDeclaration) { FieldDeclaration f = (FieldDeclaration)typeDecl.getBodyDecl(i); if(!f.isStatic() && f.isDAafter(this)) found = true; } else if(typeDecl.getBodyDecl(i) instanceof InstanceInitializer) { InstanceInitializer ii = (InstanceInitializer)typeDecl.getBodyDecl(i); if(ii.getBlock().isDAafter(this)) found = true; } } for(Iterator iter = typeDecl.constructors().iterator(); !found && iter.hasNext(); ) { ConstructorDecl c = (ConstructorDecl)iter.next(); if(!c.isDAafter(this)) { error("blank final instance variable " + name() + " in " + hostType().typeName() + " is not definitely assigned after " + c.signature()); } } } if(isBlank() && hostType().isInterfaceDecl()) { error("variable " + name() + " in " + hostType().typeName() + " which is an interface must have an initializer"); } } // Declared in Modifiers.jrag at line 112 public void checkModifiers() { super.checkModifiers(); if(hostType().isInterfaceDecl()) { if(isProtected()) error("an interface field may not be protected"); if(isPrivate()) error("an interface field may not be private"); if(isTransient()) error("an interface field may not be transient"); if(isVolatile()) error("an interface field may not be volatile"); } } // Declared in NameCheck.jrag at line 277 public void nameCheck() { super.nameCheck(); // 8.3 for(Iterator iter = hostType().memberFields(name()).iterator(); iter.hasNext(); ) { Variable v = (Variable)iter.next(); if(v != this && v.hostType() == hostType()) error("field named " + name() + " is multiply declared in type " + hostType().typeName()); } } // Declared in NodeConstructors.jrag at line 86 public FieldDeclaration(Modifiers m, Access type, String name) { this(m, type, name, new Opt()); } // Declared in NodeConstructors.jrag at line 90 public FieldDeclaration(Modifiers m, Access type, String name, Expr init) { this(m, type, name, new Opt(init)); } // Declared in PrettyPrint.jadd at line 171 public void toString(StringBuffer s) { s.append(indent()); getModifiers().toString(s); getTypeAccess().toString(s); s.append(" " + name()); if(hasInit()) { s.append(" = "); getInit().toString(s); } s.append(";\n"); } // Declared in TypeCheck.jrag at line 33 // 5.2 public void typeCheck() { if(hasInit()) { TypeDecl source = getInit().type(); TypeDecl dest = type(); if(!source.assignConversionTo(dest, getInit())) error("can not assign " + name() + " of type " + dest.typeName() + " a value of type " + source.typeName()); } } // Declared in CodeGeneration.jrag at line 683 public void emitLoadField(CodeGeneration gen, TypeDecl typeDecl) { if(hostType().isArrayDecl() && name().equals("length")) { gen.emit(Bytecode.ARRAYLENGTH); return; } String classname = typeDecl.constantPoolName(); String desc = type().typeDescriptor(); String name = name(); int index = gen.constantPool().addFieldref(classname, name, desc); if(isStatic()) gen.emit(Bytecode.GETSTATIC, type().variableSize()).add2(index); else gen.emit(Bytecode.GETFIELD, type().variableSize() - 1).add2(index); } // Declared in CodeGeneration.jrag at line 741 public void emitStoreField(CodeGeneration gen, TypeDecl typeDecl) { String classname = typeDecl.constantPoolName(); String desc = type().typeDescriptor(); String name = name(); int index = gen.constantPool().addFieldref(classname, name, desc); if(isStatic()) gen.emit(Bytecode.PUTSTATIC, -type().variableSize()).add2(index); else gen.emit(Bytecode.PUTFIELD, -type().variableSize() - 1).add2(index); } // Declared in GenerateClassfile.jrag at line 372 public boolean clear() { return false; } // Declared in InnerClasses.jrag at line 270 public MethodDecl createAccessor(TypeDecl fieldQualifier) { MethodDecl m = (MethodDecl)fieldQualifier.getAccessor(this, "field_read"); if(m != null) return m; int accessorIndex = fieldQualifier.accessorCounter++; Modifiers modifiers = new Modifiers(new List()); modifiers.addModifier(new Modifier("static")); modifiers.addModifier(new Modifier("synthetic")); modifiers.addModifier(new Modifier("public")); List parameters = new List(); if(!isStatic()) parameters.add(new ParameterDeclaration(fieldQualifier.createQualifiedAccess(), "that")); m = new MethodDecl( modifiers, type().createQualifiedAccess(), "get$" + name() + "$access$" + accessorIndex, parameters, new List(), new Opt( new Block( new List().add( new ReturnStmt(createAccess()) ) ) ) ); m = fieldQualifier.addMemberMethod(m); fieldQualifier.addAccessor(this, "field_read", m); return m; } // Declared in InnerClasses.jrag at line 303 public MethodDecl createAccessorWrite(TypeDecl fieldQualifier) { MethodDecl m = (MethodDecl)fieldQualifier.getAccessor(this, "field_write"); if(m != null) return m; int accessorIndex = fieldQualifier.accessorCounter++; Modifiers modifiers = new Modifiers(new List()); modifiers.addModifier(new Modifier("static")); modifiers.addModifier(new Modifier("synthetic")); modifiers.addModifier(new Modifier("public")); List parameters = new List(); if(!isStatic()) parameters.add(new ParameterDeclaration(fieldQualifier.createQualifiedAccess(), "that")); parameters.add(new ParameterDeclaration(type().createQualifiedAccess(), "value")); m = new MethodDecl( modifiers, type().createQualifiedAccess(), "set$" + name() + "$access$" + accessorIndex, parameters, new List(), new Opt( new Block( new List().add( new ExprStmt( new AssignSimpleExpr( createAccess(), new VarAccess("value") ) ) ).add( new ReturnStmt(
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -