/**
   * Declare fields in the parent's (partial) class.
   *
   * @param context the parent (class) context.
   * @param partial the code emitter (basically an abstraction for producing the partial class).
   */
  public void preAnalyze(Context context, CLEmitter partial) {
    // Fields may not be declared abstract.
    if (mods.contains("abstract")) {
      JAST.compilationUnit.reportSemanticError(line(), "Field cannot be declared abstract");
    }

    for (JVariableDeclarator decl : decls) {
      // Add field to (partial) class
      decl.setType(decl.type().resolve(context));
      partial.addField(mods, decl.name(), decl.type().toDescriptor(), false);
    }
  }
Beispiel #2
0
 public void writeToStdOut(PrettyPrinter p) {
   p.printf("<JForStatement line=\"%d\">\n", line());
   p.indentRight();
   p.printf("<Initialization>\n");
   p.indentRight();
   initialize.writeToStdOut(p);
   p.indentLeft();
   p.printf("</Initialization>\n");
   p.printf("<Termination>\n");
   p.indentRight();
   terminate.writeToStdOut(p);
   p.indentLeft();
   p.printf("</Termination>\n");
   p.printf("<Update>\n");
   p.indentRight();
   update.writeToStdOut(p);
   p.indentLeft();
   p.printf("</Update>\n");
   p.printf("<Consequent>\n");
   p.indentRight();
   block.writeToStdOut(p);
   p.indentLeft();
   p.printf("</Consequent>\n");
   p.indentLeft();
   p.printf("</JForStatement>\n");
 }
 /**
  * Analysis of field declaration involves rewriting initializations (if any) as assignment
  * statements.
  *
  * @param context context in which names are resolved.
  * @return the analyzed JFieldDeclaration subtree.
  */
 public JFieldDeclaration analyze(Context context) {
   for (JVariableDeclarator decl : decls) {
     // All initializations must be turned into assignment
     // statements and analyzed
     if (decl.initializer() != null) {
       JAssignOp assignOp =
           new JAssignOp(decl.line(), new JVariable(decl.line(), decl.name()), decl.initializer());
       assignOp.isStatementExpression = true;
       initializations.add(new JStatementExpression(decl.line(), assignOp).analyze(context));
     }
   }
   return this;
 }
 /** @inheritDoc */
 public void writeToStdOut(PrettyPrinter p) {
   p.printf("<JFieldDeclaration line=\"%d\"/>\n", line());
   p.indentRight();
   if (mods != null) {
     p.println("<Modifiers>");
     p.indentRight();
     for (String mod : mods) {
       p.printf("<Modifier name=\"%s\"/>\n", mod);
     }
     p.indentLeft();
     p.println("</Modifiers>");
   }
   if (decls != null) {
     p.println("<VariableDeclarators>");
     for (JVariableDeclarator decl : decls) {
       p.indentRight();
       decl.writeToStdOut(p);
       p.indentLeft();
     }
     p.println("<VariableDeclarators>");
   }
   p.indentLeft();
   p.println("</JFieldDeclaration>");
 }
 /**
  * Code generation for field declaration involves generate field the header.
  *
  * @param output the code emitter (basically an abstraction for producing the .class file).
  */
 public void codegen(CLEmitter output) {
   for (JVariableDeclarator decl : decls) {
     // Add field to class
     output.addField(mods, decl.name(), decl.type().toDescriptor(), false);
   }
 }