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.actions.ConfigurationContext;
|
||||||
import com.intellij.execution.junit.RuntimeConfigurationProducer;
|
import com.intellij.execution.junit.RuntimeConfigurationProducer;
|
||||||
import com.intellij.openapi.module.Module;
|
import com.intellij.openapi.module.Module;
|
||||||
|
import com.intellij.openapi.util.Comparing;
|
||||||
import com.intellij.openapi.util.text.StringUtil;
|
import com.intellij.openapi.util.text.StringUtil;
|
||||||
import com.intellij.psi.PsiElement;
|
import com.intellij.psi.PsiElement;
|
||||||
import com.intellij.psi.PsiFile;
|
import com.intellij.psi.PsiFile;
|
||||||
@@ -56,19 +57,31 @@ public class JetRunConfigurationProducer extends RuntimeConfigurationProducer im
|
|||||||
return null;
|
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();
|
PsiFile psiFile = location.getPsiElement().getContainingFile();
|
||||||
if (psiFile instanceof JetFile) {
|
if (psiFile instanceof JetFile) {
|
||||||
JetFile jetFile = (JetFile) psiFile;
|
JetFile jetFile = (JetFile) psiFile;
|
||||||
if (JetMainDetector.hasMain(jetFile.getDeclarations())) {
|
if (JetMainDetector.hasMain(jetFile.getDeclarations())) {
|
||||||
mySourceElement = jetFile;
|
mySourceElement = jetFile;
|
||||||
FqName fqName = JetPsiUtil.getFQName(jetFile);
|
FqName fqName = JetPsiUtil.getFQName(jetFile);
|
||||||
FqName className = fqName.child(JvmAbi.PACKAGE_CLASS);
|
return fqName.child(JvmAbi.PACKAGE_CLASS);
|
||||||
return createConfigurationByQName(module, configurationContext, className);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@NotNull
|
||||||
private RunnerAndConfigurationSettings createConfigurationByQName(
|
private RunnerAndConfigurationSettings createConfigurationByQName(
|
||||||
@NotNull Module module,
|
@NotNull Module module,
|
||||||
ConfigurationContext context,
|
ConfigurationContext context,
|
||||||
@@ -82,6 +95,30 @@ public class JetRunConfigurationProducer extends RuntimeConfigurationProducer im
|
|||||||
return settings;
|
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
|
@Override
|
||||||
public int compareTo(Object o) {
|
public int compareTo(Object o) {
|
||||||
return PREFERED;
|
return PREFERED;
|
||||||
|
|||||||
Reference in New Issue
Block a user