Skip to main content

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
[pde-dev] Eclipse refactoring plugin issues

We are developing an Eclipse plugin for PlasticSCM. PlasticSCM is a new SCM system, like CVS, Subversion, ClearCase, etc ... More info in http://www.codicesoftware.com
 
We have the following problems managing IFileModificationValidator when doing a refactor with org.eclipse.ltk.internal.core.refactoring plug-in. I will try to explain the problem in a short manner.
 
Our checked-in files, are in a readOnly status. When we checkout a file to modify it, readOnly property is removed.When we do a refactor, our IFileModificationValidator is called and it checkouts all needed files. But there is a problem with readOnly properties. Look at this code, extracted from
org.eclipse.ltk.internal.core.refactoring.TextFileChange class.
 
01 public RefactoringStatus isValid(IProgressMonitor pm) throws CoreException {
02     pm.beginTask("", 1); //$NON-NLS-1$
03     ITextFileBuffer buffer = FileBuffers.getTextFileBufferManager().getTextFileBuffer(fFile.getFullPath());
04     fDirty= buffer != null && buffer.isDirty();
05     RefactoringStatus result= fValidationState.isValid(needsSaving());
06     if (needsSaving()) {
07           result.merge(Changes.validateModifiesFiles(new IFile[] {fFile}));
08     } else {
09           // we are reading the file. So it should be at least in sync
10           result.merge(Changes.checkInSync(new IFile[] {fFile}));
11     }
12     pm.worked(1);
13     return result;
14 }
 
When this code is invoked for a checked-in file (before a call to our IFileModificationValidator), at line 05, the fValidationState.isValid(needsSaving()) call returns a fatal error because the involved resource is readOnly. Then, at line 07, this code call our IFileModification validator, where the resource is chekced out, and set to
nonReadOnly. But is too late, because the fatal error produced on line 05, make that all process be aborted.
 
The problem would be solved, if lines 05 and 07 are called in reverse order. If first call to Changes.validateModifiesFiles(new IFile[] {fFile}), this code will call our IFileModificationValidator code, so the readOnly property will be removed, and then the fValidationState.isValid(needsSaving()) will not fail.
 
Somebody can help me with this problem?
 
Thanks for all, and king regards
 

Back to the top