protected function getParameters()
    {
        // 1. load from boilerplate
        // 2. load from environment
        // 3. load from $this->parameters
        $boilerplateParameters = $this->readFromBoilerplate();

        $environmentParameters = $this->tryToLoadFromEnvironment($this->loadFromEnvironment);
        $missingInEnvironment = array_diff($this->loadFromEnvironment, array_keys($environmentParameters));

        if ($missingInEnvironment && $this->failOnMissingEnvVariables) {
            throw new TaskException(
                $this,
                'Some parameters could not be found via environment: '
                . implode(', ', $this->getEnvName($missingInEnvironment))
            );
        }

        return array_replace_recursive($boilerplateParameters, $environmentParameters, $this->parameters);
    }