mirror of
https://github.com/eclipse-cdt/cdt
synced 2025-07-23 08:55:25 +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.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
|
import org.eclipse.core.resources.mapping.IResourceChangeDescriptionFactory;
|
||||||
import org.eclipse.core.runtime.Assert;
|
import org.eclipse.core.runtime.Assert;
|
||||||
import org.eclipse.core.runtime.CoreException;
|
import org.eclipse.core.runtime.CoreException;
|
||||||
import org.eclipse.core.runtime.IProgressMonitor;
|
import org.eclipse.core.runtime.IProgressMonitor;
|
||||||
|
@ -72,6 +73,7 @@ public abstract class CRefactoring extends Refactoring {
|
||||||
protected Region selectedRegion;
|
protected Region selectedRegion;
|
||||||
protected final RefactoringStatus initStatus;
|
protected final RefactoringStatus initStatus;
|
||||||
protected CRefactoringContext refactoringContext;
|
protected CRefactoringContext refactoringContext;
|
||||||
|
private ModificationCollector modificationCollector;
|
||||||
|
|
||||||
public CRefactoring(ICElement element, ISelection selection, ICProject project) {
|
public CRefactoring(ICElement element, ISelection selection, ICProject project) {
|
||||||
this.project = project;
|
this.project = project;
|
||||||
|
@ -107,10 +109,15 @@ public abstract class CRefactoring extends Refactoring {
|
||||||
throws CoreException, OperationCanceledException {
|
throws CoreException, OperationCanceledException {
|
||||||
if (pm == null)
|
if (pm == null)
|
||||||
pm = new NullProgressMonitor();
|
pm = new NullProgressMonitor();
|
||||||
pm.beginTask(Messages.CRefactoring_checking_final_conditions, 6);
|
pm.beginTask(Messages.CRefactoring_checking_final_conditions, 10);
|
||||||
|
|
||||||
CheckConditionsContext context = createCheckConditionsContext();
|
CheckConditionsContext context= new CheckConditionsContext();
|
||||||
RefactoringStatus result = checkFinalConditions(new SubProgressMonitor(pm, 5), context);
|
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()) {
|
if (result.hasFatalError()) {
|
||||||
pm.done();
|
pm.done();
|
||||||
return result;
|
return result;
|
||||||
|
@ -118,7 +125,11 @@ public abstract class CRefactoring extends Refactoring {
|
||||||
if (pm.isCanceled())
|
if (pm.isCanceled())
|
||||||
throw new OperationCanceledException();
|
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();
|
pm.done();
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
@ -162,9 +173,7 @@ public abstract class CRefactoring extends Refactoring {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Change createChange(IProgressMonitor pm) throws CoreException, OperationCanceledException {
|
public Change createChange(IProgressMonitor pm) throws CoreException, OperationCanceledException {
|
||||||
ModificationCollector collector = new ModificationCollector();
|
CCompositeChange finalChange = modificationCollector.createFinalChange();
|
||||||
collectModifications(pm, collector);
|
|
||||||
CCompositeChange finalChange = collector.createFinalChange();
|
|
||||||
finalChange.setDescription(new RefactoringChangeDescriptor(getRefactoringDescriptor()));
|
finalChange.setDescription(new RefactoringChangeDescriptor(getRefactoringDescriptor()));
|
||||||
return finalChange;
|
return finalChange;
|
||||||
}
|
}
|
||||||
|
@ -222,13 +231,6 @@ public abstract class CRefactoring extends Refactoring {
|
||||||
return names;
|
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 class ProblemFinder extends ASTVisitor {
|
||||||
private boolean problemFound = false;
|
private boolean problemFound = false;
|
||||||
private final RefactoringStatus status;
|
private final RefactoringStatus status;
|
||||||
|
|
|
@ -8,6 +8,7 @@
|
||||||
*
|
*
|
||||||
* Contributors:
|
* Contributors:
|
||||||
* Institute for Software - initial API and implementation
|
* Institute for Software - initial API and implementation
|
||||||
|
* Sergey Prigogin (Google)
|
||||||
*******************************************************************************/
|
*******************************************************************************/
|
||||||
package org.eclipse.cdt.internal.ui.refactoring;
|
package org.eclipse.cdt.internal.ui.refactoring;
|
||||||
|
|
||||||
|
@ -16,6 +17,7 @@ import java.io.InputStream;
|
||||||
import java.net.URI;
|
import java.net.URI;
|
||||||
|
|
||||||
import org.eclipse.core.resources.IFile;
|
import org.eclipse.core.resources.IFile;
|
||||||
|
import org.eclipse.core.resources.IResource;
|
||||||
import org.eclipse.core.resources.ResourcesPlugin;
|
import org.eclipse.core.resources.ResourcesPlugin;
|
||||||
import org.eclipse.core.runtime.CoreException;
|
import org.eclipse.core.runtime.CoreException;
|
||||||
import org.eclipse.core.runtime.IPath;
|
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.core.runtime.SubProgressMonitor;
|
||||||
import org.eclipse.ltk.core.refactoring.Change;
|
import org.eclipse.ltk.core.refactoring.Change;
|
||||||
import org.eclipse.ltk.core.refactoring.RefactoringStatus;
|
import org.eclipse.ltk.core.refactoring.RefactoringStatus;
|
||||||
|
import org.eclipse.ltk.core.refactoring.resource.ResourceChange;
|
||||||
import org.eclipse.osgi.util.NLS;
|
import org.eclipse.osgi.util.NLS;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -31,7 +34,7 @@ import org.eclipse.osgi.util.NLS;
|
||||||
*
|
*
|
||||||
* @author Emanuel Graf
|
* @author Emanuel Graf
|
||||||
*/
|
*/
|
||||||
public class CreateFileChange extends Change {
|
public class CreateFileChange extends ResourceChange {
|
||||||
private String name;
|
private String name;
|
||||||
private final IPath path;
|
private final IPath path;
|
||||||
private final String source;
|
private final String source;
|
||||||
|
@ -50,7 +53,7 @@ public class CreateFileChange extends Change {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Object getModifiedElement() {
|
public IResource getModifiedResource() {
|
||||||
return ResourcesPlugin.getWorkspace().getRoot().getFile(path);
|
return ResourcesPlugin.getWorkspace().getRoot().getFile(path);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -8,6 +8,7 @@
|
||||||
*
|
*
|
||||||
* Contributors:
|
* Contributors:
|
||||||
* Institute for Software - initial API and implementation
|
* Institute for Software - initial API and implementation
|
||||||
|
* Sergey Prigogin (Google)
|
||||||
*******************************************************************************/
|
*******************************************************************************/
|
||||||
package org.eclipse.cdt.internal.ui.refactoring;
|
package org.eclipse.cdt.internal.ui.refactoring;
|
||||||
|
|
||||||
|
@ -16,6 +17,8 @@ import java.util.Collection;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.Map;
|
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.Change;
|
||||||
import org.eclipse.ltk.core.refactoring.CompositeChange;
|
import org.eclipse.ltk.core.refactoring.CompositeChange;
|
||||||
|
|
||||||
|
@ -29,15 +32,27 @@ import org.eclipse.cdt.core.dom.rewrite.ASTRewrite;
|
||||||
* @author Mirko Stocker
|
* @author Mirko Stocker
|
||||||
*/
|
*/
|
||||||
public class ModificationCollector {
|
public class ModificationCollector {
|
||||||
|
private final IResourceChangeDescriptionFactory deltaFactory;
|
||||||
|
|
||||||
// Each translation unit can have only one ASTRewrite
|
// Each translation unit can have only one ASTRewrite
|
||||||
private final Map<IASTTranslationUnit, ASTRewrite> rewriters =
|
private final Map<IASTTranslationUnit, ASTRewrite> rewriters =
|
||||||
new HashMap<IASTTranslationUnit, ASTRewrite>();
|
new HashMap<IASTTranslationUnit, ASTRewrite>();
|
||||||
|
|
||||||
private Collection<CreateFileChange> changes;
|
private Collection<CreateFileChange> changes;
|
||||||
|
|
||||||
|
public ModificationCollector() {
|
||||||
|
this(null);
|
||||||
|
}
|
||||||
|
|
||||||
|
public ModificationCollector(IResourceChangeDescriptionFactory deltaFactory) {
|
||||||
|
this.deltaFactory = deltaFactory;
|
||||||
|
}
|
||||||
|
|
||||||
public ASTRewrite rewriterForTranslationUnit(IASTTranslationUnit ast) {
|
public ASTRewrite rewriterForTranslationUnit(IASTTranslationUnit ast) {
|
||||||
if (!rewriters.containsKey(ast)) {
|
if (!rewriters.containsKey(ast)) {
|
||||||
rewriters.put(ast, ASTRewrite.create(ast));
|
rewriters.put(ast, ASTRewrite.create(ast));
|
||||||
|
if (deltaFactory != null)
|
||||||
|
deltaFactory.change((IFile) ast.getOriginatingTranslationUnit().getResource());
|
||||||
}
|
}
|
||||||
return rewriters.get(ast);
|
return rewriters.get(ast);
|
||||||
}
|
}
|
||||||
|
@ -48,6 +63,8 @@ public class ModificationCollector {
|
||||||
changes = new ArrayList<CreateFileChange>();
|
changes = new ArrayList<CreateFileChange>();
|
||||||
}
|
}
|
||||||
changes.add(change);
|
changes.add(change);
|
||||||
|
if (deltaFactory != null)
|
||||||
|
deltaFactory.create(change.getModifiedResource());
|
||||||
}
|
}
|
||||||
|
|
||||||
public CCompositeChange createFinalChange() {
|
public CCompositeChange createFinalChange() {
|
||||||
|
|
|
@ -129,7 +129,7 @@ public class ParameterNamesInputPage extends UserInputWizardPage {
|
||||||
public String createFunctionDefinitionSignature(IProgressMonitor monitor) {
|
public String createFunctionDefinitionSignature(IProgressMonitor monitor) {
|
||||||
try {
|
try {
|
||||||
ModificationCollector collector = new ModificationCollector();
|
ModificationCollector collector = new ModificationCollector();
|
||||||
ImplementMethodRefactoring implementMethodRefactoring = (ImplementMethodRefactoring)wizard.getRefactoring();
|
ImplementMethodRefactoring implementMethodRefactoring = (ImplementMethodRefactoring) wizard.getRefactoring();
|
||||||
CCompositeChange finalChange = null;
|
CCompositeChange finalChange = null;
|
||||||
// We can have multiple preview jobs. We don't
|
// We can have multiple preview jobs. We don't
|
||||||
// want multiple jobs concurrently using the same ASTs
|
// want multiple jobs concurrently using the same ASTs
|
||||||
|
|
Loading…
Add table
Reference in a new issue