]> source.dussan.org Git - sonarqube.git/commitdiff
remove unkown type support in PathAwareCrawler and PathAwareVisitor
authorSébastien Lesaint <sebastien.lesaint@sonarsource.com>
Wed, 2 Sep 2015 13:08:50 +0000 (15:08 +0200)
committerSébastien Lesaint <sebastien.lesaint@sonarsource.com>
Tue, 8 Sep 2015 09:42:44 +0000 (11:42 +0200)
we now fail, rather than silently accepting unknown types

server/sonar-server/src/main/java/org/sonar/server/computation/component/PathAwareCrawler.java
server/sonar-server/src/main/java/org/sonar/server/computation/component/PathAwareVisitor.java
server/sonar-server/src/main/java/org/sonar/server/computation/component/PathAwareVisitorAdapter.java
server/sonar-server/src/main/java/org/sonar/server/computation/component/PathAwareVisitorWrapper.java
server/sonar-server/src/test/java/org/sonar/server/computation/component/CallRecorderPathAwareVisitor.java

index 99863230a0a3016e119656ae01d0a62c772558b5..8a2e33e4d19528d35029b373abc7392498e0d8a3 100644 (file)
@@ -19,6 +19,7 @@
  */
 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;
@@ -97,7 +98,7 @@ public final class PathAwareCrawler<T> implements ComponentCrawler {
         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()));
     }
   }
 
@@ -118,7 +119,7 @@ public final class PathAwareCrawler<T> implements ComponentCrawler {
       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()));
     }
   }
 
index 8144eeb98cdec0e058ae4942d3c41afbbe6554fb..79928529f562ac3bcbb8b37ba3989ec7b566cb93 100644 (file)
@@ -66,11 +66,6 @@ public interface PathAwareVisitor<T> extends ComponentVisitor {
    */
   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
    */
@@ -91,7 +86,6 @@ public interface PathAwareVisitor<T> extends ComponentVisitor {
 
     T createForProjectView(Component projectView);
 
-    T createForUnknown(Component file);
   }
 
   interface Path<T> {
index 4a5f66405ae5ee1298a737d2aad3a4ae3d69f6ac..e06217ab1c1e5a7049aa78c4343fb4e1f6db8ecf 100644 (file)
@@ -86,11 +86,6 @@ public abstract class PathAwareVisitorAdapter<T> implements PathAwareVisitor<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
@@ -139,10 +134,6 @@ public abstract class PathAwareVisitorAdapter<T> implements PathAwareVisitor<T>
       return createForAny(projectView);
     }
 
-    @Override
-    public T createForUnknown(Component file) {
-      return createForAny(file);
-    }
   }
 
 }
index acd5bd91122448b2189a91102f143ad43e7a1a40..902102e65421f75449f9ee1fba1d6e33980bf850 100644 (file)
@@ -20,6 +20,8 @@
 
 package org.sonar.server.computation.component;
 
+import static java.lang.String.format;
+
 public class PathAwareVisitorWrapper<T> implements VisitorWrapper {
 
   private final PathAwareVisitor<T> delegate;
@@ -100,8 +102,14 @@ public class PathAwareVisitorWrapper<T> implements VisitorWrapper {
         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()));
     }
   }
 
index a8a1097e7c466ee7371d61bb53ad9d0048d58626..afbd4257aad54b7979b20a09925c0df9f077cdbe 100644 (file)
@@ -75,16 +75,6 @@ class CallRecorderPathAwareVisitor extends PathAwareVisitorAdapter<Integer> {
     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"));