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
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.
-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
-rw-r--r--core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/refactoring/CRefactoring.java8
-rw-r--r--core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/refactoring/NameInformation.java1
-rw-r--r--core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/refactoring/extractfunction/ExtractFunctionRefactoring.java2
-rw-r--r--core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/refactoring/extractlocalvariable/ExtractLocalVariableRefactoring.java4
-rw-r--r--core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/refactoring/hidemethod/HideMethodRefactoring.java4
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();

Back to the top