Browse Source

impl. of DepthTraversalTypeAwareVisitor should not have to visit internal method

tags/5.2-RC1
Sébastien Lesaint 9 years ago
parent
commit
1043c094fa

+ 9
- 3
server/sonar-server/src/main/java/org/sonar/server/computation/component/DepthTraversalTypeAwareVisitor.java View File

@@ -43,17 +43,18 @@ public abstract class DepthTraversalTypeAwareVisitor implements TypeAwareVisitor
}

if (order == Order.PRE_ORDER) {
visitAny(component);
visitNode(component);
}

visitChildren(component);

if (order == Order.POST_ORDER) {
visitAny(component);
visitNode(component);
}
}

protected void visitAny(Component component) {
protected void visitNode(Component component) {
visitAny(component);
switch (component.getType()) {
case PROJECT:
visitProject(component);
@@ -105,6 +106,11 @@ public abstract class DepthTraversalTypeAwareVisitor implements TypeAwareVisitor
// empty implementation, meant to be override at will by subclasses
}

@Override
public void visitAny(Component component) {
// empty implementation, meant to be override at will by subclasses
}

public enum Order {
PRE_ORDER, POST_ORDER
}

+ 20
- 0
server/sonar-server/src/main/java/org/sonar/server/computation/component/TypeAwareVisitor.java View File

@@ -23,13 +23,33 @@ package org.sonar.server.computation.component;
* A {@link ComponentVisitor} which can exposes methods which ensure the type of the visited Component.
*/
public interface TypeAwareVisitor extends ComponentVisitor {
/**
* Called when encountering a Component of type {@link Component.Type#PROJECT}
*/
void visitProject(Component tree);

/**
* Called when encountering a Component of type {@link Component.Type#MODULE}
*/
void visitModule(Component tree);

/**
* Called when encountering a Component of type {@link Component.Type#DIRECTORY}
*/
void visitDirectory(Component tree);

/**
* Called when encountering a Component of type {@link Component.Type#FILE}
*/
void visitFile(Component tree);

/**
* Called when encountering a Component of an unknown type
*/
void visitUnknown(Component tree);

/**
* Called for any component, <strong>in addition</strong> to the methods specific to each type
*/
void visitAny(Component component);
}

+ 1
- 1
server/sonar-server/src/main/java/org/sonar/server/computation/step/PersistMeasuresStep.java View File

@@ -90,7 +90,7 @@ public class PersistMeasuresStep implements ComputationStep {
}

@Override
protected void visitAny(Component component) {
public void visitAny(Component component) {
int componentRef = component.getRef();
List<BatchReport.Measure> measures = reportReader.readComponentMeasures(componentRef);
persistMeasures(measures, dbIdsRepository.getComponentId(component), dbIdsRepository.getSnapshotId(component));

+ 27
- 6
server/sonar-server/src/test/java/org/sonar/server/computation/component/PostOrderDepthTraversalTypeAwareVisitorTest.java View File

@@ -66,6 +66,7 @@ public class PostOrderDepthTraversalTypeAwareVisitorTest {
spyFileVisitor.visit(component);

inOrder.verify(spyFileVisitor).visit(component);
inOrder.verify(spyFileVisitor).visitAny(component);
inOrder.verify(spyFileVisitor).visitFile(component);
inOrder.verifyNoMoreInteractions();
}
@@ -76,6 +77,7 @@ public class PostOrderDepthTraversalTypeAwareVisitorTest {
spyFileVisitor.visit(component);

inOrder.verify(spyFileVisitor).visit(component);
inOrder.verify(spyFileVisitor).visitAny(component);
inOrder.verify(spyFileVisitor).visitModule(component);
inOrder.verifyNoMoreInteractions();
}
@@ -86,6 +88,7 @@ public class PostOrderDepthTraversalTypeAwareVisitorTest {
spyFileVisitor.visit(component);

inOrder.verify(spyFileVisitor).visit(component);
inOrder.verify(spyFileVisitor).visitAny(component);
inOrder.verify(spyFileVisitor).visitDirectory(component);
inOrder.verifyNoMoreInteractions();
}
@@ -96,12 +99,13 @@ public class PostOrderDepthTraversalTypeAwareVisitorTest {
spyFileVisitor.visit(component);

inOrder.verify(spyFileVisitor).visit(component);
inOrder.verify(spyFileVisitor).visitAny(component);
inOrder.verify(spyFileVisitor).visitProject(component);
inOrder.verifyNoMoreInteractions();
}

@Test
public void visit_file_with_depth_DIRECTORY_does_not_call_visit_file() {
public void visit_file_with_depth_DIRECTORY_does_not_call_visit_file_nor_visitAny() {
Component component = component(FILE, 1);
spyDirectoryVisitor.visit(component);

@@ -115,6 +119,7 @@ public class PostOrderDepthTraversalTypeAwareVisitorTest {
spyDirectoryVisitor.visit(component);

inOrder.verify(spyDirectoryVisitor).visit(component);
inOrder.verify(spyDirectoryVisitor).visitAny(component);
inOrder.verify(spyDirectoryVisitor).visitDirectory(component);
inOrder.verifyNoMoreInteractions();
}
@@ -125,6 +130,7 @@ public class PostOrderDepthTraversalTypeAwareVisitorTest {
spyDirectoryVisitor.visit(component);

inOrder.verify(spyDirectoryVisitor).visit(component);
inOrder.verify(spyDirectoryVisitor).visitAny(component);
inOrder.verify(spyDirectoryVisitor).visitModule(component);
inOrder.verifyNoMoreInteractions();
}
@@ -135,12 +141,13 @@ public class PostOrderDepthTraversalTypeAwareVisitorTest {
spyDirectoryVisitor.visit(component);

inOrder.verify(spyDirectoryVisitor).visit(component);
inOrder.verify(spyDirectoryVisitor).visitAny(component);
inOrder.verify(spyDirectoryVisitor).visitProject(component);
inOrder.verifyNoMoreInteractions();
}

@Test
public void visit_file_with_depth_MODULE_does_not_call_visit_file() {
public void visit_file_with_depth_MODULE_does_not_call_visit_file_nor_visitAny() {
Component component = component(FILE, 1);
spyModuleVisitor.visit(component);

@@ -149,7 +156,7 @@ public class PostOrderDepthTraversalTypeAwareVisitorTest {
}

@Test
public void visit_directory_with_depth_MODULE_does_not_call_visit_directory() {
public void visit_directory_with_depth_MODULE_does_not_call_visit_directory_nor_visitAny() {
Component component = component(DIRECTORY, 1);
spyModuleVisitor.visit(component);

@@ -163,6 +170,7 @@ public class PostOrderDepthTraversalTypeAwareVisitorTest {
spyModuleVisitor.visit(component);

inOrder.verify(spyModuleVisitor).visit(component);
inOrder.verify(spyModuleVisitor).visitAny(component);
inOrder.verify(spyModuleVisitor).visitModule(component);
inOrder.verifyNoMoreInteractions();
}
@@ -173,12 +181,13 @@ public class PostOrderDepthTraversalTypeAwareVisitorTest {
spyModuleVisitor.visit(component);

inOrder.verify(spyModuleVisitor).visit(component);
inOrder.verify(spyModuleVisitor).visitAny(component);
inOrder.verify(spyModuleVisitor).visitModule(component);
inOrder.verifyNoMoreInteractions();
}

@Test
public void visit_file_with_depth_PROJECT_does_not_call_visit_file() {
public void visit_file_with_depth_PROJECT_does_not_call_visit_file_nor_visitAny() {
Component component = component(FILE, 1);
spyProjectVisitor.visit(component);

@@ -187,7 +196,7 @@ public class PostOrderDepthTraversalTypeAwareVisitorTest {
}

@Test
public void visit_directory_with_depth_PROJECT_does_not_call_visit_directory() {
public void visit_directory_with_depth_PROJECT_does_not_call_visit_directory_nor_visitAny() {
Component component = component(DIRECTORY, 1);
spyProjectVisitor.visit(component);

@@ -196,7 +205,7 @@ public class PostOrderDepthTraversalTypeAwareVisitorTest {
}

@Test
public void visit_module_with_depth_PROJECT_does_not_call_visit_module() {
public void visit_module_with_depth_PROJECT_does_not_call_visit_module_nor_visitAny() {
Component component = component(MODULE, 1);
spyProjectVisitor.visit(component);

@@ -210,6 +219,7 @@ public class PostOrderDepthTraversalTypeAwareVisitorTest {
spyProjectVisitor.visit(component);

inOrder.verify(spyProjectVisitor).visit(component);
inOrder.verify(spyProjectVisitor).visitAny(component);
inOrder.verify(spyProjectVisitor).visitProject(component);
inOrder.verifyNoMoreInteractions();
}
@@ -222,11 +232,16 @@ public class PostOrderDepthTraversalTypeAwareVisitorTest {
inOrder.verify(spyFileVisitor).visit(MODULE_2);
inOrder.verify(spyFileVisitor).visit(DIRECTORY_3);
inOrder.verify(spyFileVisitor).visit(FILE_4);
inOrder.verify(spyFileVisitor).visitAny(FILE_4);
inOrder.verify(spyFileVisitor).visitFile(FILE_4);
inOrder.verify(spyFileVisitor).visit(FILE_5);
inOrder.verify(spyFileVisitor).visitAny(FILE_5);
inOrder.verify(spyFileVisitor).visitFile(FILE_5);
inOrder.verify(spyFileVisitor).visitAny(DIRECTORY_3);
inOrder.verify(spyFileVisitor).visitDirectory(DIRECTORY_3);
inOrder.verify(spyFileVisitor).visitAny(MODULE_2);
inOrder.verify(spyFileVisitor).visitModule(MODULE_2);
inOrder.verify(spyFileVisitor).visitAny(COMPONENT_TREE);
inOrder.verify(spyFileVisitor).visitProject(COMPONENT_TREE);
inOrder.verifyNoMoreInteractions();
}
@@ -238,8 +253,11 @@ public class PostOrderDepthTraversalTypeAwareVisitorTest {
inOrder.verify(spyDirectoryVisitor).visit(COMPONENT_TREE);
inOrder.verify(spyDirectoryVisitor).visit(MODULE_2);
inOrder.verify(spyDirectoryVisitor).visit(DIRECTORY_3);
inOrder.verify(spyDirectoryVisitor).visitAny(DIRECTORY_3);
inOrder.verify(spyDirectoryVisitor).visitDirectory(DIRECTORY_3);
inOrder.verify(spyDirectoryVisitor).visitAny(MODULE_2);
inOrder.verify(spyDirectoryVisitor).visitModule(MODULE_2);
inOrder.verify(spyDirectoryVisitor).visitAny(COMPONENT_TREE);
inOrder.verify(spyDirectoryVisitor).visitProject(COMPONENT_TREE);
inOrder.verifyNoMoreInteractions();
}
@@ -250,7 +268,9 @@ public class PostOrderDepthTraversalTypeAwareVisitorTest {

inOrder.verify(spyModuleVisitor).visit(COMPONENT_TREE);
inOrder.verify(spyModuleVisitor).visit(MODULE_2);
inOrder.verify(spyModuleVisitor).visitAny(MODULE_2);
inOrder.verify(spyModuleVisitor).visitModule(MODULE_2);
inOrder.verify(spyModuleVisitor).visitAny(COMPONENT_TREE);
inOrder.verify(spyModuleVisitor).visitProject(COMPONENT_TREE);
inOrder.verifyNoMoreInteractions();
}
@@ -260,6 +280,7 @@ public class PostOrderDepthTraversalTypeAwareVisitorTest {
spyProjectVisitor.visit(COMPONENT_TREE);

inOrder.verify(spyProjectVisitor).visit(COMPONENT_TREE);
inOrder.verify(spyProjectVisitor).visitAny(COMPONENT_TREE);
inOrder.verify(spyProjectVisitor).visitProject(COMPONENT_TREE);
inOrder.verifyNoMoreInteractions();
}

+ 24
- 7
server/sonar-server/src/test/java/org/sonar/server/computation/component/PreOrderDepthTraversalTypeAwareVisitorTest.java View File

@@ -66,6 +66,7 @@ public class PreOrderDepthTraversalTypeAwareVisitorTest {
spyFileVisitor.visit(component);

inOrder.verify(spyFileVisitor).visit(component);
inOrder.verify(spyFileVisitor).visitAny(component);
inOrder.verify(spyFileVisitor).visitFile(component);
inOrder.verifyNoMoreInteractions();
}
@@ -76,6 +77,7 @@ public class PreOrderDepthTraversalTypeAwareVisitorTest {
spyFileVisitor.visit(component);

inOrder.verify(spyFileVisitor).visit(component);
inOrder.verify(spyFileVisitor).visitAny(component);
inOrder.verify(spyFileVisitor).visitModule(component);
inOrder.verifyNoMoreInteractions();
}
@@ -86,6 +88,7 @@ public class PreOrderDepthTraversalTypeAwareVisitorTest {
spyFileVisitor.visit(component);

inOrder.verify(spyFileVisitor).visit(component);
inOrder.verify(spyFileVisitor).visitAny(component);
inOrder.verify(spyFileVisitor).visitDirectory(component);
inOrder.verifyNoMoreInteractions();
}
@@ -101,7 +104,7 @@ public class PreOrderDepthTraversalTypeAwareVisitorTest {
}

@Test
public void visit_file_with_depth_DIRECTORY_does_not_call_visit_file() {
public void visit_file_with_depth_DIRECTORY_does_not_call_visit_file_nor_visitAny() {
Component component = component(FILE, 1);
spyDirectoryVisitor.visit(component);

@@ -115,6 +118,7 @@ public class PreOrderDepthTraversalTypeAwareVisitorTest {
spyDirectoryVisitor.visit(component);

inOrder.verify(spyDirectoryVisitor).visit(component);
inOrder.verify(spyDirectoryVisitor).visitAny(component);
inOrder.verify(spyDirectoryVisitor).visitDirectory(component);
inOrder.verifyNoMoreInteractions();
}
@@ -125,6 +129,7 @@ public class PreOrderDepthTraversalTypeAwareVisitorTest {
spyDirectoryVisitor.visit(component);

inOrder.verify(spyDirectoryVisitor).visit(component);
inOrder.verify(spyDirectoryVisitor).visitAny(component);
inOrder.verify(spyDirectoryVisitor).visitModule(component);
inOrder.verifyNoMoreInteractions();
}
@@ -135,12 +140,13 @@ public class PreOrderDepthTraversalTypeAwareVisitorTest {
spyDirectoryVisitor.visit(component);

inOrder.verify(spyDirectoryVisitor).visit(component);
inOrder.verify(spyDirectoryVisitor).visitAny(component);
inOrder.verify(spyDirectoryVisitor).visitProject(component);
inOrder.verifyNoMoreInteractions();
}

@Test
public void visit_file_with_depth_MODULE_does_not_call_visit_file() {
public void visit_file_with_depth_MODULE_does_not_call_visit_file_nor_visit_any() {
Component component = component(FILE, 1);
spyModuleVisitor.visit(component);

@@ -149,7 +155,7 @@ public class PreOrderDepthTraversalTypeAwareVisitorTest {
}

@Test
public void visit_directory_with_depth_MODULE_does_not_call_visit_directory() {
public void visit_directory_with_depth_MODULE_does_not_call_visit_directory_not_visit_any() {
Component component = component(DIRECTORY, 1);
spyModuleVisitor.visit(component);

@@ -163,6 +169,7 @@ public class PreOrderDepthTraversalTypeAwareVisitorTest {
spyModuleVisitor.visit(component);

inOrder.verify(spyModuleVisitor).visit(component);
inOrder.verify(spyModuleVisitor).visitAny(component);
inOrder.verify(spyModuleVisitor).visitModule(component);
inOrder.verifyNoMoreInteractions();
}
@@ -173,12 +180,13 @@ public class PreOrderDepthTraversalTypeAwareVisitorTest {
spyModuleVisitor.visit(component);

inOrder.verify(spyModuleVisitor).visit(component);
inOrder.verify(spyModuleVisitor).visitAny(component);
inOrder.verify(spyModuleVisitor).visitModule(component);
inOrder.verifyNoMoreInteractions();
}

@Test
public void visit_file_with_depth_PROJECT_does_not_call_visit_file() {
public void visit_file_with_depth_PROJECT_does_not_call_visit_file_nor_visitAny() {
Component component = component(FILE, 1);
spyProjectVisitor.visit(component);

@@ -187,7 +195,7 @@ public class PreOrderDepthTraversalTypeAwareVisitorTest {
}

@Test
public void visit_directory_with_depth_PROJECT_does_not_call_visit_directory() {
public void visit_directory_with_depth_PROJECT_does_not_call_visit_directory_nor_visitAny() {
Component component = component(DIRECTORY, 1);
spyProjectVisitor.visit(component);

@@ -196,7 +204,7 @@ public class PreOrderDepthTraversalTypeAwareVisitorTest {
}

@Test
public void visit_module_with_depth_PROJECT_does_not_call_visit_module() {
public void visit_module_with_depth_PROJECT_does_not_call_visit_module_nor_visitAny() {
Component component = component(MODULE, 1);
spyProjectVisitor.visit(component);

@@ -205,11 +213,12 @@ public class PreOrderDepthTraversalTypeAwareVisitorTest {
}

@Test
public void visit_project_with_depth_PROJECT_calls_visit_project() {
public void visit_project_with_depth_PROJECT_calls_visit_project_nor_visitAny() {
Component component = component(PROJECT, 1);
spyProjectVisitor.visit(component);

inOrder.verify(spyProjectVisitor).visit(component);
inOrder.verify(spyProjectVisitor).visitAny(component);
inOrder.verify(spyProjectVisitor).visitProject(component);
inOrder.verifyNoMoreInteractions();
}
@@ -219,14 +228,19 @@ public class PreOrderDepthTraversalTypeAwareVisitorTest {
spyFileVisitor.visit(COMPONENT_TREE);

inOrder.verify(spyFileVisitor).visit(COMPONENT_TREE);
inOrder.verify(spyFileVisitor).visitAny(COMPONENT_TREE);
inOrder.verify(spyFileVisitor).visitProject(COMPONENT_TREE);
inOrder.verify(spyFileVisitor).visit(MODULE_2);
inOrder.verify(spyFileVisitor).visitAny(MODULE_2);
inOrder.verify(spyFileVisitor).visitModule(MODULE_2);
inOrder.verify(spyFileVisitor).visit(DIRECTORY_3);
inOrder.verify(spyFileVisitor).visitAny(DIRECTORY_3);
inOrder.verify(spyFileVisitor).visitDirectory(DIRECTORY_3);
inOrder.verify(spyFileVisitor).visit(FILE_4);
inOrder.verify(spyFileVisitor).visitAny(FILE_4);
inOrder.verify(spyFileVisitor).visitFile(FILE_4);
inOrder.verify(spyFileVisitor).visit(FILE_5);
inOrder.verify(spyFileVisitor).visitAny(FILE_5);
inOrder.verify(spyFileVisitor).visitFile(FILE_5);
inOrder.verifyNoMoreInteractions();
}
@@ -249,8 +263,10 @@ public class PreOrderDepthTraversalTypeAwareVisitorTest {
spyModuleVisitor.visit(COMPONENT_TREE);

inOrder.verify(spyModuleVisitor).visit(COMPONENT_TREE);
inOrder.verify(spyModuleVisitor).visitAny(COMPONENT_TREE);
inOrder.verify(spyModuleVisitor).visitProject(COMPONENT_TREE);
inOrder.verify(spyModuleVisitor).visit(MODULE_2);
inOrder.verify(spyModuleVisitor).visitAny(MODULE_2);
inOrder.verify(spyModuleVisitor).visitModule(MODULE_2);
inOrder.verifyNoMoreInteractions();
}
@@ -260,6 +276,7 @@ public class PreOrderDepthTraversalTypeAwareVisitorTest {
spyProjectVisitor.visit(COMPONENT_TREE);

inOrder.verify(spyProjectVisitor).visit(COMPONENT_TREE);
inOrder.verify(spyProjectVisitor).visitAny(COMPONENT_TREE);
inOrder.verify(spyProjectVisitor).visitProject(COMPONENT_TREE);
inOrder.verifyNoMoreInteractions();
}

Loading…
Cancel
Save