[Demonstration 1]

[Buggy Method]
public synchronized boolean registerSchemata(RegistrationContext context) {
    this.context = context;
    requiredSchemata.clear();
    providedSchemata.clear();
    resolvingSchemata.clear();
    Model<Schema> schemaModel = context.schemaManager().getMetaSchema().getSchemaModel();
    ObservableSet<?, Binding<Schema>> schemaBindingChanges = context.schemaManager().getBindings(schemaModel);
    schemaBindingChanges.changes().addObserver(c -> {
        new Thread(() -> {
            synchronized (schemaBindingChanges) {
                synchronized (resolvingSchemata) {
                    resolvingSchemata.removeAll(context.schemaManager().getBindingFutures(schemaModel).stream().filter(BindingFuture::isDone).collect(Collectors.toSet()));
                    detectDeadlock();
                }
            }
        }).start();
    });
    if (!context.sources().isEmpty()) {
        new ContextClassLoaderRunner(context.classLoader()).run(() -> registerSchemaResources());
        return true;
    } else {
        return false;
    }
}

[Buggy Hunk]
new ContextClassLoaderRunner(context.classLoader()).run(() -> registerSchemaResources());

[Patch]
registerSchemaResources();

[Demonstration 2]

[Buggy Method]
@Test
public void push_SPDY_3() throws Exception {
    enableProtocol(Protocol.SPDY_3);
    server.enqueue(new MockResponse().withPush(new PushPromise("GET", "/pushed", Headers.of("foo: bar"), new MockResponse().setBody("push data"))).setBody("abc"));
    TestPushObserver pushObserver = new TestPushObserver();
    Request request = new Request.Builder().url(server.getUrl("/")).build();
    executeSynchronously(request, pushObserver).assertCode(200).assertBody("abc");
    RecordedRequest recordedRequest = server.takeRequest();
    assertEquals("GET", recordedRequest.getMethod());
    assertEquals(0, recordedRequest.getBody().size());
    synchronized (pushObserver) {
        if (!pushObserver.gotRequest()) {
            pushObserver.wait();
        }
        assertNull(pushObserver.exception());
        assertEquals("/pushed", pushObserver.response().header("path"));
        assertEquals("push data", new String(pushObserver.response().body().bytes()));
    }
}

[Buggy Hunk]
.withPush(new PushPromise("GET", "/pushed", Headers.of("foo: bar"),

[Patch]
.withPush(new PushPromise("GET", "/pushed", Headers.of("foo", "bar"),

[Demonstration 3]

[Buggy Method]
private void populateTestData() {
    data = new JsonArray();
    for (int i = 0; i < 5; i++) {
        data.add(new JsonObject().put("id", i).put("username", "user" + i));
    }
    endpoint().getRepository().addArray(data);
}

[Buggy Hunk]
endpoint().getRepository().addArray(data);

[Patch]
UserEndpoint.endpoint().getRepository().addArray(data);