[Demonstration 1]

[Buggy Method]
private void computeBundlesToRefresh(Map<Bundle, String> toRefresh, Collection<Bundle> bundles, Map<Resource, Bundle> resources, Map<Resource, List<Wire>> resolution) {
    // Compute the new list of fragments
    Map<Bundle, Set<Resource>> newFragments = new HashMap<>();
    for (Bundle bundle : bundles) {
        newFragments.put(bundle, new HashSet<Resource>());
    }
    for (Resource res : resolution.keySet()) {
        for (Wire wire : resolution.get(res)) {
            if (HOST_NAMESPACE.equals(wire.getCapability().getNamespace())) {
                Bundle bundle = resources.get(wire.getProvider());
                if (bundle != null) {
                    Bundle b = resources.get(wire.getRequirer());
                    Resource r = b != null ? b.adapt(BundleRevision.class) : wire.getRequirer();
                    newFragments.get(bundle).add(r);
                }
            }
        }
    }
    // Main loop
    int size;
    Map<Bundle, Resource> bndToRes = new HashMap<>();
    for (Map.Entry<Resource, Bundle> entry : resources.entrySet()) {
        bndToRes.put(entry.getValue(), entry.getKey());
    }
    do {
        size = toRefresh.size();
        main: for (Bundle bundle : bundles) {
            Resource resource = bndToRes.get(bundle);
            // This bundle is not managed
            if (resource == null) {
                continue;
            }
            // Continue if we already know about this bundle
            if (toRefresh.containsKey(bundle)) {
                continue;
            }
            // Ignore non resolved bundle
            BundleWiring wiring = bundle.adapt(BundleWiring.class);
            if (wiring == null) {
                continue;
            }
            // Ignore bundles that won't be wired
            List<Wire> newWires = resolution.get(resource);
            if (newWires == null) {
                continue;
            }
            // Check if this bundle is a host and its fragments changed
            Set<Resource> oldFragments = new HashSet<>();
            for (BundleWire wire : wiring.getProvidedWires(null)) {
                if (HOST_NAMESPACE.equals(wire.getCapability().getNamespace())) {
                    oldFragments.add(wire.getRequirer());
                }
            }
            if (!oldFragments.equals(newFragments.get(bundle))) {
                toRefresh.put(bundle, "Attached fragments changed: " + new ArrayList<>(newFragments.get(bundle)));
                break;
            }
            // Compare the old and new resolutions
            Set<Resource> wiredBundles = new HashSet<>();
            for (BundleWire wire : wiring.getRequiredWires(null)) {
                BundleRevision rev = wire.getProvider();
                Bundle provider = rev.getBundle();
                if (toRefresh.containsKey(provider)) {
                    // The bundle is wired to a bundle being refreshed,
                    // so we need to refresh it too
                    toRefresh.put(bundle, "Wired to " + provider.getSymbolicName() + "/" + provider.getVersion() + " which is being refreshed");
                    continue main;
                }
                Resource res = bndToRes.get(provider);
                wiredBundles.add(res != null ? res : rev);
            }
            Map<Resource, Requirement> wiredResources = new HashMap<>();
            for (Wire wire : newWires) {
                // Handle only packages, hosts, and required bundles
                String namespace = wire.getRequirement().getNamespace();
                if (!namespace.equals(BundleNamespace.BUNDLE_NAMESPACE) && !namespace.equals(PackageNamespace.PACKAGE_NAMESPACE) && !namespace.equals(HostNamespace.HOST_NAMESPACE)) {
                    continue;
                }
                // Ignore non-resolution time requirements
                String effective = wire.getRequirement().getDirectives().get(Namespace.CAPABILITY_EFFECTIVE_DIRECTIVE);
                if (effective != null && !Namespace.EFFECTIVE_RESOLVE.equals(effective)) {
                    continue;
                }
                // Ignore non bundle resources
                if (!isBundle(wire.getProvider())) {
                    continue;
                }
                if (!wiredResources.containsKey(wire.getProvider())) {
                    wiredResources.put(wire.getProvider(), wire.getRequirement());
                }
            }
            if (!wiredBundles.containsAll(wiredResources.keySet())) {
                Map<Resource, Requirement> newResources = new HashMap<>(wiredResources);
                newResources.keySet().removeAll(wiredBundles);
                StringBuilder sb = new StringBuilder();
                sb.append("Should be wired to: ");
                boolean first = true;
                for (Map.Entry<Resource, Requirement> entry : newResources.entrySet()) {
                    if (!first) {
                        sb.append(", ");
                    } else {
                        first = false;
                    }
                    Resource res = entry.getKey();
                    Requirement req = entry.getValue();
                    sb.append(getSymbolicName(res)).append("/").append(getVersion(res));
                    sb.append(" (through ");
                    sb.append(req);
                    sb.append(")");
                }
                toRefresh.put(bundle, sb.toString());
            }
        }
    } while (toRefresh.size() > size);
}

[Buggy Hunk]
continue;

[Patch]
resource = bundle.adapt(BundleRevision.class);

[Demonstration 2]

[Buggy Method]
public static void main(String[] args) throws IOException {
    InputStream in = Main.class.getResourceAsStream("/words.txt");
    if (in == null) {
        in = new FileInputStream(new File("src/main/resources/words.txt"));
    }
    BufferedReader reader = new BufferedReader(new InputStreamReader(in));
    WordDictionary dictionary = new WordParser().parse(reader);
    int count = 20;
    if (args.length > 0) {
        try {
            count = Integer.parseInt(args[0]);
        } catch (NumberFormatException e) {
            // nothing to do
        }
    }
    for (int i = 1; i <= count; i++) {
        String sentence = getNACombo(dictionary) + " " + dictionary.getRandomVerb() + " " + getNACombo(dictionary) + ".";
        sentence = capitalizeFirstLeter(sentence);
        System.out.println(i + ". " + sentence);
    }
    System.out.println("\n\nCuvinte neincluse:");
    for (int i = 1; i <= count; i++) {
        System.out.println(dictionary.getRandomUnknown());
    }
}

[Buggy Hunk]
BufferedReader reader = new BufferedReader(new InputStreamReader(in));

[Patch]
BufferedReader reader = new BufferedReader(new InputStreamReader(in, Charset.forName("UTF-8")));

[Demonstration 3]

[Buggy Method]
public void poll() {
    synchronized (m_sync) {
        if (m_lastSelectedModel != null) {
            URI relativeUri = m_baseDirectory.toURI().relativize(m_lastSelectedModel.toURI());
            try {
                ISceneModel model = m_modelFactory.create(relativeUri);
                m_brush.setBehaviour(new PlaceSceneArtifactBrushBehaviour(model, relativeUri, Direction.XYPlus, btnTraversable.isSelected()));
            } catch (ISceneModelFactory.SceneModelConstructionException e) {
                m_logger.error("Unable to load scene model", e);
            }
        }
    }
    m_lastSelectedModel = null;
}

[Buggy Hunk]
URI relativeUri = m_baseDirectory.toURI().relativize(m_lastSelectedModel.toURI());

[Patch]
URI relativeUri = URI.create("/").resolve(m_baseDirectory.toURI().relativize(m_lastSelectedModel.toURI()));