package com.lightd.ideap.maven.execution;
import com.intellij.execution.actions.ConfigurationContext;
import com.intellij.execution.junit.JUnitUtil;
import com.intellij.psi.util.PsiMethodUtil;
import com.lightd.ideap.maven.MvnBundle;
import com.lightd.ideap.maven.RunType;
import java.util.ArrayList;
import java.util.List;
public class MvnRunConfigurationProducer extends JavaElementConfigurationProducer {
protected boolean isTestScope;
@Override
protected boolean initContext(ConfigurationContext context) {
isTestScope = true;
if (super.initContext(context) && psiClass != null) {
isTestScope = JUnitUtil.isTestClass(psiClass);
return true;
}
return false;
}
@Override
protected boolean isContext(ConfigurationContext context) {
return super.isContext(context) && !isTestScope &&
psiClass != null && PsiMethodUtil.hasMainMethod(psiClass);
}
@Override
protected String generateName() {
return super.generateName() + ".main";
}
@Override
protected RunType getRunType() {
return RunType.Main;
}
@Override
protected List<String> generateMvnParameters() {
List<String> parameters = new ArrayList<String>();
if (isTestScope)
parameters.add(MvnBundle.message("mvn.param.test.compile"));
else
parameters.add(MvnBundle.message("mvn.param.compile"));
parameters.add(MvnBundle.message("mvn.param.exec"));
parameters.add(MvnBundle.message("mvn.param.exec.main", psiClass.getQualifiedName()));
if (isTestScope)
parameters.add(MvnBundle.message("mvn.param.test.classpath.scope"));
return parameters;
}
@Override
protected boolean isSameParameters(List<String> parameters, List<String> configParameters) {
String mvnExec = MvnBundle.message("mvn.param.exec");
if (parameters.contains(mvnExec) && configParameters.contains(mvnExec)) {
String prefix = MvnBundle.message("mvn.param.exec.main", "");
String param = findByPrefix(parameters, prefix);
return param.length() > 0 && param.equals(findByPrefix(configParameters, prefix));
}
return false;
}
}