docs: @SuppressWarnings({ "rawtypes", "unchecked" })
  	public void assign(RuleProxyField target, Object value, RuleContext ruleContext, boolean dummy)
      {
      	ProxyField target1 = target.getProxyField();
          Class<?> clazz = target1.getPropertyMetadata().getSetMethod().getParameterTypes()[0];
          if (value instanceof List<?>)
          {
  			List<ProxyField> sourceList = (List<ProxyField>)value;
              RuleProxyField rpf = target;
              for (ProxyField pf: sourceList)
              {
                  Object listValue = pf.getValue();
                  if (rpf.isDifferent(listValue))
                  {
                      if (isExcluded(target1,String.valueOf(listValue)))
                      {
                          String message = m_messageSourceAccessor.getMessage("nz.co.senanque.rules.excluded.value", new Object[]{ listValue, target1.getFieldName()});
                          throw new InferenceException(message);
                      }
                      if (listValue != null && !clazz.isAssignableFrom(listValue.getClass()))
                      {
                          listValue = ConvertUtils.convertToComparable((Class<Comparable>)clazz, listValue,m_messageSourceAccessor);
                      }
                      addAssignedField(target1);
                      target.assign(listValue);
                      addToAgenda(rpf);
                  }
                  ruleContext.addAssign(rpf);
              }
              return;
          }
          if (value != null && !clazz.isAssignableFrom(value.getClass()))
          {
              value = ConvertUtils.convertToComparable((Class<Comparable>)clazz, value,m_messageSourceAccessor);
          }
          RuleProxyField rpf = getRuleProxyField(target1);
          if (rpf.isDifferent(value))
          {
              if (isExcluded(target1,String.valueOf(value)))
              {
                  String message = m_messageSourceAccessor.getMessage("nz.co.senanque.rules.excluded.value", new Object[]{ value, target1.getFieldName()});
                  throw new InferenceException(message);
              }
              addAssignedField(target1);
              removeUnknownField(target1);
              target.assign(value);
              addToAgenda(rpf);
          }
          ruleContext.addAssign(rpf);
      }