protected JRCompilationSourceCode generateClass() throws JRException {
    StringBuffer sb = new StringBuffer();

    generateClassStart(sb);

    generateDeclarations(sb);

    generateInitMethod(sb);
    generateInitParamsMethod(sb);
    if (fieldsMap != null) {
      generateInitFieldsMethod(sb);
    }
    generateInitVarsMethod(sb);

    List<JRExpression> expressions = sourceTask.getExpressions();
    sb.append(generateMethod(JRExpression.EVALUATION_DEFAULT, expressions));
    if (sourceTask.isOnlyDefaultEvaluation()) {
      List<JRExpression> empty = new ArrayList<JRExpression>();
      sb.append(generateMethod(JRExpression.EVALUATION_OLD, empty));
      sb.append(generateMethod(JRExpression.EVALUATION_ESTIMATED, empty));
    } else {
      sb.append(generateMethod(JRExpression.EVALUATION_OLD, expressions));
      sb.append(generateMethod(JRExpression.EVALUATION_ESTIMATED, expressions));
    }

    sb.append("}\n");

    String code = sb.toString();
    JRExpression[] lineExpressions = parseSourceLines(code);
    return new JRDefaultCompilationSourceCode(code, lineExpressions);
  }