KT-1643 Don't overwrite Kotlin run configurations on every run
#KT-1643 fixed
This commit is contained in:
@@ -21,6 +21,7 @@ import com.intellij.execution.RunnerAndConfigurationSettings;
|
||||
import com.intellij.execution.actions.ConfigurationContext;
|
||||
import com.intellij.execution.junit.RuntimeConfigurationProducer;
|
||||
import com.intellij.openapi.module.Module;
|
||||
import com.intellij.openapi.util.Comparing;
|
||||
import com.intellij.openapi.util.text.StringUtil;
|
||||
import com.intellij.psi.PsiElement;
|
||||
import com.intellij.psi.PsiFile;
|
||||
@@ -56,19 +57,31 @@ public class JetRunConfigurationProducer extends RuntimeConfigurationProducer im
|
||||
return null;
|
||||
}
|
||||
|
||||
FqName startClassFQName = getStartClassFQName(location);
|
||||
if (startClassFQName == null) {
|
||||
return null;
|
||||
}
|
||||
|
||||
return createConfigurationByQName(module, configurationContext, startClassFQName);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
private FqName getStartClassFQName(Location location) {
|
||||
PsiFile psiFile = location.getPsiElement().getContainingFile();
|
||||
if (psiFile instanceof JetFile) {
|
||||
JetFile jetFile = (JetFile) psiFile;
|
||||
if (JetMainDetector.hasMain(jetFile.getDeclarations())) {
|
||||
mySourceElement = jetFile;
|
||||
FqName fqName = JetPsiUtil.getFQName(jetFile);
|
||||
FqName className = fqName.child(JvmAbi.PACKAGE_CLASS);
|
||||
return createConfigurationByQName(module, configurationContext, className);
|
||||
return fqName.child(JvmAbi.PACKAGE_CLASS);
|
||||
}
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
|
||||
@NotNull
|
||||
private RunnerAndConfigurationSettings createConfigurationByQName(
|
||||
@NotNull Module module,
|
||||
ConfigurationContext context,
|
||||
@@ -82,6 +95,30 @@ public class JetRunConfigurationProducer extends RuntimeConfigurationProducer im
|
||||
return settings;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected RunnerAndConfigurationSettings findExistingByElement(
|
||||
Location location,
|
||||
@NotNull RunnerAndConfigurationSettings[] existingConfigurations,
|
||||
ConfigurationContext context
|
||||
) {
|
||||
FqName startClassFQName = getStartClassFQName(location);
|
||||
if (startClassFQName == null) {
|
||||
return null;
|
||||
}
|
||||
|
||||
for (RunnerAndConfigurationSettings existingConfiguration : existingConfigurations) {
|
||||
if (existingConfiguration.getType() instanceof JetRunConfigurationType) {
|
||||
JetRunConfiguration jetConfiguration = (JetRunConfiguration)existingConfiguration.getConfiguration();
|
||||
if (Comparing.equal(jetConfiguration.settings().getMainClassName(), startClassFQName.getFqName())) {
|
||||
if (Comparing.equal(location.getModule(), jetConfiguration.getConfigurationModule().getModule())) {
|
||||
return existingConfiguration;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int compareTo(Object o) {
|
||||
return PREFERED;
|
||||
|
||||
Reference in New Issue
Block a user