]> source.dussan.org Git - sonarqube.git/commitdiff
SONAR-3108 Replace deprecated calls
authorFabrice Bellingard <fabrice.bellingard@sonarsource.com>
Thu, 14 Feb 2013 11:45:06 +0000 (12:45 +0100)
committerFabrice Bellingard <fabrice.bellingard@sonarsource.com>
Fri, 15 Feb 2013 12:52:12 +0000 (13:52 +0100)
plugins/sonar-cpd-plugin/src/main/java/org/sonar/plugins/cpd/SonarEngine.java
plugins/sonar-cpd-plugin/src/test/java/org/sonar/plugins/cpd/CpdSensorTest.java
plugins/sonar-cpd-plugin/src/test/java/org/sonar/plugins/cpd/SonarEngineTest.java

index 7187746e5ad4b9f77e3a85e3f1d72b111b8aff9a..a00c906e5143991cfdf77daa4e4602f6f31cda7f 100644 (file)
@@ -29,7 +29,13 @@ import org.sonar.api.database.model.ResourceModel;
 import org.sonar.api.measures.CoreMetrics;
 import org.sonar.api.measures.Measure;
 import org.sonar.api.measures.PersistenceMode;
-import org.sonar.api.resources.*;
+import org.sonar.api.resources.Java;
+import org.sonar.api.resources.JavaFile;
+import org.sonar.api.resources.Language;
+import org.sonar.api.resources.Project;
+import org.sonar.api.resources.Resource;
+import org.sonar.api.scan.filesystem.ModuleFileSystem;
+import org.sonar.api.scan.filesystem.PathResolver;
 import org.sonar.api.utils.SonarException;
 import org.sonar.duplications.block.Block;
 import org.sonar.duplications.block.BlockChunker;
@@ -47,6 +53,7 @@ import org.sonar.plugins.cpd.index.SonarDuplicationsIndex;
 
 import javax.annotation.Nullable;
 
+import java.io.File;
 import java.io.FileInputStream;
 import java.io.FileNotFoundException;
 import java.io.InputStreamReader;
@@ -55,7 +62,12 @@ import java.util.Collection;
 import java.util.HashSet;
 import java.util.List;
 import java.util.Set;
