[Demonstration 1]

[Buggy Method]
@Override
public void actionPerformed(AnActionEvent event) {
    final Project project = IntellijUtils.getProject(event);
    VirtualFile folder = IntellijUtils.getFolderOrFile(event);
    final Module module = ProjectRootManager.getInstance(project).getFileIndex().getModuleForFile(folder);
    final gui.CreateTnDecComponent mainForm = new gui.CreateTnDecComponent();
    final VirtualFile vfile = createWorkFile(project, module);
    Document document = FileDocumentManager.getInstance().getDocument(vfile);
    mainForm.getTxtTemplate().setVisible(false);
    Editor editor = createHtmlEditor(project, document);
    EditorSettings editorSettings = editor.getSettings();
    mainForm.getPnEditorHolder().getViewport().setView(editor.getComponent());
    DialogWrapper dialogWrapper = new DialogWrapper(project, true, DialogWrapper.IdeModalityType.PROJECT) {

        @Nullable
        @Override
        protected JComponent createCenterPanel() {
            return mainForm.rootPanel;
        }

        @Nullable
        @Override
        protected String getDimensionServiceKey() {
            return "AnnComponent";
        }

        @Nullable
        @NotNull
        protected List<ValidationInfo> doValidateAll() {
            return Arrays.asList(assertNotNullOrEmpty(mainForm.getName(), Messages.ERR_TAG_SELECTOR_MUST_HAVE_A_VALUE, mainForm.getTxtName()), assertNotNullOrEmpty(mainForm.getControllerAs(), Messages.ERR_CTRL_AS_VALUE, mainForm.getTxtControllerAs()), assertPattern(mainForm.getName(), FormAssertions.TAG_SELECTOR_PATTERN, Messages.ERR_TAG_SELECTOR_PATTERN, mainForm.getTxtName())).stream().filter(s -> s != null).collect(Collectors.toList());
        }

        @Override
        public void init() {
            super.init();
        }

        public void show() {
            this.init();
            this.setModal(true);
            this.pack();
            super.show();
        }
    };
    dialogWrapper.setTitle("Create Component");
    dialogWrapper.getWindow().setPreferredSize(new Dimension(400, 300));
    //mainForm.initDefault(dialogWrapper.getWindow());
    ApplicationManager.getApplication().invokeLater(() -> {
        try {
            dialogWrapper.show();
            if (dialogWrapper.isOK()) {
                ComponentJson model = new ComponentJson(mainForm.getName(), editor.getDocument().getText(), mainForm.getControllerAs());
                List<ComponentAttribute> attrs = ComponentAttributesReflector.reflect(editor.getDocument().getText(), mainForm.getControllerAs());
                ApplicationManager.getApplication().invokeLater(() -> buildFile(project, model, attrs, folder));
            }
        } finally {
            deleteWorkFile(project, vfile);
        }
    });
}

[Buggy Hunk]
ComponentJson model = new ComponentJson(mainForm.getName(), editor.getDocument().getText(), mainForm.getControllerAs());

[Patch]
ComponentJson model = new ComponentJson(mainForm.getName(), new String(editor.getDocument().getText().getBytes(vfile.getCharset()), EncodingRegistry.getInstance().getDefaultCharset()).toString(), mainForm.getControllerAs());

[Demonstration 2]

[Buggy Method]
public void addPaymentFromBankEvent(Player player, int amount) {
    Event e = new EventBuilder(getAndIncrementNextEventID(), EventType.PAYMENT).setPlayerName(player.getName()).setEventMessage("Bank payed ₪" + amount + " to " + player.getName() + ". Now owns ₪" + player.getMoneyAmount()).setPaymentToOrFromTreasury(true).setPaymentAmount(amount).setPaymentFromUser(false).createGameEvent();
    events.add(e);
}

[Buggy Hunk]
.setPaymentFromUser(false).createGameEvent();

[Patch]
.setPaymentToPlayerName(player.getName()).setPaymentFromUser(false).createGameEvent();

[Demonstration 3]

[Buggy Method]
public void updateProcess(ProcessModel process, String processId) throws RegistryException {
    try {
        ExperimentResource experimentResource = new ExperimentResource();
        ProcessResource processResource = experimentResource.getProcess(processId);
        processResource.setProcessId(process.getProcessId());
        processResource.setExperimentId(process.getExperimentId());
        processResource.setCreationTime(AiravataUtils.getTime(process.getCreationTime()));
        processResource.setLastUpdateTime(AiravataUtils.getTime(process.getLastUpdateTime()));
        processResource.setProcessDetail(process.getProcessDetail());
        processResource.setApplicationInterfaceId(process.getApplicationInterfaceId());
        processResource.setTaskDag(process.getTaskDag());
        processResource.setGatewayExecutionId(process.getGatewayExecutionId());
        processResource.setComputeResourceId(process.getComputeResourceId());
        processResource.setApplicationDeploymentId(process.getApplicationDeploymentId());
        if (process.isEnableEmailNotification()) {
            processResource.setEnableEmailNotification(true);
            if (process.getEmailAddresses() != null) {
                processResource.setEmailAddresses(StringUtils.join(process.getEmailAddresses(), ","));
            }
        } else {
            processResource.setEnableEmailNotification(false);
        }
        processResource.save();
        if (process.getResourceSchedule() != null) {
            updateProcessResourceSchedule(process.getResourceSchedule(), process.getProcessId());
        }
        if (process.getProcessInputs() != null && process.getProcessInputs().size() > 0) {
            updateProcessInputs(process.getProcessInputs(), process.getProcessId());
        }
        if (process.getProcessOutputs() != null && process.getProcessOutputs().size() > 0) {
            updateProcessOutputs(process.getProcessOutputs(), process.getProcessId());
        }
        if (process.getProcessStatus() != null) {
            updateProcessStatus(process.getProcessStatus(), process.getProcessId());
        }
        if (process.getProcessError() != null) {
            updateProcessError(process.getProcessError(), process.getProcessId());
        }
        if (process.getTasks() != null && process.getTasks().size() > 0) {
            for (TaskModel task : process.getTasks()) {
                updateTask(task, process.getProcessId());
            }
        }
    } catch (Exception e) {
        logger.error("Error while updating experiment...", e);
        throw new RegistryException(e);
    }
}

[Buggy Hunk]
updateTask(task, process.getProcessId());

[Patch]
updateTask(task, task.getTaskId());