docs: @Override
  	protected Expression instantiate(Object oldInstance, Encoder enc)
  	{
  		Object[] args = null;
  
  		// Set the constructor arguments if any property names exist
  		if (this.propertyNames.length > 0)
  		{
  			// Prepare the property descriptors for finding getter method later
  			BeanInfo info = null;
  			HashMap<String, PropertyDescriptor> proDscMap = null;
  			try
  			{
  				info = Introspector.getBeanInfo(oldInstance.getClass(), Introspector.IGNORE_ALL_BEANINFO);
  				proDscMap = internalAsMap(info.getPropertyDescriptors());
  			}
  			catch (IntrospectionException ex)
  			{
  				enc.getExceptionListener().exceptionThrown(ex);
  				throw new Error(ex);
  			}
  
  			// Get the arguments values
  			args = new Object[this.propertyNames.length];
  			for (int i = 0; i < this.propertyNames.length; i++)
  			{
  				String propertyName = propertyNames[i];
  				if (null == propertyName || 0 == propertyName.length())
  				{
  					continue;
  				}
  
  				// Get the value for each property of the given instance
  				try
  				{
  					args[i] = getPropertyValue(proDscMap, oldInstance, this.propertyNames[i]);
  				}
  				catch (Exception ex)
  				{
  					enc.getExceptionListener().exceptionThrown(ex);
  				}
  			}
  		}
  
  		return new Expression(oldInstance, oldInstance.getClass(), BeansUtils.NEW, args);
  	}