code: public static final boolean isAssignmentCompatible(Class<?> parameterType, Class<?> parameterization) {
          // try plain assignment
          if (parameterType.isAssignableFrom(parameterization)) {
              return true;
          }
  
          if (parameterType.isPrimitive()) {
              // this method does *not* do widening - you must specify exactly
              // is this the right behaviour?
              Class<?> parameterWrapperClazz = getPrimitiveWrapper(parameterType);
              if (parameterWrapperClazz != null) {
                  return parameterWrapperClazz.equals(parameterization);
              }
          }
  
          return false;
      }
docs: <p>Determine whether a type can be used as a parameter in a method invocation.
  This method handles primitive conversions correctly.</p>
  
  <p>In order words, it will match a <code>Boolean</code> to a <code>boolean</code>,
  a <code>Long</code> to a <code>long</code>,
  a <code>Float</code> to a <code>float</code>,
  a <code>Integer</code> to a <code>int</code>,
  and a <code>Double</code> to a <code>double</code>.
  Now logic widening matches are allowed.
  For example, a <code>Long</code> will not match a <code>int</code>.
  
  @param parameterType the type of parameter accepted by the method
  @param parameterization the type of parameter being tested
  
  @return true if the assignment is compatible.