[Demonstration 1]

[Buggy Method]
public static void main(String[] args) {
    Logger log = LoggerFactory.getLogger(EventCloudManagementWsDeployer.class);
    if (args.length != 2 || args.length != 3) {
        log.error("Usage: main start_port url_suffix [social_filter_url]");
        System.exit(1);
    }
    if (args.length == 3) {
        EventCloudProperties.SOCIAL_FILTER_URL.setValue(args[2]);
        log.info("Property 'eventcloud.socialfilter.url' set to value '{}'", args[2]);
    }
    EventCloudsRegistry eventCloudsRegistry = EventCloudsRegistryFactory.newEventCloudsRegistry();
    int startPort = Integer.parseInt(args[0]);
    Server eventCloudManagementWebService = WebServiceDeployer.deployEventCloudManagementWebService(PAActiveObject.getUrl(eventCloudsRegistry), startPort + 1, args[1], startPort);
    log.info(LOG_MANAGEMENT_WS_DEPLOYED + eventCloudManagementWebService.getEndpoint().getEndpointInfo().getAddress());
}

[Buggy Hunk]
if (args.length != 2 || args.length != 3) {

[Patch]
if (args.length < 2 || args.length > 3) {

[Demonstration 2]

[Buggy Method]
protected Data generateData(long groupId, int index) {
    String instanceUID = String.format("image-%d-%d-%d", unique, groupId, index);
    Data data = new Data();
    data.setGroup(groupId);
    data.setInstanceUID(instanceUID);
    data.setName(String.format("Data-%d-%d-%d", unique, groupId, index));
    data.setDescription("Test data generated by JNuoTest");
    data.setPath(String.format("file:///remote/storage/%s.bin", instanceUID));
    data.setRegionWeek(unique % 2 == 0 ? "Region_A" : "Region_B-" + String.valueOf(unique / 35000));
    // don't persist individually - we may be persisting in a batch
    return data;
}

[Buggy Hunk]
data.setRegionWeek(unique % 2 == 0 ? "Region_A" : "Region_B-" + String.valueOf(unique / 35000));

[Patch]
data.setRegionWeek(String.format("Region_%s-%d", (unique % 2 == 0 ? "A" : "B"), (unique / 35000)));

[Demonstration 3]

[Buggy Method]
public static void main(String[] args) throws IOException {
    boolean listClasses = false;
    String ellaSettingsFile = null;
    Config config = Config.g();
    int i = 0;
    while (i < args.length) {
        String a = args[i];
        if (a.equals("-l")) {
            listClasses = true;
        } else if (a.equals("-x")) {
            config.excludeFile = args[i + 1];
            i++;
        } else if (a.equals("-ella.dir")) {
            config.ellaDir = args[i + 1];
            i++;
        } else if (a.equals("-ella.runtime")) {
            config.ellaRuntime = args[i + 1];
            i++;
        } else if (a.equals("-ella.settings")) {
            ellaSettingsFile = args[i + 1];
            i++;
        } else if (a.equals("-ella.apktool")) {
            config.apktoolJar = args[i + 1];
            i++;
        } else if (config.inputFile == null)
            config.inputFile = a;
        else {
            assert config.outputFile == null;
            config.outputFile = a;
        }
        i++;
    }
    config.load(ellaSettingsFile);
    if (config.inputFile == null) {
        System.out.println("New input file to process");
        return;
    }
    File inputFile = new File(config.inputFile);
    if (!inputFile.exists()) {
        System.out.println("Input file " + config.inputFile + " does not exist.");
        return;
    }
    String appPath = inputFile.getCanonicalPath();
    config.appId = Util.appPathToAppId(appPath);
    App app = App.readApp(config.inputFile, config.outDir(), config.apktoolJar);
    if (listClasses) {
        app.listClasses();
        return;
    }
    if (config.outputFile == null) {
        config.outputFile = config.outDir() + File.separator + "instrumented.apk";
    }
    File updatedManifestFile = updateManifest(app.manifestFile());
    File unsignedOutputFile = File.createTempFile("ellainstrumented", ".apk");
    app.updateApk(Instrument.instrument(app.dexFilePath()), updatedManifestFile, unsignedOutputFile, config.apktoolJar);
    //sign the apk
    if (config.outputFile.endsWith(".apk"))
        app.signAndAlignApk(unsignedOutputFile, config.outputFile, config.keyStore, config.storePass, config.keyPass, config.alias);
    CoverageId.g().dump();
    System.out.println("\n********************************************************************************");
    System.out.println("Install the following instrumented apk and then execute the app");
    System.out.println(config.outputFile);
    System.out.println("********************************************************************************\n");
    System.out.println("\n********************************************************************************");
    System.out.println("After coverage data is collected, view the coverage report at the following URL.");
    System.out.println(config.tomcatUrl + "/viewcoverage?apppath=" + appPath);
    System.out.println("********************************************************************************\n");
}

[Buggy Hunk]
app.signAndAlignApk(unsignedOutputFile, config.outputFile, config.keyStore, config.storePass, config.keyPass, config.alias);

[Patch]
app.signAndAlignApk(unsignedOutputFile, config.outputFile, config.keyStore, config.storePass, config.keyPass, config.alias, config.zipAlign);