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:
parent
018eb7334b
commit
12f003ec60
4 changed files with 39 additions and 17 deletions
|
@ -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;
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
||||
|
|
|
@ -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() {
|
||||
|
|
|
@ -129,7 +129,7 @@ public class ParameterNamesInputPage extends UserInputWizardPage {
|
|||
public String createFunctionDefinitionSignature(IProgressMonitor monitor) {
|
||||
try {
|
||||
ModificationCollector collector = new ModificationCollector();
|
||||
ImplementMethodRefactoring implementMethodRefactoring = (ImplementMethodRefactoring)wizard.getRefactoring();
|
||||
ImplementMethodRefactoring implementMethodRefactoring = (ImplementMethodRefactoring) wizard.getRefactoring();
|
||||
CCompositeChange finalChange = null;
|
||||
// We can have multiple preview jobs. We don't
|
||||
// want multiple jobs concurrently using the same ASTs
|
||||
|
|
Loading…
Add table
Reference in a new issue