anonymousdecl.java
来自「JDK1.4编译器后端」· Java 代码 · 共 495 行
JAVA
495 行
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 AnonymousDecl extends ClassDecl implements Cloneable {
public void flushCache() { super.flushCache(); isCircular_visited = 0; isCircular_computed = false; isCircular_initialized = false; getSuperClassAccessOpt_computed = false; getSuperClassAccessOpt_value = null; getImplementsList_computed = false; getImplementsList_value = null; } @SuppressWarnings({"unchecked", "cast"}) public AnonymousDecl clone() throws CloneNotSupportedException { AnonymousDecl node = (AnonymousDecl)super.clone(); node.isCircular_visited = 0; node.isCircular_computed = false; node.isCircular_initialized = false; node.getSuperClassAccessOpt_computed = false; node.getSuperClassAccessOpt_value = null; node.getImplementsList_computed = false; node.getImplementsList_value = null; node.in$Circle(false); node.is$Final(false); return node; } @SuppressWarnings({"unchecked", "cast"}) public AnonymousDecl copy() { try { AnonymousDecl node = (AnonymousDecl)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 AnonymousDecl fullCopy() { AnonymousDecl res = (AnonymousDecl)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 GenerateClassfile.jrag at line 355 public boolean clear() { for(int i = 0; i < getNumChild(); i++) getChild(i).clear(); setParent(null); flushCache(); return true; } // Declared in java.ast at line 3 // Declared in java.ast line 67
public AnonymousDecl() { super();
setChild(new List(), 1);
setChild(new Opt(), 2);
setChild(new List(), 3);
} // Declared in java.ast at line 13
// Declared in java.ast line 67 public AnonymousDecl(Modifiers p0, String p1, List<BodyDecl> p2) { setChild(p0, 0); setID(p1); setChild(p2, 1); setChild(new Opt(), 2); setChild(new List(), 3); } // Declared in java.ast at line 22 // Declared in java.ast line 67 public AnonymousDecl(Modifiers p0, beaver.Symbol p1, List<BodyDecl> p2) { setChild(p0, 0); setID(p1); setChild(p2, 1); setChild(new Opt(), 2); setChild(new List(), 3); } // Declared in java.ast at line 30 protected int numChildren() {
return 2;
} // Declared in java.ast at line 33
public boolean mayHaveRewrite() { return true; } // Declared in java.ast at line 2 // Declared in java.ast line 67 public void setModifiers(Modifiers node) { setChild(node, 0); } // Declared in java.ast at line 5 public Modifiers getModifiers() { return (Modifiers)getChild(0); } // Declared in java.ast at line 9 public Modifiers getModifiersNoTransform() { return (Modifiers)getChildNoTransform(0); } // Declared in java.ast at line 2 // Declared in java.ast line 67 public void setBodyDeclList(List<BodyDecl> list) { setChild(list, 1); } // Declared in java.ast at line 6 private int getNumBodyDecl = 0; // Declared in java.ast at line 7 public int getNumBodyDecl() { return getBodyDeclList().getNumChild(); } // Declared in java.ast at line 11 @SuppressWarnings({"unchecked", "cast"}) public BodyDecl getBodyDecl(int i) { return (BodyDecl)getBodyDeclList().getChild(i); } // Declared in java.ast at line 15 public void addBodyDecl(BodyDecl node) { List<BodyDecl> list = getBodyDeclList(); list.addChild(node); } // Declared in java.ast at line 20 public void setBodyDecl(BodyDecl node, int i) { List<BodyDecl> list = getBodyDeclList(); list.setChild(node, i); } // Declared in java.ast at line 24 public List<BodyDecl> getBodyDecls() { return getBodyDeclList(); } // Declared in java.ast at line 27 public List<BodyDecl> getBodyDeclsNoTransform() { return getBodyDeclListNoTransform(); } // Declared in java.ast at line 31 @SuppressWarnings({"unchecked", "cast"}) public List<BodyDecl> getBodyDeclList() { return (List<BodyDecl>)getChild(1); } // Declared in java.ast at line 35 @SuppressWarnings({"unchecked", "cast"}) public List<BodyDecl> getBodyDeclListNoTransform() { return (List<BodyDecl>)getChildNoTransform(1); } // Declared in java.ast at line 2 // Declared in java.ast line 67 public void setSuperClassAccessOpt(Opt<Access> opt) { setChild(opt, 2); } // Declared in java.ast at line 6 public boolean hasSuperClassAccess() { return getSuperClassAccessOpt().getNumChild() != 0; } // Declared in java.ast at line 10 @SuppressWarnings({"unchecked", "cast"}) public Access getSuperClassAccess() { return (Access)getSuperClassAccessOpt().getChild(0); } // Declared in java.ast at line 14 public void setSuperClassAccess(Access node) { getSuperClassAccessOpt().setChild(node, 0); } // Declared in java.ast at line 17 @SuppressWarnings({"unchecked", "cast"}) public Opt<Access> getSuperClassAccessOptNoTransform() { return (Opt<Access>)getChildNoTransform(2); } // Declared in java.ast at line 21 protected int getSuperClassAccessOptChildPosition() { return 2; } // Declared in java.ast at line 2 // Declared in java.ast line 67 public void setImplementsList(List<Access> list) { setChild(list, 3); } // Declared in java.ast at line 6 private int getNumImplements = 0; // Declared in java.ast at line 7 public int getNumImplements() { return getImplementsList().getNumChild(); } // Declared in java.ast at line 11 @SuppressWarnings({"unchecked", "cast"}) public Access getImplements(int i) { return (Access)getImplementsList().getChild(i); } // Declared in java.ast at line 15 public void addImplements(Access node) { List<Access> list = getImplementsList(); list.addChild(node); } // Declared in java.ast at line 20 public void setImplements(Access node, int i) { List<Access> list = getImplementsList(); list.setChild(node, i); } // Declared in java.ast at line 24 public List<Access> getImplementss() { return getImplementsList(); } // Declared in java.ast at line 27 public List<Access> getImplementssNoTransform() { return getImplementsListNoTransform(); } // Declared in java.ast at line 31 public List<Access> getImplementsListNoTransform() { return (List<Access>)getChildNoTransform(3); } // Declared in java.ast at line 35 protected int getImplementsListChildPosition() { return 3; } protected int isCircular_visited; protected boolean isCircular_computed = false; protected boolean isCircular_initialized = false; protected boolean isCircular_value; @SuppressWarnings({"unchecked", "cast"}) public boolean isCircular() { if(isCircular_computed) return isCircular_value; if (!isCircular_initialized) { isCircular_initialized = true; isCircular_value = true; } if (!IN_CIRCLE) { IN_CIRCLE = true; int num = boundariesCrossed; boolean isFinal = this.is$Final(); CIRCLE_INDEX = 1; do { isCircular_visited = CIRCLE_INDEX; CHANGE = false; boolean new_isCircular_value = isCircular_compute(); if (new_isCircular_value!=isCircular_value) CHANGE = true; isCircular_value = new_isCircular_value; CIRCLE_INDEX++; } while (CHANGE); if(isFinal && num == boundariesCrossed){ isCircular_computed = true; } else { RESET_CYCLE = true; isCircular_compute(); RESET_CYCLE = false; isCircular_computed = false; isCircular_initialized = false; } IN_CIRCLE = false; return isCircular_value; } if(isCircular_visited != CIRCLE_INDEX) { isCircular_visited = CIRCLE_INDEX; if (RESET_CYCLE) { isCircular_computed = false; isCircular_initialized = false; return isCircular_value; } boolean new_isCircular_value = isCircular_compute(); if (new_isCircular_value!=isCircular_value) CHANGE = true; isCircular_value = new_isCircular_value; return isCircular_value; } return isCircular_value; } private boolean isCircular_compute() { return false; } protected boolean getSuperClassAccessOpt_computed = false; protected Opt getSuperClassAccessOpt_value; // Declared in AnonymousClasses.jrag at line 32 @SuppressWarnings({"unchecked", "cast"}) public Opt getSuperClassAccessOpt() { if(getSuperClassAccessOpt_computed) return (Opt)ASTNode.getChild(this, getSuperClassAccessOptChildPosition()); int num = boundariesCrossed; boolean isFinal = this.is$Final(); getSuperClassAccessOpt_value = getSuperClassAccessOpt_compute(); setSuperClassAccessOpt(getSuperClassAccessOpt_value); if(isFinal && num == boundariesCrossed) getSuperClassAccessOpt_computed = true; return (Opt)ASTNode.getChild(this, getSuperClassAccessOptChildPosition()); } private Opt getSuperClassAccessOpt_compute() { if(superType().isInterfaceDecl()) return new Opt(typeObject().createQualifiedAccess()); else return new Opt(superType().createBoundAccess()); } protected boolean getImplementsList_computed = false; protected List getImplementsList_value; // Declared in AnonymousClasses.jrag at line 38 @SuppressWarnings({"unchecked", "cast"}) public List getImplementsList() { if(getImplementsList_computed) return (List)ASTNode.getChild(this, getImplementsListChildPosition()); int num = boundariesCrossed; boolean isFinal = this.is$Final(); getImplementsList_value = getImplementsList_compute(); setImplementsList(getImplementsList_value); if(isFinal && num == boundariesCrossed) getImplementsList_computed = true; return (List)ASTNode.getChild(this, getImplementsListChildPosition()); } private List getImplementsList_compute() { if(superType().isInterfaceDecl()) return new List().add(superType().createBoundAccess()); else return new List(); } // Declared in GenerateClassfile.jrag at line 329 @SuppressWarnings({"unchecked", "cast"}) public boolean flush() { boolean flush_value = flush_compute(); return flush_value; } private boolean flush_compute() { return true; } // Declared in AnonymousClasses.jrag at line 14 @SuppressWarnings({"unchecked", "cast"}) public TypeDecl superType() { TypeDecl superType_value = getParent().Define_TypeDecl_superType(this, null); return superType_value; } // Declared in AnonymousClasses.jrag at line 18 @SuppressWarnings({"unchecked", "cast"}) public ConstructorDecl constructorDecl() { ConstructorDecl constructorDecl_value = getParent().Define_ConstructorDecl_constructorDecl(this, null); return constructorDecl_value; } // Declared in AnonymousClasses.jrag at line 109 @SuppressWarnings({"unchecked", "cast"}) public TypeDecl typeNullPointerException() { TypeDecl typeNullPointerException_value = getParent().Define_TypeDecl_typeNullPointerException(this, null); return typeNullPointerException_value; }public ASTNode rewriteTo() { // Declared in AnonymousClasses.jrag at line 52 if(noConstructor()) { duringAnonymousClasses++; ASTNode result = rewriteRule0(); duringAnonymousClasses--; return result; } return super.rewriteTo();} // Declared in AnonymousClasses.jrag at line 52 private AnonymousDecl rewriteRule0() {{ setModifiers(new Modifiers(new List().add(new Modifier("final")))); ConstructorDecl constructor = new ConstructorDecl(); addBodyDecl(constructor); constructor.setModifiers((Modifiers)constructorDecl().getModifiers().fullCopy()); String name = "Anonymous" + nextAnonymousIndex(); setID(name); constructor.setID(name); List parameterList = new List(); for(int i = 0; i < constructorDecl().getNumParameter(); i++) { parameterList.add( new ParameterDeclaration( constructorDecl().getParameter(i).type().createBoundAccess(), constructorDecl().getParameter(i).name() ) ); } constructor.setParameterList(parameterList); List argList = new List(); for(int i = 0; i < constructor.getNumParameter(); i++) argList.add(new VarAccess(constructor.getParameter(i).name())); constructor.setConstructorInvocation( new ExprStmt( new SuperConstructorAccess("super", argList) ) ); constructor.setBlock(new Block()); HashSet set = new HashSet(); for(int i = 0; i < getNumBodyDecl(); i++) { if(getBodyDecl(i) instanceof InstanceInitializer) { InstanceInitializer init = (InstanceInitializer)getBodyDecl(i); set.addAll(init.exceptions()); } else if(getBodyDecl(i) instanceof FieldDeclaration) { FieldDeclaration f = (FieldDeclaration)getBodyDecl(i); if(f.isInstanceVariable()) { set.addAll(f.exceptions()); } } } List exceptionList = new List(); for(Iterator iter = set.iterator(); iter.hasNext(); ) { TypeDecl exceptionType = (TypeDecl)iter.next(); if(exceptionType.isNull()) exceptionType = typeNullPointerException(); exceptionList.add(exceptionType.createQualifiedAccess()); } constructor.setExceptionList(exceptionList); return this; } }}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?