blob: 203d797518008c733ab49dfc25b2f2ccfad12eac [file] [log] [blame]
package org.jetbrains.idea.maven.execution;
import com.intellij.codeInsight.completion.CompletionResultSet;
import com.intellij.codeInsight.lookup.LookupElement;
import com.intellij.openapi.project.Project;
import groovyjarjarcommonscli.OptionBuilder;
import groovyjarjarcommonscli.Options;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.idea.maven.execution.cmd.CommandLineCompletionProvider;
import org.jetbrains.idea.maven.project.MavenProjectsManager;
import org.jetbrains.idea.maven.utils.MavenUtil;
import java.util.List;
/**
* @author Sergey Evdokimov
*/
@SuppressWarnings("AccessStaticViaInstance")
public class MavenArgumentsCompletionProvider extends CommandLineCompletionProvider {
private static final Options ourOptions;
static {
// Copy pasted from org.apache.maven.cli.CLIManager.<init>()
Options options = new Options();
options.addOption(OptionBuilder.withLongOpt("help").withDescription("Display help information").create('h'));
options.addOption(
OptionBuilder.withLongOpt("file").hasArg().withDescription("Force the use of an alternate POM file (or directory with pom.xml).")
.create(
'f'));
options.addOption(OptionBuilder.withLongOpt("define").hasArg().withDescription("Define a system property").create('D'));
options.addOption(OptionBuilder.withLongOpt("offline").withDescription("Work offline").create('o'));
options.addOption(OptionBuilder.withLongOpt("version").withDescription("Display version information").create('v'));
options.addOption(OptionBuilder.withLongOpt("quiet").withDescription("Quiet output - only show errors").create('q'));
options.addOption(OptionBuilder.withLongOpt("debug").withDescription("Produce execution debug output").create('X'));
options.addOption(OptionBuilder.withLongOpt("errors").withDescription("Produce execution error messages").create('e'));
options.addOption(OptionBuilder.withLongOpt("non-recursive").withDescription("Do not recurse into sub-projects").create('N'));
options.addOption(OptionBuilder.withLongOpt("update-snapshots")
.withDescription("Forces a check for updated releases and snapshots on remote repositories").create(
'U'));
options.addOption(
OptionBuilder.withLongOpt("activate-profiles").withDescription("Comma-delimited list of profiles to activate").hasArg().create(
'P'));
options.addOption(OptionBuilder.withLongOpt("batch-mode").withDescription("Run in non-interactive (batch) mode").create('B'));
options.addOption(OptionBuilder.withLongOpt("no-snapshot-updates").withDescription("Suppress SNAPSHOT updates").create("nsu"));
options.addOption(OptionBuilder.withLongOpt("strict-checksums").withDescription("Fail the build if checksums don't match").create(
'C'));
options.addOption(OptionBuilder.withLongOpt("lax-checksums").withDescription("Warn if checksums don't match").create('c'));
options.addOption(OptionBuilder.withLongOpt("settings").withDescription("Alternate path for the user settings file").hasArg().create(
's'));
options.addOption(
OptionBuilder.withLongOpt("global-settings").withDescription("Alternate path for the global settings file").hasArg().create(
"gs"));
options
.addOption(OptionBuilder.withLongOpt("toolchains").withDescription("Alternate path for the user toolchains file").hasArg().create(
't'));
options.addOption(OptionBuilder.withLongOpt("fail-fast").withDescription("Stop at first failure in reactorized builds").create(
"ff"));
options.addOption(
OptionBuilder.withLongOpt("fail-at-end").withDescription("Only fail the build afterwards; allow all non-impacted builds to continue")
.create(
"fae"));
options.addOption(OptionBuilder.withLongOpt("fail-never").withDescription("NEVER fail the build, regardless of project result").create(
"fn"));
options.addOption(OptionBuilder.withLongOpt("resume-from").hasArg().withDescription("Resume reactor from specified project").create(
"rf"));
options.addOption(OptionBuilder.withLongOpt("projects").withDescription(
"Comma-delimited list of specified reactor projects to build instead of all projects. A project can be specified by [groupId]:artifactId or by its relative path.")
.hasArg().create(
"pl"));
options.addOption(
OptionBuilder.withLongOpt("also-make").withDescription("If project list is specified, also build projects required by the list")
.create(
"am"));
options.addOption(OptionBuilder.withLongOpt("also-make-dependents")
.withDescription("If project list is specified, also build projects that depend on projects on the list").create(
"amd"));
options.addOption(OptionBuilder.withLongOpt("log-file").hasArg().withDescription("Log file to where all build output will go.").create(
"l"));
options
.addOption(OptionBuilder.withLongOpt("show-version").withDescription("Display version information WITHOUT stopping build").create(
'V'));
options
.addOption(OptionBuilder.withLongOpt("encrypt-master-password").hasArg().withDescription("Encrypt master security password").create(
"emp"));
options.addOption(OptionBuilder.withLongOpt("encrypt-password").hasArg().withDescription("Encrypt server password").create(
"ep"));
options.addOption(
OptionBuilder.withLongOpt("threads").hasArg().withDescription("Thread count, for instance 2.0C where C is core multiplied").create(
"T"));
ourOptions = options;
}
private volatile List<LookupElement> myCachedElements;
private final Project myProject;
public MavenArgumentsCompletionProvider(@NotNull Project project) {
super(ourOptions);
myProject = project;
}
@Override
protected void addArgumentVariants(@NotNull CompletionResultSet result) {
List<LookupElement> cachedElements = myCachedElements;
if (cachedElements == null) {
cachedElements = MavenUtil.getPhaseVariants(MavenProjectsManager.getInstance(myProject));
myCachedElements = cachedElements;
}
result.addAllElements(cachedElements);
}
}