Differencer d = new Differencer();
Differencer d = new Differencer() { protected Object visit(Object data, int result, Object ancestor, Object left, Object right) { return new MyDiffNode((IDiffContainer) data, result, (ITypedElement)ancestor, (ITypedElement)left, (ITypedElement)right); } };
    protected Object prepareInput(IProgressMonitor pm)            throws InvocationTargetException, InterruptedException {        try {            pm                    .beginTask(                            Utilities.getString("ResourceCompare.taskName"), IProgressMonitor.UNKNOWN); //$NON-NLS-1$            fMineResource.refreshLocal(IResource.DEPTH_ZERO, Policy                    .subMonitorFor(pm, IProgressMonitor.UNKNOWN));            fTheirsResource.refreshLocal(IResource.DEPTH_ZERO, Policy                    .subMonitorFor(pm, IProgressMonitor.UNKNOWN));            fAncestorResource.refreshLocal(IResource.DEPTH_ZERO, Policy                    .subMonitorFor(pm, IProgressMonitor.UNKNOWN));            fDestinationResource.refreshLocal(IResource.DEPTH_ZERO, Policy                    .subMonitorFor(pm, IProgressMonitor.UNKNOWN));            fAncestor = new BufferedResourceNode(fAncestorResource) {                public String getType() {                    return ConflictsCompareInput.this.getType();                }                public boolean isEditable() {                    return false;                }            };            fLeft = new BufferedResourceNode(fDestinationResource) {                public String getType() {                    return ConflictsCompareInput.this.getType();                }            };            InputStream mineContents = fMineResource.getContents();            byte[] contents;            try {                contents = new byte[mineContents.available()];                mineContents.read(contents);            } finally {                mineContents.close();            }                        fLeft.setContent(contents);            fRight = new BufferedResourceNode(fTheirsResource) {                public String getType() {                    return ConflictsCompareInput.this.getType();                }                public boolean isEditable() {                    return false;                }            };            String title = "Conflicts on " + fDestinationResource.getName();            setTitle(title);            Differencer d = new Differencer();            fRoot = d.findDifferences(true, pm, null, fAncestor, fLeft, fRight);            return fRoot;        } catch (CoreException e) {            throw new InvocationTargetException(e);        } catch (IOException e) {            throw new InvocationTargetException(e);        } finally {            pm.done();        }    }