assertThatMethodContainsSelections("containingLabel", new S(53, 28), new S(84, 16), new S(53, 47), new S(65, 12), new S(92, 8));
}
+ @Test
+ public void testContainingSwitch() throws Exception {
+ assertThatMethodContainsSelections("containingSwitch", new S(54, 188), new S(89, 41), new S(89, 31), new S(146, 46), new S(207, 31), new S(124, 6));
+ }
+
@Test
public void testContainingWhile() throws Exception {
assertThatMethodContainsSelections("containingWhile", new S(53, 34), new S(91, 28), new S(53, 66), new S(71, 12), new S(107, 12));
import org.eclipse.jdt.core.dom.LabeledStatement;
import org.eclipse.jdt.core.dom.MethodDeclaration;
import org.eclipse.jdt.core.dom.Statement;
+import org.eclipse.jdt.core.dom.SwitchCase;
+import org.eclipse.jdt.core.dom.SwitchStatement;
import org.eclipse.jdt.core.dom.WhileStatement;
import org.eclipse.jdt.internal.corext.refactoring.structure.ASTNodeSearchUtil;
size += list.size();
return size;
}
-
+
@Override
public boolean visit(Block node) {
statementLists.add(new LinkedList<Statement>(node.statements()));
return true;
}
- private void addIfNotBlockOrNull(Statement body) {
- if (!(body instanceof Block) && body != null)
- statementLists.add(new LinkedList<Statement>(Arrays.asList(body)));
- }
-
@Override
public boolean visit(DoStatement node) {
addIfNotBlockOrNull(node.getBody());
return true;
}
-
+
@Override
public boolean visit(EnhancedForStatement node) {
addIfNotBlockOrNull(node.getBody());
return true;
}
-
+
@Override
public boolean visit(ForStatement node) {
addIfNotBlockOrNull(node.getBody());
return true;
}
-
+
@Override
public boolean visit(IfStatement node) {
addIfNotBlockOrNull(node.getThenStatement());
addIfNotBlockOrNull(node.getElseStatement());
return true;
}
-
+
@Override
public boolean visit(LabeledStatement node) {
addIfNotBlockOrNull(node.getBody());
return true;
}
-
- //TODO: switch statements
-
+
+ @Override
+ public boolean visit(SwitchStatement node) {
+ List<Statement> statementList = new LinkedList<Statement>();
+
+ for (Object stmtObject: node.statements()) {
+ assert stmtObject instanceof Statement;
+ Statement statement = (Statement) stmtObject;
+
+ if (statement instanceof SwitchCase) {
+ if (!statementList.isEmpty()) {
+ statementLists.add(statementList);
+ statementList = new LinkedList<Statement>();
+ }
+ } else {
+ statementList.add(statement);
+ }
+ }
+
+ if (!statementList.isEmpty())
+ statementLists.add(statementList);
+
+ return true;
+ }
+
@Override
public boolean visit(WhileStatement node) {
addIfNotBlockOrNull(node.getBody());
return true;
}
-
+
+ private void addIfNotBlockOrNull(Statement body) {
+ if (!(body instanceof Block) && body != null)
+ statementLists.add(new LinkedList<Statement>(Arrays.asList(body)));
+ }
+
}
\ No newline at end of file