diff options
author | Julien HENRY <julien.henry@sonarsource.com> | 2013-06-26 11:30:53 +0200 |
---|---|---|
committer | Julien HENRY <julien.henry@sonarsource.com> | 2013-06-26 11:31:12 +0200 |
commit | 61e3e7a2551b42c4ede37cbdee5392e1d93d6a31 (patch) | |
tree | a0753923bcb00bd84abace89fed5177e5aa74367 /plugins/sonar-maven-batch-plugin | |
parent | aae644fd6f1344fa9f304627335534485862ac04 (diff) | |
download | sonarqube-61e3e7a2551b42c4ede37cbdee5392e1d93d6a31.tar.gz sonarqube-61e3e7a2551b42c4ede37cbdee5392e1d93d6a31.zip |
Fix some quality flaws
Diffstat (limited to 'plugins/sonar-maven-batch-plugin')
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); + } } } |