/**
  * Checks if the assignment needs a downcast and inserts it if necessary
  *
  * @param expression the right hand-side
  * @param expressionType the type of the right hand-side. Can be null
  * @param ast the AST
  * @param variableType the Type of the variable the expression will be assigned to
  * @param is50OrHigher if <code>true</code> java 5.0 code will be assumed
  * @return the casted expression if necessary
  */
 private static Expression createNarrowCastIfNessecary(
     Expression expression,
     ITypeBinding expressionType,
     AST ast,
     ITypeBinding variableType,
     boolean is50OrHigher) {
   PrimitiveType castTo = null;
   if (variableType.isEqualTo(expressionType)) return expression; // no cast for same type
   if (is50OrHigher) {
     if (ast.resolveWellKnownType("java.lang.Character").isEqualTo(variableType)) // $NON-NLS-1$
     castTo = ast.newPrimitiveType(PrimitiveType.CHAR);
     if (ast.resolveWellKnownType("java.lang.Byte").isEqualTo(variableType)) // $NON-NLS-1$
     castTo = ast.newPrimitiveType(PrimitiveType.BYTE);
     if (ast.resolveWellKnownType("java.lang.Short").isEqualTo(variableType)) // $NON-NLS-1$
     castTo = ast.newPrimitiveType(PrimitiveType.SHORT);
   }
   if (ast.resolveWellKnownType("char").isEqualTo(variableType)) // $NON-NLS-1$
   castTo = ast.newPrimitiveType(PrimitiveType.CHAR);
   if (ast.resolveWellKnownType("byte").isEqualTo(variableType)) // $NON-NLS-1$
   castTo = ast.newPrimitiveType(PrimitiveType.BYTE);
   if (ast.resolveWellKnownType("short").isEqualTo(variableType)) // $NON-NLS-1$
   castTo = ast.newPrimitiveType(PrimitiveType.SHORT);
   if (castTo != null) {
     CastExpression cast = ast.newCastExpression();
     if (ASTNodes.needsParentheses(expression)) {
       ParenthesizedExpression parenthesized = ast.newParenthesizedExpression();
       parenthesized.setExpression(expression);
       cast.setExpression(parenthesized);
     } else cast.setExpression(expression);
     cast.setType(castTo);
     return cast;
   }
   return expression;
 }
示例#2
0
 public CastExpression newCast(Type type, Expression expr) {
   CastExpression cast = ast.newCastExpression();
   cast.setExpression(expr);
   cast.setType(type);
   return cast;
 }
 /**
  * Builds a new {@link CastExpression} instance.
  *
  * @param typeName the name of the type being cast to
  * @param expr the expression being cast
  * @return a new CastExpression
  */
 public CastExpression cast(String typeName, Expression expr) {
   final CastExpression ce = ast.newCastExpression();
   ce.setType(type(typeName));
   ce.setExpression(expr);
   return ce;
 }