[
Date Prev][
Date Next][
Thread Prev][
Thread Next][
Date Index][
Thread Index]
[
List Home]
[cdt-dev] Any way to get an IWorkingCopy from IStorage?
|
For the Eclipse ChangeLog plug-in, we compare a local file to one in the
repository (such as CVS or SVN) and create an entry on behalf of the
user. For C and C++ files, we want to specify functions or methods that
have changed within the file so the user can fill in appropriate
comments regarding the changes. For example,
2010-01-28 Jeff Johnston <jjohnstn@xxxxxxxxxx>
* a.c (funca):
(funcb):
Using Team interfaces, we end-up with a 3-way diff whereby changes are
noted as ranges within the local file and ranges within the repository file.
The current logic of the C/C++ ChangeLog parser uses an IFileEditorInput
created for the local modified file to get the IWorkingCopy from which
it gets the ICElement for changed lines in the modified local file.
public String parseCurrentFunction(IEditorInput input,
int offset)
throws CoreException {
String currentElementName;
// Get the working copy and connect to input.
IWorkingCopyManager manager = CUIPlugin.getDefault()
.getWorkingCopyManager();
manager.connect(input);
// Retrieve the C/C++ Element in question.
IWorkingCopy workingCopy =
manager.getWorkingCopy(input);
ICElement method =
workingCopy.getElementAtOffset(offset);
manager.disconnect(input);
This works fine for additions and changes to existing functions, but it
does not work for method or function removal because the functions are
no longer in the local file. We need to look at changes with respect to
the ancestor file.
When we do the diff, we are given an IStorage representation of the
ancestor file.
I would like to use the CDT to calculate the ICElement for change lines
within the ancestor storage (thereby I can add entries for
functions/methods that don't show up in the modified file...hence handle
removal).
Unfortunately, the C WorkingCopyManager passed back from CUIPlugin uses
a CDocumentProvider and this expects an IFileEditorInput.
Is there a way to wrapper the IStorage so I can connect to it via the
WorkingCopyManager or do I have to create a local file from the storage
contents somehow? Perhaps there is another alternative?
Thanks,
-- Jeff J.