Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSergey Prigogin2012-03-20 02:29:36 +0000
committerSergey Prigogin2012-03-20 02:29:36 +0000
commitd4a53f3f5b72fa9ed11ab2e1422e1b9021bb1447 (patch)
treec81b4eec74459ede24d8cb9dd330f441c55ea321 /core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/corext/refactoring
parentcc1209d0290ee877478b62db151ff4b3fc9f55dc (diff)
downloadorg.eclipse.cdt-d4a53f3f5b72fa9ed11ab2e1422e1b9021bb1447.tar.gz
org.eclipse.cdt-d4a53f3f5b72fa9ed11ab2e1422e1b9021bb1447.tar.xz
org.eclipse.cdt-d4a53f3f5b72fa9ed11ab2e1422e1b9021bb1447.zip
Fixed IllegalStateException in Extract Function refactoring.
Diffstat (limited to 'core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/corext/refactoring')
-rw-r--r--core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/corext/refactoring/code/flow/FlowAnalyzer.java7
-rw-r--r--core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/corext/refactoring/code/flow/LocalFlowInfo.java8
2 files changed, 9 insertions, 6 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);

Back to the top