]> source.dussan.org Git - sonarqube.git/commitdiff
SONAR-2231 Don't use module sonar-deprecated in core plugins
authorEvgeny Mandrikov <mandrikov@gmail.com>
Wed, 23 Feb 2011 17:09:08 +0000 (20:09 +0300)
committerEvgeny Mandrikov <mandrikov@gmail.com>
Wed, 23 Feb 2011 19:34:53 +0000 (22:34 +0300)
* Create new implementation of PmdViolationsXmlParser for sonar-pmd-plugin

* Remove unused method in sonar-findbugs-plugin and remove dependency

* Just remove dependency in sonar-squid-java-plugin

plugins/sonar-findbugs-plugin/pom.xml
plugins/sonar-findbugs-plugin/src/test/java/org/sonar/plugins/findbugs/FindbugsTests.java
plugins/sonar-pmd-plugin/pom.xml
plugins/sonar-pmd-plugin/src/main/java/org/sonar/plugins/pmd/PmdSensor.java
plugins/sonar-pmd-plugin/src/main/java/org/sonar/plugins/pmd/PmdViolationsXmlParser.java
plugins/sonar-pmd-plugin/src/test/java/org/sonar/plugins/pmd/PmdViolationsXmlParserTest.java
plugins/sonar-squid-java-plugin/pom.xml

index f5c63f130d6ca46ab6f798a1d36d4ce18c53786f..2cceb3c3dc43b56d40d37bf939ee28d884842262 100644 (file)
         </exclusion>
       </exclusions>
     </dependency>
-    <dependency>
-      <groupId>org.codehaus.sonar</groupId>
-      <artifactId>sonar-deprecated</artifactId>
-      <version>${project.version}</version>
-      <scope>provided</scope>
-    </dependency>
 
     <!-- unit tests -->
     <dependency>
index 900032273b2ab21c5746094d99370c2d36e35f6f..55a63bd3bd359037a89d105343bb262d75dbf39a 100644 (file)
  */
 package org.sonar.plugins.findbugs;
 
-import static org.mockito.Matchers.anyString;
-import static org.mockito.Matchers.eq;
 import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.when;
 
 import java.io.IOException;
 import java.util.ArrayList;
 import java.util.List;
 
-import org.mockito.invocation.InvocationOnMock;
-import org.mockito.stubbing.Answer;
-import org.sonar.api.CoreProperties;
 import org.sonar.api.platform.ServerFileSystem;
 import org.sonar.api.profiles.RulesProfile;
 import org.sonar.api.resources.Java;
 import org.sonar.api.rules.ActiveRule;
 import org.sonar.api.rules.Rule;
 import org.sonar.api.rules.RulePriority;
-import org.sonar.api.rules.RulesManager;
 import org.sonar.api.rules.XMLRuleParser;
 import org.sonar.test.TestUtils;
 import org.xml.sax.SAXException;
@@ -70,22 +63,6 @@ public abstract class FindbugsTests {
     return activeRules;
   }
 
