diff options
author | Sergey Prigogin | 2012-03-20 02:29:36 +0000 |
---|---|---|
committer | Sergey Prigogin | 2012-03-20 02:29:36 +0000 |
commit | d4a53f3f5b72fa9ed11ab2e1422e1b9021bb1447 (patch) | |
tree | c81b4eec74459ede24d8cb9dd330f441c55ea321 | |
parent | cc1209d0290ee877478b62db151ff4b3fc9f55dc (diff) | |
download | org.eclipse.cdt-d4a53f3f5b72fa9ed11ab2e1422e1b9021bb1447.tar.gz org.eclipse.cdt-d4a53f3f5b72fa9ed11ab2e1422e1b9021bb1447.tar.xz org.eclipse.cdt-d4a53f3f5b72fa9ed11ab2e1422e1b9021bb1447.zip |
Fixed IllegalStateException in Extract Function refactoring.
7 files changed, 19 insertions, 15 deletions
diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/corext/refactoring/code/flow/FlowAnalyzer.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/corext/refactoring/code/flow/FlowAnalyzer.java index abb635e644b..dcaa03e2908 100644 --- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/corext/refactoring/code/flow/FlowAnalyzer.java +++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/corext/refactoring/code/flow/FlowAnalyzer.java @@ -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; diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/corext/refactoring/code/flow/LocalFlowInfo.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/corext/refactoring/code/flow/LocalFlowInfo.java index 8bbbb4945c6..4cd924edcc9 100644 --- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/corext/refactoring/code/flow/LocalFlowInfo.java +++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/corext/refactoring/code/flow/LocalFlowInfo.java @@ -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); diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/refactoring/CRefactoring.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/refactoring/CRefactoring.java index 798ddf66a29..b93cefc2e78 100644 --- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/refactoring/CRefactoring.java +++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/refactoring/CRefactoring.java @@ -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; diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/refactoring/NameInformation.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/refactoring/NameInformation.java index 8859680deed..68f2fa4d808 100644 --- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/refactoring/NameInformation.java +++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/refactoring/NameInformation.java @@ -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; } diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/refactoring/extractfunction/ExtractFunctionRefactoring.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/refactoring/extractfunction/ExtractFunctionRefactoring.java index 6e294bdc6b0..ef15e271284 100644 --- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/refactoring/extractfunction/ExtractFunctionRefactoring.java +++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/refactoring/extractfunction/ExtractFunctionRefactoring.java @@ -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()) { diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/refactoring/extractlocalvariable/ExtractLocalVariableRefactoring.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/refactoring/extractlocalvariable/ExtractLocalVariableRefactoring.java index f2fff7c0092..37fd2cb8c18 100644 --- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/refactoring/extractlocalvariable/ExtractLocalVariableRefactoring.java +++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/refactoring/extractlocalvariable/ExtractLocalVariableRefactoring.java @@ -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); diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/refactoring/hidemethod/HideMethodRefactoring.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/refactoring/hidemethod/HideMethodRefactoring.java index 18d8d571577..6a588328ed7 100644 --- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/refactoring/hidemethod/HideMethodRefactoring.java +++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/refactoring/hidemethod/HideMethodRefactoring.java @@ -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(); |