]> source.dussan.org Git - sonarqube.git/commitdiff
SONAR-5154 A plugin should fail when using classes JavaFile or JavaPackage
authorJulien HENRY <julien.henry@sonarsource.com>
Tue, 25 Mar 2014 09:24:16 +0000 (10:24 +0100)
committerJulien HENRY <julien.henry@sonarsource.com>
Tue, 25 Mar 2014 11:45:16 +0000 (12:45 +0100)
26 files changed:
plugins/sonar-core-plugin/src/test/java/org/sonar/plugins/core/sensors/DirectoriesDecoratorTest.java
plugins/sonar-core-plugin/src/test/java/org/sonar/plugins/core/sensors/ManualMeasureDecoratorTest.java
plugins/sonar-core-plugin/src/test/java/org/sonar/plugins/core/timemachine/TendencyDecoratorTest.java
plugins/sonar-core-plugin/src/test/java/org/sonar/plugins/core/timemachine/VariationDecoratorTest.java
plugins/sonar-cpd-plugin/src/test/java/org/sonar/plugins/cpd/decorators/SumDuplicationsDecoratorTest.java
sonar-batch/src/main/java/org/sonar/batch/index/DefaultIndex.java
sonar-batch/src/main/java/org/sonar/batch/index/ResourceKeyMigration.java
sonar-batch/src/main/java/org/sonar/batch/scan/filesystem/ComponentIndexer.java
sonar-batch/src/main/java/org/sonar/batch/scan/filesystem/InputFileBuilder.java
sonar-batch/src/main/java/org/sonar/batch/util/DeprecatedKeyUtils.java [new file with mode: 0644]
sonar-batch/src/main/java/org/sonar/batch/util/package-info.java [new file with mode: 0644]
sonar-batch/src/test/java/org/sonar/batch/index/BucketTest.java
sonar-batch/src/test/java/org/sonar/batch/index/DefaultResourcePersisterTest.java
sonar-batch/src/test/java/org/sonar/batch/index/MeasurePersisterTest.java
sonar-batch/src/test/java/org/sonar/batch/index/ResourceCacheTest.java
sonar-batch/src/test/java/org/sonar/batch/index/SourcePersisterTest.java
sonar-batch/src/test/java/org/sonar/batch/issue/IssuableFactoryTest.java
sonar-batch/src/test/java/org/sonar/batch/issue/ModuleIssuesTest.java
sonar-batch/src/test/java/org/sonar/batch/util/DeprecatedKeyUtilsTest.java [new file with mode: 0644]
sonar-deprecated/src/main/java/org/sonar/api/batch/SquidUtils.java
sonar-deprecated/src/main/java/org/sonar/api/resources/JavaFile.java
sonar-deprecated/src/main/java/org/sonar/api/resources/JavaPackage.java
sonar-deprecated/src/test/java/org/sonar/api/batch/SquidUtilsTest.java
sonar-deprecated/src/test/java/org/sonar/api/resources/JavaFileTest.java
sonar-deprecated/src/test/java/org/sonar/api/resources/JavaPackageTest.java
sonar-deprecated/src/test/java/org/sonar/api/utils/CoberturaReportParserUtilsTest.java

index 5078959dfe9ae695192e2658620062781bbfd870..adb52dfece02bb132ee04006079406289f838f99 100644 (file)
@@ -23,14 +23,20 @@ import org.junit.Test;
 import org.sonar.api.batch.DecoratorContext;
 import org.sonar.api.measures.CoreMetrics;
 import org.sonar.api.measures.Measure;
-import org.sonar.api.resources.*;
+import org.sonar.api.resources.Directory;
+import org.sonar.api.resources.File;
+import org.sonar.api.resources.Project;
+import org.sonar.api.resources.Resource;
 
 import java.util.Arrays;
 import java.util.Collections;
 
 import static org.mockito.Matchers.anyDouble;
 import static org.mockito.Matchers.eq;
-import static org.mockito.Mockito.*;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.never;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
 
 public class DirectoriesDecoratorTest {
 
@@ -61,23 +67,14 @@ public class DirectoriesDecoratorTest {
     DecoratorContext context = mock(DecoratorContext.class);
 
     when(context.getChildrenMeasures(CoreMetrics.DIRECTORIES)).thenReturn(Arrays.<Measure>asList(
-        new Measure(CoreMetrics.DIRECTORIES, 1.0),
-        new Measure(CoreMetrics.DIRECTORIES, 1.0),
-        new Measure(CoreMetrics.DIRECTORIES, 1.0)
-    ));
+      new Measure(CoreMetrics.DIRECTORIES, 1.0),
+      new Measure(CoreMetrics.DIRECTORIES, 1.0),
+      new Measure(CoreMetrics.DIRECTORIES, 1.0)
+      ));
     decorator.decorate(project, context);
     verify(context).saveMeasure(CoreMetrics.DIRECTORIES, 3.0);
   }
 
-  @Test
-  public void packagesAreConsideredAsDirectories() {
-    DirectoriesDecorator decorator = new DirectoriesDecorator();
-    Resource pac = new JavaPackage("org/foo");
-    DecoratorContext context = mock(DecoratorContext.class);
-    decorator.decorate(pac, context);
-    verify(context).saveMeasure(eq(CoreMetrics.DIRECTORIES), eq(1.0));
-  }
-
   @Test
   public void noProjectValueWhenOnlyPackages() {
     DirectoriesDecorator decorator = new DirectoriesDecorator();
@@ -85,9 +82,9 @@ public class DirectoriesDecoratorTest {
     DecoratorContext context = mock(DecoratorContext.class);
     when(context.getChildrenMeasures(CoreMetrics.DIRECTORIES)).thenReturn(Collections.<Measure>emptyList());
     when(context.getChildrenMeasures(CoreMetrics.PACKAGES)).thenReturn(Arrays.<Measure>asList(
-        new Measure(CoreMetrics.PACKAGES, 1.0),
-        new Measure(CoreMetrics.PACKAGES, 1.0)
-    ));
+      new Measure(CoreMetrics.PACKAGES, 1.0),
+      new Measure(CoreMetrics.PACKAGES, 1.0)
+      ));
     decorator.decorate(project, context);
     verify(context, never()).saveMeasure(eq(CoreMetrics.DIRECTORIES), anyDouble());
   }
index ed824032359c88c70e6be79dea03c76e8111afff..2731680adc94f36c4be2ccef2f4d87a853b59314 100644 (file)
@@ -22,7 +22,7 @@ package org.sonar.plugins.core.sensors;
 import org.junit.Test;
 import org.sonar.api.batch.DecoratorContext;
 import org.sonar.api.measures.Metric;
-import org.sonar.api.resources.JavaFile;
+import org.sonar.api.resources.File;
 import org.sonar.api.test.IsMeasure;
 import org.sonar.core.metric.DefaultMetricFinder;
 import org.sonar.jpa.test.AbstractDbUnitTestCase;
@@ -39,7 +39,7 @@ public class ManualMeasureDecoratorTest extends AbstractDbUnitTestCase {
   public void testCopyManualMeasures() throws Exception {
     setupData("testCopyManualMeasures");
 
-    JavaFile javaFile = new JavaFile("Foo.java");
+    File javaFile = new File("Foo.java");
     javaFile.setId(40);
 
     ManualMeasureDecorator decorator = new ManualMeasureDecorator(getSession(), new DefaultMetricFinder(getSessionFactory()));
index 55c8316da8b6339faa3aa3c968663a8a4e97f484..8713c66537b226a8555c62cd984100d5cf60f61e 100644 (file)
@@ -26,7 +26,7 @@ import org.sonar.api.batch.TimeMachineQuery;
 import org.sonar.api.measures.CoreMetrics;
 import org.sonar.api.measures.Measure;
 import org.sonar.api.measures.MetricFinder;
-import org.sonar.api.resources.JavaPackage;
+import org.sonar.api.resources.Directory;
 import org.sonar.api.resources.Project;
 
 import java.text.ParseException;
@@ -37,7 +37,11 @@ import java.util.Date;
 import static org.hamcrest.CoreMatchers.is;
 import static org.hamcrest.MatcherAssert.assertThat;
 import static org.junit.matchers.JUnitMatchers.hasItems;
-import static org.mockito.Mockito.*;
+import static org.mockito.Matchers.anyList;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.never;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
 
 public class TendencyDecoratorTest {
 
@@ -65,19 +69,19 @@ public class TendencyDecoratorTest {
     TimeMachine timeMachine = mock(TimeMachine.class);
 
     when(timeMachine.getMeasuresFields(query)).thenReturn(Arrays.<Object[]>asList(
-      new Object[]{date("2009-12-01"), CoreMetrics.LINES, 1200.0},
-      new Object[]{date("2009-12-01"), CoreMetrics.COVERAGE, 80.5},
-      new Object[]{date("2009-12-02"), CoreMetrics.LINES, 1300.0},
-      new Object[]{date("2009-12-02"), CoreMetrics.COVERAGE, 79.6},
-      new Object[]{date("2009-12-15"), CoreMetrics.LINES, 1150.0}
-    ));
+      new Object[] {date("2009-12-01"), CoreMetrics.LINES, 1200.0},
+      new Object[] {date("2009-12-01"), CoreMetrics.COVERAGE, 80.5},
+      new Object[] {date("2009-12-02"), CoreMetrics.LINES, 1300.0},
+      new Object[] {date("2009-12-02"), CoreMetrics.COVERAGE, 79.6},
+      new Object[] {date("2009-12-15"), CoreMetrics.LINES, 1150.0}
+      ));
 
     DecoratorContext context = mock(DecoratorContext.class);
     when(context.getMeasure(CoreMetrics.LINES)).thenReturn(new Measure(CoreMetrics.LINES, 1400.0));
     when(context.getMeasure(CoreMetrics.COVERAGE)).thenReturn(new Measure(CoreMetrics.LINES, 90.0));
 
     TendencyDecorator decorator = new TendencyDecorator(timeMachine, query, analyser);
-    decorator.decorate(new JavaPackage("org.foo"), context);
+    decorator.decorate(new Directory("org/foo"), context);
 
     verify(analyser).analyseLevel(Arrays.asList(1200.0, 1300.0, 1150.0, 1400.0));
     verify(analyser).analyseLevel(Arrays.asList(80.5, 79.6, 90.0));
@@ -90,13 +94,13 @@ public class TendencyDecoratorTest {
     TimeMachine timeMachine = mock(TimeMachine.class);
 
     when(timeMachine.getMeasuresFields(query)).thenReturn(Arrays.<Object[]>asList(
-      new Object[]{date("2009-12-01"), CoreMetrics.LINES, 1200.0},
-      new Object[]{date("2009-12-02"), CoreMetrics.LINES, 1300.0}
-    ));
+      new Object[] {date("2009-12-01"), CoreMetrics.LINES, 1200.0},
+      new Object[] {date("2009-12-02"), CoreMetrics.LINES, 1300.0}
+      ));
 
     DecoratorContext context = mock(DecoratorContext.class);
     TendencyDecorator decorator = new TendencyDecorator(timeMachine, query, analyser);
-    decorator.decorate(new JavaPackage("org.foo"), context);
+    decorator.decorate(new Directory("org/foo"), context);
 
     verify(analyser, never()).analyseLevel(anyList());
   }
index bd502b99edef55c5fd0649e4bfece4de77f52a3b..fe48596751c53e028bf31c61e8aabdd93d343883 100644 (file)
@@ -22,9 +22,13 @@ package org.sonar.plugins.core.timemachine;
 import org.junit.Test;
 import org.mockito.Matchers;
 import org.sonar.api.batch.DecoratorContext;
-import org.sonar.api.measures.*;
+import org.sonar.api.measures.Measure;
+import org.sonar.api.measures.MeasuresFilter;
+import org.sonar.api.measures.Metric;
+import org.sonar.api.measures.MetricFinder;
+import org.sonar.api.measures.RuleMeasure;
+import org.sonar.api.resources.Directory;
 import org.sonar.api.resources.File;
-import org.sonar.api.resources.JavaPackage;
 import org.sonar.api.resources.Project;
 import org.sonar.api.resources.Resource;
 import org.sonar.api.rules.Rule;
