public boolean perform(AbstractBuild<?, ?> build, Launcher launcher, BuildListener listener) throws IOException, InterruptedException {
if (!isSonarInstallationValid(getInstallationName(), listener)) {
return false;
}
ArgumentListBuilder args = new ArgumentListBuilder();
EnvVars env = build.getEnvironment(listener);
env.overrideAll(build.getBuildVariables());
SonarRunnerInstallation sri = getSonarRunnerInstallation();
if (sri == null) {
args.add(launcher.isUnix() ? "sonar-runner" : "sonar-runner.bat");
} else {
sri = sri.forNode(Computer.currentComputer().getNode(), listener);
sri = sri.forEnvironment(env);
String exe = sri.getExecutable(launcher);
if (exe == null) {
Logger.printFailureMessage(listener);
listener.fatalError(Messages.SonarRunner_ExecutableNotFound(sri.getName()));
return false;
}
args.add(exe);
env.put("SONAR_RUNNER_HOME", sri.getHome());
}
addTaskArgument(args);
ExtendedArgumentListBuilder argsBuilder = new ExtendedArgumentListBuilder(args, launcher.isUnix());
if (!populateConfiguration(argsBuilder, build, listener, env, getSonarInstallation())) {