private JExpression box(JExpression original, int implicitConversion) {
int typeId = (implicitConversion & TypeIds.IMPLICIT_CONVERSION_MASK) >> 4;
ClassScope scope = curClass.scope;
BaseTypeBinding primitiveType = (BaseTypeBinding) TypeBinding.wellKnownType(scope, typeId);
ReferenceBinding boxType = (ReferenceBinding) scope.boxing(primitiveType);
MethodBinding valueOfMethod =
boxType.getExactMethod(VALUE_OF, new TypeBinding[]{primitiveType}, scope
.compilationUnitScope());
assert valueOfMethod != null;
JType targetPrimitiveType = typeMap.get(primitiveType);
if (original.getType() != targetPrimitiveType) {
original = new JCastOperation(original.getSourceInfo(), targetPrimitiveType, original);
}
JMethod boxMethod = typeMap.get(valueOfMethod);
JMethodCall call = new JMethodCall(original.getSourceInfo(), null, boxMethod);
call.addArg(original);
return call;
}