import org.eclipse.jdt.core.dom.AST; //導入方法依賴的package包/類
/**
* 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 true
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)) {
castTo = ast.newPrimitiveType(PrimitiveType.CHAR);
}
if (ast.resolveWellKnownType("java.lang.Byte").isEqualTo(variableType)) {
castTo = ast.newPrimitiveType(PrimitiveType.BYTE);
}
if (ast.resolveWellKnownType("java.lang.Short").isEqualTo(variableType)) {
castTo= ast.newPrimitiveType(PrimitiveType.SHORT);
}
}
if (ast.resolveWellKnownType("char").isEqualTo(variableType)) {
castTo = ast.newPrimitiveType(PrimitiveType.CHAR);
}
if (ast.resolveWellKnownType("byte").isEqualTo(variableType)) {
castTo = ast.newPrimitiveType(PrimitiveType.BYTE);
}
if (ast.resolveWellKnownType("short").isEqualTo(variableType)) {
castTo= ast.newPrimitiveType(PrimitiveType.SHORT);
}
if (castTo != null) {
CastExpression cast = ast.newCastExpression();
if (NecessaryParenthesesChecker.needsParentheses(expression, cast, CastExpression.EXPRESSION_PROPERTY)) {
ParenthesizedExpression parenthesized = ast.newParenthesizedExpression();
parenthesized.setExpression(expression);
cast.setExpression(parenthesized);
} else {
cast.setExpression(expression);
}
cast.setType(castTo);
return cast;
}
return expression;
}