]> source.dussan.org Git - sonarqube.git/commitdiff
SONAR-1760: Improve performance of NoSonarFilterLoader
authorGodin <mandrikov@gmail.com>
Mon, 29 Nov 2010 22:12:51 +0000 (22:12 +0000)
committerGodin <mandrikov@gmail.com>
Mon, 29 Nov 2010 22:12:51 +0000 (22:12 +0000)
plugins/sonar-squid-java-plugin/src/main/java/org/sonar/java/squid/SquidScanner.java
plugins/sonar-squid-java-plugin/src/main/java/org/sonar/java/squid/SquidVisitorNotifier.java
plugins/sonar-squid-java-plugin/src/main/java/org/sonar/plugins/squid/bridges/NoSonarFilterLoader.java

index f3ecbc425e226e01bdb80a865d241e9feff9e993..519d4fcd0411da164fe433065971fb038fef1654 100644 (file)
@@ -48,8 +48,7 @@ public class SquidScanner extends CodeScanner<CodeVisitor> {
   private void notifySquidVisitors(Collection<SourceCode> files) {
     SquidVisitor[] visitorArray = getVisitors().toArray(new SquidVisitor[getVisitors().size()]);
     for (SourceCode sourceFile : files) {
-      SquidVisitorNotifier visitorNotifier = new SquidVisitorNotifier((SourceFile) sourceFile, visitorArray);
-      visitorNotifier.notifyVisitors(indexer);
+      new SquidVisitorNotifier((SourceFile) sourceFile, visitorArray).notifyVisitors();
     }
   }
 
index 306bb428441e27b30b88a7e9e3a0690dd7a2fba1..8b56509b2f6304178dfcd5b28ff3825fda021f75 100644 (file)
@@ -5,20 +5,19 @@ import org.sonar.squid.api.SourceClass;
 import org.sonar.squid.api.SourceCode;
 import org.sonar.squid.api.SourceFile;
 import org.sonar.squid.api.SourceMethod;
-import org.sonar.squid.indexer.SquidIndex;
 
 public class SquidVisitorNotifier {
 
   private final SourceFile sourceFile;
   private final SquidVisitor[] squidVisitors;
 
-  public SquidVisitorNotifier(SourceFile sourceFile, SquidVisitor[] squidVisitors) {
+  public SquidVisitorNotifier(SourceFile sourceFile, SquidVisitor... squidVisitors) {
     this.sourceFile = sourceFile;
     this.squidVisitors = new SquidVisitor[squidVisitors.length];
     System.arraycopy(squidVisitors, 0, this.squidVisitors, 0, squidVisitors.length);
   }
 
-  public void notifyVisitors(SquidIndex indexer) {
+  public void notifyVisitors() {
     callVisitFile();
   }
 
index 1fd831fc4c2f45856bf1f4c9e5abcc0ed198dd96..b5826ffd18699290a4bba78e8b8dce7524ae80b2 100644 (file)
  */
 package org.sonar.plugins.squid.bridges;
 
-import java.util.HashSet;
-import java.util.Set;
-
 import org.sonar.api.checks.NoSonarFilter;
 import org.sonar.api.resources.Resource;
+import org.sonar.java.squid.SquidVisitorNotifier;
+import org.sonar.java.squid.visitor.SquidVisitor;
 import org.sonar.squid.api.SourceClass;
 import org.sonar.squid.api.SourceCode;
 import org.sonar.squid.api.SourceFile;
 import org.sonar.squid.api.SourceMethod;
-import org.sonar.squid.indexer.QueryByParent;
+
+import java.util.HashSet;
+import java.util.Set;
 
 public class NoSonarFilterLoader extends Bridge {
   private NoSonarFilter noSonarFilter;
@@ -43,23 +44,39 @@ public class NoSonarFilterLoader extends Bridge {
     if (noSonarFilter != null) {
       // lines with NOSONAR tag
       Set<Integer> ignoredLines = new HashSet<Integer>(squidFile.getNoSonarTagLines());
-      // classes and methods with annotaion SuppressWarnings
-      for (SourceCode sourceCode : squid.search(new QueryByParent(squidFile))) {
-        if (sourceCode instanceof SourceMethod && ((SourceMethod) sourceCode).isSuppressWarnings()) {
-          visitLines(sourceCode, ignoredLines);
-        }
-        if (sourceCode instanceof SourceClass && ((SourceClass) sourceCode).isSuppressWarnings()) {
-          visitLines(sourceCode, ignoredLines);
-        }
-      }
+      // classes and methods with annotation SuppressWarnings
+      new SquidVisitorNotifier(squidFile, new SuppressWarningsVisitor(ignoredLines)).notifyVisitors();
 
       noSonarFilter.addResource(sonarFile, ignoredLines);
     }
   }
 
-  private static void visitLines(SourceCode sourceCode, Set<Integer> ignoredLines) {
-    for (int line = sourceCode.getStartAtLine(); line <= sourceCode.getEndAtLine(); line++) {
-      ignoredLines.add(line);
+  private static class SuppressWarningsVisitor implements SquidVisitor {
+    private Set<Integer> ignoredLines;
+
+    public SuppressWarningsVisitor(Set<Integer> ignoredLines) {
+      this.ignoredLines = ignoredLines;
+    }
+
+    public void visitFile(SourceFile sourceFile) {
+    }
+
+    public void visitClass(SourceClass sourceClass) {
+      if (sourceClass.isSuppressWarnings()) {
+      }
+    }
+
+    public void visitMethod(SourceMethod sourceMethod) {
+      if (sourceMethod.isSuppressWarnings()) {
+        visitLines(sourceMethod);
+      }
+    }
+
+    private void visitLines(SourceCode sourceCode) {
+      for (int line = sourceCode.getStartAtLine(); line <= sourceCode.getEndAtLine(); line++) {
+        ignoredLines.add(line);
+      }
     }
   }
+
 }