⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 innerclasses.jrag

📁 JDK1.4编译器后端
💻 JRAG
📖 第 1 页 / 共 2 页
字号:
    );    m = methodQualifier.addMemberMethod(m);    methodQualifier.addAccessor(this, "method_super", m);    return m;  }  public MethodDecl FieldDeclaration.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;  }  public MethodDecl FieldDeclaration.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(              new Opt(                new VarAccess("value")              )            )          )        )      )    );    m = fieldQualifier.addMemberMethod(m);    fieldQualifier.addAccessor(this, "field_write", m);    return m;  }  private Access FieldDeclaration.createAccess() {    Access fieldAccess = new VarAccess(name());    return isStatic() ? fieldAccess : new VarAccess("that").qualifiesAccess(fieldAccess);  }  syn boolean VarAccess.requiresAccessor() {    Variable v = decl();    if(!(v instanceof FieldDeclaration))      return false;    FieldDeclaration f = (FieldDeclaration)v;    if(f.isPrivate() && !hostType().hasField(v.name()))      return true;    if(f.isProtected() && !f.hostPackage().equals(hostPackage()) && !hostType().hasField(v.name()))      return true;    return false;  }  syn boolean TypeDecl.isAnonymousInNonStaticContext() {    return isAnonymous() &&            !((ClassInstanceExpr)getParent().getParent()).unqualifiedScope().inStaticContext()           && (!inExplicitConstructorInvocation() || enclosingBodyDecl().hostType().isInnerType());  }    syn boolean TypeDecl.needsEnclosing() {    if(isAnonymous())      return isAnonymousInNonStaticContext();    else if(isLocalClass())      return !inStaticContext();    else if(isInnerType())      return true;    return false;  }    syn boolean TypeDecl.needsSuperEnclosing() {    if(!isAnonymous())      return false;    TypeDecl superClass = ((ClassDecl)this).superclass();    if(superClass.isLocalClass())      return !superClass.inStaticContext();    else if(superClass.isInnerType())      return true;    if(needsEnclosing() && enclosing() == superEnclosing())      return false;    return false;  }  syn TypeDecl TypeDecl.enclosing() {    if(!needsEnclosing())      return null;    TypeDecl typeDecl = enclosingType();    if(isAnonymous() && inExplicitConstructorInvocation())      typeDecl = typeDecl.enclosingType();    return typeDecl;  }  syn TypeDecl TypeDecl.superEnclosing() = null;  eq ClassDecl.superEnclosing() = superclass().enclosing();  syn boolean ConstructorDecl.needsEnclosing() = hostType().needsEnclosing();  syn boolean ConstructorDecl.needsSuperEnclosing() = hostType().needsSuperEnclosing();  syn TypeDecl ConstructorDecl.enclosing() = hostType().enclosing();  syn TypeDecl ConstructorDecl.superEnclosing() = hostType().superEnclosing();  // add val$name as fields to the class  private boolean TypeDecl.addEnclosingVariables = true;  public void TypeDecl.addEnclosingVariables() {    if(!addEnclosingVariables) return;    addEnclosingVariables = false;    for(Iterator iter = enclosingVariables().iterator(); iter.hasNext(); ) {      Variable v = (Variable)iter.next();      Modifiers m = new Modifiers();      m.addModifier(new Modifier("public"));      m.addModifier(new Modifier("synthetic"));      addMemberField(new FieldDeclaration(m, v.type().createQualifiedAccess(), "val$" + v.name(), new Opt()));    }  }  // add val$name as parameters to the constructor  protected boolean ConstructorDecl.addEnclosingVariables = true;  public void ConstructorDecl.addEnclosingVariables() {    if(!addEnclosingVariables) return;    addEnclosingVariables = false;    hostType().addEnclosingVariables();    for(Iterator iter = hostType().enclosingVariables().iterator(); iter.hasNext(); ) {      Variable v = (Variable)iter.next();      getParameterList().add(new ParameterDeclaration(v.type(), "val$" + v.name()));    }  }  // add val$name as arguments to the constructor  protected boolean ConstructorAccess.addEnclosingVariables = true;  public void ConstructorAccess.addEnclosingVariables() {    if(!addEnclosingVariables) return;    addEnclosingVariables = false;    decl().addEnclosingVariables();    for(Iterator iter = decl().hostType().enclosingVariables().iterator(); iter.hasNext(); ) {      Variable v = (Variable)iter.next();      getArgList().add(new VarAccess("val$" + v.name()));    }  }  // add val$name as arguments to the constructor  protected boolean ClassInstanceExpr.addEnclosingVariables = true;  public void ClassInstanceExpr.addEnclosingVariables() {    if(!addEnclosingVariables) return;    addEnclosingVariables = false;    decl().addEnclosingVariables();    for(Iterator iter = decl().hostType().enclosingVariables().iterator(); iter.hasNext(); ) {      Variable v = (Variable)iter.next();      getArgList().add(new VarAccess(v.name()));    }  }  public ConstructorDecl ConstructorDecl.createAccessor() {    ConstructorDecl c = (ConstructorDecl)hostType().getAccessor(this, "constructor");    if(c != null) return c;    // make sure enclosing varibles are added as parameters prior to building accessor    addEnclosingVariables();    Modifiers modifiers = new Modifiers(new List());    modifiers.addModifier(new Modifier("synthetic"));    modifiers.addModifier(new Modifier("public"));    List parameters = createAccessorParameters();        // add all parameters as arguments except for the dummy parameter    List args = new List();    for(int i = 0; i < parameters.getNumChildNoTransform() - 1; i++)      args.add(new VarAccess(((ParameterDeclaration)parameters.getChildNoTransform(i)).name()));    ConstructorAccess access = new ConstructorAccess("this", args);    access.addEnclosingVariables = false;    c = new ConstructorDecl(      modifiers,      name(),      parameters,      (List)getExceptionList().fullCopy(),      new Opt(        new ExprStmt(          access        )      ),      new Block(        new List().add(new ReturnStmt(new Opt()))      )    );    c = hostType().addConstructor(c);    c.addEnclosingVariables = false;    hostType().addAccessor(this, "constructor", c);    return c;  }  protected List ConstructorDecl.createAccessorParameters() {    List parameters = new List();    for (int i=0; i<getNumParameter(); i++)      parameters.add(new ParameterDeclaration(getParameter(i).type(), getParameter(i).name()));    parameters.add(new ParameterDeclaration(createAnonymousJavaTypeDecl().createBoundAccess(), ("p" + getNumParameter())));    return parameters;  }  protected TypeDecl ConstructorDecl.createAnonymousJavaTypeDecl() {    ClassDecl classDecl =      new ClassDecl(          new Modifiers(new List().add(new Modifier("synthetic"))),          "" + hostType().nextAnonymousIndex(),          new Opt(),          new List(),          new List()      );    classDecl = hostType().addMemberClass(classDecl);    hostType().addUsedNestedType(classDecl);    return classDecl;  }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -