/** * 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); } }
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); } }