public function validate(array $parameterValues, InstallerDescriptor $descriptor)
    {
        $violations = array();

        foreach ($parameterValues as $name => $value) {
            if (!$descriptor->hasParameter($name)) {
                $violations[] = new ConstraintViolation(
                    ConstraintViolation::NO_SUCH_PARAMETER,
                    $value,
                    $descriptor->getName(),
                    $name
                );
            }
        }

        foreach ($descriptor->getParameters() as $parameter) {
            if (!isset($parameterValues[$parameter->getName()])) {
                if ($parameter->isRequired()) {
                    $violations[] = new ConstraintViolation(
                        ConstraintViolation::MISSING_PARAMETER,
                        $parameterValues,
                        $descriptor->getName(),
                        $parameter->getName()
                    );
                }
            }
        }

        return $violations;
    }