-  protected RulesManager createRulesManager() {
-    RulesManager rulesManager = mock(RulesManager.class);
-
-    when(rulesManager.getPluginRule(eq(CoreProperties.FINDBUGS_PLUGIN), anyString())).thenAnswer(new Answer<Rule>() {
-
-      public Rule answer(InvocationOnMock invocationOnMock) throws Throwable {
-        Object[] args = invocationOnMock.getArguments();
-        Rule rule = Rule.create();
-        rule.setPluginName((String) args[0]);
-        rule.setKey((String) args[1]);
-        return rule;
-      }
-    });
-    return rulesManager;
-  }
-
   protected RulesProfile createRulesProfileWithActiveRules() {
     RulesProfile profile = RulesProfile.create();
     profile.setName(RulesProfile.SONAR_WAY_FINDBUGS_NAME);
index 80e5344578f604801eef6e9a27e6ab1decc151c6..29f01871f79d2282a842c6f3e75e7d062c7273e8 100644 (file)
   </properties>
 
   <dependencies>
-    <dependency>
-      <groupId>org.codehaus.sonar</groupId>
-      <artifactId>sonar-deprecated</artifactId>
-      <version>${project.version}</version>
-    </dependency>
     <dependency>
       <groupId>org.codehaus.sonar</groupId>
       <artifactId>sonar-java-api</artifactId>
@@ -99,4 +94,4 @@
       </plugin>
     </plugins>
   </build>
-</project>
\ No newline at end of file
+</project>
index 6228fd8af62c7640ce009a31ffa1dff50a99f4d1..62d11cc7639cfc101163a8c29d00d3a3264c71aa 100644 (file)
  */
 package org.sonar.plugins.pmd;
 
-import org.sonar.api.batch.AbstractViolationsStaxParser;
+import java.io.File;
+
 import org.sonar.api.batch.Sensor;
 import org.sonar.api.batch.SensorContext;
 import org.sonar.api.profiles.RulesProfile;
 import org.sonar.api.resources.Project;
-import org.sonar.api.rules.RulesManager;
+import org.sonar.api.rules.RuleFinder;
 import org.sonar.api.utils.Logs;
 import org.sonar.api.utils.XmlParserException;
 
-import java.io.File;
-
 public class PmdSensor implements Sensor {
 
   private RulesProfile profile;
-  private RulesManager rulesManager;
+  private RuleFinder rulesFinder;
   private PmdExecutor executor;
 
-  public PmdSensor(RulesProfile profile, RulesManager rulesManager, PmdExecutor executor) {
+  public PmdSensor(RulesProfile profile, RuleFinder rulesFinder, PmdExecutor executor) {
     this.profile = profile;
-    this.rulesManager = rulesManager;
+    this.rulesFinder = rulesFinder;
     this.executor = executor;
   }
 
@@ -48,8 +47,7 @@ public class PmdSensor implements Sensor {
     }
     try {
       File xmlReport = executor.execute();
-      AbstractViolationsStaxParser parser = getStaxParser(project, context);
-      parser.parse(xmlReport);
+      getStaxParser(project, context).parse(xmlReport);
 
     } catch (Exception e) {
       // TOFIX
@@ -62,8 +60,8 @@ public class PmdSensor implements Sensor {
         (!profile.getActiveRulesByRepository(PmdConstants.REPOSITORY_KEY).isEmpty() || project.getReuseExistingRulesConfig());
   }
 
-  private AbstractViolationsStaxParser getStaxParser(Project project, SensorContext context) {
-    return new PmdViolationsXmlParser(project, context, rulesManager, profile);
+  private PmdViolationsXmlParser getStaxParser(Project project, SensorContext context) {
+    return new PmdViolationsXmlParser(project, rulesFinder, context);
   }
 
   @Override
index 37cbc4f7801a0a69cd75a719f82ef1cce0c3145b..6d34fe661701ea6b20503a59ea4a6728801130ec 100644 (file)
  */
 package org.sonar.plugins.pmd;
 
+import java.io.File;
+
+import javax.xml.stream.XMLStreamException;
+
 import org.apache.commons.lang.StringUtils;
+import org.codehaus.staxmate.in.SMHierarchicCursor;
 import org.codehaus.staxmate.in.SMInputCursor;
 import org.sonar.api.CoreProperties;
-import org.sonar.api.batch.AbstractViolationsStaxParser;
 import org.sonar.api.batch.SensorContext;
-import org.sonar.api.profiles.RulesProfile;
 import org.sonar.api.resources.JavaFile;
 import org.sonar.api.resources.Project;
 import org.sonar.api.resources.Resource;
-import org.sonar.api.rules.RulesManager;
-
-import javax.xml.stream.XMLStreamException;
+import org.sonar.api.rules.Rule;
+import org.sonar.api.rules.RuleFinder;
+import org.sonar.api.rules.Violation;
+import org.sonar.api.utils.StaxParser;
 
-class PmdViolationsXmlParser extends AbstractViolationsStaxParser {
+class PmdViolationsXmlParser {
 
   private Project project;
+  private RuleFinder ruleFinder;
+  private SensorContext context;
 
-  PmdViolationsXmlParser(Project project, SensorContext context, RulesManager rulesManager, RulesProfile profile) {
-    super(context, rulesManager, profile);
+  public PmdViolationsXmlParser(Project project, RuleFinder ruleFinder, SensorContext context) {
     this.project = project;
+    this.ruleFinder = ruleFinder;
+    this.context = context;
   }
 
-  @Override
-  protected String keyForPlugin() {
-    return CoreProperties.PMD_PLUGIN;
+  public void parse(File file) throws XMLStreamException {
+    StaxParser parser = new StaxParser(new StreamHandler(), true);
+    parser.parse(file);
   }
 
-  @Override
-  protected SMInputCursor cursorForResources(SMInputCursor rootCursor) throws XMLStreamException {
-    return rootCursor.descendantElementCursor("file");
-  }
+  private class StreamHandler implements StaxParser.XmlStreamHandler {
+    public void stream(SMHierarchicCursor rootCursor) throws XMLStreamException {
+      rootCursor.advance();
 
-  @Override
-  protected SMInputCursor cursorForViolations(SMInputCursor resourcesCursor) throws XMLStreamException {
-    return resourcesCursor.descendantElementCursor("violation");
-  }
+      SMInputCursor fileCursor = rootCursor.descendantElementCursor("file");
+      while (fileCursor.getNext() != null) {
+        String name = fileCursor.getAttrValue("name");
+        Resource resource = JavaFile.fromAbsolutePath(name, project.getFileSystem().getSourceDirs(), false);
 
-  @Override
-  protected String lineNumberForViolation(SMInputCursor violationCursor) throws XMLStreamException {
-    return violationCursor.getAttrValue("beginline");
-  }
+        // Save violations only for existing resources
+        if (context.getResource(resource) != null) {
+          streamViolations(fileCursor, resource);
+        }
+      }
+    }
 
-  @Override
-  protected String messageFor(SMInputCursor violationCursor) throws XMLStreamException {
-    return StringUtils.trim(violationCursor.collectDescendantText());
-  }
+    private void streamViolations(SMInputCursor fileCursor, Resource resource) throws XMLStreamException {
+      SMInputCursor violationCursor = fileCursor.descendantElementCursor("violation");
+      while (violationCursor.getNext() != null) {
+        int lineId = Integer.parseInt(violationCursor.getAttrValue("beginline"));
+        String ruleKey = violationCursor.getAttrValue("rule");
+        String message = StringUtils.trim(violationCursor.collectDescendantText());
 
-  @Override
-  protected String ruleKey(SMInputCursor violationCursor) throws XMLStreamException {
-    return violationCursor.getAttrValue("rule");
+        Rule rule = ruleFinder.findByKey(CoreProperties.PMD_PLUGIN, ruleKey);
+        // Save violations only for enabled rules
+        if (rule != null) {
+          Violation violation = Violation.create(rule, resource).setLineId(lineId).setMessage(message);
+          context.saveViolation(violation);
+        }
+      }
+    }
   }
 
-  @Override
-  protected Resource toResource(SMInputCursor resourcesCursor) throws XMLStreamException {
-    return JavaFile.fromAbsolutePath(resourcesCursor.getAttrValue("name"), project.getFileSystem().getSourceDirs(), false);
-  }
 }
index 98e9a9a27fc0894a6d9e9afe32341f77b298daa8..5286fcd3df8260dee7acf1b6eddace35c759b4ad 100644 (file)
  */
 package org.sonar.plugins.pmd;
 
+import static org.mockito.Matchers.any;
+import static org.mockito.Matchers.anyString;
+import static org.mockito.Matchers.argThat;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.times;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
+
+import java.io.File;
+import java.net.URISyntaxException;
+import java.util.Arrays;
+
+import javax.xml.stream.XMLStreamException;
+
 import org.hamcrest.BaseMatcher;
 import org.hamcrest.Description;
 import org.junit.Test;
-import static org.mockito.Matchers.anyString;
-import static org.mockito.Matchers.argThat;
-import static org.mockito.Mockito.*;
 import org.mockito.invocation.InvocationOnMock;
 import org.mockito.stubbing.Answer;
 import org.sonar.api.batch.SensorContext;
-import org.sonar.api.profiles.RulesProfile;
 import org.sonar.api.resources.DefaultProjectFileSystem;
 import org.sonar.api.resources.JavaFile;
 import org.sonar.api.resources.Project;
-import org.sonar.api.rules.*;
+import org.sonar.api.rules.Rule;
+import org.sonar.api.rules.RuleFinder;
+import org.sonar.api.rules.Violation;
 import org.sonar.api.test.IsViolation;
 
-import javax.xml.stream.XMLStreamException;
-import java.io.File;
-import java.net.URISyntaxException;
-import java.util.Arrays;
-
 public class PmdViolationsXmlParserTest {
 
   private void parse(SensorContext context, String xmlPath) throws URISyntaxException, XMLStreamException {
@@ -49,16 +56,17 @@ public class PmdViolationsXmlParserTest {
     Project project = mock(Project.class);
     when(project.getFileSystem()).thenReturn(fileSystem);
 
-    RulesManager manager = mock(RulesManager.class);
-    when(manager.getPluginRule(anyString(), anyString())).thenAnswer(new Answer<Rule>() {
-      public Rule answer(InvocationOnMock invocation) {
+    RuleFinder ruleFinder = mock(RuleFinder.class);
+    when(ruleFinder.findByKey(anyString(), anyString())).thenAnswer(new Answer<Rule>() {
+      public Rule answer(InvocationOnMock invocation) throws Throwable {
         Object[] args = invocation.getArguments();
-        return new Rule((String) args[1], (String) args[1], null, (String) args[0], "");
+        return Rule.create((String) args[0], (String) args[1], "");
       }
     });
-    RulesProfile profile = mock(RulesProfile.class);
-    when(profile.getActiveRule(anyString(), anyString())).thenReturn(new ActiveRule(null, null, RulePriority.MINOR));
-    PmdViolationsXmlParser parser = new PmdViolationsXmlParser(project, context, manager, profile);
+
+    when(context.getResource((JavaFile) any())).thenReturn(new JavaFile(""));
+
+    PmdViolationsXmlParser parser = new PmdViolationsXmlParser(project, ruleFinder, context);
 
     File xmlFile = new File(getClass().getResource(xmlPath).toURI());
     parser.parse(xmlFile);
@@ -72,7 +80,7 @@ public class PmdViolationsXmlParserTest {
     verify(context, times(30)).saveViolation(argThat(new IsViolationOnJavaClass()));
     verify(context, times(4)).saveViolation(argThat(new IsViolationOnJavaClass(new JavaFile("ch.hortis.sonar.mvn.ClassWithComments"))));
 
-    Violation wanted = Violation.create((Rule)null, new JavaFile("ch.hortis.sonar.mvn.ClassWithComments"))
+    Violation wanted = Violation.create((Rule) null, new JavaFile("ch.hortis.sonar.mvn.ClassWithComments"))
         .setMessage("Avoid unused local variables such as 'toto'.")
         .setLineId(22);
     verify(context, times(1)).saveViolation(argThat(new IsViolation(wanted)));
@@ -92,7 +100,6 @@ public class PmdViolationsXmlParserTest {
     verify(context, times(2)).saveViolation(argThat(new IsViolationOnJavaClass(new JavaFile("test.Test"))));
   }
 
-
   @Test
   public void ISOControlCharsXMLFile() throws URISyntaxException, XMLStreamException {
     SensorContext context = mock(SensorContext.class);
@@ -100,7 +107,6 @@ public class PmdViolationsXmlParserTest {
     verify(context, times(1)).saveViolation(argThat(new IsViolationOnJavaClass(new JavaFile("test.Test"))));
   }
 
-
   private class IsViolationOnJavaClass extends BaseMatcher<Violation> {
 
     private JavaFile javaClass;
index 561fa6c7256a715463b28e41b10f7181e4204608..9832702f770baa9dfdddd31bed3db329cea46a3e 100644 (file)
   <description>Squid analyzer for Java.</description>
 
   <dependencies>
-    <dependency>
-      <groupId>org.codehaus.sonar</groupId>
-      <artifactId>sonar-deprecated</artifactId>
-      <scope>provided</scope>
-    </dependency>
     <dependency>
       <groupId>org.codehaus.sonar</groupId>
       <artifactId>sonar-java-api</artifactId>