if (parentDeclaration.getParameterValue() == null) {
ParameterDeclaration childDeclaration = binding.getDeclarationInChild(); ParameterDeclaration parentDeclaration = binding.getDeclarationInParent();
    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);        assert(entry != null);  // all tasks should have an entry        // 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;    }