1
0
Fork 0
mirror of https://github.com/eclipse-cdt/cdt synced 2025-04-23 22:52:11 +02:00

Fixed interaction between refactoring and a team provider.

This commit is contained in:
Sergey Prigogin 2012-03-23 18:46:12 -07:00
parent 018eb7334b
commit 12f003ec60
4 changed files with 39 additions and 17 deletions

View file

@ -15,6 +15,7 @@ package org.eclipse.cdt.internal.ui.refactoring;
import java.util.ArrayList;
import java.util.List;
import org.eclipse.core.resources.mapping.IResourceChangeDescriptionFactory;
import org.eclipse.core.runtime.Assert;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IProgressMonitor;
@ -72,6 +73,7 @@ public abstract class CRefactoring extends Refactoring {
protected Region selectedRegion;
protected final RefactoringStatus initStatus;
protected CRefactoringContext refactoringContext;
private ModificationCollector modificationCollector;
public CRefactoring(ICElement element, ISelection selection, ICProject project) {
this.project = project;
@ -107,10 +109,15 @@ public abstract class CRefactoring extends Refactoring {
throws CoreException, OperationCanceledException {
if (pm == null)
pm = new NullProgressMonitor();
pm.beginTask(Messages.CRefactoring_checking_final_conditions, 6);
pm.beginTask(Messages.CRefactoring_checking_final_conditions, 10);
CheckConditionsContext context = createCheckConditionsContext();
RefactoringStatus result = checkFinalConditions(new SubProgressMonitor(pm, 5), context);
CheckConditionsContext context= new CheckConditionsContext();
context.add(new ValidateEditChecker(getValidationContext()));
ResourceChangeChecker resourceChecker = new ResourceChangeChecker();
IResourceChangeDescriptionFactory deltaFactory = resourceChecker.getDeltaFactory();
context.add(resourceChecker);
RefactoringStatus result = checkFinalConditions(new SubProgressMonitor(pm, 8), context);
if (result.hasFatalError()) {
pm.done();
return result;
@ -118,7 +125,11 @@ public abstract class CRefactoring extends Refactoring {
if (pm.isCanceled())
throw new OperationCanceledException();
result.merge(context.check(new SubProgressMonitor(pm, 1)));
modificationCollector = new ModificationCollector(deltaFactory);
collectModifications(pm, modificationCollector);
result.merge(context.check(new SubProgressMonitor(pm, 2)));
pm.done();
return result;
}
@ -162,9 +173,7 @@ public abstract class CRefactoring extends Refactoring {
@Override
public Change createChange(IProgressMonitor pm) throws CoreException, OperationCanceledException {
ModificationCollector collector = new ModificationCollector();
collectModifications(pm, collector);
CCompositeChange finalChange = collector.createFinalChange();
CCompositeChange finalChange = modificationCollector.createFinalChange();
finalChange.setDescription(new RefactoringChangeDescriptor(getRefactoringDescriptor()));
return finalChange;
}
@ -222,13 +231,6 @@ public abstract class CRefactoring extends Refactoring {
return names;
}
private CheckConditionsContext createCheckConditionsContext() throws CoreException {
CheckConditionsContext result= new CheckConditionsContext();
result.add(new ValidateEditChecker(getValidationContext()));
result.add(new ResourceChangeChecker());
return result;
}
private class ProblemFinder extends ASTVisitor {
private boolean problemFound = false;
private final RefactoringStatus status;

View file

@ -8,6 +8,7 @@
*
* Contributors:
* Institute for Software - initial API and implementation
* Sergey Prigogin (Google)
*******************************************************************************/
package org.eclipse.cdt.internal.ui.refactoring;
@ -16,6 +17,7 @@ import java.io.InputStream;
import java.net.URI;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.resources.ResourcesPlugin;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IPath;
@ -24,6 +26,7 @@ import org.eclipse.core.runtime.OperationCanceledException;
import org.eclipse.core.runtime.SubProgressMonitor;
import org.eclipse.ltk.core.refactoring.Change;
import org.eclipse.ltk.core.refactoring.RefactoringStatus;
import org.eclipse.ltk.core.refactoring.resource.ResourceChange;
import org.eclipse.osgi.util.NLS;
/**
@ -31,7 +34,7 @@ import org.eclipse.osgi.util.NLS;
*
* @author Emanuel Graf
*/
public class CreateFileChange extends Change {
public class CreateFileChange extends ResourceChange {
private String name;
private final IPath path;
private final String source;
@ -50,7 +53,7 @@ public class CreateFileChange extends Change {
}
@Override
public Object getModifiedElement() {
public IResource getModifiedResource() {
return ResourcesPlugin.getWorkspace().getRoot().getFile(path);
}

View file

@ -8,6 +8,7 @@
*
* Contributors:
* Institute for Software - initial API and implementation
* Sergey Prigogin (Google)
*******************************************************************************/
package org.eclipse.cdt.internal.ui.refactoring;
@ -16,6 +17,8 @@ import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.mapping.IResourceChangeDescriptionFactory;
import org.eclipse.ltk.core.refactoring.Change;
import org.eclipse.ltk.core.refactoring.CompositeChange;
@ -29,15 +32,27 @@ import org.eclipse.cdt.core.dom.rewrite.ASTRewrite;
* @author Mirko Stocker
*/
public class ModificationCollector {
private final IResourceChangeDescriptionFactory deltaFactory;
// Each translation unit can have only one ASTRewrite
private final Map<IASTTranslationUnit, ASTRewrite> rewriters =
new HashMap<IASTTranslationUnit, ASTRewrite>();
private Collection<CreateFileChange> changes;
public ModificationCollector() {
this(null);
}
public ModificationCollector(IResourceChangeDescriptionFactory deltaFactory) {
this.deltaFactory = deltaFactory;
}
public ASTRewrite rewriterForTranslationUnit(IASTTranslationUnit ast) {
if (!rewriters.containsKey(ast)) {
rewriters.put(ast, ASTRewrite.create(ast));
if (deltaFactory != null)
deltaFactory.change((IFile) ast.getOriginatingTranslationUnit().getResource());
}
return rewriters.get(ast);
}
@ -48,6 +63,8 @@ public class ModificationCollector {
changes = new ArrayList<CreateFileChange>();
}
changes.add(change);
if (deltaFactory != null)
deltaFactory.create(change.getModifiedResource());
}
public CCompositeChange createFinalChange() {