mirror of
https://github.com/eclipse-cdt/cdt
synced 2025-07-29 03:45:35 +02:00
Fixed a bug in renaming of virtual methods.
This commit is contained in:
parent
b937c5c50b
commit
57425dde44
6 changed files with 108 additions and 116 deletions
|
@ -6,9 +6,9 @@
|
|||
* http://www.eclipse.org/legal/epl-v10.html
|
||||
*
|
||||
* Contributors:
|
||||
* Markus Schorn - initial API and implementation
|
||||
* IBM Corporation
|
||||
* Sergey Prigogin (Google)
|
||||
* Markus Schorn - initial API and implementation
|
||||
* IBM Corporation
|
||||
* Sergey Prigogin (Google)
|
||||
******************************************************************************/
|
||||
package org.eclipse.cdt.internal.ui.refactoring.rename;
|
||||
|
||||
|
@ -115,8 +115,8 @@ import org.eclipse.cdt.internal.corext.util.CModelUtil;
|
|||
import org.eclipse.cdt.internal.ui.editor.ASTProvider;
|
||||
|
||||
/**
|
||||
* Used per refactoring to cache the IASTTranslationUnits. Collects methods operating
|
||||
* on ASTNodes.
|
||||
* Used for refactoring to cache the IASTTranslationUnits.
|
||||
* Contains a collection of methods operating on ASTNodes.
|
||||
*/
|
||||
public class ASTManager {
|
||||
public final static int TRUE= 1;
|
||||
|
@ -331,8 +331,7 @@ public class ASTManager {
|
|||
return TRUE;
|
||||
}
|
||||
|
||||
if (node1 instanceof IASTTranslationUnit &&
|
||||
node2 instanceof IASTTranslationUnit) {
|
||||
if (node1 instanceof IASTTranslationUnit && node2 instanceof IASTTranslationUnit) {
|
||||
return hasSameLocation(node1, node2, fileStatic);
|
||||
}
|
||||
|
||||
|
@ -379,7 +378,7 @@ public class ASTManager {
|
|||
return FALSE;
|
||||
}
|
||||
if (s1 instanceof ICFunctionScope || s1 instanceof ICFunctionPrototypeScope
|
||||
|| s1 instanceof ICScope) {
|
||||
|| s1 instanceof ICScope) {
|
||||
if (s2 instanceof ICFunctionScope || s2 instanceof ICFunctionPrototypeScope
|
||||
|| s2 instanceof ICScope) {
|
||||
return hasSameLocation(node1, node2, true);
|
||||
|
@ -425,8 +424,7 @@ public class ASTManager {
|
|||
return isSameParameterList(b1.getParameterTypes(), b2.getParameterTypes());
|
||||
}
|
||||
|
||||
private static int isSameParameterList(IType[] p1,
|
||||
IType[] p2) throws DOMException {
|
||||
private static int isSameParameterList(IType[] p1, IType[] p2) throws DOMException {
|
||||
if (p1 == p2) {
|
||||
return TRUE;
|
||||
}
|
||||
|
@ -439,11 +437,11 @@ public class ASTManager {
|
|||
int retval= TRUE;
|
||||
for (int i = 0; i < p2.length; i++) {
|
||||
switch (isSameType(p1[i], p2[i])) {
|
||||
case FALSE:
|
||||
return FALSE;
|
||||
case UNKNOWN:
|
||||
retval= UNKNOWN;
|
||||
break;
|
||||
case FALSE:
|
||||
return FALSE;
|
||||
case UNKNOWN:
|
||||
retval= UNKNOWN;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -464,11 +462,11 @@ public class ASTManager {
|
|||
int retval= TRUE;
|
||||
for (int i = 0; i < p2.length; i++) {
|
||||
switch (isSameType(p1[i].getType(), p2[i].getType())) {
|
||||
case FALSE:
|
||||
return FALSE;
|
||||
case UNKNOWN:
|
||||
retval= UNKNOWN;
|
||||
break;
|
||||
case FALSE:
|
||||
return FALSE;
|
||||
case UNKNOWN:
|
||||
retval= UNKNOWN;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -484,8 +482,7 @@ public class ASTManager {
|
|||
if (t1 == t2) {
|
||||
return TRUE;
|
||||
}
|
||||
if (t1 == null || t2 == null || t1 instanceof IProblemBinding ||
|
||||
t2 instanceof IProblemBinding) {
|
||||
if (t1 == null || t2 == null || t1 instanceof IProblemBinding || t2 instanceof IProblemBinding) {
|
||||
return UNKNOWN;
|
||||
}
|
||||
|
||||
|
@ -750,8 +747,8 @@ public class ASTManager {
|
|||
}
|
||||
}
|
||||
|
||||
public static IBinding[] findInScope(final IScope scope, String name,
|
||||
boolean removeGlobalsWhenClassScope) throws DOMException {
|
||||
public static IBinding[] findInScope(final IScope scope, String name, boolean removeGlobalsWhenClassScope)
|
||||
throws DOMException {
|
||||
IBinding[] result= null;
|
||||
result = scope.find(name);
|
||||
if (result == null || result.length == 0) {
|
||||
|
@ -841,7 +838,8 @@ public class ASTManager {
|
|||
node instanceof IASTPreprocessorIfStatement) {
|
||||
final IASTFileLocation fileLocation = node.getFileLocation();
|
||||
if (fileLocation != null) {
|
||||
final String ident= extractIdentifier(node.getRawSignature(), offset - fileLocation.getNodeOffset(), length);
|
||||
final String ident= extractIdentifier(node.getRawSignature(),
|
||||
offset - fileLocation.getNodeOffset(), length);
|
||||
if (ident != null) {
|
||||
IASTPreprocessorMacroDefinition[] mdefs= tu.getMacroDefinitions();
|
||||
for (IASTPreprocessorMacroDefinition mdef : mdefs) {
|
||||
|
@ -898,22 +896,13 @@ public class ASTManager {
|
|||
return rawSignature.substring(offset, end);
|
||||
}
|
||||
|
||||
private IASTTranslationUnit getTranslationUnit(IIndex index, IFile sourceFile,
|
||||
boolean cacheit, RefactoringStatus status) {
|
||||
private IASTTranslationUnit getTranslationUnit(IIndex index, IFile sourceFile, boolean cacheit,
|
||||
RefactoringStatus status) {
|
||||
IASTTranslationUnit ast= fTranslationUnits.get(sourceFile);
|
||||
if (ast == null) {
|
||||
ICElement celem= CoreModel.getDefault().create(sourceFile);
|
||||
if (celem instanceof ITranslationUnit) {
|
||||
ITranslationUnit tu= CModelUtil.toWorkingCopy((ITranslationUnit) celem);
|
||||
// if (tu instanceof IWorkingCopy) {
|
||||
// synchronized (tu) {
|
||||
// try {
|
||||
// ast = ((IWorkingCopy) tu).reconcile(true, false, null);
|
||||
// } catch (CModelException e) {
|
||||
// CUIPlugin.log(e);
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
// Try to get a shared AST before creating our own.
|
||||
final IASTTranslationUnit[] ast_holder = new IASTTranslationUnit[1];
|
||||
ASTProvider.getASTProvider().runOnAST(tu, ASTProvider.WAIT_IF_OPEN, null, new ASTRunnable() {
|
||||
|
@ -942,8 +931,8 @@ public class ASTManager {
|
|||
return ast;
|
||||
}
|
||||
|
||||
public void analyzeTextMatches(IIndex index, ArrayList<CRefactoringMatch> matches, IProgressMonitor monitor,
|
||||
RefactoringStatus status) {
|
||||
public void analyzeTextMatches(IIndex index, Collection<CRefactoringMatch> matches,
|
||||
IProgressMonitor monitor, RefactoringStatus status) {
|
||||
CRefactoringMatchStore store= new CRefactoringMatchStore();
|
||||
for (CRefactoringMatch match : matches) {
|
||||
store.addMatch(match);
|
||||
|
@ -1030,9 +1019,8 @@ public class ASTManager {
|
|||
fConflictingBinding= null;
|
||||
}
|
||||
|
||||
private void analyzeLanguageMatches(IASTTranslationUnit tu,
|
||||
final CRefactoringMatchStore store, final Set<IPath> paths,
|
||||
final RefactoringStatus status) {
|
||||
private void analyzeLanguageMatches(IASTTranslationUnit tu, final CRefactoringMatchStore store,
|
||||
final Set<IPath> paths, final RefactoringStatus status) {
|
||||
ASTNameVisitor nv = new ASTSpecificNameVisitor(fArgument.getName()) {
|
||||
@Override
|
||||
protected int visitName(IASTName name, boolean isDestructor) {
|
||||
|
@ -1044,9 +1032,8 @@ public class ASTManager {
|
|||
tu.accept(nv);
|
||||
}
|
||||
|
||||
private void analyzeMacroMatches(IASTTranslationUnit tu,
|
||||
final CRefactoringMatchStore store, final Set<IPath> pathsVisited,
|
||||
final RefactoringStatus status) {
|
||||
private void analyzeMacroMatches(IASTTranslationUnit tu, final CRefactoringMatchStore store,
|
||||
final Set<IPath> pathsVisited, final RefactoringStatus status) {
|
||||
String lookfor= fArgument.getName();
|
||||
IASTPreprocessorMacroDefinition[] mdefs= tu.getMacroDefinitions();
|
||||
for (IASTPreprocessorMacroDefinition mdef : mdefs) {
|
||||
|
@ -1122,10 +1109,8 @@ public class ASTManager {
|
|||
// }
|
||||
// }
|
||||
|
||||
private void findConflictingBindingsWithNewName(IASTTranslationUnit tu,
|
||||
CRefactoringMatchStore store, final Set<IPath> paths,
|
||||
final RefactoringStatus status) {
|
||||
|
||||
private void findConflictingBindingsWithNewName(IASTTranslationUnit tu, CRefactoringMatchStore store,
|
||||
final Set<IPath> paths, final RefactoringStatus status) {
|
||||
ASTNameVisitor nv = new ASTSpecificNameVisitor(fRenameTo) {
|
||||
@Override
|
||||
protected int visitName(IASTName name, boolean isDestructor) {
|
||||
|
@ -1156,8 +1141,8 @@ public class ASTManager {
|
|||
return path;
|
||||
}
|
||||
|
||||
protected IPath analyzeAstMatch(IASTName name, CRefactoringMatchStore store,
|
||||
boolean isDestructor, RefactoringStatus status) {
|
||||
protected IPath analyzeAstMatch(IASTName name, CRefactoringMatchStore store, boolean isDestructor,
|
||||
RefactoringStatus status) {
|
||||
IPath path= null;
|
||||
CRefactoringMatch match= null;
|
||||
|
||||
|
@ -1250,7 +1235,8 @@ public class ASTManager {
|
|||
handleProblemBinding(tu, e.getProblem(), status);
|
||||
}
|
||||
|
||||
public void handleProblemBinding(IASTTranslationUnit tu, final IProblemBinding pb, RefactoringStatus status) {
|
||||
public void handleProblemBinding(IASTTranslationUnit tu, final IProblemBinding pb,
|
||||
RefactoringStatus status) {
|
||||
if (tu != null) {
|
||||
String fpath= tu.getFilePath();
|
||||
if (fProblemUnits.add(fpath)) {
|
||||
|
@ -1316,11 +1302,11 @@ public class ASTManager {
|
|||
}
|
||||
|
||||
Collection<IBinding>[] cflc=
|
||||
new Collection[] { new HashSet<IBinding>(), new ArrayList<IBinding>(), new ArrayList<IBinding>() };
|
||||
new Collection[] { new HashSet<IBinding>(), new ArrayList<IBinding>(),
|
||||
new ArrayList<IBinding>() };
|
||||
String[] errs= null;
|
||||
if (isMacro) {
|
||||
errs= new String[] {
|
||||
RenameMessages.CRenameLocalProcessor_error_conflict };
|
||||
errs= new String[] { RenameMessages.CRenameLocalProcessor_error_conflict };
|
||||
cflc[0]= fConflictingBinding;
|
||||
} else {
|
||||
errs= new String[] {
|
||||
|
@ -1464,9 +1450,8 @@ public class ASTManager {
|
|||
}
|
||||
}
|
||||
|
||||
protected void classifyConflictingBindings(IASTTranslationUnit tu,
|
||||
Set<IBinding> shadows, Collection<IBinding> redecl, Collection<IBinding> barriers,
|
||||
RefactoringStatus status) {
|
||||
protected void classifyConflictingBindings(IASTTranslationUnit tu, Set<IBinding> shadows,
|
||||
Collection<IBinding> redecl, Collection<IBinding> barriers, RefactoringStatus status) {
|
||||
// collect bindings on higher or equal level
|
||||
String name= fArgument.getName();
|
||||
IBinding[] newBindingsAboverOrEqual= null;
|
||||
|
|
|
@ -11,7 +11,7 @@
|
|||
******************************************************************************/
|
||||
package org.eclipse.cdt.internal.ui.refactoring.rename;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
import java.util.Iterator;
|
||||
|
||||
import org.eclipse.core.runtime.IProgressMonitor;
|
||||
|
@ -19,6 +19,7 @@ import org.eclipse.ltk.core.refactoring.RefactoringStatus;
|
|||
|
||||
import org.eclipse.cdt.core.dom.ast.IASTFileLocation;
|
||||
import org.eclipse.cdt.core.dom.ast.IASTNode;
|
||||
import org.eclipse.cdt.core.dom.ast.IBinding;
|
||||
import org.eclipse.cdt.core.dom.ast.IParameter;
|
||||
import org.eclipse.cdt.core.dom.ast.IScope;
|
||||
|
||||
|
@ -51,10 +52,10 @@ public class CRenameLocalProcessor extends CRenameProcessorDelegate {
|
|||
return TextSearchWrapper.SCOPE_FILE;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void analyzeTextMatches(ArrayList<CRefactoringMatch> matches, IProgressMonitor monitor,
|
||||
RefactoringStatus status) {
|
||||
super.analyzeTextMatches(matches, monitor, status);
|
||||
@Override
|
||||
protected void analyzeTextMatches(IBinding[] renameBindings, Collection<CRefactoringMatch> matches,
|
||||
IProgressMonitor monitor, RefactoringStatus status) {
|
||||
super.analyzeTextMatches(renameBindings, matches, monitor, status);
|
||||
if (fScope != null) {
|
||||
CRefactoringArgument argument = getArgument();
|
||||
int[] result= new int[] {0, Integer.MAX_VALUE};
|
||||
|
|
|
@ -1,20 +1,23 @@
|
|||
/*******************************************************************************
|
||||
* Copyright (c) 2005, 2008 Wind River Systems, Inc and others.
|
||||
* Copyright (c) 2005, 2010 Wind River Systems, Inc and others.
|
||||
* All rights reserved. This program and the accompanying materials
|
||||
* are made available under the terms of the Eclipse Public License v1.0
|
||||
* which accompanies this distribution, and is available at
|
||||
* http://www.eclipse.org/legal/epl-v10.html
|
||||
*
|
||||
* Contributors:
|
||||
* Markus Schorn - initial API and implementation
|
||||
* Markus Schorn - initial API and implementation
|
||||
* Sergey Prigogin (Google)
|
||||
*******************************************************************************/
|
||||
package org.eclipse.cdt.internal.ui.refactoring.rename;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
|
||||
import org.eclipse.core.runtime.IProgressMonitor;
|
||||
import org.eclipse.ltk.core.refactoring.RefactoringStatus;
|
||||
|
||||
import org.eclipse.cdt.core.dom.ast.IBinding;
|
||||
|
||||
|
||||
/**
|
||||
* Rename processor that sets up the input page for renaming a global entity.
|
||||
|
@ -35,14 +38,14 @@ public class CRenameMacroProcessor extends CRenameGlobalProcessor {
|
|||
return selectedOptions | CRefactory.OPTION_IN_MACRO_DEFINITION;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void analyzeTextMatches(ArrayList<CRefactoringMatch> matches, IProgressMonitor monitor,
|
||||
RefactoringStatus status) {
|
||||
@Override
|
||||
protected void analyzeTextMatches(IBinding[] renameBindings, Collection<CRefactoringMatch> matches,
|
||||
IProgressMonitor monitor, RefactoringStatus status) {
|
||||
for (CRefactoringMatch m : matches) {
|
||||
if ((m.getLocation() & CRefactory.OPTION_IN_PREPROCESSOR_DIRECTIVE) != 0) {
|
||||
m.setASTInformation(CRefactoringMatch.AST_REFERENCE);
|
||||
}
|
||||
}
|
||||
super.analyzeTextMatches(matches, monitor, status);
|
||||
super.analyzeTextMatches(renameBindings, matches, monitor, status);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -6,7 +6,8 @@
|
|||
* http://www.eclipse.org/legal/epl-v10.html
|
||||
*
|
||||
* Contributors:
|
||||
* Markus Schorn - initial API and implementation
|
||||
* Markus Schorn - initial API and implementation
|
||||
* Sergey Prigogin (Google)
|
||||
******************************************************************************/
|
||||
package org.eclipse.cdt.internal.ui.refactoring.rename;
|
||||
|
||||
|
@ -63,8 +64,8 @@ public class CRenameMethodProcessor extends CRenameGlobalProcessor {
|
|||
}
|
||||
|
||||
@Override
|
||||
public RefactoringStatus checkFinalConditions(IProgressMonitor monitor,
|
||||
CheckConditionsContext context) throws OperationCanceledException, CoreException {
|
||||
public RefactoringStatus checkFinalConditions(IProgressMonitor monitor, CheckConditionsContext context)
|
||||
throws OperationCanceledException, CoreException {
|
||||
CRefactoringArgument argument= getArgument();
|
||||
RefactoringStatus result= new RefactoringStatus();
|
||||
IScope scope= argument.getScope();
|
||||
|
@ -84,7 +85,8 @@ public class CRenameMethodProcessor extends CRenameGlobalProcessor {
|
|||
}
|
||||
}
|
||||
}
|
||||
if (argument.getArgumentKind() == CRefactory.ARGUMENT_VIRTUAL_METHOD && (getSelectedOptions() & CRefactory.OPTION_DO_VIRTUAL) == 0) {
|
||||
if (argument.getArgumentKind() == CRefactory.ARGUMENT_VIRTUAL_METHOD &&
|
||||
(getSelectedOptions() & CRefactory.OPTION_DO_VIRTUAL) == 0) {
|
||||
result.merge(RefactoringStatus.createWarningStatus(RenameMessages.CRenameMethodProcessor_warning_renameVirtual));
|
||||
}
|
||||
|
||||
|
|
|
@ -1,12 +1,13 @@
|
|||
/*******************************************************************************
|
||||
* Copyright (c) 2004, 2009 Wind River Systems, Inc. and others.
|
||||
* Copyright (c) 2004, 2010 Wind River Systems, Inc. and others.
|
||||
* All rights reserved. This program and the accompanying materials
|
||||
* are made available under the terms of the Eclipse Public License v1.0
|
||||
* which accompanies this distribution, and is available at
|
||||
* http://www.eclipse.org/legal/epl-v10.html
|
||||
*
|
||||
* Contributors:
|
||||
* Markus Schorn - initial API and implementation
|
||||
* Markus Schorn - initial API and implementation
|
||||
* Sergey Prigogin (Google)
|
||||
*******************************************************************************/
|
||||
package org.eclipse.cdt.internal.ui.refactoring.rename;
|
||||
|
||||
|
@ -182,23 +183,20 @@ public class CRenameProcessor extends RenameProcessor {
|
|||
}
|
||||
|
||||
@Override
|
||||
public RefactoringStatus checkFinalConditions(IProgressMonitor pm,
|
||||
CheckConditionsContext context) throws CoreException,
|
||||
OperationCanceledException {
|
||||
public RefactoringStatus checkFinalConditions(IProgressMonitor pm, CheckConditionsContext context)
|
||||
throws CoreException, OperationCanceledException {
|
||||
return fDelegate.checkFinalConditions(pm, context);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Change createChange(IProgressMonitor pm) throws CoreException,
|
||||
OperationCanceledException {
|
||||
public Change createChange(IProgressMonitor pm) throws CoreException, OperationCanceledException {
|
||||
return fDelegate.createChange(pm);
|
||||
}
|
||||
|
||||
@Override
|
||||
public RefactoringParticipant[] loadParticipants(RefactoringStatus status,
|
||||
SharableParticipants sharedParticipants) throws CoreException {
|
||||
RenameArguments arguments= new RenameArguments(getReplacementText(),
|
||||
true);
|
||||
RenameArguments arguments= new RenameArguments(getReplacementText(), true);
|
||||
final String[] natures= {CCProjectNature.CC_NATURE_ID, CProjectNature.C_NATURE_ID};
|
||||
List<RenameParticipant> result= new ArrayList<RenameParticipant>();
|
||||
IBinding binding= getArgument().getBinding();
|
||||
|
|
|
@ -1,14 +1,14 @@
|
|||
/*******************************************************************************
|
||||
* Copyright (c) 2004, 2009 Wind River Systems, Inc. and others.
|
||||
* Copyright (c) 2004, 2010 Wind River Systems, Inc. and others.
|
||||
* All rights reserved. This program and the accompanying materials
|
||||
* are made available under the terms of the Eclipse Public License v1.0
|
||||
* which accompanies this distribution, and is available at
|
||||
* http://www.eclipse.org/legal/epl-v10.html
|
||||
*
|
||||
* Contributors:
|
||||
* Markus Schorn - initial API and implementation
|
||||
* IBM Corporation - Bug 112366
|
||||
* Sergey Prigogin (Google)
|
||||
* Markus Schorn - initial API and implementation
|
||||
* IBM Corporation - Bug 112366
|
||||
* Sergey Prigogin (Google)
|
||||
******************************************************************************/
|
||||
package org.eclipse.cdt.internal.ui.refactoring.rename;
|
||||
|
||||
|
@ -53,7 +53,7 @@ import org.eclipse.cdt.ui.refactoring.CTextFileChange;
|
|||
*/
|
||||
public abstract class CRenameProcessorDelegate {
|
||||
private CRenameProcessor fTopProcessor;
|
||||
private ArrayList<CRefactoringMatch> fMatches= null;
|
||||
private ArrayList<CRefactoringMatch> fMatches;
|
||||
protected String fProcessorBaseName;
|
||||
private int fAvailableOptions=
|
||||
CRefactory.OPTION_ASK_SCOPE |
|
||||
|
@ -113,7 +113,8 @@ public abstract class CRenameProcessorDelegate {
|
|||
final public String getProcessorName() {
|
||||
String identifier= getArgument().getName();
|
||||
if (identifier != null) {
|
||||
return NLS.bind(RenameMessages.CRenameProcessorDelegate_wizard_title, fProcessorBaseName, identifier);
|
||||
return NLS.bind(RenameMessages.CRenameProcessorDelegate_wizard_title, fProcessorBaseName,
|
||||
identifier);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
@ -158,29 +159,28 @@ public abstract class CRenameProcessorDelegate {
|
|||
|
||||
/**
|
||||
* Builds an index-based file filter for the name search.
|
||||
* @return A set of files containing references to the name, or <code>null</code> if
|
||||
* @param bindings bindings being renamed
|
||||
* @return A set of files containing references to the bindings, or <code>null</code> if
|
||||
* exhaustive file search is requested.
|
||||
*/
|
||||
private Collection<IResource> getFileFilter() {
|
||||
private Collection<IResource> getFileFilter(IBinding[] bindings) {
|
||||
if ((getSelectedOptions() & CRefactory.OPTION_EXHAUSTIVE_FILE_SEARCH) != 0) {
|
||||
return null;
|
||||
}
|
||||
IIndex index = getIndex();
|
||||
if (index == null) {
|
||||
return null;
|
||||
}
|
||||
IBinding binding = getArgument().getBinding();
|
||||
if (binding == null) {
|
||||
return null;
|
||||
}
|
||||
Set<IIndexFileLocation> locations = new HashSet<IIndexFileLocation>();
|
||||
try {
|
||||
index.acquireReadLock();
|
||||
IIndexName[] names = index.findNames(binding,
|
||||
IIndex.FIND_ALL_OCCURRENCES | IIndex.SEARCH_ACROSS_LANGUAGE_BOUNDARIES);
|
||||
for (IIndexName name : names) {
|
||||
locations.add(name.getFile().getLocation());
|
||||
}
|
||||
for (IBinding binding : bindings) {
|
||||
IIndexName[] names = index.findNames(binding,
|
||||
IIndex.FIND_ALL_OCCURRENCES | IIndex.SEARCH_ACROSS_LANGUAGE_BOUNDARIES);
|
||||
for (IIndexName name : names) {
|
||||
locations.add(name.getFile().getLocation());
|
||||
}
|
||||
}
|
||||
} catch (InterruptedException e) {
|
||||
return null;
|
||||
} catch (CoreException e) {
|
||||
|
@ -208,16 +208,19 @@ public abstract class CRenameProcessorDelegate {
|
|||
return new RefactoringStatus();
|
||||
}
|
||||
|
||||
public RefactoringStatus checkFinalConditions(IProgressMonitor monitor, CheckConditionsContext context) throws CoreException, OperationCanceledException {
|
||||
public RefactoringStatus checkFinalConditions(IProgressMonitor monitor, CheckConditionsContext context)
|
||||
throws CoreException, OperationCanceledException {
|
||||
RefactoringStatus result= new RefactoringStatus();
|
||||
monitor.beginTask(RenameMessages.CRenameProcessorDelegate_task_checkFinalCondition, 2);
|
||||
IFile file= getArgument().getSourceFile();
|
||||
//assert file!=null;
|
||||
|
||||
|
||||
IBinding[] renameBindings= getBindingsToBeRenamed(result);
|
||||
|
||||
// perform text-search
|
||||
fMatches= new ArrayList<CRefactoringMatch>();
|
||||
TextSearchWrapper txtSearch= getManager().getTextSearch();
|
||||
Collection<IResource> fileFilter = getFileFilter();
|
||||
Collection<IResource> fileFilter = getFileFilter(renameBindings);
|
||||
if (fileFilter != null && !fileFilter.contains(file)) {
|
||||
fileFilter.add(file);
|
||||
}
|
||||
|
@ -232,8 +235,8 @@ public abstract class CRenameProcessorDelegate {
|
|||
if (result.hasFatalError()) {
|
||||
return result;
|
||||
}
|
||||
selectMatchesByLocation(fMatches);
|
||||
analyzeTextMatches(fMatches, new SubProgressMonitor(monitor, 1), result);
|
||||
selectMatchesByLocation(fMatches);
|
||||
analyzeTextMatches(renameBindings, fMatches, new SubProgressMonitor(monitor, 1), result);
|
||||
if (result.hasFatalError()) {
|
||||
return result;
|
||||
}
|
||||
|
@ -266,7 +269,8 @@ public abstract class CRenameProcessorDelegate {
|
|||
if (potentialMatchCount == 1) {
|
||||
msg= RenameMessages.CRenameProcessorDelegate_warning_potentialMatch_singular;
|
||||
} else {
|
||||
msg= NLS.bind(RenameMessages.CRenameProcessorDelegate_warning_potentialMatch_plural, potentialMatchCount);
|
||||
msg= NLS.bind(RenameMessages.CRenameProcessorDelegate_warning_potentialMatch_plural,
|
||||
potentialMatchCount);
|
||||
}
|
||||
result.addWarning(msg);
|
||||
}
|
||||
|
@ -275,7 +279,8 @@ public abstract class CRenameProcessorDelegate {
|
|||
if (commentCount == 1) {
|
||||
msg= RenameMessages.CRenameProcessorDelegate_warning_commentMatch_singular;
|
||||
} else {
|
||||
msg= NLS.bind(RenameMessages.CRenameProcessorDelegate_warning_commentMatch_plural, commentCount);
|
||||
msg= NLS.bind(RenameMessages.CRenameProcessorDelegate_warning_commentMatch_plural,
|
||||
commentCount);
|
||||
}
|
||||
result.addWarning(msg);
|
||||
}
|
||||
|
@ -289,11 +294,9 @@ public abstract class CRenameProcessorDelegate {
|
|||
return result;
|
||||
}
|
||||
|
||||
protected void analyzeTextMatches(ArrayList<CRefactoringMatch> matches, IProgressMonitor monitor, RefactoringStatus status) {
|
||||
CRefactoringArgument argument= getArgument();
|
||||
IBinding[] renameBindings= getBindingsToBeRenamed(status);
|
||||
if (renameBindings != null && renameBindings.length > 0 &&
|
||||
argument.getArgumentKind() != CRefactory.ARGUMENT_UNKNOWN) {
|
||||
protected void analyzeTextMatches(IBinding[] renameBindings, Collection<CRefactoringMatch> matches,
|
||||
IProgressMonitor monitor, RefactoringStatus status) {
|
||||
if (renameBindings.length > 0 && getArgument().getArgumentKind() != CRefactory.ARGUMENT_UNKNOWN) {
|
||||
ASTManager mngr= getAstManager();
|
||||
mngr.setValidBindings(renameBindings);
|
||||
mngr.setRenameTo(getReplacementText());
|
||||
|
@ -301,7 +304,7 @@ public abstract class CRenameProcessorDelegate {
|
|||
}
|
||||
}
|
||||
|
||||
private void selectMatchesByLocation(ArrayList<CRefactoringMatch> matches) {
|
||||
private void selectMatchesByLocation(Collection<CRefactoringMatch> matches) {
|
||||
int acceptTextLocation= getAcceptedLocations(getSelectedOptions());
|
||||
for (Iterator<CRefactoringMatch> iter = matches.iterator(); iter.hasNext();) {
|
||||
CRefactoringMatch match = iter.next();
|
||||
|
@ -317,10 +320,10 @@ public abstract class CRenameProcessorDelegate {
|
|||
}
|
||||
|
||||
public Change createChange(IProgressMonitor pm) throws CoreException, OperationCanceledException {
|
||||
if (fMatches.size() == 0) {
|
||||
if (fMatches.isEmpty()) {
|
||||
return null;
|
||||
}
|
||||
Collections.sort(fMatches, new Comparator<CRefactoringMatch>(){
|
||||
Collections.sort(fMatches, new Comparator<CRefactoringMatch>() {
|
||||
public int compare(CRefactoringMatch m1, CRefactoringMatch m2) {
|
||||
IFile f1= m1.getFile();
|
||||
IFile f2= m2.getFile();
|
||||
|
@ -371,10 +374,10 @@ public abstract class CRenameProcessorDelegate {
|
|||
}
|
||||
|
||||
/**
|
||||
* Returns the array of bindings that must be renamed
|
||||
* Returns the array of bindings that must be renamed.
|
||||
*/
|
||||
protected IBinding[] getBindingsToBeRenamed(RefactoringStatus status) {
|
||||
return new IBinding[] {getArgument().getBinding()};
|
||||
return new IBinding[] { getArgument().getBinding() };
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
Loading…
Add table
Reference in a new issue