private Character tryCharConstant(final Expression expr) {
   if (expr instanceof ConstantExpression) {
     ConstantExpression ce = (ConstantExpression) expr;
     if (ClassHelper.STRING_TYPE.equals(ce.getType())) {
       String val = (String) ce.getValue();
       if (val != null && val.length() == 1) {
         return val.charAt(0);
       }
     }
   }
   return null;
 }
  private void printField(PrintWriter out, FieldNode fieldNode, boolean isInterface) {
    if ((fieldNode.getModifiers() & Opcodes.ACC_PRIVATE) != 0) return;
    printAnnotations(out, fieldNode);
    if (!isInterface) {
      printModifiers(out, fieldNode.getModifiers());
    }

    ClassNode type = fieldNode.getType();
    printType(out, type);

    out.print(" ");
    out.print(fieldNode.getName());
    if (isInterface || (fieldNode.getModifiers() & Opcodes.ACC_FINAL) != 0) {
      out.print(" = ");
      Expression valueExpr = fieldNode.getInitialValueExpression();
      if (valueExpr instanceof ConstantExpression) {
        valueExpr = Verifier.transformToPrimitiveConstantIfPossible((ConstantExpression) valueExpr);
      }
      if (valueExpr instanceof ConstantExpression
          && fieldNode.isStatic()
          && fieldNode.isFinal()
          && ClassHelper.isStaticConstantInitializerType(valueExpr.getType())
          && valueExpr.getType().equals(fieldNode.getType())) {
        // GROOVY-5150 : Initialize value with a dummy constant so that Java cross compiles
        // correctly
        if (ClassHelper.STRING_TYPE.equals(valueExpr.getType())) {
          out.print("\"" + escapeSpecialChars(valueExpr.getText()) + "\"");
        } else if (ClassHelper.char_TYPE.equals(valueExpr.getType())) {
          out.print("'" + valueExpr.getText() + "'");
        } else {
          ClassNode constantType = valueExpr.getType();
          out.print('(');
          printType(out, type);
          out.print(") ");
          out.print(valueExpr.getText());
          if (ClassHelper.Long_TYPE.equals(ClassHelper.getWrapper(constantType))) out.print('L');
        }
      } else if (ClassHelper.isPrimitiveType(type)) {
        String val = type == ClassHelper.boolean_TYPE ? "false" : "0";
        out.print("new " + ClassHelper.getWrapper(type) + "((" + type + ")" + val + ")");
      } else {
        out.print("null");
      }
    }
    out.println(";");
  }
 private Expression transformDeclarationExpression(final BinaryExpression bin) {
   Expression leftExpression = bin.getLeftExpression();
   if (leftExpression instanceof VariableExpression) {
     if (ClassHelper.char_TYPE.equals(((VariableExpression) leftExpression).getOriginType())) {
       Expression rightExpression = bin.getRightExpression();
       if (rightExpression instanceof ConstantExpression
           && ClassHelper.STRING_TYPE.equals(rightExpression.getType())) {
         String text = (String) ((ConstantExpression) rightExpression).getValue();
         if (text.length() == 1) {
           // optimize char initialization
           ConstantExpression ce = new ConstantExpression(text.charAt(0), true);
           ce.setSourcePosition(rightExpression);
           bin.setRightExpression(ce);
           return bin;
         }
       }
     }
   }
   return null;
 }