logger.debug("instantiating a new object for parent parameter " + parentDeclaration.getName());
    private NewTask makeSubTask(Step step, SubstepBinding substepBinding, Task parentTask, NewWorkflow workflow) {        // recursive call to create this task -- this will create the task's subtasks, etc        NewTask subtask = (NewTask) makeTask(step);        // set the parameter bindings for this task        LittleJILStepsTable.Entry entry = stepsTable.getEntry(subtask);        if (entry != null) {            // initialize the subtasks's in parameters... note that these values might get            // updated later by the TaskExpander (if for example the parameters that they are getting            // values from are updated by one of the subtasks)            for (Enumeration parameterBindings = substepBinding.parameterBindings(); parameterBindings.hasMoreElements();) {                ParameterBinding binding = (ParameterBinding) parameterBindings.nextElement();                if (binding.getBindingMode() == ParameterBinding.COPY_IN ||                        binding.getBindingMode() == ParameterBinding.COPY_IN_AND_OUT) {                    ParameterDeclaration childDeclaration = binding.getDeclarationInChild();                    ParameterDeclaration parentDeclaration = binding.getDeclarationInParent();                    if (parentDeclaration.getParameterValue() == null) {                        // instantiate it a new parameter value                        logger.debug("instantiating a new object for parent parameter " + parentDeclaration.getName());                        try {                            Class c = Class.forName(parentDeclaration.getParameterClassName());                            // HACK to have an "interesting" value in some cases                            Object o = null;                            if (c == String.class) {                                o = "42";                            } else {                                o = c.newInstance();                            }                            parentDeclaration.setParameterValue(o);                        } catch (Exception e) {                            logger.warn("Could not instantiate parameter: " + e);                        }                    }                    childDeclaration.setParameterValue(parentDeclaration.getParameterValue());                }            }            entry.setParameterBindings(PluginUtil.collectionFromEnumeration(substepBinding.parameterBindings()));        }        logger.debug("adding task " + subtask.getVerb() + " to workflow of task " + parentTask.getVerb());        subtask.setParentTask(parentTask);        workflow.addTask(subtask);        subtask.setWorkflow(workflow);        return subtask;    }