aboutsummaryrefslogtreecommitdiffstats
path: root/plugins/sonar-maven-batch-plugin
diff options
context:
space:
mode:
authorJulien HENRY <julien.henry@sonarsource.com>2013-06-26 11:30:53 +0200
committerJulien HENRY <julien.henry@sonarsource.com>2013-06-26 11:31:12 +0200
commit61e3e7a2551b42c4ede37cbdee5392e1d93d6a31 (patch)
treea0753923bcb00bd84abace89fed5177e5aa74367 /plugins/sonar-maven-batch-plugin
parentaae644fd6f1344fa9f304627335534485862ac04 (diff)
downloadsonarqube-61e3e7a2551b42c4ede37cbdee5392e1d93d6a31.tar.gz
sonarqube-61e3e7a2551b42c4ede37cbdee5392e1d93d6a31.zip
Fix some quality flaws
Diffstat (limited to 'plugins/sonar-maven-batch-plugin')
-rw-r--r--plugins/sonar-maven-batch-plugin/src/main/java/org/sonar/plugins/maven/MavenProjectBootstrapper.java7
-rw-r--r--plugins/sonar-maven-batch-plugin/src/main/java/org/sonar/plugins/maven/MavenProjectConverter.java63
-rw-r--r--plugins/sonar-maven-batch-plugin/src/main/java/org/sonar/plugins/maven/RealMavenPluginExecutor.java39
3 files changed, 66 insertions, 43 deletions
diff --git a/plugins/sonar-maven-batch-plugin/src/main/java/org/sonar/plugins/maven/MavenProjectBootstrapper.java b/plugins/sonar-maven-batch-plugin/src/main/java/org/sonar/plugins/maven/MavenProjectBootstrapper.java
index 48fbdb91058..eb1c4f69ea8 100644
--- a/plugins/sonar-maven-batch-plugin/src/main/java/org/sonar/plugins/maven/MavenProjectBootstrapper.java
+++ b/plugins/sonar-maven-batch-plugin/src/main/java/org/sonar/plugins/maven/MavenProjectBootstrapper.java
@@ -49,7 +49,12 @@ public class MavenProjectBootstrapper extends ProjectBootstrapper {
break;
}
}
- return new ProjectReactor(mavenProjectConverter.configure(sortedProjects, topLevelProject));
+ if (topLevelProject != null && sortedProjects != null) {
+ return new ProjectReactor(mavenProjectConverter.configure(sortedProjects, topLevelProject));
+ }
+ else {
+ throw new IllegalStateException("Maven session is not in a good state. No top level project or empty reactor.");
+ }
}
}
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 c6ac61c728d..bc605474136 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
@@ -37,6 +37,8 @@ import org.sonar.api.utils.SonarException;
import org.sonar.batch.scan.filesystem.DefaultModuleFileSystem;
import org.sonar.java.api.JavaUtils;
+import javax.annotation.Nullable;
+
import java.io.File;
import java.io.IOException;
import java.util.Arrays;
@@ -54,31 +56,9 @@ public class MavenProjectConverter implements TaskExtension {
Map<MavenProject, ProjectDefinition> defs = Maps.newHashMap();
try {
- for (MavenProject pom : poms) {
- paths.put(pom.getFile().getCanonicalPath(), pom);
- ProjectDefinition def = ProjectDefinition.create();
- merge(pom, def);
- defs.put(pom, def);
- }
+ configureModules(poms, paths, defs);
- for (Map.Entry<String, MavenProject> entry : paths.entrySet()) {
- MavenProject pom = entry.getValue();
- for (Object m : pom.getModules()) {
- String moduleId = (String) m;
- File modulePath = new File(pom.getBasedir(), moduleId);
- MavenProject module = findMavenProject(modulePath, paths);
-
- ProjectDefinition parentProject = defs.get(pom);
- if (parentProject == null) {
- throw new IllegalStateException(UNABLE_TO_DETERMINE_PROJECT_STRUCTURE_EXCEPTION_MESSAGE);
- }
- ProjectDefinition subProject = defs.get(module);
- if (subProject == null) {
- throw new IllegalStateException(UNABLE_TO_DETERMINE_PROJECT_STRUCTURE_EXCEPTION_MESSAGE);
- }
- parentProject.addSubProject(subProject);
- }
- }
+ rebuildModuleHierarchy(paths, defs);
} catch (IOException e) {
throw new SonarException(e);
}
@@ -90,6 +70,36 @@ public class MavenProjectConverter implements TaskExtension {
return rootProject;
}
+ private void rebuildModuleHierarchy(Map<String, MavenProject> paths, Map<MavenProject, ProjectDefinition> defs) throws IOException {
+ for (Map.Entry<String, MavenProject> entry : paths.entrySet()) {
+ MavenProject pom = entry.getValue();
+ for (Object m : pom.getModules()) {
+ String moduleId = (String) m;
+ File modulePath = new File(pom.getBasedir(), moduleId);
+ MavenProject module = findMavenProject(modulePath, paths);
+
+ ProjectDefinition parentProject = defs.get(pom);
+ if (parentProject == null) {
+ throw new IllegalStateException(UNABLE_TO_DETERMINE_PROJECT_STRUCTURE_EXCEPTION_MESSAGE);
+ }
+ ProjectDefinition subProject = defs.get(module);
+ if (subProject == null) {
+ throw new IllegalStateException(UNABLE_TO_DETERMINE_PROJECT_STRUCTURE_EXCEPTION_MESSAGE);
+ }
+ parentProject.addSubProject(subProject);
+ }
+ }
+ }
+
+ private void configureModules(List<MavenProject> poms, Map<String, MavenProject> paths, Map<MavenProject, ProjectDefinition> defs) throws IOException {
+ for (MavenProject pom : poms) {
+ paths.put(pom.getFile().getCanonicalPath(), pom);
+ ProjectDefinition def = ProjectDefinition.create();
+ merge(pom, def);
+ defs.put(pom, def);
+ }
+ }
+
private static MavenProject findMavenProject(final File modulePath, Map<String, MavenProject> paths) throws IOException {
if (modulePath.exists() && modulePath.isDirectory()) {
for (Map.Entry<String, MavenProject> entry : paths.entrySet()) {
@@ -220,11 +230,10 @@ public class MavenProjectConverter implements TaskExtension {
getBuildDir(pom),
resolvePaths((List<String>) pom.getCompileSourceRoots(), pom.getBasedir()),
resolvePaths((List<String>) pom.getTestCompileSourceRoots(), pom.getBasedir()),
- Arrays.asList(resolvePath(pom.getBuild().getOutputDirectory(), pom.getBasedir()))
- );
+ Arrays.asList(resolvePath(pom.getBuild().getOutputDirectory(), pom.getBasedir())));
}
- static File resolvePath(String path, File basedir) {
+ static File resolvePath(@Nullable String path, File basedir) {
if (path != null) {
File file = new File(path);
if (!file.isAbsolute()) {
diff --git a/plugins/sonar-maven-batch-plugin/src/main/java/org/sonar/plugins/maven/RealMavenPluginExecutor.java b/plugins/sonar-maven-batch-plugin/src/main/java/org/sonar/plugins/maven/RealMavenPluginExecutor.java
index 69a0d6b36f5..58a4440b9d8 100644
--- a/plugins/sonar-maven-batch-plugin/src/main/java/org/sonar/plugins/maven/RealMavenPluginExecutor.java
+++ b/plugins/sonar-maven-batch-plugin/src/main/java/org/sonar/plugins/maven/RealMavenPluginExecutor.java
@@ -32,6 +32,8 @@ import org.sonar.api.utils.TimeProfiler;
import org.sonar.batch.scan.filesystem.DefaultModuleFileSystem;
import org.sonar.batch.scan.maven.MavenPluginExecutor;
+import javax.annotation.Nullable;
+
import java.lang.reflect.Method;
import java.util.Arrays;
@@ -49,6 +51,9 @@ public class RealMavenPluginExecutor implements MavenPluginExecutor {
@Override
public final MavenPluginHandler execute(Project project, DefaultModuleFileSystem fs, MavenPluginHandler handler) {
for (String goal : handler.getGoals()) {
+ if (goal == null) {
+ throw new IllegalStateException("Maven goal can't be null");
+ }
MavenPlugin plugin = MavenPlugin.getPlugin(project.getPom(), handler.getGroupId(), handler.getArtifactId());
execute(project,
fs,
@@ -76,7 +81,7 @@ public class RealMavenPluginExecutor implements MavenPluginExecutor {
}
}
- static String getGoal(String groupId, String artifactId, String version, String goal) {
+ static String getGoal(String groupId, String artifactId, @Nullable String version, String goal) {
String defaultVersion = (version == null ? "" : version);
return new StringBuilder()
.append(groupId).append(":")
@@ -87,10 +92,10 @@ public class RealMavenPluginExecutor implements MavenPluginExecutor {
.toString();
}
- public void concreteExecute(MavenProject pom, String goal) throws Exception {
+ public void concreteExecute(MavenProject pom, String goal) throws SecurityException {
Method executeMethod = null;
for (Method m : lifecycleExecutor.getClass().getMethods()) {
- if (m.getName().equals("execute")) {
+ if ("execute".equals(m.getName())) {
executeMethod = m;
break;
}
@@ -123,18 +128,22 @@ public class RealMavenPluginExecutor implements MavenPluginExecutor {
}
}
- public void concreteExecuteMaven2(Method executeMethod, MavenProject pom, String goal) throws Exception {
- ReactorManager reactor = new ReactorManager(Arrays.asList(pom));
- MavenSession clonedSession = new MavenSession(mavenSession.getContainer(),
- mavenSession.getSettings(),
- mavenSession.getLocalRepository(),
- mavenSession.getEventDispatcher(),
- reactor,
- Arrays.asList(goal),
- mavenSession.getExecutionRootDirectory(),
- mavenSession.getExecutionProperties(),
- mavenSession.getStartTime());
- executeMethod.invoke(lifecycleExecutor, clonedSession, reactor, clonedSession.getEventDispatcher());
+ public void concreteExecuteMaven2(Method executeMethod, MavenProject pom, String goal) {
+ try {
+ ReactorManager reactor = new ReactorManager(Arrays.asList(pom));
+ MavenSession clonedSession = new MavenSession(mavenSession.getContainer(),
+ mavenSession.getSettings(),
+ mavenSession.getLocalRepository(),
+ mavenSession.getEventDispatcher(),
+ reactor,
+ Arrays.asList(goal),
+ mavenSession.getExecutionRootDirectory(),
+ mavenSession.getExecutionProperties(),
+ mavenSession.getStartTime());
+ executeMethod.invoke(lifecycleExecutor, clonedSession, reactor, clonedSession.getEventDispatcher());
+ } catch (Exception e) {
+ throw new SonarException("Unable to execute Maven 2 plugin", e);
+ }
}
}