1
0
Fork 0
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:
Sergey Prigogin 2012-03-19 19:29:36 -07:00
parent cc1209d029
commit d4a53f3f5b
7 changed files with 19 additions and 15 deletions

View file

@ -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;

View file

@ -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);

View file

@ -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;

View file

@ -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;
}

View file

@ -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()) {

View file

@ -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);

View file

@ -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();