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

📄 variabledeclaration.jrag

📁 JDK1.4编译器前端
💻 JRAG
字号:
/* * The JastAdd Extensible Java Compiler (http://jastadd.org) is covered * by the modified BSD License. You should have received a copy of the * modified BSD license with this compiler. *  * Copyright (c) 2005-2008, Torbjorn Ekman * All rights reserved. */aspect Variables {  interface Variable {    public String name();    public TypeDecl type();    // 4.5.3    public boolean isClassVariable();    public boolean isInstanceVariable();    public boolean isMethodParameter();    public boolean isConstructorParameter();    public boolean isExceptionHandlerParameter();    public boolean isLocalVariable();    // 4.5.4    public boolean isFinal();    public boolean isBlank();    public boolean isStatic();    public boolean isSynthetic();    public TypeDecl hostType();    public Expr getInit();    public boolean hasInit();    public Constant constant();  }    VariableDeclaration implements Variable;  // 4.5.3  syn boolean VariableDeclaration.isClassVariable() = false;  syn boolean VariableDeclaration.isInstanceVariable() = false;  syn boolean VariableDeclaration.isMethodParameter() = false;  syn boolean VariableDeclaration.isConstructorParameter() = false;  syn boolean VariableDeclaration.isExceptionHandlerParameter() = false;  syn boolean VariableDeclaration.isLocalVariable() = true;  // 4.5.4  syn boolean VariableDeclaration.isFinal() = getModifiers().isFinal();  syn boolean VariableDeclaration.isBlank() = !hasInit();  syn boolean VariableDeclaration.isStatic() = false;    syn String VariableDeclaration.name() = getID();  syn lazy Constant VariableDeclaration.constant() = type().cast(getInit().constant());  FieldDeclaration implements Variable;  // 4.5.3  syn boolean FieldDeclaration.isClassVariable() = isStatic() || hostType().isInterfaceDecl();  syn boolean FieldDeclaration.isInstanceVariable() = (hostType().isClassDecl() || hostType().isAnonymous() )&& !isStatic();  syn boolean FieldDeclaration.isMethodParameter() = false;  syn boolean FieldDeclaration.isConstructorParameter() = false;  syn boolean FieldDeclaration.isExceptionHandlerParameter() = false;  syn boolean FieldDeclaration.isLocalVariable() = false;  syn boolean FieldDeclaration.isBlank() = !hasInit();    syn String FieldDeclaration.name() = getID();  syn lazy Constant FieldDeclaration.constant() = type().cast(getInit().constant());  ParameterDeclaration implements Variable;  // 4.5.3  syn boolean ParameterDeclaration.isClassVariable() = false;  syn boolean ParameterDeclaration.isInstanceVariable() = false;  inh boolean ParameterDeclaration.isMethodParameter();  inh boolean ParameterDeclaration.isConstructorParameter();  inh boolean ParameterDeclaration.isExceptionHandlerParameter();  syn boolean ParameterDeclaration.isLocalVariable() = false;    // 4.5.3  eq ConstructorDecl.getParameter().isMethodParameter() = false;  eq ConstructorDecl.getParameter().isConstructorParameter() = true;  eq ConstructorDecl.getParameter().isExceptionHandlerParameter() = false;  eq MethodDecl.getParameter().isMethodParameter() = true;  eq MethodDecl.getParameter().isConstructorParameter() = false;  eq MethodDecl.getParameter().isExceptionHandlerParameter() = false;  eq CatchClause.getParameter().isMethodParameter() = false;  eq CatchClause.getParameter().isConstructorParameter() = false;  eq CatchClause.getParameter().isExceptionHandlerParameter() = true;    // 4.5.4  syn boolean ParameterDeclaration.isFinal() = getModifiers().isFinal();  syn boolean ParameterDeclaration.isBlank() = true;  syn boolean ParameterDeclaration.isStatic() = false;    syn String ParameterDeclaration.name() = getID();  syn boolean ParameterDeclaration.hasInit() = false;  syn Expr ParameterDeclaration.getInit() { throw new UnsupportedOperationException(); }  syn Constant ParameterDeclaration.constant() { throw new UnsupportedOperationException(); }  syn String VariableDecl.name() = getID();}aspect VariableDeclarationTransformation {  // FieldDecl with single VariableDecl -> FieldDeclaration  rewrite FieldDecl {    when(getNumVariableDecl() == 1)    to FieldDeclaration {      FieldDeclaration decl = getVariableDecl(0).createFieldDeclarationFrom(getModifiers(), getTypeAccess());      decl.setStart(start); // copy location information      decl.setEnd(end); // copy location information      return decl;    }  }  // FieldDecl with multiple VariableDecl -> FieldDeclaration+  rewrite FieldDecl in TypeDecl.getBodyDecl() {    when(getNumVariableDecl() > 1)    to List {      List varList = new List();      for(int j = 0; j < getNumVariableDecl(); j++) {        FieldDeclaration f =           getVariableDecl(j).createFieldDeclarationFrom(            (Modifiers)getModifiers().fullCopy(),            (Access)getTypeAccess().fullCopy()          );        if(j == 0)          f.setStart(start);        varList.add(f);      }      return varList;    }  }  // VarDeclStmt with single VariableDecl -> VariableDeclaration  rewrite VarDeclStmt {    when(getNumVariableDecl() == 1)    to VariableDeclaration {      VariableDeclaration decl = getVariableDecl(0).createVariableDeclarationFrom(getModifiers(), getTypeAccess());      decl.setStart(start); // copy location information      decl.setEnd(end); // copy location information      return decl;    }  }  // VarDeclStmt with multiple VariableDecl -> VariableDeclaration+  rewrite VarDeclStmt in Block.getStmt() {    when(getNumVariableDecl() > 1)    to List createVariableDeclarationList();  }  rewrite VarDeclStmt in ForStmt.getInitStmt() {    when(getNumVariableDecl() > 1)    to List createVariableDeclarationList();  }  private List VarDeclStmt.createVariableDeclarationList() {    List varList = new List();    for(int j = 0; j < getNumVariableDecl(); j++) {      VariableDeclaration v =        getVariableDecl(j).createVariableDeclarationFrom(          (Modifiers)getModifiers().fullCopy(),          (Access)getTypeAccess().fullCopy()        );      if(j == 0)        v.setStart(start);      varList.add(v);    }    return varList;  }  public VariableDeclaration VariableDecl.createVariableDeclarationFrom(Modifiers modifiers, Access type) {    VariableDeclaration decl = new VariableDeclaration(      modifiers,      type.addArrayDims(getDimsList()),      getID(),      getInitOpt()    );    decl.setStart(start); // copy location information    decl.setEnd(end); // copy location information    decl.IDstart = IDstart;    decl.IDend = IDend;    return decl;  }  public FieldDeclaration VariableDecl.createFieldDeclarationFrom(Modifiers modifiers, Access type) {    FieldDeclaration decl = new FieldDeclaration(      modifiers,      type.addArrayDims(getDimsList()),      getID(),      getInitOpt()    );    decl.setStart(start); // copy location information    decl.setEnd(end); // copy location information    decl.IDstart = IDstart;    decl.IDend = IDend;    return decl;  }}

⌨️ 快捷键说明

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