@@ -37,7 +41,10 @@ import java.util.Arrays;
 import java.util.Date;
 
 import static org.fest.assertions.Assertions.assertThat;
-import static org.mockito.Mockito.*;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.times;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
 
 public class VariationDecoratorTest extends AbstractDbUnitTestCase {
 
@@ -61,20 +68,20 @@ public class VariationDecoratorTest extends AbstractDbUnitTestCase {
 
   @Test
   public void shouldCompareAndSaveVariation() {
-    Resource javaPackage = new JavaPackage("org.foo");
+    Resource dir = new Directory("org/foo");
 
     PastMeasuresLoader pastMeasuresLoader = mock(PastMeasuresLoader.class);
     PastSnapshot pastSnapshot1 = new PastSnapshot("days", new Date()).setIndex(1);
     PastSnapshot pastSnapshot3 = new PastSnapshot("days", new Date()).setIndex(3);
 
     // first past analysis
-    when(pastMeasuresLoader.getPastMeasures(javaPackage, pastSnapshot1)).thenReturn(Arrays.asList(
-      new Object[]{NCLOC_ID, null, null, null, 180.0},
-      new Object[]{COVERAGE_ID, null, null, null, 75.0}));
+    when(pastMeasuresLoader.getPastMeasures(dir, pastSnapshot1)).thenReturn(Arrays.asList(
+      new Object[] {NCLOC_ID, null, null, null, 180.0},
+      new Object[] {COVERAGE_ID, null, null, null, 75.0}));
 
     // second past analysis
-    when(pastMeasuresLoader.getPastMeasures(javaPackage, pastSnapshot3)).thenReturn(Arrays.<Object[]>asList(
-      new Object[]{NCLOC_ID, null, null, null, 240.0}));
+    when(pastMeasuresLoader.getPastMeasures(dir, pastSnapshot3)).thenReturn(Arrays.<Object[]>asList(
+      new Object[] {NCLOC_ID, null, null, null, 240.0}));
 
     // current analysis
     DecoratorContext context = mock(DecoratorContext.class);
@@ -83,7 +90,7 @@ public class VariationDecoratorTest extends AbstractDbUnitTestCase {
     when(context.getMeasures(Matchers.<MeasuresFilter>anyObject())).thenReturn(Arrays.asList(currentNcloc, currentCoverage));
 
     VariationDecorator decorator = new VariationDecorator(pastMeasuresLoader, mock(MetricFinder.class), Arrays.asList(pastSnapshot1, pastSnapshot3));
-    decorator.decorate(javaPackage, context);
+    decorator.decorate(dir, context);
 
     // context updated for each variation : 2 times for ncloc and 1 time for coverage
     verify(context, times(3)).saveMeasure(Matchers.<Measure>anyObject());
@@ -104,16 +111,16 @@ public class VariationDecoratorTest extends AbstractDbUnitTestCase {
     Rule rule2 = Rule.create();
     rule2.setId(2);
 
-    Resource javaPackage = new JavaPackage("org.foo");
+    Resource dir = new Directory("org/foo");
 
     PastMeasuresLoader pastMeasuresLoader = mock(PastMeasuresLoader.class);
     PastSnapshot pastSnapshot1 = new PastSnapshot("days", new Date()).setIndex(1);
 
     // first past analysis
-    when(pastMeasuresLoader.getPastMeasures(javaPackage, pastSnapshot1)).thenReturn(Arrays.asList(
-      new Object[]{VIOLATIONS_ID, null, null, null, 180.0},// total
-      new Object[]{VIOLATIONS_ID, null, null, rule1.getId(), 100.0},// rule 1
-      new Object[]{VIOLATIONS_ID, null, null, rule2.getId(), 80.0})); // rule 2
+    when(pastMeasuresLoader.getPastMeasures(dir, pastSnapshot1)).thenReturn(Arrays.asList(
+      new Object[] {VIOLATIONS_ID, null, null, null, 180.0},// total
+      new Object[] {VIOLATIONS_ID, null, null, rule1.getId(), 100.0},// rule 1
+      new Object[] {VIOLATIONS_ID, null, null, rule2.getId(), 80.0})); // rule 2
 
     // current analysis
     DecoratorContext context = mock(DecoratorContext.class);
@@ -123,7 +130,7 @@ public class VariationDecoratorTest extends AbstractDbUnitTestCase {
     when(context.getMeasures(Matchers.<MeasuresFilter>anyObject())).thenReturn(Arrays.asList(violations, violationsRule1, violationsRule2));
 
     VariationDecorator decorator = new VariationDecorator(pastMeasuresLoader, mock(MetricFinder.class), Arrays.asList(pastSnapshot1));
-    decorator.decorate(javaPackage, context);
+    decorator.decorate(dir, context);
 
     // context updated for each variation
     verify(context, times(3)).saveMeasure(Matchers.<Measure>anyObject());
index c1af92310c449b451f8f769fac8dca2851b9a46a..7ebae1da257f28c5618e8fd7374c8835bbfddc42 100644 (file)
@@ -23,8 +23,8 @@ import org.junit.Test;
 import org.sonar.api.batch.DecoratorContext;
 import org.sonar.api.measures.CoreMetrics;
 import org.sonar.api.measures.Measure;
-import org.sonar.api.resources.JavaFile;
-import org.sonar.api.resources.Resource;
+import org.sonar.api.resources.File;
+import org.sonar.api.resources.Qualifiers;
 import org.sonar.api.test.IsMeasure;
 
 import static org.hamcrest.CoreMatchers.is;
@@ -48,7 +48,8 @@ public class SumDuplicationsDecoratorTest {
   @Test
   public void doNotSetDuplicationsOnUnitTests() {
     SumDuplicationsDecorator decorator = new SumDuplicationsDecorator();
-    Resource unitTest = new JavaFile("org.foo.BarTest", true);
+    File unitTest = new File("org/foo/BarTest.java");
+    unitTest.setQualifier(Qualifiers.UNIT_TEST_FILE);
     DecoratorContext context = mock(DecoratorContext.class);
 
     decorator.decorate(unitTest, context);
@@ -59,10 +60,10 @@ public class SumDuplicationsDecoratorTest {
   @Test
   public void saveZeroIfNoDuplications() {
     SumDuplicationsDecorator decorator = new SumDuplicationsDecorator();
-    Resource unitTest = new JavaFile("org.foo.BarTest", false);
+    File file = new File("org/foo/BarTest.java");
     DecoratorContext context = mock(DecoratorContext.class);
 
-    decorator.decorate(unitTest, context);
+    decorator.decorate(file, context);
 
     verify(context).saveMeasure(argThat(new IsMeasure(CoreMetrics.DUPLICATED_LINES, 0.0)));
   }
index 4f304015b01ef9762539541f997ad5e7e5c2a4f8..8ef04f07abc44266345f324eb6aa50bd83c8c6c8 100644 (file)
@@ -31,8 +31,19 @@ import org.sonar.api.batch.SonarIndex;
 import org.sonar.api.batch.bootstrap.ProjectDefinition;
 import org.sonar.api.database.model.Snapshot;
 import org.sonar.api.design.Dependency;
-import org.sonar.api.measures.*;
-import org.sonar.api.resources.*;
+import org.sonar.api.measures.Measure;
+import org.sonar.api.measures.MeasuresFilter;
+import org.sonar.api.measures.MeasuresFilters;
+import org.sonar.api.measures.Metric;
+import org.sonar.api.measures.MetricFinder;
+import org.sonar.api.resources.Directory;
+import org.sonar.api.resources.File;
+import org.sonar.api.resources.Project;
+import org.sonar.api.resources.ProjectLink;
+import org.sonar.api.resources.Qualifiers;
+import org.sonar.api.resources.Resource;
+import org.sonar.api.resources.ResourceUtils;
+import org.sonar.api.resources.Scopes;
 import org.sonar.api.rules.Rule;
 import org.sonar.api.rules.Violation;
 import org.sonar.api.scan.filesystem.PathResolver;
@@ -46,7 +57,15 @@ import org.sonar.core.component.ScanGraph;
 
 import javax.annotation.CheckForNull;
 import javax.annotation.Nullable;
-import java.util.*;
+
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
 
 public class DefaultIndex extends SonarIndex {
 
@@ -566,7 +585,7 @@ public class DefaultIndex extends SonarIndex {
    * Should support 2 situations
    * 1) key = new key and deprecatedKey = old key : this is the standard use case in a perfect world
    * 2) key = null and deprecatedKey = oldKey : this is for plugins that are using deprecated constructors of
-   * {@link JavaFile}, {@link JavaPackage}, {@link File}, {@link Directory}
+   * {@link File} and {@link Directory}
    *
    * @param reference
    * @return
index 3c1266e58f3b6a43320083179ab2c3742282607f..b0b6cf50cb607fe415e648642b7714d399b7a9d4 100644 (file)
@@ -29,8 +29,14 @@ import org.sonar.api.batch.fs.InputFile;
 import org.sonar.api.batch.fs.internal.DefaultInputFile;
 import org.sonar.api.database.DatabaseSession;
 import org.sonar.api.database.model.ResourceModel;
-import org.sonar.api.resources.*;
+import org.sonar.api.resources.Directory;
+import org.sonar.api.resources.File;
+import org.sonar.api.resources.Project;
+import org.sonar.api.resources.Qualifiers;
+import org.sonar.api.resources.Resource;
+import org.sonar.api.resources.Scopes;
 import org.sonar.api.utils.PathUtils;
+import org.sonar.batch.util.DeprecatedKeyUtils;
 
 import java.util.HashMap;
 import java.util.List;
@@ -90,8 +96,8 @@ public class ResourceKeyMigration implements BatchComponent {
   }
 
   private void migrateFiles(Project module, Map<String, InputFile> deprecatedFileKeyMapper, Map<String, InputFile> deprecatedTestKeyMapper,
-                            Map<String, String> deprecatedDirectoryKeyMapper,
-                            int moduleId) {
+    Map<String, String> deprecatedDirectoryKeyMapper,
+    int moduleId) {
     // Find all FIL or CLA resources for this module
     StringBuilder hql = new StringBuilder().append("from ")
       .append(ResourceModel.class.getSimpleName())
@@ -108,12 +114,13 @@ public class ResourceKeyMigration implements BatchComponent {
         // Now compute migration of the parent dir
         String oldKey = StringUtils.substringAfterLast(oldEffectiveKey, ":");
         Resource sonarFile;
+        String parentOldKey;
         if ("java".equals(resourceModel.getLanguageKey())) {
-          sonarFile = new JavaFile(oldKey);
+          parentOldKey = module.getEffectiveKey() + ":" + DeprecatedKeyUtils.getJavaFileParentDeprecatedKey(oldKey);
         } else {
           sonarFile = new File(oldKey);
+          parentOldKey = module.getEffectiveKey() + ":" + sonarFile.getParent().getDeprecatedKey();
         }
-        String parentOldKey = module.getEffectiveKey() + ":" + sonarFile.getParent().getDeprecatedKey();
         String parentNewKey = module.getEffectiveKey() + ":" + getParentKey(matchedFile);
         if (!deprecatedDirectoryKeyMapper.containsKey(parentOldKey)) {
           deprecatedDirectoryKeyMapper.put(parentOldKey, parentNewKey);
index 8d31f3b5a39cf6e510a95f5a60c61522471213a6..e398cd6b98bcb42febc17504ee763350867e658b 100644 (file)
@@ -30,12 +30,12 @@ import org.sonar.api.batch.fs.InputFile;
 import org.sonar.api.batch.fs.internal.DefaultInputFile;
 import org.sonar.api.config.Settings;
 import org.sonar.api.resources.File;
-import org.sonar.api.resources.JavaFile;
 import org.sonar.api.resources.Languages;
 import org.sonar.api.resources.Project;
 import org.sonar.api.resources.Resource;
 import org.sonar.api.utils.SonarException;
 import org.sonar.batch.index.ResourceKeyMigration;
+import org.sonar.batch.util.DeprecatedKeyUtils;
 
 /**
  * Index all files/directories of the module in SQ database and importing source code.
@@ -52,7 +52,7 @@ public class ComponentIndexer implements BatchComponent {
   private InputFileCache fileCache;
 
   public ComponentIndexer(Project module, Languages languages, SonarIndex sonarIndex, Settings settings, ResourceKeyMigration migration,
-                          InputFileCache fileCache) {
+    InputFileCache fileCache) {
     this.module = module;
     this.languages = languages;
     this.sonarIndex = sonarIndex;
@@ -74,7 +74,7 @@ public class ComponentIndexer implements BatchComponent {
       }
       Resource sonarFile = File.create(inputFile.relativePath(), pathFromSourceDir, languages.get(languageKey), unitTest);
       if ("java".equals(languageKey)) {
-        sonarFile.setDeprecatedKey(JavaFile.fromRelativePath(pathFromSourceDir, false).getDeprecatedKey());
+        sonarFile.setDeprecatedKey(DeprecatedKeyUtils.getJavaFileDeprecatedKey(pathFromSourceDir));
       } else {
         sonarFile.setDeprecatedKey(pathFromSourceDir);
       }
index 99c7f0fe08a057d3002d68f2ebe74cf1184200fc..ca456838bf9c6bfb4c7d555eb7c063e5629fc4f2 100644 (file)
@@ -24,11 +24,12 @@ import org.slf4j.LoggerFactory;
 import org.sonar.api.batch.fs.FileSystem;
 import org.sonar.api.batch.fs.InputFile;
 import org.sonar.api.batch.fs.internal.DefaultInputFile;
-import org.sonar.api.resources.JavaFile;
 import org.sonar.api.scan.filesystem.PathResolver;
 import org.sonar.batch.bootstrap.AnalysisMode;
+import org.sonar.batch.util.DeprecatedKeyUtils;
 
 import javax.annotation.CheckForNull;
+
 import java.io.File;
 import java.util.List;
 
@@ -42,7 +43,7 @@ class InputFileBuilder {
   private final AnalysisMode analysisMode;
 
   InputFileBuilder(String moduleKey, PathResolver pathResolver, LanguageDetection langDetection,
-                   StatusDetection statusDetection, DefaultModuleFileSystem fs, AnalysisMode analysisMode) {
+    StatusDetection statusDetection, DefaultModuleFileSystem fs, AnalysisMode analysisMode) {
     this.moduleKey = moduleKey;
     this.pathResolver = pathResolver;
     this.langDetection = langDetection;
@@ -119,7 +120,7 @@ class InputFileBuilder {
 
         if ("java".equals(inputFile.language())) {
           inputFile.setDeprecatedKey(new StringBuilder()
-            .append(moduleKey).append(":").append(JavaFile.fromRelativePath(sourceRelativePath, false).getDeprecatedKey()).toString());
+            .append(moduleKey).append(":").append(DeprecatedKeyUtils.getJavaFileDeprecatedKey(sourceRelativePath)).toString());
         } else {
           inputFile.setDeprecatedKey(new StringBuilder().append(moduleKey).append(":").append(sourceRelativePath).toString());
         }
diff --git a/sonar-batch/src/main/java/org/sonar/batch/util/DeprecatedKeyUtils.java b/sonar-batch/src/main/java/org/sonar/batch/util/DeprecatedKeyUtils.java
new file mode 100644 (file)
index 0000000..30db633
--- /dev/null
@@ -0,0 +1,74 @@
+/*
+ * SonarQube, open source software quality management tool.
+ * Copyright (C) 2008-2014 SonarSource
+ * mailto:contact AT sonarsource DOT com
+ *
+ * SonarQube is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or (at your option) any later version.
+ *
+ * SonarQube is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+ */
+package org.sonar.batch.util;
+
+import org.apache.commons.lang.StringUtils;
+import org.sonar.api.resources.Directory;
+import org.sonar.api.resources.JavaPackage;
+
+public class DeprecatedKeyUtils {
+
+  private DeprecatedKeyUtils() {
+    // Utility class
+  }
+
+  /**
+   * Return the parent directory deprecated key for a given deprecated Java file key.
+   * "com.foo.Bar" -> "com/foo"
+   * "[root].Bar" -> "[root]"
+   * "Bar" -> "[root]"
+   */
+  public static String getJavaFileParentDeprecatedKey(String deprecatedJavaFileKey) {
+    String packageFullyQualifiedName;
+    String realKey = StringUtils.trim(deprecatedJavaFileKey);
+    if (realKey.contains(".")) {
+      packageFullyQualifiedName = StringUtils.substringBeforeLast(realKey, ".");
+      String deprecatedDirectoryKey = StringUtils.trimToEmpty(packageFullyQualifiedName);
+      if (JavaPackage.DEFAULT_PACKAGE_NAME.equals(deprecatedDirectoryKey)) {
+        return Directory.ROOT;
+      }
+      deprecatedDirectoryKey = deprecatedDirectoryKey.replaceAll("\\.", Directory.SEPARATOR);
+      return StringUtils.defaultIfEmpty(deprecatedDirectoryKey, Directory.ROOT);
+    } else {
+      return Directory.ROOT;
+    }
+  }
+
+  /**
+   * Return the deprecated key of a Java file given its path relative to source directory.
+   */
+  public static String getJavaFileDeprecatedKey(String sourceRelativePath) {
+    String pacname = null;
+    String classname = sourceRelativePath;
+
+    if (sourceRelativePath.indexOf('/') >= 0) {
+      pacname = StringUtils.substringBeforeLast(sourceRelativePath, "/");
+      pacname = StringUtils.replace(pacname, "/", ".");
+      classname = StringUtils.substringAfterLast(sourceRelativePath, "/");
+    }
+    classname = StringUtils.substringBeforeLast(classname, ".");
+    if (StringUtils.isBlank(pacname)) {
+      return new StringBuilder().append(JavaPackage.DEFAULT_PACKAGE_NAME).append(".").append(classname).toString();
+    } else {
+      return new StringBuilder().append(pacname.trim()).append(".").append(classname).toString();
+    }
+  }
+
+}
diff --git a/sonar-batch/src/main/java/org/sonar/batch/util/package-info.java b/sonar-batch/src/main/java/org/sonar/batch/util/package-info.java
new file mode 100644 (file)
index 0000000..66aecc7
--- /dev/null
@@ -0,0 +1,23 @@
+/*
+ * SonarQube, open source software quality management tool.
+ * Copyright (C) 2008-2014 SonarSource
+ * mailto:contact AT sonarsource DOT com
+ *
+ * SonarQube is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or (at your option) any later version.
+ *
+ * SonarQube is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+ */
+
+@javax.annotation.ParametersAreNonnullByDefault
+package org.sonar.batch.util;
+
index 62cbb1e5d04e060a291a978bc4b6c9b807919049..2fc521a64d5e242a8582f5a02a58047b2036f454 100644 (file)
@@ -23,26 +23,26 @@ import org.junit.Test;
 import org.sonar.api.measures.Measure;
 import org.sonar.api.measures.MeasuresFilters;
 import org.sonar.api.measures.Metric;
-import org.sonar.api.resources.JavaFile;
-import org.sonar.api.resources.JavaPackage;
-import org.sonar.api.rules.Rule;
-import org.sonar.api.rules.Violation;
+import org.sonar.api.resources.Directory;
+import org.sonar.api.resources.File;
 import org.sonar.api.utils.SonarException;
 
 import static org.hamcrest.CoreMatchers.is;
 import static org.hamcrest.core.IsNot.not;
-import static org.junit.Assert.*;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertThat;
 import static org.junit.internal.matchers.IsCollectionContaining.hasItem;
 
 public class BucketTest {
 
-  JavaPackage javaPackage = new JavaPackage("org.foo");
-  JavaFile javaFile = new JavaFile("org.foo.Bar");
+  Directory directory = new Directory("org/foo");
+  File javaFile = new File("org/foo/Bar.java");
   Metric ncloc = new Metric("ncloc");
 
   @Test
   public void shouldManageRelationships() {
-    Bucket packageBucket = new Bucket(javaPackage);
+    Bucket packageBucket = new Bucket(directory);
     Bucket fileBucket = new Bucket(javaFile);
     fileBucket.setParent(packageBucket);
 
@@ -89,13 +89,13 @@ public class BucketTest {
 
   @Test
   public void shouldBeEquals() {
-    assertEquals(new Bucket(javaPackage), new Bucket(javaPackage));
-    assertEquals(new Bucket(javaPackage).hashCode(), new Bucket(javaPackage).hashCode());
+    assertEquals(new Bucket(directory), new Bucket(directory));
+    assertEquals(new Bucket(directory).hashCode(), new Bucket(directory).hashCode());
   }
 
   @Test
   public void shouldNotBeEquals() {
-    assertFalse(new Bucket(javaPackage).equals(new Bucket(javaFile)));
-    assertThat(new Bucket(javaPackage).hashCode(), not(is(new Bucket(javaFile).hashCode())));
+    assertFalse(new Bucket(directory).equals(new Bucket(javaFile)));
+    assertThat(new Bucket(directory).hashCode(), not(is(new Bucket(javaFile).hashCode())));
   }
 }
index 7ce169a9daec8368d1c0d6cc01096604dc6933e7..a89a72bdd877f63bba706c784f630499633e7c81 100644 (file)
@@ -26,8 +26,7 @@ import org.junit.Test;
 import org.junit.rules.ExpectedException;
 import org.sonar.api.database.model.ResourceModel;
 import org.sonar.api.resources.Directory;
-import org.sonar.api.resources.JavaFile;
-import org.sonar.api.resources.JavaPackage;
+import org.sonar.api.resources.File;
 import org.sonar.api.resources.Library;
 import org.sonar.api.resources.Project;
 import org.sonar.api.security.ResourcePermissions;
@@ -172,8 +171,8 @@ public class DefaultResourcePersisterTest extends AbstractDbUnitTestCase {
     DefaultResourcePersister persister = new DefaultResourcePersister(getSession(), mock(ResourcePermissions.class), snapshotCache, resourceCache);
     persister.saveProject(multiModuleProject, null);
     persister.saveProject(moduleA, multiModuleProject);
-    persister.saveResource(moduleA, new JavaPackage("org.foo").setEffectiveKey("a:org.foo"));
-    persister.saveResource(moduleA, new JavaFile("org.foo.MyClass").setEffectiveKey("a:org.foo.MyClass"));
+    persister.saveResource(moduleA, new Directory("org/foo").setEffectiveKey("a:org/foo"));
+    persister.saveResource(moduleA, new File("org/foo/MyClass.java").setEffectiveKey("a:org/foo/MyClass.java"));
     persister.clear();
 
     assertThat(persister.getSnapshotsByResource().size(), is(2));
index f67844538c723c7b2a141094642915469392c133..fc3a69628d28a6cb26a0bb2985096d9f05e462fa 100644 (file)
@@ -26,9 +26,13 @@ import org.junit.rules.ExpectedException;
 import org.mockito.ArgumentCaptor;
 import org.sonar.api.database.model.MeasureModel;
 import org.sonar.api.database.model.Snapshot;
-import org.sonar.api.measures.*;
-import org.sonar.api.resources.JavaFile;
-import org.sonar.api.resources.JavaPackage;
+import org.sonar.api.measures.CoreMetrics;
+import org.sonar.api.measures.Measure;
+import org.sonar.api.measures.Metric;
+import org.sonar.api.measures.PersistenceMode;
+import org.sonar.api.measures.RuleMeasure;
+import org.sonar.api.resources.Directory;
+import org.sonar.api.resources.File;
 import org.sonar.api.resources.Project;
 import org.sonar.api.rules.Rule;
 import org.sonar.api.rules.RuleFinder;
@@ -39,7 +43,9 @@ import org.sonar.core.persistence.AbstractDaoTestCase;
 import static org.fest.assertions.Assertions.assertThat;
 import static org.mockito.Matchers.any;
 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.when;
 
 public class MeasurePersisterTest extends AbstractDaoTestCase {
 
@@ -60,17 +66,17 @@ public class MeasurePersisterTest extends AbstractDaoTestCase {
   ResourcePersister resourcePersister = mock(ResourcePersister.class);
   MemoryOptimizer memoryOptimizer = mock(MemoryOptimizer.class);
   Project project = new Project("foo");
-  JavaPackage aPackage = new JavaPackage("org.foo");
-  JavaFile aFile = new JavaFile("org.foo.Bar");
+  Directory aDirectory = new Directory("org/foo");
+  File aFile = new File("org/foo/Bar.java");
   Snapshot projectSnapshot = snapshot(PROJECT_SNAPSHOT_ID);
   Snapshot packageSnapshot = snapshot(PACKAGE_SNAPSHOT_ID);
 
   @Before
   public void mockResourcePersister() {
     when(resourcePersister.getSnapshotOrFail(project)).thenReturn(projectSnapshot);
-    when(resourcePersister.getSnapshotOrFail(aPackage)).thenReturn(packageSnapshot);
+    when(resourcePersister.getSnapshotOrFail(aDirectory)).thenReturn(packageSnapshot);
     when(resourcePersister.getSnapshot(project)).thenReturn(projectSnapshot);
-    when(resourcePersister.getSnapshot(aPackage)).thenReturn(packageSnapshot);
+    when(resourcePersister.getSnapshot(aDirectory)).thenReturn(packageSnapshot);
 
     measurePersister = new MeasurePersister(getMyBatis(), resourcePersister, ruleFinder, memoryOptimizer);
   }
@@ -160,7 +166,7 @@ public class MeasurePersisterTest extends AbstractDaoTestCase {
     setupData("empty");
 
     measurePersister.saveMeasure(project, new Measure(ncloc()).setValue(200.0));
-    measurePersister.saveMeasure(aPackage, new Measure(ncloc()).setValue(300.0));
+    measurePersister.saveMeasure(aDirectory, new Measure(ncloc()).setValue(300.0));
 
     checkTables("shouldAlwaysPersistNonFileMeasures", "project_measures");
   }
@@ -171,7 +177,7 @@ public class MeasurePersisterTest extends AbstractDaoTestCase {
 
     measurePersister.saveMeasure(project, new Measure(coverage()).setValue(12.5).setId(1L));
     measurePersister.saveMeasure(project, new Measure(coverage()).setData(SHORT).setId(2L));
-    measurePersister.saveMeasure(aPackage, new Measure(coverage()).setData(LONG).setId(3L));
+    measurePersister.saveMeasure(aDirectory, new Measure(coverage()).setData(LONG).setId(3L));
 
     checkTables("shouldUpdateMeasure", "project_measures", "measure_data");
   }
@@ -196,7 +202,7 @@ public class MeasurePersisterTest extends AbstractDaoTestCase {
 
     measurePersister.setDelayedMode(true);
     measurePersister.saveMeasure(project, new Measure(ncloc()).setValue(1234.0).setData(SHORT));
-    measurePersister.saveMeasure(aPackage, new Measure(ncloc()).setValue(50.0).setData(LONG));
+    measurePersister.saveMeasure(aDirectory, new Measure(ncloc()).setValue(50.0).setData(LONG));
 
     assertEmptyTables("project_measures");
 
@@ -224,7 +230,7 @@ public class MeasurePersisterTest extends AbstractDaoTestCase {
 
     measurePersister.setDelayedMode(true);
     measurePersister.saveMeasure(project, new Measure(ncloc()).setValue(1234.0).setPersistenceMode(PersistenceMode.DATABASE));
-    measurePersister.saveMeasure(aPackage, new Measure(ncloc()).setValue(50.0));
+    measurePersister.saveMeasure(aDirectory, new Measure(ncloc()).setValue(50.0));
 
     checkTables("shouldInsertMeasure", "project_measures");
   }
index 7a6014c22ccaa8cbd725c04903932a6fa2033098..20e04957309bf7dee416bcb1f5fc76eb089ea902 100644 (file)
@@ -20,7 +20,7 @@
 package org.sonar.batch.index;
 
 import org.junit.Test;
-import org.sonar.api.resources.JavaFile;
+import org.sonar.api.resources.File;
 import org.sonar.api.resources.Resource;
 
 import static org.fest.assertions.Assertions.assertThat;
@@ -30,8 +30,8 @@ public class ResourceCacheTest {
   @Test
   public void should_cache_resource() throws Exception {
     ResourceCache cache = new ResourceCache();
-    String componentKey = "struts:org.struts.Action";
-    Resource resource = new JavaFile("org.struts.Action").setEffectiveKey(componentKey);
+    String componentKey = "struts:src/org/struts/Action.java";
+    Resource resource = new File("org/struts/Action.java").setEffectiveKey(componentKey);
     cache.add(resource);
 
     assertThat(cache.get(componentKey)).isSameAs(resource);
@@ -41,7 +41,7 @@ public class ResourceCacheTest {
   @Test
   public void should_fail_if_missing_component_key() throws Exception {
     ResourceCache cache = new ResourceCache();
-    Resource resource = new JavaFile("org.struts.Action").setEffectiveKey(null);
+    Resource resource = new File("org/struts/Action.java").setEffectiveKey(null);
     try {
       cache.add(resource);
       fail();
index c30991832d92943ddd92f4158a3f7670d7b9db7b..39f4095ccd2d672799e274c2158d66ca326f6ab3 100644 (file)
@@ -23,7 +23,7 @@ import org.junit.Before;
 import org.junit.Test;
 import org.sonar.api.database.model.Snapshot;
 import org.sonar.api.resources.DuplicatedSourceException;
-import org.sonar.api.resources.JavaFile;
+import org.sonar.api.resources.File;
 import org.sonar.api.resources.Resource;
 import org.sonar.jpa.test.AbstractDbUnitTestCase;
 
@@ -46,13 +46,13 @@ public class SourcePersisterTest extends AbstractDbUnitTestCase {
 
   @Test
   public void shouldSaveSource() {
-    sourcePersister.saveSource(new JavaFile("org.foo.Bar"), "this is the file content");
+    sourcePersister.saveSource(new File("org/foo/Bar.java"), "this is the file content");
     checkTables("shouldSaveSource", "snapshot_sources");
   }
 
   @Test(expected = DuplicatedSourceException.class)
   public void shouldFailIfSourceSavedSeveralTimes() {
-    JavaFile file = new JavaFile("org.foo.Bar");
+    File file = new File("org/foo/Bar.java");
     sourcePersister.saveSource(file, "this is the file content");
     sourcePersister.saveSource(file, "new content"); // fail
   }
index 48f3315445cfa26adda771cc32a0a609a5f0a925..d11d0a7211160ed6fb020aff10802e7b9d01e6d5 100644 (file)
@@ -24,10 +24,8 @@ import org.mockito.Mockito;
 import org.sonar.api.component.Component;
 import org.sonar.api.issue.Issuable;
 import org.sonar.api.resources.File;
-import org.sonar.api.resources.JavaFile;
 import org.sonar.api.resources.Project;
 import org.sonar.core.component.ResourceComponent;
-import org.sonar.java.api.JavaClass;
 
 import static org.fest.assertions.Assertions.assertThat;
 import static org.mockito.Mockito.mock;
@@ -58,24 +56,4 @@ public class IssuableFactoryTest {
     assertThat(issuable.component()).isSameAs(component);
     assertThat(issuable.issues()).isEmpty();
   }
-
-  @Test
-  public void java_file_should_be_issuable() throws Exception {
-    IssuableFactory factory = new IssuableFactory(moduleIssues, cache);
-    Component component = new ResourceComponent(new JavaFile("org.apache.Action").setEffectiveKey("struts:org.apache.Action"));
-    Issuable issuable = factory.loadPerspective(Issuable.class, component);
-
-    assertThat(issuable).isNotNull();
-    assertThat(issuable.component()).isSameAs(component);
-    assertThat(issuable.issues()).isEmpty();
-  }
-
-  @Test
-  public void java_class_should_not_be_issuable() throws Exception {
-    IssuableFactory factory = new IssuableFactory(moduleIssues, cache);
-    Component component = new ResourceComponent(JavaClass.create("org.apache.Action").setEffectiveKey("struts:org.apache.Action"));
-    Issuable issuable = factory.loadPerspective(Issuable.class, component);
-
-    assertThat(issuable).isNull();
-  }
 }
index f5b920c3b3cee565fce53c0f79c639ef372705ea..5a5f8ef282dd8942bdbd38e0956860292e8a8eec 100644 (file)
@@ -30,7 +30,7 @@ import org.sonar.api.batch.rule.DebtRemediationFunction;
 import org.sonar.api.batch.rule.internal.ActiveRulesBuilder;
 import org.sonar.api.batch.rule.internal.RulesBuilder;
 import org.sonar.api.issue.internal.DefaultIssue;
-import org.sonar.api.resources.JavaFile;
+import org.sonar.api.resources.File;
 import org.sonar.api.resources.Project;
 import org.sonar.api.resources.Resource;
 import org.sonar.api.rule.RuleKey;
@@ -47,7 +47,9 @@ import static org.fest.assertions.Assertions.assertThat;
 import static org.fest.assertions.Fail.fail;
 import static org.mockito.Matchers.any;
 import static org.mockito.Matchers.eq;
-import static org.mockito.Mockito.*;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.verifyZeroInteractions;
+import static org.mockito.Mockito.when;
 
 @RunWith(MockitoJUnitRunner.class)
 public class ModuleIssuesTest {
@@ -205,7 +207,7 @@ public class ModuleIssuesTest {
     initModuleIssues();
 
     org.sonar.api.rules.Rule rule = org.sonar.api.rules.Rule.create("squid", "AvoidCycle", "Avoid Cycle");
-    Resource resource = new JavaFile("org.struts.Action").setEffectiveKey("struts:org.struts.Action");
+    Resource resource = new File("org/struts/Action.java").setEffectiveKey("struts:src/org/struts/Action.java");
     Violation violation = new Violation(rule, resource);
     violation.setLineId(42);
     violation.setSeverity(RulePriority.CRITICAL);
@@ -224,7 +226,7 @@ public class ModuleIssuesTest {
     assertThat(issue.message()).isEqualTo("the message");
     assertThat(issue.key()).isNotEmpty();
     assertThat(issue.ruleKey().toString()).isEqualTo("squid:AvoidCycle");
-    assertThat(issue.componentKey()).isEqualTo("struts:org.struts.Action");
+    assertThat(issue.componentKey()).isEqualTo("struts:src/org/struts/Action.java");
   }
 
   @Test
diff --git a/sonar-batch/src/test/java/org/sonar/batch/util/DeprecatedKeyUtilsTest.java b/sonar-batch/src/test/java/org/sonar/batch/util/DeprecatedKeyUtilsTest.java
new file mode 100644 (file)
index 0000000..989bcd2
--- /dev/null
@@ -0,0 +1,40 @@
+/*
+ * SonarQube, open source software quality management tool.
+ * Copyright (C) 2008-2014 SonarSource
+ * mailto:contact AT sonarsource DOT com
+ *
+ * SonarQube is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or (at your option) any later version.
+ *
+ * SonarQube is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+ */
+package org.sonar.batch.util;
+
+import org.junit.Test;
+
+import static org.fest.assertions.Assertions.assertThat;
+
+public class DeprecatedKeyUtilsTest {
+
+  @Test
+  public void testGetJavaFileParentDeprecatedKey() {
+    assertThat(DeprecatedKeyUtils.getJavaFileParentDeprecatedKey("org.foo.bar.Hello")).isEqualTo("org/foo/bar");
+    assertThat(DeprecatedKeyUtils.getJavaFileParentDeprecatedKey("[default].Hello")).isEqualTo("[root]");
+    assertThat(DeprecatedKeyUtils.getJavaFileParentDeprecatedKey("Hello")).isEqualTo("[root]");
+  }
+
+  @Test
+  public void testGetJavaFileDeprecatedKey() {
+    assertThat(DeprecatedKeyUtils.getJavaFileDeprecatedKey("org/foo/bar/Hello.java")).isEqualTo("org.foo.bar.Hello");
+    assertThat(DeprecatedKeyUtils.getJavaFileDeprecatedKey("Hello.java")).isEqualTo("[default].Hello");
+  }
+}
index 45d15d7494a0b78348037fe6dc3759bc8d047605..5a7e3a1475e594c95b19201022cd3f301249500c 100644 (file)
  */
 package org.sonar.api.batch;
 
-import org.apache.commons.io.FilenameUtils;
-import org.apache.commons.lang.StringUtils;
 import org.sonar.api.resources.JavaFile;
 import org.sonar.api.resources.JavaPackage;
 
+/**
+ * @deprecated since 4.2
+ */
+@Deprecated
 public final class SquidUtils {
 
   private SquidUtils() {
@@ -35,21 +37,7 @@ public final class SquidUtils {
    */
   @Deprecated
   public static JavaFile convertJavaFileKeyFromSquidFormat(String key) {
-    String extension = StringUtils.lowerCase(FilenameUtils.getExtension(key));
-    boolean isJavaFile = "jav".equals(extension) || "java".equals(extension);
-    if (isJavaFile) {
-      key = key.substring(0, key.length() - extension.length() - 1);
-    }
-
-    String convertedKey = key.replace('/', '.');
-    if (convertedKey.indexOf('.') == -1 && !"".equals(convertedKey)) {
-      convertedKey = "[default]." + convertedKey;
-
-    } else if (convertedKey.indexOf('.') == -1) {
-      convertedKey = "[default]";
-    }
-
-    return new JavaFile(convertedKey);
+    throw new UnsupportedOperationException("Not supported since v4.2. See http://docs.codehaus.org/display/SONAR/API+Changes");
   }
 
   /**
@@ -57,9 +45,13 @@ public final class SquidUtils {
    */
   @Deprecated
   public static JavaPackage convertJavaPackageKeyFromSquidFormat(String key) {
-    return new JavaPackage(key);
+    throw new UnsupportedOperationException("Not supported since v4.2. See http://docs.codehaus.org/display/SONAR/API+Changes");
   }
 
+  /**
+   * @deprecated since 4.0
+   */
+  @Deprecated
   public static String convertToSquidKeyFormat(JavaFile file) {
     throw new UnsupportedOperationException("Not supported since v4.0. Was badly implemented");
   }
index 461820a5bec5ff800ed98c1c8356819804872ac2..0b0f7a983eb66abdadb9f8e121a4161e75748df3 100644 (file)
  */
 package org.sonar.api.resources;
 
-import org.apache.commons.lang.StringUtils;
-import org.apache.commons.lang.builder.ToStringBuilder;
-import org.sonar.api.scan.filesystem.PathResolver;
-import org.sonar.api.utils.WildcardPattern;
+import com.google.common.annotations.VisibleForTesting;
 
 import java.io.File;
 import java.util.List;
@@ -36,280 +33,84 @@ import java.util.List;
 @Deprecated
 public class JavaFile extends Resource {
 
-  private static final String JAVA_SUFFIX = ".java";
-  private static final String JAV_SUFFIX = ".jav";
-  private String className;
-  private String filename;
-  private String fullyQualifiedName;
-  private String packageFullyQualifiedName;
-  private boolean unitTest;
-  private JavaPackage parent;
-
-  private JavaFile() {
-    // Default constructor
+  @VisibleForTesting
+  JavaFile() {
   }
 
-  /**
-   * Creates a JavaFile that is not a class of test based on package and file names
-   */
   public JavaFile(String packageName, String className) {
-    this(packageName, className, false);
+    throw new UnsupportedOperationException("Not supported since v4.2. See http://docs.codehaus.org/display/SONAR/API+Changes");
   }
 
-  /**
-   * Creates a JavaFile that can be of any type based on package and file names
-   *
-   * @param unitTest whether it is a unit test file or a source file
-   */
   public JavaFile(String packageKey, String className, boolean unitTest) {
-    if (className == null) {
-      throw new IllegalArgumentException("Java filename can not be null");
-    }
-    this.className = StringUtils.trim(className);
-    String deprecatedKey;
-    if (StringUtils.isBlank(packageKey)) {
-      this.packageFullyQualifiedName = JavaPackage.DEFAULT_PACKAGE_NAME;
-      this.fullyQualifiedName = this.className;
-      deprecatedKey = new StringBuilder().append(this.packageFullyQualifiedName).append(".").append(this.className).toString();
-    } else {
-      this.packageFullyQualifiedName = packageKey.trim();
-      deprecatedKey = new StringBuilder().append(this.packageFullyQualifiedName).append(".").append(this.className).toString();
-      this.fullyQualifiedName = deprecatedKey;
-    }
-    setDeprecatedKey(deprecatedKey);
-    this.unitTest = unitTest;
+    throw new UnsupportedOperationException("Not supported since v4.2. See http://docs.codehaus.org/display/SONAR/API+Changes");
   }
 
-  /**
-   * Creates a source file from its key
-   */
   public JavaFile(String deprecatedKey) {
-    this(deprecatedKey, false);
+    throw new UnsupportedOperationException("Not supported since v4.2. See http://docs.codehaus.org/display/SONAR/API+Changes");
   }
 
-  /**
-   * Creates any JavaFile from its key
-   *
-   * @param unitTest whether it is a unit test file or a source file
-   */
   public JavaFile(String deprecatedKey, boolean unitTest) {
-    if (deprecatedKey == null) {
-      throw new IllegalArgumentException("Java filename can not be null");
-    }
-    String realKey = StringUtils.trim(deprecatedKey);
-    this.unitTest = unitTest;
-
-    if (realKey.contains(".")) {
-      this.className = StringUtils.substringAfterLast(realKey, ".");
-      this.packageFullyQualifiedName = StringUtils.substringBeforeLast(realKey, ".");
-      this.fullyQualifiedName = realKey;
-
-    } else {
-      this.className = realKey;
-      this.fullyQualifiedName = realKey;
-      this.packageFullyQualifiedName = JavaPackage.DEFAULT_PACKAGE_NAME;
-      realKey = new StringBuilder().append(JavaPackage.DEFAULT_PACKAGE_NAME).append(".").append(realKey).toString();
-    }
-    setDeprecatedKey(realKey);
+    throw new UnsupportedOperationException("Not supported since v4.2. See http://docs.codehaus.org/display/SONAR/API+Changes");
   }
 
-  /**
-   * {@inheritDoc}
-   */
   @Override
   public JavaPackage getParent() {
-    if (parent == null) {
-      parent = new JavaPackage(packageFullyQualifiedName);
-    }
-    return parent;
+    throw new UnsupportedOperationException("Not supported since v4.2. See http://docs.codehaus.org/display/SONAR/API+Changes");
   }
 
-  /**
-   * @return null
-   */
   @Override
   public String getDescription() {
-    return null;
+    throw new UnsupportedOperationException("Not supported since v4.2. See http://docs.codehaus.org/display/SONAR/API+Changes");
   }
 
-  /**
-   * @return Java
-   */
   @Override
   public Language getLanguage() {
-    return Java.INSTANCE;
+    throw new UnsupportedOperationException("Not supported since v4.2. See http://docs.codehaus.org/display/SONAR/API+Changes");
   }
 
-  /**
-   * {@inheritDoc}
-   */
   @Override
   public String getName() {
-    return StringUtils.isNotBlank(filename) ? filename : (className + JAVA_SUFFIX);
+    throw new UnsupportedOperationException("Not supported since v4.2. See http://docs.codehaus.org/display/SONAR/API+Changes");
   }
 
-  /**
-   * {@inheritDoc}
-   */
   @Override
   public String getLongName() {
-    return fullyQualifiedName;
+    throw new UnsupportedOperationException("Not supported since v4.2. See http://docs.codehaus.org/display/SONAR/API+Changes");
   }
 
-  /**
-   * @return SCOPE_ENTITY
-   */
   @Override
   public String getScope() {
-    return Scopes.FILE;
+    throw new UnsupportedOperationException("Not supported since v4.2. See http://docs.codehaus.org/display/SONAR/API+Changes");
   }
 
-  /**
-   * @return QUALIFIER_UNIT_TEST_CLASS or QUALIFIER_FILE depending whether it is a unit test class
-   */
   @Override
   public String getQualifier() {
-    return unitTest ? Qualifiers.UNIT_TEST_FILE : Qualifiers.FILE;
+    throw new UnsupportedOperationException("Not supported since v4.2. See http://docs.codehaus.org/display/SONAR/API+Changes");
   }
 
-  /**
-   * @return whether the JavaFile is a unit test class or not
-   */
   public boolean isUnitTest() {
-    return unitTest;
+    throw new UnsupportedOperationException("Not supported since v4.2. See http://docs.codehaus.org/display/SONAR/API+Changes");
   }
 
-  /**
-   * {@inheritDoc}
-   */
   @Override
   public boolean matchFilePattern(String antPattern) {
-    WildcardPattern matcher = WildcardPattern.create(antPattern, Directory.SEPARATOR);
-    return matcher.match(getKey());
+    throw new UnsupportedOperationException("Not supported since v4.2. See http://docs.codehaus.org/display/SONAR/API+Changes");
   }
 
   public static JavaFile fromIOFile(File file, Project module, boolean unitTest) {
-    if (file == null || !StringUtils.endsWithIgnoreCase(file.getName(), JAVA_SUFFIX)) {
-      return null;
-    }
-    PathResolver.RelativePath relativePath = new PathResolver().relativePath(
-      unitTest ? module.getFileSystem().getTestDirs() : module.getFileSystem().getSourceDirs(),
-      file);
-    if (relativePath != null) {
-      JavaFile sonarFile = fromRelativePath(relativePath.path(), unitTest);
-      sonarFile.setPath(new PathResolver().relativePath(module.getFileSystem().getBasedir(), file));
-      return sonarFile;
-    }
-    return null;
+    throw new UnsupportedOperationException("Not supported since v4.2. See http://docs.codehaus.org/display/SONAR/API+Changes");
   }
 
-  /**
-   * For internal use only.
-   */
-  public static JavaFile create(String relativePathFromBasedir) {
-    JavaFile javaFile = new JavaFile();
-    String normalizedPath = normalize(relativePathFromBasedir);
-    javaFile.setKey(normalizedPath);
-    javaFile.setPath(normalizedPath);
-    javaFile.parent = new JavaPackage();
-    String directoryPath;
-    if (normalizedPath != null && normalizedPath.contains(Directory.SEPARATOR)) {
-      directoryPath = StringUtils.substringBeforeLast(normalizedPath, Directory.SEPARATOR);
-    } else {
-      directoryPath = Directory.SEPARATOR;
-    }
-    String normalizedParentPath = normalize(directoryPath);
-    javaFile.parent.setKey(normalizedParentPath);
-    javaFile.parent.setPath(normalizedParentPath);
-    return javaFile;
-  }
-
-  /**
-   * For internal use only.
-   */
-  public static JavaFile create(String relativePathFromBasedir, String relativePathFromSourceDir, boolean unitTest) {
-    JavaFile javaFile = JavaFile.create(relativePathFromBasedir);
-    if (relativePathFromSourceDir.contains(Directory.SEPARATOR)) {
-      javaFile.packageFullyQualifiedName = StringUtils.substringBeforeLast(relativePathFromSourceDir, Directory.SEPARATOR);
-      javaFile.packageFullyQualifiedName = StringUtils.replace(javaFile.packageFullyQualifiedName, Directory.SEPARATOR, ".");
-      javaFile.filename = StringUtils.substringAfterLast(relativePathFromSourceDir, Directory.SEPARATOR);
-      if (javaFile.filename.endsWith(JAVA_SUFFIX)) {
-        javaFile.className = StringUtils.removeEndIgnoreCase(javaFile.filename, JAVA_SUFFIX);
-      } else if (javaFile.filename.endsWith(JAV_SUFFIX)) {
-        javaFile.className = StringUtils.removeEndIgnoreCase(javaFile.filename, JAV_SUFFIX);
-      }
-      javaFile.fullyQualifiedName = javaFile.packageFullyQualifiedName + "." + javaFile.className;
-      javaFile.setDeprecatedKey(javaFile.fullyQualifiedName);
-      javaFile.parent.setDeprecatedKey(Directory.parseKey(StringUtils.substringBeforeLast(relativePathFromSourceDir, Directory.SEPARATOR)));
-    } else {
-      javaFile.packageFullyQualifiedName = JavaPackage.DEFAULT_PACKAGE_NAME;
-      javaFile.className = StringUtils.removeEndIgnoreCase(relativePathFromSourceDir, JAVA_SUFFIX);
-      javaFile.fullyQualifiedName = javaFile.className;
-      javaFile.setDeprecatedKey(JavaPackage.DEFAULT_PACKAGE_NAME + "." + javaFile.className);
-      javaFile.parent.setDeprecatedKey(Directory.ROOT);
-    }
-    javaFile.unitTest = unitTest;
-    return javaFile;
-  }
-
-  /**
-   * @deprecated since 4.2 use {@link #create(String, String, boolean)}
-   */
-  @Deprecated
   public static JavaFile fromRelativePath(String relativePath, boolean unitTest) {
-    if (relativePath != null) {
-      String pacname = null;
-      String classname = relativePath;
-
-      if (relativePath.indexOf('/') >= 0) {
-        pacname = StringUtils.substringBeforeLast(relativePath, "/");
-        pacname = StringUtils.replace(pacname, "/", ".");
-        classname = StringUtils.substringAfterLast(relativePath, "/");
-      }
-      classname = StringUtils.substringBeforeLast(classname, ".");
-      return new JavaFile(pacname, classname, unitTest);
-    }
-    return null;
+    throw new UnsupportedOperationException("Not supported since v4.2. See http://docs.codehaus.org/display/SONAR/API+Changes");
   }
 
-  /**
-   * Creates a JavaFile from a file in the source directories
-   *
-   * @return the JavaFile created if exists, null otherwise
-   * @deprecated since 4.2 use {@link #create(String, String, boolean)}
-   */
-  @Deprecated
   public static JavaFile fromIOFile(File file, List<File> sourceDirs, boolean unitTest) {
-    if (file == null || !StringUtils.endsWithIgnoreCase(file.getName(), JAVA_SUFFIX)) {
-      return null;
-    }
-    PathResolver.RelativePath relativePath = new PathResolver().relativePath(sourceDirs, file);
-    if (relativePath != null) {
-      return fromRelativePath(relativePath.path(), unitTest);
-    }
-    return null;
+    throw new UnsupportedOperationException("Not supported since v4.2. See http://docs.codehaus.org/display/SONAR/API+Changes");
   }
 
-  /**
-   * Shortcut to fromIOFile with an abolute path
-   * @deprecated since 4.2 use {@link #create(String, String, boolean)}
-   */
-  @Deprecated
   public static JavaFile fromAbsolutePath(String path, List<File> sourceDirs, boolean unitTest) {
-    if (path == null) {
-      return null;
-    }
-    return fromIOFile(new File(path), sourceDirs, unitTest);
-  }
-
-  @Override
-  public String toString() {
-    return new ToStringBuilder(this)
-      .append("key", getKey())
-      .append("deprecatedKey", getDeprecatedKey())
-      .append("path", getPath())
-      .append("filename", className)
-      .toString();
+    throw new UnsupportedOperationException("Not supported since v4.2. See http://docs.codehaus.org/display/SONAR/API+Changes");
   }
 
 }
index 8cfb66722752ab7b9752bbba6551c3c1eb03dd97..1c021775ae1d507c3e9b92467a2f6b0b7971f231 100644 (file)
@@ -19,9 +19,6 @@
  */
 package org.sonar.api.resources;
 
-import org.apache.commons.lang.StringUtils;
-import org.apache.commons.lang.builder.ToStringBuilder;
-
 /**
  * A class that represents a Java package in Sonar
  *
@@ -31,111 +28,57 @@ import org.apache.commons.lang.builder.ToStringBuilder;
 @Deprecated
 public class JavaPackage extends Resource {
 
-  /**
-   * Default package name for classes without package definition
-   */
   public static final String DEFAULT_PACKAGE_NAME = "[default]";
 
-  /**
-   * Default constructor
-   * @deprecated since 4.2 use {@link #create(String, String)}
-   */
-  @Deprecated
   public JavaPackage() {
-    this(null);
+    // For testing
   }
 
-  /**
-   * Creates a JavaPackage from its key.
-   * @deprecated since 4.2 use {@link #create(String, String)}
-   */
-  @Deprecated
   public JavaPackage(String deprecatedKey) {
-    if (DEFAULT_PACKAGE_NAME.equals(deprecatedKey)) {
-      deprecatedKey = Directory.ROOT;
-    }
-    String deprecatedDirectoryKey = StringUtils.trimToEmpty(deprecatedKey);
-    deprecatedDirectoryKey = deprecatedDirectoryKey.replaceAll("\\.", Directory.SEPARATOR);
-    setDeprecatedKey(StringUtils.defaultIfEmpty(deprecatedDirectoryKey, Directory.ROOT));
+    throw new UnsupportedOperationException("Not supported since v4.2. See http://docs.codehaus.org/display/SONAR/API+Changes");
   }
 
-  /**
-   * @return whether the JavaPackage key is the default key
-   */
   public boolean isDefault() {
-    return StringUtils.equals(getDeprecatedKey(), Directory.ROOT);
+    throw new UnsupportedOperationException("Not supported since v4.2. See http://docs.codehaus.org/display/SONAR/API+Changes");
   }
 
-  /**
-   * {@inheritDoc}
-   */
   @Override
   public boolean matchFilePattern(String antPattern) {
-    return false;
+    throw new UnsupportedOperationException("Not supported since v4.2. See http://docs.codehaus.org/display/SONAR/API+Changes");
   }
 
-  /**
-   * {@inheritDoc}
-   */
   @Override
   public String getDescription() {
-    return null;
+    throw new UnsupportedOperationException("Not supported since v4.2. See http://docs.codehaus.org/display/SONAR/API+Changes");
   }
 
-  /**
-   * @return SCOPE_SPACE
-   */
   @Override
   public String getScope() {
-    return Scopes.DIRECTORY;
+    throw new UnsupportedOperationException("Not supported since v4.2. See http://docs.codehaus.org/display/SONAR/API+Changes");
   }
 
-  /**
-   * @return QUALIFIER_PACKAGE
-   */
   @Override
   public String getQualifier() {
-    return Qualifiers.DIRECTORY;
+    throw new UnsupportedOperationException("Not supported since v4.2. See http://docs.codehaus.org/display/SONAR/API+Changes");
   }
 
-  /**
-   * {@inheritDoc}
-   */
   @Override
   public String getName() {
-    return getKey();
+    throw new UnsupportedOperationException("Not supported since v4.2. See http://docs.codehaus.org/display/SONAR/API+Changes");
   }
 
-  /**
-   * {@inheritDoc}
-   */
   @Override
   public Resource getParent() {
-    return null;
+    throw new UnsupportedOperationException("Not supported since v4.2. See http://docs.codehaus.org/display/SONAR/API+Changes");
   }
 
-  /**
-   * {@inheritDoc}
-   */
   @Override
   public String getLongName() {
-    return null;
+    throw new UnsupportedOperationException("Not supported since v4.2. See http://docs.codehaus.org/display/SONAR/API+Changes");
   }
 
-  /**
-   * @return null
-   */
   @Override
   public Language getLanguage() {
-    return null;
-  }
-
-  @Override
-  public String toString() {
-    return new ToStringBuilder(this)
-      .append("id", getId())
-      .append("key", getKey())
-      .append("deprecatedKey", getDeprecatedKey())
-      .toString();
+    throw new UnsupportedOperationException("Not supported since v4.2. See http://docs.codehaus.org/display/SONAR/API+Changes");
   }
 }
index bf646390cf06b148eac27fe334762100ab75f8c4..643d24d575e75f6a82f39883052c588161e62b42 100644 (file)
@@ -21,30 +21,17 @@ package org.sonar.api.batch;
 
 import org.junit.Test;
 import org.sonar.api.resources.JavaFile;
-import org.sonar.api.resources.JavaPackage;
-
-import static org.fest.assertions.Assertions.assertThat;
 
 public class SquidUtilsTest {
 
-  @Test
+  @Test(expected = UnsupportedOperationException.class)
   public void convertJavaFileKeyFromSquidFormat() {
-    assertThat(new JavaFile("java.lang.String")).isEqualTo(SquidUtils.convertJavaFileKeyFromSquidFormat("java/lang/String"));
-    assertThat(new JavaFile("java.lang.String")).isEqualTo(SquidUtils.convertJavaFileKeyFromSquidFormat("java/lang/String.java"));
-    assertThat(new JavaFile("java.lang.String")).isEqualTo(SquidUtils.convertJavaFileKeyFromSquidFormat("java/lang/String.jav"));
-    assertThat(new JavaFile("java.lang.String")).isEqualTo(SquidUtils.convertJavaFileKeyFromSquidFormat("java/lang/String.JAVA"));
-    assertThat(new JavaFile("java.lang.String")).isEqualTo(SquidUtils.convertJavaFileKeyFromSquidFormat("java/lang/String.JAV"));
-    assertThat(new JavaFile("String")).isEqualTo(SquidUtils.convertJavaFileKeyFromSquidFormat("String.java"));
-    assertThat(new JavaFile("String")).isEqualTo(SquidUtils.convertJavaFileKeyFromSquidFormat("String.JAVA"));
-    assertThat(new JavaFile("String")).isEqualTo(SquidUtils.convertJavaFileKeyFromSquidFormat("String.JAV"));
-    assertThat(new JavaFile("String")).isEqualTo(SquidUtils.convertJavaFileKeyFromSquidFormat("String"));
+    SquidUtils.convertJavaFileKeyFromSquidFormat("java/lang/String");
   }
 
-  @Test
+  @Test(expected = UnsupportedOperationException.class)
   public void shouldConvertJavaPackageKeyFromSquidFormat() {
-    assertThat(new JavaPackage("java/lang")).isEqualTo(SquidUtils.convertJavaPackageKeyFromSquidFormat("java/lang"));
-    assertThat(new JavaPackage("")).isEqualTo(SquidUtils.convertJavaPackageKeyFromSquidFormat(""));
-    assertThat(new JavaPackage("singlepackage")).isEqualTo(SquidUtils.convertJavaPackageKeyFromSquidFormat("singlepackage"));
+    SquidUtils.convertJavaPackageKeyFromSquidFormat("java/lang");
   }
 
   @Test(expected = UnsupportedOperationException.class)
index f2982758b307747bc4c500eba8a4ba77327def79..017e6c4a34b26a871a4a487a2755fb4f23a81628 100644 (file)
  */
 package org.sonar.api.resources;
 
-import org.junit.Rule;
 import org.junit.Test;
-import org.junit.rules.TemporaryFolder;
 
-import java.io.File;
-import java.util.Arrays;
 import java.util.List;
 
-import static org.fest.assertions.Assertions.assertThat;
-import static org.hamcrest.CoreMatchers.is;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertThat;
-
 public class JavaFileTest {
 
-  @Rule
-  public TemporaryFolder tempFolder = new TemporaryFolder();
-
-  @Test
-  public void testNewClass() {
-    JavaFile javaClass = JavaFile.create("src/main/java/org/foo/bar/Hello.java", "org/foo/bar/Hello.java", false);
-    assertThat(javaClass.getKey()).isEqualTo("src/main/java/org/foo/bar/Hello.java");
-    assertThat(javaClass.getDeprecatedKey(), is("org.foo.bar.Hello"));
-    assertThat(javaClass.getName(), is("Hello.java"));
-    assertThat(javaClass.getLongName(), is("org.foo.bar.Hello"));
-    assertThat(javaClass.getParent().getKey(), is("src/main/java/org/foo/bar"));
-    assertThat(javaClass.getParent().getDeprecatedKey(), is("org/foo/bar"));
-  }
-
-  @Test
-  public void testNewClassByDeprecatedKey() {
-    JavaFile javaClass = new JavaFile("org.foo.bar.Hello", false);
-    assertThat(javaClass.getDeprecatedKey(), is("org.foo.bar.Hello"));
-    assertThat(javaClass.getName(), is("Hello.java"));
-    assertThat(javaClass.getLongName(), is("org.foo.bar.Hello"));
-    assertThat(javaClass.getParent().getDeprecatedKey(), is("org/foo/bar"));
-  }
-
-  @Test
-  public void testNewClassWithExplicitPackage() {
-    JavaFile javaClass = new JavaFile("org.foo.bar", "Hello", false);
-    assertThat(javaClass.getDeprecatedKey(), is("org.foo.bar.Hello"));
-    assertThat(javaClass.getName(), is("Hello.java"));
-    assertThat(javaClass.getLongName(), is("org.foo.bar.Hello"));
-    assertThat(javaClass.getParent().getDeprecatedKey(), is("org/foo/bar"));
-  }
-
-  @Test
-  public void shouldAcceptFilenamesWithDollars() {
-    // $ is not used only for inner classes !!!
-    JavaFile javaFile = new JavaFile("org.foo.bar", "Hello$Bar");
-    assertThat(javaFile.getDeprecatedKey(), is("org.foo.bar.Hello$Bar"));
-  }
-
-  @Test
-  public void testNewClassWithEmptyPackage() {
-    JavaFile javaClass = JavaFile.create("src/main/java/Hello.java", "Hello.java", false);
-    assertThat(javaClass.getKey()).isEqualTo("src/main/java/Hello.java");
-    assertThat(javaClass.getDeprecatedKey(), is(JavaPackage.DEFAULT_PACKAGE_NAME + ".Hello"));
-    assertThat(javaClass.getName(), is("Hello.java"));
-    assertThat(javaClass.getLongName(), is("Hello"));
-    assertThat(javaClass.getParent().getKey()).isEqualTo("src/main/java");
-    assertThat(javaClass.getParent().getDeprecatedKey()).isEqualTo(Directory.ROOT);
-    assertThat(javaClass.getParent().isDefault()).isTrue();
-  }
+  JavaFile javaFile = new JavaFile();
 
-  @Test
-  public void testNewClassInRootFolder() {
-    JavaFile javaClass = JavaFile.create("Hello.java", "Hello.java", false);
-    assertThat(javaClass.getKey()).isEqualTo("Hello.java");
-    assertThat(javaClass.getDeprecatedKey(), is(JavaPackage.DEFAULT_PACKAGE_NAME + ".Hello"));
-    assertThat(javaClass.getName(), is("Hello.java"));
-    assertThat(javaClass.getLongName(), is("Hello"));
-    assertThat(javaClass.getParent().getKey()).isEqualTo("/");
-    assertThat(javaClass.getParent().getDeprecatedKey()).isEqualTo(Directory.ROOT);
-    assertThat(javaClass.getParent().isDefault()).isTrue();
+  @Test(expected = UnsupportedOperationException.class)
+  public void testConstructor() {
+    JavaFile javaClass = new JavaFile("", "");
   }
 
-  @Test
-  public void testNewClassWithEmptyPackageDeprecatedConstructor() {
-    JavaFile javaClass = new JavaFile("", "Hello", false);
-    assertThat(javaClass.getDeprecatedKey(), is(JavaPackage.DEFAULT_PACKAGE_NAME + ".Hello"));
-    assertThat(javaClass.getName(), is("Hello.java"));
-    assertThat(javaClass.getLongName(), is("Hello"));
-    assertThat(javaClass.getParent().isDefault(), is(true));
+  @Test(expected = UnsupportedOperationException.class)
+  public void testConstructor2() {
+    JavaFile javaClass = new JavaFile("", "", true);
   }
 
-  @Test
-  public void testNewClassWithNullPackageDeprecatedConstructor() {
-    JavaFile javaClass = new JavaFile(null, "Hello", false);
-    assertThat(javaClass.getDeprecatedKey(), is(JavaPackage.DEFAULT_PACKAGE_NAME + ".Hello"));
-    assertThat(javaClass.getName(), is("Hello.java"));
-    assertThat(javaClass.getLongName(), is("Hello"));
-    assertThat((javaClass.getParent()).isDefault(), is(true));
+  @Test(expected = UnsupportedOperationException.class)
+  public void testConstructor3() {
+    JavaFile javaClass = new JavaFile("");
   }
 
-  @Test
-  public void shouldBeDefaultPackageIfNoPackage() {
-    JavaFile javaClass = new JavaFile("Hello", false);
-    assertEquals(JavaPackage.DEFAULT_PACKAGE_NAME + ".Hello", javaClass.getDeprecatedKey());
-    assertThat(javaClass.getName(), is("Hello.java"));
-    assertThat(javaClass.getLongName(), is("Hello"));
-    assertThat(javaClass.getParent().isDefault(), is(true));
+  @Test(expected = UnsupportedOperationException.class)
+  public void testConstructor4() {
+    JavaFile javaClass = new JavaFile("", true);
   }
 
-  @Test
-  public void aClassShouldBeNamedJava() {
-    JavaFile javaClass = new JavaFile("org.foo.bar.Java", false);
-    assertThat(javaClass.getDeprecatedKey(), is("org.foo.bar.Java"));
-    assertThat(javaClass.getLongName(), is("org.foo.bar.Java"));
-    assertThat(javaClass.getName(), is("Java.java"));
-    JavaPackage parent = javaClass.getParent();
-    assertEquals("org/foo/bar", parent.getDeprecatedKey());
+  @Test(expected = UnsupportedOperationException.class)
+  public void testGetParent() {
+    javaFile.getParent();
   }
 
-  @Test
-  public void shouldTrimClasses() {
-    JavaFile clazz = new JavaFile("   org.foo.bar.Hello   ", false);
-    assertThat(clazz.getDeprecatedKey(), is("org.foo.bar.Hello"));
-    assertThat(clazz.getLongName(), is("org.foo.bar.Hello"));
-    assertThat(clazz.getName(), is("Hello.java"));
-    JavaPackage parent = clazz.getParent();
-    assertThat(parent.getDeprecatedKey(), is("org/foo/bar"));
+  @Test(expected = UnsupportedOperationException.class)
+  public void testGetDescription() {
+    javaFile.getDescription();
   }
 
-  @Test
-  public void testEqualsOnClasses() {
-    JavaFile class1 = new JavaFile("foo.bar", "Hello", false);
-    JavaFile class2 = new JavaFile("foo.bar.Hello", false);
-    assertThat(class1).isEqualTo(class2);
-
-    class1 = new JavaFile("NoPackage", false);
-    class2 = new JavaFile("NoPackage", false);
-    assertThat(class1).isEqualTo(class2);
-    assertThat(class1).isEqualTo(class1);
+  @Test(expected = UnsupportedOperationException.class)
+  public void testGetLanguage() {
+    javaFile.getLanguage();
   }
 
-  @Test
-  public void oneLevelPackage() {
-    JavaFile clazz = new JavaFile("onelevel.MyFile");
-    assertEquals("onelevel.MyFile", clazz.getDeprecatedKey());
-    assertEquals("onelevel", clazz.getParent().getDeprecatedKey());
-
-    clazz = new JavaFile("onelevel", "MyFile");
-    assertEquals("onelevel.MyFile", clazz.getDeprecatedKey());
-    assertEquals("onelevel", clazz.getParent().getDeprecatedKey());
-
-    File sourceDir = newDir("sources");
-    List<File> sources = Arrays.asList(sourceDir);
-    JavaFile javaFile = JavaFile.fromAbsolutePath(absPath(sourceDir, "onelevel/MyFile.java"), sources, false);
-    assertEquals("onelevel.MyFile", javaFile.getDeprecatedKey());
-    assertEquals("MyFile.java", javaFile.getName());
-    assertEquals("onelevel", javaFile.getParent().getDeprecatedKey());
-    assertThat(javaFile.getParent().isDefault(), is(false));
+  @Test(expected = UnsupportedOperationException.class)
+  public void testGetName() {
+    javaFile.getName();
   }
 
-  @Test
-  public void shouldResolveClassFromAbsolutePath() {
-    File sources1 = newDir("source1");
-    File sources2 = newDir("source2");
-    List<File> sources = Arrays.asList(sources1, sources2);
-    JavaFile javaFile = JavaFile.fromAbsolutePath(absPath(sources2, "foo/bar/MyFile.java"), sources, false);
-    assertThat("foo.bar.MyFile", is(javaFile.getDeprecatedKey()));
-    assertThat(javaFile.getLongName(), is("foo.bar.MyFile"));
-    assertThat(javaFile.getName(), is("MyFile.java"));
-    assertThat(javaFile.getParent().getDeprecatedKey(), is("foo/bar"));
-  }
-
-  @Test
-  public void shouldResolveFromAbsolutePathEvenIfDefaultPackage() {
-    File source1 = newDir("source1");
-    File source2 = newDir("source2");
-    List<File> sources = Arrays.asList(source1, source2);
-
-    JavaFile javaClass = JavaFile.fromAbsolutePath(absPath(source1, "MyClass.java"), sources, false);
-    assertEquals(JavaPackage.DEFAULT_PACKAGE_NAME + ".MyClass", javaClass.getDeprecatedKey());
-    assertEquals("MyClass.java", javaClass.getName());
-
-    assertThat((javaClass.getParent()).isDefault()).isEqualTo(true);
+  @Test(expected = UnsupportedOperationException.class)
+  public void testGetLongName() {
+    javaFile.getLongName();
   }
 
-  @Test
-  public void shouldResolveOnlyJavaFromAbsolutePath() {
-    File source1 = newDir("source1");
-    List<File> sources = Arrays.asList(source1);
-    assertThat(JavaFile.fromAbsolutePath(absPath(source1, "foo/bar/my_file.sql"), sources, false)).isNull();
+  @Test(expected = UnsupportedOperationException.class)
+  public void testGetScope() {
+    javaFile.getScope();
   }
 
-  @Test
-  public void shouldNotFailWhenResolvingUnknownClassFromAbsolutePath() {
-    File source1 = newDir("source1");
-    List<File> sources = Arrays.asList(source1);
-    assertThat(JavaFile.fromAbsolutePath("/home/other/src/main/java/foo/bar/MyClass.java", sources, false)).isNull();
+  @Test(expected = UnsupportedOperationException.class)
+  public void testGetQualifier() {
+    javaFile.getQualifier();
   }
 
-  @Test
-  public void shouldMatchFilePatterns() {
-    JavaFile clazz = JavaFile.create("src/main/java/org/sonar/commons/Foo.java", "org/sonar/commons/Foo.java", false);
-    assertThat(clazz.matchFilePattern("**/commons/**/*.java")).isTrue();
-    assertThat(clazz.matchFilePattern("/**/commons/**/*.java")).isTrue();
-    assertThat(clazz.matchFilePattern("/**/commons/**/*.*")).isTrue();
-    assertThat(clazz.matchFilePattern("/**/sonar/*.java")).isFalse();
-    assertThat(clazz.matchFilePattern("src/main/java/org/*/commons/**/*.java")).isTrue();
-    assertThat(clazz.matchFilePattern("src/main/java/org/sonar/commons/*")).isTrue();
-    assertThat(clazz.matchFilePattern("src/main/java/org/sonar/**/*.java")).isTrue();
-    assertThat(clazz.matchFilePattern("src/main/java/org/sonar/*")).isFalse();
-    assertThat(clazz.matchFilePattern("src/main/java/org/sonar*/*")).isFalse();
-    assertThat(clazz.matchFilePattern("src/main/java/org/**")).isTrue();
-    assertThat(clazz.matchFilePattern("*src/main/java/org/sona?/co??ons/**.*")).isTrue();
-    assertThat(clazz.matchFilePattern("src/main/java/org/sonar/core/**")).isFalse();
-    assertThat(clazz.matchFilePattern("src/main/java/org/sonar/commons/Foo.java")).isTrue();
-    assertThat(clazz.matchFilePattern("**/*Foo.java")).isTrue();
-    assertThat(clazz.matchFilePattern("**/*Foo.*")).isTrue();
-    assertThat(clazz.matchFilePattern("src/main/java/org/*/*/Foo.java")).isTrue();
-    assertThat(clazz.matchFilePattern("src/main/java/org/**/**/Foo.java")).isTrue();
-    assertThat(clazz.matchFilePattern("**/commons/**/*")).isTrue();
-    assertThat(clazz.matchFilePattern("**/*")).isTrue();
+  @Test(expected = UnsupportedOperationException.class)
+  public void testIsUnitTest() {
+    javaFile.isUnitTest();
   }
 
-  // SONAR-4397
-  @Test
-  public void shouldMatchFilePatternsWhenNoPackage() {
-    JavaFile clazz = JavaFile.create("src/main/java/Foo.java", "Foo.java", false);
-    assertThat(clazz.matchFilePattern("**/*Foo.java")).isTrue();
-    assertThat(clazz.matchFilePattern("**/*Foo.*")).isTrue();
-    assertThat(clazz.matchFilePattern("**/*")).isTrue();
-    assertThat(clazz.matchFilePattern("src/main/java/Foo*.*")).isTrue();
+  @Test(expected = UnsupportedOperationException.class)
+  public void testMathFilePattern() {
+    javaFile.matchFilePattern("");
   }
 
-  /**
-   * See http://jira.codehaus.org/browse/SONAR-1449
-   */
-  @Test
-  public void doNotMatchAPattern() {
-    JavaFile file = JavaFile.create("src/main/java/org/sonar/commons/Foo.java", "org/sonar/commons/Foo.java", false);
-    assertThat(file.matchFilePattern("**/*.aj")).isFalse();
-    assertThat(file.matchFilePattern("**/*.java")).isTrue();
+  @Test(expected = UnsupportedOperationException.class)
+  public void fromIoFile1() {
+    JavaFile.fromIOFile(null, (Project) null, true);
   }
 
-  @Test
-  public void should_exclude_test_files() {
-    JavaFile unitTest = JavaFile.create("src/main/java/org/sonar/commons/Foo.java", "org/sonar/commons/Foo.java", true);
-    assertThat(unitTest.matchFilePattern("**/*")).isTrue();
+  @Test(expected = UnsupportedOperationException.class)
+  public void fromIoFile2() {
+    JavaFile.fromIOFile(null, (List<java.io.File>) null, true);
   }
 
-  private File newDir(String dirName) {
-    return tempFolder.newFolder(dirName);
+  @Test(expected = UnsupportedOperationException.class)
+  public void fromRelativePath() {
+    JavaFile.fromRelativePath("", false);
   }
 
-  private String absPath(File dir, String filePath) {
-    return new File(dir, filePath).getPath();
+  @Test(expected = UnsupportedOperationException.class)
+  public void fromAbsolutePath() {
+    JavaFile.fromAbsolutePath("", (List<java.io.File>) null, false);
   }
 }
index e4cfd63d15b3cdece094bd2739ea5e3f7a73233a..10479b91229e93c3b10a0b6e22f98db862b76f33 100644 (file)
@@ -21,38 +21,58 @@ package org.sonar.api.resources;
 
 import org.junit.Test;
 
-import static org.hamcrest.CoreMatchers.is;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertThat;
-
 public class JavaPackageTest {
-  @Test
-  public void defaultPackageDeprecatedConstructor() {
-    assertEquals(new JavaPackage(), new JavaPackage());
-    assertEquals(Directory.ROOT, new JavaPackage(null).getDeprecatedKey());
-    assertEquals(Directory.ROOT, new JavaPackage("").getDeprecatedKey());
-    assertThat(new JavaPackage(null).isDefault(), is(true));
+
+  JavaPackage javaPackage = new JavaPackage();
+
+  @Test(expected = UnsupportedOperationException.class)
+  public void testConstructor() {
+    new JavaPackage("");
+  }
+
+  @Test(expected = UnsupportedOperationException.class)
+  public void testGetParent() {
+    javaPackage.getParent();
+  }
+
+  @Test(expected = UnsupportedOperationException.class)
+  public void testGetDescription() {
+    javaPackage.getDescription();
+  }
+
+  @Test(expected = UnsupportedOperationException.class)
+  public void testGetLanguage() {
+    javaPackage.getLanguage();
+  }
+
+  @Test(expected = UnsupportedOperationException.class)
+  public void testGetName() {
+    javaPackage.getName();
+  }
+
+  @Test(expected = UnsupportedOperationException.class)
+  public void testGetLongName() {
+    javaPackage.getLongName();
+  }
+
+  @Test(expected = UnsupportedOperationException.class)
+  public void testGetScope() {
+    javaPackage.getScope();
   }
 
-  @Test
-  public void testNewPackageDeprecatedConstructor() {
-    assertEquals(new JavaPackage(" foo.bar   "), new JavaPackage("foo.bar"));
-    JavaPackage pac = new JavaPackage("foo.bar");
-    assertEquals("foo/bar", pac.getDeprecatedKey());
+  @Test(expected = UnsupportedOperationException.class)
+  public void testGetQualifier() {
+    javaPackage.getQualifier();
   }
 
-  @Test
-  public void singleLevelPackageDeprecatedConstructor() {
-    assertEquals(new JavaPackage("foo"), new JavaPackage("foo"));
-    JavaPackage pac = new JavaPackage("foo");
-    assertEquals("foo", pac.getDeprecatedKey());
+  @Test(expected = UnsupportedOperationException.class)
+  public void testIsUnitTest() {
+    javaPackage.isDefault();
   }
 
-  @Test
-  public void shouldNotMatchFilePatterns() {
-    JavaPackage pac = new JavaPackage("org.sonar.commons");
-    assertFalse(pac.matchFilePattern("**"));
+  @Test(expected = UnsupportedOperationException.class)
+  public void testMathFilePattern() {
+    javaPackage.matchFilePattern("");
   }
 
 }
index 48bf282c431e3acfc4ac3854d89889fa89f33680..8573d4c834c8a6c9023451fb5d2354d894bc040d 100644 (file)
@@ -24,7 +24,6 @@ import org.junit.Test;
 import org.sonar.api.batch.SensorContext;
 import org.sonar.api.measures.CoreMetrics;
 import org.sonar.api.measures.Measure;
-import org.sonar.api.resources.JavaFile;
 import org.sonar.api.resources.JavaPackage;
 import org.sonar.api.resources.Qualifiers;
 import org.sonar.api.resources.Resource;
@@ -59,7 +58,7 @@ public class CoberturaReportParserUtilsTest {
 
     @Override
     public Resource resolve(String filename) {
-      return new JavaFile(filename);
+      return new org.sonar.api.resources.File(filename);
     }
   };
 
@@ -110,20 +109,20 @@ public class CoberturaReportParserUtilsTest {
 
   @Test
   public void collectFileLineCoverage() throws URISyntaxException {
-    when(context.getResource(any(Resource.class))).thenReturn(new JavaFile("org.sonar.MyClass"));
+    when(context.getResource(any(Resource.class))).thenReturn(new org.sonar.api.resources.File("org.sonar.MyClass"));
     CoberturaReportParserUtils.parseReport(getCoverageReport(), context, JAVA_FILE_RESOLVER);
 
-    final JavaFile file = new JavaFile("org.apache.commons.chain.config.ConfigParser");
+    final org.sonar.api.resources.File file = new org.sonar.api.resources.File("org.apache.commons.chain.config.ConfigParser");
     verify(context).saveMeasure(eq(file), argThat(new IsMeasure(CoreMetrics.LINES_TO_COVER, 30.0)));
     verify(context).saveMeasure(eq(file), argThat(new IsMeasure(CoreMetrics.UNCOVERED_LINES, 5.0)));
   }
 
   @Test
   public void collectFileBranchCoverage() throws URISyntaxException {
-    when(context.getResource(any(Resource.class))).thenReturn(new JavaFile("org.sonar.MyClass"));
+    when(context.getResource(any(Resource.class))).thenReturn(new org.sonar.api.resources.File("org.sonar.MyClass"));
     CoberturaReportParserUtils.parseReport(getCoverageReport(), context, JAVA_FILE_RESOLVER);
 
-    final JavaFile file = new JavaFile("org.apache.commons.chain.config.ConfigParser");
+    final org.sonar.api.resources.File file = new org.sonar.api.resources.File("org.apache.commons.chain.config.ConfigParser");
     verify(context).saveMeasure(eq(file), argThat(new IsMeasure(CoreMetrics.CONDITIONS_TO_COVER, 6.0)));
     verify(context).saveMeasure(eq(file), argThat(new IsMeasure(CoreMetrics.UNCOVERED_CONDITIONS, 2.0)));
   }
@@ -139,7 +138,7 @@ public class CoberturaReportParserUtilsTest {
   public void javaInterfaceHasNoCoverage() throws URISyntaxException {
     CoberturaReportParserUtils.parseReport(getCoverageReport(), context, JAVA_FILE_RESOLVER);
 
-    final JavaFile interfaze = new JavaFile("org.apache.commons.chain.Chain");
+    final org.sonar.api.resources.File interfaze = new org.sonar.api.resources.File("org.apache.commons.chain.Chain");
     verify(context, never()).saveMeasure(eq(interfaze), argThat(new IsMeasure(CoreMetrics.COVERAGE)));
 
     verify(context, never()).saveMeasure(eq(interfaze), argThat(new IsMeasure(CoreMetrics.LINE_COVERAGE)));
@@ -155,7 +154,7 @@ public class CoberturaReportParserUtilsTest {
   public void shouldInsertCoverageAtFileLevel() throws URISyntaxException {
     File coverage = new File(getClass().getResource(
       "/org/sonar/api/utils/CoberturaReportParserUtilsTest/shouldInsertCoverageAtFileLevel/coverage.xml").toURI());
-    when(context.getResource(any(Resource.class))).thenReturn(new JavaFile("org.sonar.MyClass"));
+    when(context.getResource(any(Resource.class))).thenReturn(new org.sonar.api.resources.File("org.sonar.MyClass"));
     CoberturaReportParserUtils.parseReport(coverage, context, JAVA_FILE_RESOLVER);
 
     verify(context).saveMeasure(argThat(new IsResource(Scopes.FILE, Qualifiers.FILE, "org.sonar.samples.InnerClass")),
@@ -196,7 +195,7 @@ public class CoberturaReportParserUtilsTest {
 
     verify(context)
       .saveMeasure(
-        eq(new JavaFile("org.sonar.samples.InnerClass")),
+        eq(new org.sonar.api.resources.File("org.sonar.samples.InnerClass")),
         argThat(new IsMeasure(
           CoreMetrics.COVERAGE_LINE_HITS_DATA,
           "22=2;25=0;26=0;29=0;30=0;31=0;34=1;35=1;36=1;37=0;39=1;41=1;44=2;46=1;47=1;50=0;51=0;52=0;53=0;55=0;57=0;60=0;61=0;64=1;71=1;73=1;76=0;77=0;80=0;81=0;85=0;87=0;91=0;93=0;96=1")));
@@ -204,10 +203,10 @@ public class CoberturaReportParserUtilsTest {
 
   @Test
   public void collectFileLineHitsData() throws URISyntaxException {
-    when(context.getResource(any(Resource.class))).thenReturn(new JavaFile("org.sonar.MyClass"));
+    when(context.getResource(any(Resource.class))).thenReturn(new org.sonar.api.resources.File("org.sonar.MyClass"));
     CoberturaReportParserUtils.parseReport(getCoverageReport(), context, JAVA_FILE_RESOLVER);
     verify(context).saveMeasure(
-      eq(new JavaFile("org.apache.commons.chain.impl.CatalogBase")),
+      eq(new org.sonar.api.resources.File("org.apache.commons.chain.impl.CatalogBase")),
       argThat(new IsMeasure(CoreMetrics.COVERAGE_LINE_HITS_DATA,
         "48=117;56=234;66=0;67=0;68=0;84=999;86=999;98=318;111=18;121=0;122=0;125=0;126=0;127=0;128=0;131=0;133=0")));
   }
@@ -215,7 +214,7 @@ public class CoberturaReportParserUtilsTest {
   @Test
   public void shouldNotCountTwiceAnonymousClasses() throws URISyntaxException {
     File coverage = new File(getClass().getResource("/org/sonar/api/utils/CoberturaReportParserUtilsTest/shouldNotCountTwiceAnonymousClasses.xml").toURI());
-    when(context.getResource(any(Resource.class))).thenReturn(new JavaFile("org.sonar.samples.MyClass"));
+    when(context.getResource(any(Resource.class))).thenReturn(new org.sonar.api.resources.File("org.sonar.samples.MyClass"));
     CoberturaReportParserUtils.parseReport(coverage, context, JAVA_FILE_RESOLVER);
 
     verify(context).saveMeasure(argThat(new IsResource(Scopes.FILE, Qualifiers.FILE, "org.sonar.samples.MyFile")),