aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--plugins/sonar-maven-batch-plugin/src/main/java/org/sonar/plugins/maven/MavenProjectConverter.java84
1 files changed, 51 insertions, 33 deletions
diff --git a/plugins/sonar-maven-batch-plugin/src/main/java/org/sonar/plugins/maven/MavenProjectConverter.java b/plugins/sonar-maven-batch-plugin/src/main/java/org/sonar/plugins/maven/MavenProjectConverter.java
index 546ed8a5714..fd9fa8064da 100644
--- a/plugins/sonar-maven-batch-plugin/src/main/java/org/sonar/plugins/maven/MavenProjectConverter.java
+++ b/plugins/sonar-maven-batch-plugin/src/main/java/org/sonar/plugins/maven/MavenProjectConverter.java
@@ -34,6 +34,7 @@ import org.sonar.api.CoreProperties;
import org.sonar.api.batch.bootstrap.ProjectDefinition;
import org.sonar.api.batch.maven.MavenUtils;
import org.sonar.api.task.TaskExtension;
+import org.sonar.api.utils.MessageException;
import org.sonar.batch.scan.filesystem.DefaultModuleFileSystem;
import org.sonar.java.api.JavaUtils;
@@ -195,8 +196,8 @@ public class MavenProjectConverter implements TaskExtension {
into.setBuildDir(buildDir);
into.setWorkDir(getSonarWorkDir(pom));
}
- into.setSourceDirs(filterExisting(sourceDirs(pom)));
- into.setTestDirs(filterExisting(testDirs(pom)));
+ into.setSourceDirs(toPaths(mainDirs(pom)));
+ into.setTestDirs(toPaths(testDirs(pom)));
File binaryDir = resolvePath(pom.getBuild().getOutputDirectory(), pom.getBasedir());
if (binaryDir != null) {
into.addBinaryDir(binaryDir);
@@ -211,34 +212,18 @@ public class MavenProjectConverter implements TaskExtension {
return resolvePath(pom.getBuild().getDirectory(), pom.getBasedir());
}
- private static String[] filterExisting(List<File> files) {
- Collection<File> filtered = Collections2.filter(files, new Predicate<File>() {
- @Override
- public boolean apply(File file) {
- return file != null && file.exists();
- }
- });
- Collection<String> paths = Collections2.transform(filtered, new Function<File, String>() {
- @Override
- public String apply(File file) {
- return file.getAbsolutePath();
- }
- });
- return paths.toArray(new String[paths.size()]);
- }
-
public void synchronizeFileSystem(MavenProject pom, DefaultModuleFileSystem into) {
into.resetDirs(
pom.getBasedir(),
getBuildDir(pom),
- sourceDirs(pom),
+ mainDirs(pom),
testDirs(pom),
Arrays.asList(resolvePath(pom.getBuild().getOutputDirectory(), pom.getBasedir())));
}
static File resolvePath(@Nullable String path, File basedir) {
if (path != null) {
- File file = new File(path);
+ File file = new File(StringUtils.trim(path));
if (!file.isAbsolute()) {
try {
file = new File(basedir, path).getCanonicalFile();
@@ -262,25 +247,58 @@ public class MavenProjectConverter implements TaskExtension {
return result;
}
- List<File> sourceDirs(MavenProject pom) {
+ private List<File> mainDirs(MavenProject pom) {
+ return sourceDirs(pom, ProjectDefinition.SOURCE_DIRS_PROPERTY, pom.getCompileSourceRoots());
+ }
+
+ private List<File> testDirs(MavenProject pom) {
+ return sourceDirs(pom, ProjectDefinition.TEST_DIRS_PROPERTY, pom.getTestCompileSourceRoots());
+ }
+
+ private List<File> sourceDirs(MavenProject pom, String propertyKey, List mavenDirs) {
List<String> paths;
- String prop = pom.getProperties().getProperty(ProjectDefinition.SOURCE_DIRS_PROPERTY);
+ String prop = pom.getProperties().getProperty(propertyKey);
if (prop != null) {
paths = Arrays.asList(StringUtils.split(prop, ","));
- } else {
- paths = pom.getCompileSourceRoots();
+ // do not remove dirs that do not exist. They must be kept in order to
+ // notify users that value of sonar.sources has a typo.
+ return existingDirsOrFail(resolvePaths(paths, pom.getBasedir()), pom, propertyKey);
}
- return resolvePaths(paths, pom.getBasedir());
+
+ List<File> dirs = resolvePaths(mavenDirs, pom.getBasedir());
+
+ // Maven provides some directories that do not exist. They
+ // should be removed
+ return keepExistingDirs(dirs);
}
- List<File> testDirs(MavenProject pom) {
- List<String> paths;
- String prop = pom.getProperties().getProperty(ProjectDefinition.TEST_DIRS_PROPERTY);
- if (prop != null) {
- paths = Arrays.asList(StringUtils.split(prop, ","));
- } else {
- paths = pom.getTestCompileSourceRoots();
+ private List<File> existingDirsOrFail(List<File> dirs, MavenProject pom, String propertyKey) {
+ for (File dir : dirs) {
+ if (!dir.isDirectory() || !dir.exists()) {
+ throw MessageException.of(String.format(
+ "The directory '%s' does not exist for Maven module %s. Please check the property %s",
+ dir.getAbsolutePath(), pom.getId(), propertyKey));
+ }
}
- return resolvePaths(paths, pom.getBasedir());
+ return dirs;
+ }
+
+ private static List<File> keepExistingDirs(List<File> files) {
+ return Lists.newArrayList(Collections2.filter(files, new Predicate<File>() {
+ @Override
+ public boolean apply(File dir) {
+ return dir != null && dir.exists() && dir.isDirectory();
+ }
+ }));
+ }
+
+ private static String[] toPaths(Collection<File> dirs) {
+ Collection<String> paths = Collections2.transform(dirs, new Function<File, String>() {
+ @Override
+ public String apply(File dir) {
+ return dir.getAbsolutePath();
+ }
+ });
+ return paths.toArray(new String[paths.size()]);
}
}