[Demonstration 1]

[Buggy Method]
private void enrichPostParameter(HttpPost httpPost, Map<String, String> params) throws UnsupportedEncodingException {
    if (params != null && params.size() != 0) {
        if (params.size() == 1 && params.get("json") != null) {
            httpPost.addHeader("Content-Type", "application/json");
            StringEntity nameValuePairs1 = new StringEntity((String) params.get("json"), this.defaultCharset);
            nameValuePairs1.setContentType("text/json");
            nameValuePairs1.setContentEncoding(new BasicHeader("Content-Type", "application/json"));
            httpPost.setEntity(nameValuePairs1);
        } else {
            List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
            for (Map.Entry<String, String> entry : params.entrySet()) {
                nameValuePairs.add(new BasicNameValuePair(entry.getKey(), entry.getValue()));
            }
            UrlEncodedFormEntity urlEncodedFormEntity1 = new UrlEncodedFormEntity(nameValuePairs, this.defaultCharset);
            httpPost.setEntity(urlEncodedFormEntity1);
        }
    }
}

[Buggy Hunk]
StringEntity nameValuePairs1 = new StringEntity((String) params.get("json"), this.defaultCharset);

[Patch]
StringEntity nameValuePairs1 = new StringEntity(params.get("json"), this.defaultCharset);

[Demonstration 2]

[Buggy Method]
private void generateBeansForEntity(BeanDefinitionRegistry registry, Class<?> entity) throws NotFoundException, CannotCompileException {
    ApiResourceMapping mapping = ApiResourceUtil.from(entity);
    BeanDefinitionDetails details = map.get(entity);
    if (details.service == null) {
        String component = "Service";
        String name = entity.getSimpleName() + component;
        Class<?> abstractClass = ApiResourceServiceImpl.class;
        Class<?> serviceClass = JavassistUtil.generateTypedSubclass(name, abstractClass, mapping.idClass(), mapping.domainClass(), mapping.createBeanClass(), mapping.readBeanClass(), mapping.updateBeanClass());
        AbstractBeanDefinition def = BeanDefinitionBuilder.rootBeanDefinition(serviceClass).addConstructorArgValue(mapping).getBeanDefinition();
        registry.registerBeanDefinition(name, def);
        details.service = def;
        log.info("Generated {} for {}. Generic signature: {}", component, entity.getSimpleName(), GenericTypeResolver.resolveTypeArguments(serviceClass, abstractClass));
    } else {
        log.info("Found service for {}", entity.getSimpleName());
    }
    if (details.repository == null) {
        String component = "Repository";
        String name = entity.getSimpleName() + component;
        Class<?> abstractClass = ApiResourceRepository.class;
        Class<?> serviceClass = JavassistUtil.generateTypedInterface(name, abstractClass, mapping.idClass(), mapping.domainClass());
        AbstractBeanDefinition def = BeanDefinitionBuilder.rootBeanDefinition(JpaRepositoryFactoryBean.class).addPropertyValue("repositoryInterface", serviceClass).getBeanDefinition();
        registry.registerBeanDefinition(entity.getSimpleName() + "Repository", def);
        details.repository = def;
        log.info("Generated {} for {}. Generic signature: {}", component, entity.getSimpleName(), GenericTypeResolver.resolveTypeArguments(serviceClass, abstractClass));
    } else {
        log.info("Found repository for {}", entity.getSimpleName());
    }
    if (details.controller == null) {
        if (mapping.omitController()) {
            log.info("Ignored controller for {}", entity.getSimpleName());
        } else {
            String component = "Controller";
            String name = entity.getSimpleName() + component;
            Class<?> abstractClass = ApiResourceController.class;
            Class<?> serviceClass = JavassistUtil.generateTypedSubclass(name, abstractClass, mapping.idClass(), mapping.domainClass(), mapping.createBeanClass(), mapping.readBeanClass(), mapping.updateBeanClass());
            AbstractBeanDefinition def = BeanDefinitionBuilder.rootBeanDefinition(serviceClass).addConstructorArgValue(mapping).getBeanDefinition();
            registry.registerBeanDefinition(name, def);
            details.controller = def;
            log.info("Generated {} for {}. Generic signature: {}", component, entity.getSimpleName(), GenericTypeResolver.resolveTypeArguments(serviceClass, abstractClass));
        }
    } else {
        log.info("Found controller for {}", entity.getSimpleName());
        String name = entity.getSimpleName() + "Controller";
        registry.registerBeanDefinition(name, details.controller);
    }
    if (details.assembler == null) {
        String component = "Assembler";
        String name = entity.getSimpleName() + component;
        Class<?> abstractClass = ApiResourceAssembler.class;
        Collection<Class<?>> ifaces = new ArrayList<>();
        ifaces.add(IApiResourceAssembler.class);
        Class<?> serviceClass = JavassistUtil.generateTypedSubclass(name, abstractClass, ifaces, mapping.idClass(), mapping.domainClass(), mapping.createBeanClass(), mapping.readBeanClass(), mapping.updateBeanClass());
        AbstractBeanDefinition def = BeanDefinitionBuilder.rootBeanDefinition(serviceClass).addPropertyValue("mapping", mapping).getBeanDefinition();
        registry.registerBeanDefinition(name, def);
        details.assembler = def;
        log.info("Generated {} for {}. Generic signature: {}", component, entity.getSimpleName(), GenericTypeResolver.resolveTypeArguments(serviceClass, abstractClass));
    } else {
        log.info("Found assembler for {}", entity.getSimpleName());
    }
}

[Buggy Hunk]
Class<?> serviceClass = JavassistUtil.generateTypedSubclass(name, abstractClass, ifaces, mapping.idClass(), mapping.domainClass(), mapping.createBeanClass(), mapping.readBeanClass(), mapping.updateBeanClass());

[Patch]
Class<?> serviceClass = JavassistUtil.generateTypedSubclass(name, abstractClass, mapping.idClass(), mapping.domainClass(), mapping.createBeanClass(), mapping.readBeanClass(), mapping.updateBeanClass());

[Demonstration 3]

[Buggy Method]
@Override
public BaseSpec forks(@DelegatesTo(value = ForkSpec.class, strategy = Closure.DELEGATE_FIRST) Closure body) {
    Closure c = adjustDelegate(body);
    stack.add(new ExecuteAllFilteringAggregator());
    c.call();
    FilteringAggregator agg = stack.remove(stack.size() - 1);
    lastOf(lastOf(stack).getCases()).setAggregator(agg);
    return this;
}

[Buggy Hunk]
public BaseSpec forks(@DelegatesTo(value = ForkSpec.class, strategy = Closure.DELEGATE_FIRST) Closure body) {

[Patch]
public ForkSpec forks(@DelegatesTo(value = ForkSpec.class, strategy = Closure.DELEGATE_FIRST) Closure body) {