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