-import java.util.concurrent.*;
+import java.util.concurrent.Callable;
+import java.util.concurrent.ExecutionException;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
+import java.util.concurrent.TimeUnit;
+import java.util.concurrent.TimeoutException;
 
 public class SonarEngine extends CpdEngine {
 
@@ -70,8 +82,14 @@ public class SonarEngine extends CpdEngine {
 
   private final IndexFactory indexFactory;
 
-  public SonarEngine(IndexFactory indexFactory) {
+  private final ModuleFileSystem fileSystem;
+
+  private final PathResolver pathResolver;
+
+  public SonarEngine(IndexFactory indexFactory, ModuleFileSystem moduleFileSystem, PathResolver pathResolver) {
     this.indexFactory = indexFactory;
+    this.fileSystem = moduleFileSystem;
+    this.pathResolver = pathResolver;
   }
 
   @Override
@@ -79,7 +97,7 @@ public class SonarEngine extends CpdEngine {
     return Java.INSTANCE.equals(language);
   }
 
-  static String getFullKey(Project project, Resource resource) {
+  static String getFullKey(Project project, Resource<?> resource) {
     return new StringBuilder(ResourceModel.KEY_SIZE)
         .append(project.getKey())
         .append(':')
@@ -89,31 +107,31 @@ public class SonarEngine extends CpdEngine {
 
   @Override
   public void analyse(Project project, SensorContext context) {
-    List<InputFile> inputFiles = project.getFileSystem().mainFiles(project.getLanguageKey());
-    if (inputFiles.isEmpty()) {
+    List<File> sourceFiles = fileSystem.sourceFilesOfLang(project.getLanguageKey());
+    if (sourceFiles.isEmpty()) {
       return;
     }
-    SonarDuplicationsIndex index = createIndex(project, inputFiles);
-    detect(index, context, project, inputFiles);
+    SonarDuplicationsIndex index = createIndex(project, sourceFiles);
+    detect(index, context, project, sourceFiles);
   }
 
-  private SonarDuplicationsIndex createIndex(Project project, List<InputFile> inputFiles) {
+  private SonarDuplicationsIndex createIndex(Project project, List<File> sourceFiles) {
     final SonarDuplicationsIndex index = indexFactory.create(project);
 
     TokenChunker tokenChunker = JavaTokenProducer.build();
     StatementChunker statementChunker = JavaStatementBuilder.build();
     BlockChunker blockChunker = new BlockChunker(BLOCK_SIZE);
 
-    for (InputFile inputFile : inputFiles) {
-      LOG.debug("Populating index from {}", inputFile.getFile());
-      Resource resource = getResource(inputFile);
+    for (File file : sourceFiles) {
+      LOG.debug("Populating index from {}", file);
+      Resource<?> resource = getResource(file);
       String resourceKey = getFullKey(project, resource);
 
       List<Statement> statements;
 
       Reader reader = null;
       try {
-        reader = new InputStreamReader(new FileInputStream(inputFile.getFile()), project.getFileSystem().getSourceCharset());
+        reader = new InputStreamReader(new FileInputStream(file), fileSystem.sourceCharset());
         statements = statementChunker.chunk(tokenChunker.chunk(reader));
       } catch (FileNotFoundException e) {
         throw new SonarException(e);
@@ -128,12 +146,12 @@ public class SonarEngine extends CpdEngine {
     return index;
   }
 
-  private void detect(SonarDuplicationsIndex index, SensorContext context, Project project, List<InputFile> inputFiles) {
+  private void detect(SonarDuplicationsIndex index, SensorContext context, Project project, List<File> sourceFiles) {
     ExecutorService executorService = Executors.newSingleThreadExecutor();
     try {
-      for (InputFile inputFile : inputFiles) {
-        LOG.debug("Detection of duplications for {}", inputFile.getFile());
-        Resource resource = getResource(inputFile);
+      for (File file : sourceFiles) {
+        LOG.debug("Detection of duplications for {}", file);
+        Resource<?> resource = getResource(file);
         String resourceKey = getFullKey(project, resource);
 
         Collection<Block> fileBlocks = index.getByResource(resource, resourceKey);
@@ -143,7 +161,7 @@ public class SonarEngine extends CpdEngine {
           clones = executorService.submit(new Task(index, fileBlocks)).get(TIMEOUT, TimeUnit.SECONDS);
         } catch (TimeoutException e) {
           clones = null;
-          LOG.warn("Timeout during detection of duplications for " + inputFile.getFile(), e);
+          LOG.warn("Timeout during detection of duplications for " + file, e);
         } catch (InterruptedException e) {
           throw new SonarException(e);
         } catch (ExecutionException e) {
@@ -171,11 +189,12 @@ public class SonarEngine extends CpdEngine {
     }
   }
 
-  private Resource getResource(InputFile inputFile) {
-    return JavaFile.fromRelativePath(inputFile.getRelativePath(), false);
+  protected Resource<?> getResource(File file) {
+    String relativePath = pathResolver.relativePath(fileSystem.sourceDirs(), file).path();
+    return JavaFile.fromRelativePath(relativePath, false);
   }
 
-  static void save(SensorContext context, Resource resource, @Nullable Iterable<CloneGroup> duplications) {
+  static void save(SensorContext context, Resource<?> resource, @Nullable Iterable<CloneGroup> duplications) {
     if (duplications == null || Iterables.isEmpty(duplications)) {
       return;
     }
index 4d17611c5f04fa41095c15117b65921d3d9b20ed..4ea1a94db458be3fb5247b78d8ebd29d302c3fc3 100644 (file)
@@ -42,7 +42,7 @@ public class CpdSensorTest {
   @Before
   public void setUp() {
     IndexFactory indexFactory = mock(IndexFactory.class);
-    sonarEngine = new SonarEngine(indexFactory);
+    sonarEngine = new SonarEngine(indexFactory, null, null);
     sonarBridgeEngine = new SonarBridgeEngine(indexFactory);
     settings = new Settings(new PropertyDefinitions(CpdPlugin.class));
     sensor = new CpdSensor(sonarEngine, sonarBridgeEngine, settings);
index c5511962b370a79dff4c982fbcc126a186930786..e3a054324a46519018f42f35fa10043047c1899d 100644 (file)
@@ -26,6 +26,9 @@ import org.sonar.api.measures.CoreMetrics;
 import org.sonar.api.resources.File;
 import org.sonar.api.resources.JavaFile;
 import org.sonar.api.resources.Resource;
+import org.sonar.api.scan.filesystem.ModuleFileSystem;
+import org.sonar.api.scan.filesystem.PathResolver;
+import org.sonar.api.scan.filesystem.PathResolver.RelativePath;
 import org.sonar.api.test.IsMeasure;
 import org.sonar.duplications.index.CloneGroup;
 import org.sonar.duplications.index.ClonePart;
@@ -34,14 +37,20 @@ import java.util.Arrays;
 import java.util.Collections;
 import java.util.List;
 
+import static org.fest.assertions.Assertions.assertThat;
+import static org.mockito.Matchers.any;
+import static org.mockito.Matchers.anyCollection;
 import static org.mockito.Matchers.argThat;
 import static org.mockito.Matchers.eq;
-import static org.mockito.Mockito.*;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.verifyZeroInteractions;
+import static org.mockito.Mockito.when;
 
 public class SonarEngineTest {
 
   private SensorContext context;
-  private Resource resource;
+  private Resource<?> resource;
 
   @Before
   public void setUp() {
@@ -49,6 +58,23 @@ public class SonarEngineTest {
     resource = new JavaFile("key1");
   }
 
+  @SuppressWarnings("unchecked")
+  @Test
+  public void testGetResource() {
+    PathResolver pathResolver = mock(PathResolver.class);
+    ModuleFileSystem fileSystem = mock(ModuleFileSystem.class);
+    RelativePath relativePath = mock(RelativePath.class);
+    when(pathResolver.relativePath(anyCollection(), any(java.io.File.class))).thenReturn(relativePath);
+    when(relativePath.path()).thenReturn("com/foo/Bar.java");
+
+    SonarEngine engine = new SonarEngine(null, fileSystem, pathResolver);
+    Resource<?> resource = engine.getResource(new java.io.File(""));
+
+    assertThat(resource.getKey()).isEqualTo("com.foo.Bar");
+    assertThat(resource).isInstanceOf(JavaFile.class);
+  }
+
+  @SuppressWarnings("unchecked")
   @Test
   public void testNothingToSave() {
     SonarEngine.save(context, resource, null);
@@ -68,9 +94,9 @@ public class SonarEngineTest {
     verify(context).saveMeasure(
         eq(resource),
         argThat(new IsMeasure(CoreMetrics.DUPLICATIONS_DATA, "<duplications><g>"
-            + "<b s=\"5\" l=\"200\" r=\"key1\"/>"
-            + "<b s=\"15\" l=\"200\" r=\"key2\"/>"
-            + "</g></duplications>")));
+          + "<b s=\"5\" l=\"200\" r=\"key1\"/>"
+          + "<b s=\"15\" l=\"200\" r=\"key2\"/>"
+          + "</g></duplications>")));
   }
 
   @Test
@@ -84,9 +110,9 @@ public class SonarEngineTest {
     verify(context).saveMeasure(
         eq(resource),
         argThat(new IsMeasure(CoreMetrics.DUPLICATIONS_DATA, "<duplications><g>"
-            + "<b s=\"5\" l=\"200\" r=\"key1\"/>"
-            + "<b s=\"215\" l=\"200\" r=\"key1\"/>"
-            + "</g></duplications>")));
+          + "<b s=\"5\" l=\"200\" r=\"key1\"/>"
+          + "<b s=\"215\" l=\"200\" r=\"key1\"/>"
+          + "</g></duplications>")));
   }
 
   @Test
@@ -100,10 +126,10 @@ public class SonarEngineTest {
     verify(context).saveMeasure(
         eq(resource),
         argThat(new IsMeasure(CoreMetrics.DUPLICATIONS_DATA, "<duplications><g>"
-            + "<b s=\"5\" l=\"200\" r=\"key1\"/>"
-            + "<b s=\"15\" l=\"200\" r=\"key2\"/>"
-            + "<b s=\"25\" l=\"200\" r=\"key3\"/>"
-            + "</g></duplications>")));
+          + "<b s=\"5\" l=\"200\" r=\"key1\"/>"
+          + "<b s=\"15\" l=\"200\" r=\"key2\"/>"
+          + "<b s=\"25\" l=\"200\" r=\"key3\"/>"
+          + "</g></duplications>")));
   }
 
   @Test
@@ -119,31 +145,31 @@ public class SonarEngineTest {
     verify(context).saveMeasure(
         eq(resource),
         argThat(new IsMeasure(CoreMetrics.DUPLICATIONS_DATA, "<duplications>"
-            + "<g>"
-            + "<b s=\"5\" l=\"200\" r=\"key1\"/>"
-            + "<b s=\"15\" l=\"200\" r=\"key2\"/>"
-            + "</g>"
-            + "<g>"
-            + "<b s=\"15\" l=\"200\" r=\"key1\"/>"
-            + "<b s=\"15\" l=\"200\" r=\"key3\"/>"
-            + "</g>"
-            + "</duplications>")));
+          + "<g>"
+          + "<b s=\"5\" l=\"200\" r=\"key1\"/>"
+          + "<b s=\"15\" l=\"200\" r=\"key2\"/>"
+          + "</g>"
+          + "<g>"
+          + "<b s=\"15\" l=\"200\" r=\"key1\"/>"
+          + "<b s=\"15\" l=\"200\" r=\"key3\"/>"
+          + "</g>"
+          + "</duplications>")));
   }
 
   @Test
   public void shouldEscapeXmlEntities() {
     File csharpFile = new File("Loads/File Loads/Subs & Reds/SubsRedsDelivery.cs");
     List<CloneGroup> groups = Arrays.asList(newCloneGroup(
-      new ClonePart("Loads/File Loads/Subs & Reds/SubsRedsDelivery.cs", 0, 5, 204),
-      new ClonePart("Loads/File Loads/Subs & Reds/SubsRedsDelivery2.cs", 0, 15, 214)));
+        new ClonePart("Loads/File Loads/Subs & Reds/SubsRedsDelivery.cs", 0, 5, 204),
+        new ClonePart("Loads/File Loads/Subs & Reds/SubsRedsDelivery2.cs", 0, 15, 214)));
     SonarEngine.save(context, csharpFile, groups);
 
     verify(context).saveMeasure(
         eq(csharpFile),
         argThat(new IsMeasure(CoreMetrics.DUPLICATIONS_DATA, "<duplications><g>"
-            + "<b s=\"5\" l=\"200\" r=\"Loads/File Loads/Subs &amp; Reds/SubsRedsDelivery.cs\"/>"
-            + "<b s=\"15\" l=\"200\" r=\"Loads/File Loads/Subs &amp; Reds/SubsRedsDelivery2.cs\"/>"
-            + "</g></duplications>")));
+          + "<b s=\"5\" l=\"200\" r=\"Loads/File Loads/Subs &amp; Reds/SubsRedsDelivery.cs\"/>"
+          + "<b s=\"15\" l=\"200\" r=\"Loads/File Loads/Subs &amp; Reds/SubsRedsDelivery2.cs\"/>"
+          + "</g></duplications>")));
   }
 
   private CloneGroup newCloneGroup(ClonePart... parts) {