[Demonstration 1]

[Buggy Method]
private void populateEvents(String query) {
    progress.setMessage("Retrieving Events");
    progress.setProgressStyle(ProgressDialog.STYLE_SPINNER);
    progress.setIndeterminate(true);
    progress.show();
    eventAdapter.clear();
    events.clear();
    venues.clear();
    valueOfQuery = query;
    //Getting events stored from in firabse database created by user on our own app
    createdEvents.addValueEventListener(new ValueEventListener() {

        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            int i = 1;
            int includeEvent = 0;
            for (DataSnapshot snapshot : dataSnapshot.getChildren()) {
                CreatedEvents userEvents = snapshot.getValue(CreatedEvents.class);
                userEvents.setDateByValues();
                Event event = new Event(userEvents.getEventName(), userEvents.getEventAddress() + "\n" + userEvents.getEventMonth() + "/" + userEvents.getEventDay() + " " + userEvents.getEventHour() + ":" + userEvents.getEventMinute(), userEvents.getEventDescription(), "null", String.valueOf(i));
                if (userEvents.getEventName().toLowerCase().contains(valueOfQuery.toLowerCase())) {
                    event.setCreatedEvent(true);
                    events.add(event);
                    eventAdapter.notifyItemInserted(events.size() - 1);
                }
                String[] split = userEvents.getEventDescription().split("\\s+");
                for (String aSplit : split) {
                    if (aSplit.contains(valueOfQuery))
                        includeEvent++;
                }
                i++;
            }
        }

        @Override
        public void onCancelled(DatabaseError databaseError) {
        }
    });
    //End getting data from stored firebase database
    //Retrieving events from firebase if they match the search query
    counterToGetPositionOfEvent = 0;
    client.getInfoByQuery(valueOfQuery, tvLatitude, tvLongitude, distance, new JsonHttpResponseHandler() {

        @Override
        public void onSuccess(int statusCode, Header[] headers, JSONObject response) {
            eventRequestCompleted = false;
            try {
                //Retrieving all the events that are related to the search query
                JSONArray eventsObject = response.getJSONArray("events");
                for (int i = 0; i < eventsObject.length(); i++) {
                    Event event = Event.fromJSON(eventsObject.getJSONObject(i));
                    events.add(event);
                    eventAdapter.notifyItemInserted(events.size() - 1);
                    if (i == eventsObject.length() - 1)
                        eventRequestCompleted = true;
                }
            } catch (JSONException e) {
                e.printStackTrace();
            } finally {
                //makes sure that the previous call is completed before moving onto assigning the rest of the values to the event object.
                if (eventRequestCompleted) {
                    counterToSetOrganizer = 0;
                    for (int i = 0; i < events.size(); i++) {
                        client.getOrganizerInfo(events.get(i).getOrganizerId(), new JsonHttpResponseHandler() {

                            @Override
                            public void onSuccess(int statusCode, Header[] headers, JSONObject response) {
                                Organizer organizer = Organizer.fromJson(response);
                                for (int i = 0; i < events.size(); i++) {
                                    if (events.get(i).getOrganizerId().equals(organizer.getOrganizerId())) {
                                        events.get(i).setOrganizer(organizer);
                                        events.get(i).setOrganizerName(organizer.getName());
                                        eventAdapter.notifyDataSetChanged();
                                    }
                                }
                            }
                        });
                    }
                }
                //Once the event object has been populated with the organizer and event information another call is made to
                //Retrieve the venue for the event
                if (eventRequestCompleted) {
                    for (int i = 0; i < events.size(); i++) {
                        client.getVenue(events.get(i).getVenueId(), new JsonHttpResponseHandler() {

                            @Override
                            public void onSuccess(int statusCode, Header[] headers, JSONObject response) {
                                try {
                                    Venue venue = Venue.fromJSON(response);
                                    for (int i = 0; i < events.size(); i++) {
                                        if (events.get(i).getVenueId().equals(venue.getId())) {
                                            venues.add(venue);
                                            events.get(i).setVenue(venue);
                                            String address = "";
                                            if (!venue.getAddress().equals("null"))
                                                address += venue.getAddress();
                                            if (!venue.getCity().equals("null"))
                                                address += ", " + venue.getCity();
                                            if (!venue.getCountry().equals("null"))
                                                address += ", " + venue.getCountry();
                                            events.get(i).setTvEventInfo(events.get(i).getTvEventInfo() + "\n" + address);
                                            eventAdapter.notifyDataSetChanged();
                                        }
                                    }
                                    progress.dismiss();
                                } catch (JSONException e) {
                                    e.printStackTrace();
                                }
                            }

                            @Override
                            public void onFailure(int statusCode, Header[] headers, Throwable throwable, JSONObject errorResponse) {
                                super.onFailure(statusCode, headers, throwable, errorResponse);
                            }
                        });
                    }
                }
            }
            progress.dismiss();
        }

        @Override
        public void onFailure(int statusCode, Header[] headers, String responseString, Throwable throwable) {
            Log.i("info", client.finalUrl + responseString);
        }

        @Override
        public void onFailure(int statusCode, Header[] headers, Throwable throwable, JSONObject errorResponse) {
            Log.i("info", client.finalUrl + errorResponse);
        }
    });
}

[Buggy Hunk]
Event event = new Event(userEvents.getEventName(),userEvents.getEventAddress() + "\n" +userEvents.getEventMonth() +"/"+  userEvents.getEventDay() + " " + userEvents.getEventHour()+":"+userEvents.getEventMinute(),userEvents.getEventDescription(),"null",String.valueOf(i));

[Patch]
Event event = new Event(userEvents.getEventName(),userEvents.getEventAddress() + "\n" +userEvents.getEventMonth() +"/"+  userEvents.getEventDay() + " " + userEvents.getEventHour()+":"+userEvents.getEventMinute(),userEvents.getEventDescription(),"null",String.valueOf(i),userEvents.getEventHost());

[Demonstration 2]

[Buggy Method]
public static void main(String[] args) {
    new EventFinder().findEvents();
}

[Buggy Hunk]
new EventFinder().findEvents();

[Patch]
new EventFinder().findEvents("NHL Stanley Cup Finals Tickets");

[Demonstration 3]

[Buggy Method]
@RabbitListener(queues = "${application.messaging.queueName}")
public final void handleMessageRouter(@Payload AbstractEvent event) {
    log.debug("handleMessageRouter - {} received with {} ID. [{}]", event.getClass().getSimpleName(), event.getId(), event);
    try {
        this.getClass().getMethod("handleMessage", event.getClass()).invoke(this, event);
    } catch (IllegalAccessException | IllegalArgumentException | InvocationTargetException | NoSuchMethodException | SecurityException e) {
        // @formatter:off
        throw new MicroserviceStarterRuntimeException(ExceptionData.builder().type(ExceptionType.RABBITMQ_MESSAGE_HANDLING_ERROR).cause(e).build());
        // @formatter:on
    }
}

[Buggy Hunk]
log.debug("handleMessageRouter - {} received with {} ID. [{}]", event.getClass().getSimpleName(), event.getId(), event);

[Patch]
log.debug("handleMessageRouter - {} received with {} ID. [{}]", event.getClass().getSimpleName(), event.getEventId(), event);