mirror of
https://github.com/eclipse-cdt/cdt
synced 2025-07-30 20:35:38 +02:00
Fixed IllegalStateException in Extract Function refactoring.
This commit is contained in:
parent
cc1209d029
commit
d4a53f3f5b
7 changed files with 19 additions and 15 deletions
|
@ -911,8 +911,11 @@ abstract class FlowAnalyzer extends ASTGenericVisitor {
|
|||
if (binding instanceof IVariable) {
|
||||
IVariable variable= (IVariable) binding;
|
||||
if (!(variable instanceof IField)) {
|
||||
int accessMode = CPPVariableReadWriteFlags.getReadWriteFlags(node);
|
||||
setFlowInfo(node, new LocalFlowInfo(variable, accessMode, fFlowContext));
|
||||
int index = fFlowContext.getIndexFromLocal(variable);
|
||||
if (index >= 0) {
|
||||
int accessMode = CPPVariableReadWriteFlags.getReadWriteFlags(node);
|
||||
setFlowInfo(node, new LocalFlowInfo(variable, index, accessMode, fFlowContext));
|
||||
}
|
||||
}
|
||||
}
|
||||
return PROCESS_SKIP;
|
||||
|
|
|
@ -16,11 +16,11 @@ import org.eclipse.cdt.core.dom.ast.IVariable;
|
|||
class LocalFlowInfo extends FlowInfo {
|
||||
private final int fVariableIndex;
|
||||
|
||||
public LocalFlowInfo(IVariable binding, int localAccessMode, FlowContext context) {
|
||||
public LocalFlowInfo(IVariable binding, int variableIndex, int localAccessMode, FlowContext context) {
|
||||
super(NO_RETURN);
|
||||
fVariableIndex= context.getIndexFromLocal(binding);
|
||||
if (fVariableIndex < 0)
|
||||
throw new IllegalStateException("Invalid local variable \"" + binding.getName() + "\" for the context."); //$NON-NLS-1$ //$NON-NLS-2$
|
||||
if (variableIndex < 0)
|
||||
throw new IllegalArgumentException("Invalid index for local variable \"" + binding.getName()); //$NON-NLS-1$
|
||||
fVariableIndex= variableIndex;
|
||||
if (context.considerAccessMode()) {
|
||||
createAccessModeArray(context);
|
||||
context.manageLocal(binding);
|
||||
|
|
|
@ -132,16 +132,16 @@ public abstract class CRefactoring extends Refactoring {
|
|||
public RefactoringStatus checkInitialConditions(IProgressMonitor pm)
|
||||
throws CoreException, OperationCanceledException {
|
||||
SubMonitor sm = SubMonitor.convert(pm, 10);
|
||||
sm.subTask(Messages.Refactoring_PM_LoadTU);
|
||||
if (isProgressMonitorCanceld(sm, initStatus)) {
|
||||
if (isProgressMonitorCanceled(sm, initStatus)) {
|
||||
return initStatus;
|
||||
}
|
||||
sm.subTask(Messages.Refactoring_PM_LoadTU);
|
||||
IASTTranslationUnit ast = getAST(tu, sm);
|
||||
if (ast == null) {
|
||||
initStatus.addError(NLS.bind(Messages.Refactoring_ParsingError, tu.getPath()));
|
||||
return initStatus;
|
||||
}
|
||||
if (isProgressMonitorCanceld(sm, initStatus)) {
|
||||
if (isProgressMonitorCanceled(sm, initStatus)) {
|
||||
return initStatus;
|
||||
}
|
||||
sm.subTask(Messages.Refactoring_PM_CheckTU);
|
||||
|
@ -152,7 +152,7 @@ public abstract class CRefactoring extends Refactoring {
|
|||
return initStatus;
|
||||
}
|
||||
|
||||
protected static boolean isProgressMonitorCanceld(IProgressMonitor sm, RefactoringStatus status) {
|
||||
protected static boolean isProgressMonitorCanceled(IProgressMonitor sm, RefactoringStatus status) {
|
||||
if (sm.isCanceled()) {
|
||||
status.addFatalError(Messages.Refactoring_CanceledByUser);
|
||||
return true;
|
||||
|
|
|
@ -278,6 +278,7 @@ public class NameInformation {
|
|||
if (!isWriteAccess) {
|
||||
indirection = Indirection.REFERENCE;
|
||||
}
|
||||
// TODO(sprigogin): Verify availability of the copy ctor before passing by value
|
||||
} else {
|
||||
indirection = Indirection.POINTER;
|
||||
}
|
||||
|
|
|
@ -173,7 +173,7 @@ public class ExtractFunctionRefactoring extends CRefactoring {
|
|||
nodeFactory = ast.getASTNodeFactory();
|
||||
container = findExtractableNodes();
|
||||
|
||||
if (isProgressMonitorCanceld(sm, initStatus))
|
||||
if (isProgressMonitorCanceled(sm, initStatus))
|
||||
return initStatus;
|
||||
|
||||
if (container.isEmpty()) {
|
||||
|
|
|
@ -114,7 +114,7 @@ public class ExtractLocalVariableRefactoring extends CRefactoring {
|
|||
}
|
||||
|
||||
sm.worked(1);
|
||||
if (isProgressMonitorCanceld(sm, initStatus))
|
||||
if (isProgressMonitorCanceled(sm, initStatus))
|
||||
return initStatus;
|
||||
|
||||
boolean oneMarked = selectedRegion != null && isOneMarked(container.getNodesToWrite(), selectedRegion);
|
||||
|
@ -125,7 +125,7 @@ public class ExtractLocalVariableRefactoring extends CRefactoring {
|
|||
}
|
||||
sm.worked(1);
|
||||
|
||||
if (isProgressMonitorCanceld(sm, initStatus))
|
||||
if (isProgressMonitorCanceled(sm, initStatus))
|
||||
return initStatus;
|
||||
|
||||
sm.worked(1);
|
||||
|
|
|
@ -93,7 +93,7 @@ public class HideMethodRefactoring extends CRefactoring {
|
|||
return initStatus;
|
||||
}
|
||||
|
||||
if (isProgressMonitorCanceld(sm, initStatus))
|
||||
if (isProgressMonitorCanceled(sm, initStatus))
|
||||
return initStatus;
|
||||
|
||||
List<IASTName> names = findAllMarkedNames();
|
||||
|
@ -118,7 +118,7 @@ public class HideMethodRefactoring extends CRefactoring {
|
|||
return initStatus;
|
||||
}
|
||||
|
||||
if (isProgressMonitorCanceld(sm, initStatus))
|
||||
if (isProgressMonitorCanceled(sm, initStatus))
|
||||
return initStatus;
|
||||
if (methodDeclaration instanceof IASTFunctionDefinition) {
|
||||
IASTDeclarator declarator = ((IASTFunctionDefinition) methodDeclaration).getDeclarator();
|
||||
|
|
Loading…
Add table
Reference in a new issue