ParameterMetaData sndParameter = sndParameters.get(i);
// types
if (notEqual(fstParameter.getType(), sndParameter.getType()))
return true;
// values
ValueMetaData fstValue = fstParameter.getValue();
ValueMetaData sndValue = sndParameter.getValue();
Class<?> fstClass = fstValue != null ? fstValue.getClass() : null;
Class<?> sndClass = sndValue != null ? sndValue.getClass() : null;
// class guess
if (notEqual(fstClass, sndClass))
return true;
Object fstObject = fstValue != null ? fstValue.getUnderlyingValue() : null;
Object sndObject = sndValue != null ? sndValue.getUnderlyingValue() : null;
// underlying value guess - only on both being non-null
// e.g. since those who already passed have their underlying value set,
// those who didn't, don't have it, but they are the 'same' install
// see ThisValueMetaData
if ((fstObject != null && sndObject != null) && notEqual(fstObject, sndObject))