*/
package org.sonar.server.computation.component;
+import static java.lang.String.format;
import static java.util.Objects.requireNonNull;
import static org.sonar.server.computation.component.ComponentVisitor.Order.POST_ORDER;
import static org.sonar.server.computation.component.ComponentVisitor.Order.PRE_ORDER;
this.visitor.visitProjectView(component, stack);
break;
default:
- this.visitor.visitUnknown(component, stack);
+ throw new IllegalArgumentException(format("Unsupported component type %s, no visitor method to call", component.getType()));
}
}
case PROJECT_VIEW:
return this.visitor.getFactory().createForProjectView(component);
default:
- return this.visitor.getFactory().createForUnknown(component);
+ throw new IllegalArgumentException(format("Unsupported component type %s, can not create stack object", component.getType()));
}
}
*/
void visitProjectView(Component projectView, Path<T> path);
- /**
- * Called when encountering a Component which type has no visit method in this interface.
- */
- void visitUnknown(Component unknownComponent, Path<T> path);
-
/**
* Called for any component, <strong>in addition</strong> to the methods specific to each type
*/
T createForProjectView(Component projectView);
- T createForUnknown(Component file);
}
interface Path<T> {
// empty implementation, meant to be override at will by subclasses
}
- @Override
- public void visitUnknown(Component unknownComponent, Path<T> path) {
- // empty implementation, meant to be override at will by subclasses
- }
-
@Override
public void visitAny(Component component, Path<T> path) {
// empty implementation, meant to be override at will by subclasses
return createForAny(projectView);
}
- @Override
- public T createForUnknown(Component file) {
- return createForAny(file);
- }
}
}
package org.sonar.server.computation.component;
+import static java.lang.String.format;
+
public class PathAwareVisitorWrapper<T> implements VisitorWrapper {
private final PathAwareVisitor<T> delegate;
return delegate.getFactory().createForDirectory(component);
case FILE:
return delegate.getFactory().createForFile(component);
+ case VIEW:
+ return delegate.getFactory().createForView(component);
+ case SUBVIEW:
+ return delegate.getFactory().createForSubView(component);
+ case PROJECT_VIEW:
+ return delegate.getFactory().createForProjectView(component);
default:
- return delegate.getFactory().createForUnknown(component);
+ throw new IllegalArgumentException(format("Unsupported component type %s, can not create stack object", component.getType()));
}
}
callsRecords.add(viewsCallRecord(projectView, path, "visitProjectView"));
}
- @Override
- public void visitUnknown(Component unknownComponent, Path<Integer> path) {
- if (unknownComponent.getType().isViewsType()) {
- callsRecords.add(viewsCallRecord(unknownComponent, path, "visitUnknown"));
- } else if (unknownComponent.getType().isReportType()) {
- callsRecords.add(reportCallRecord(unknownComponent, path, "visitUnknown"));
- }
- throw new UnsupportedOperationException("Can not record call to visitUnknown");
- }
-
@Override
public void visitAny(Component component, Path<Integer> path) {
callsRecords.add(component.getType().isReportType() ? reportCallRecord(component, path, "visitAny") : viewsCallRecord(component, path, "visitAny"));