Don't produce run configurations for files out of source roots
#KT-3973 Fixed
This commit is contained in:
@@ -101,6 +101,18 @@ public class JetPluginUtil {
|
||||
return ProjectFileIndex.SERVICE.getInstance(element.getProject()).isInSourceContent(virtualFile);
|
||||
}
|
||||
|
||||
public static boolean isInSource(@NotNull PsiElement element) {
|
||||
PsiFile containingFile = element.getContainingFile();
|
||||
if (containingFile == null) {
|
||||
return false;
|
||||
}
|
||||
VirtualFile virtualFile = containingFile.getVirtualFile();
|
||||
if (virtualFile == null) {
|
||||
return false;
|
||||
}
|
||||
return ProjectFileIndex.SERVICE.getInstance(element.getProject()).isInSource(virtualFile);
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public static String getPluginVersion() {
|
||||
IdeaPluginDescriptor plugin = PluginManager.getPlugin(PluginId.getId("org.jetbrains.kotlin"));
|
||||
|
||||
@@ -33,6 +33,7 @@ import com.intellij.psi.util.PsiTreeUtil;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
import org.jetbrains.jet.asJava.LightClassUtil;
|
||||
import org.jetbrains.jet.lang.psi.*;
|
||||
import org.jetbrains.jet.plugin.JetPluginUtil;
|
||||
|
||||
public class JetJUnitConfigurationProducer extends RuntimeConfigurationProducer {
|
||||
private JetElement myElement;
|
||||
@@ -50,6 +51,10 @@ public class JetJUnitConfigurationProducer extends RuntimeConfigurationProducer
|
||||
protected RunnerAndConfigurationSettings createConfigurationByElement(Location location, ConfigurationContext context) {
|
||||
PsiElement leaf = location.getPsiElement();
|
||||
|
||||
if (!JetPluginUtil.isInSource(leaf)) {
|
||||
return null;
|
||||
}
|
||||
|
||||
if (!(leaf.getContainingFile() instanceof JetFile)) {
|
||||
return null;
|
||||
}
|
||||
|
||||
@@ -32,6 +32,7 @@ import org.jetbrains.jet.lang.psi.JetPsiUtil;
|
||||
import org.jetbrains.jet.lang.resolve.java.PackageClassUtils;
|
||||
import org.jetbrains.jet.lang.resolve.name.FqName;
|
||||
import org.jetbrains.jet.plugin.JetMainDetector;
|
||||
import org.jetbrains.jet.plugin.JetPluginUtil;
|
||||
import org.jetbrains.jet.plugin.framework.KotlinFrameworkDetector;
|
||||
|
||||
import java.util.List;
|
||||
@@ -61,30 +62,31 @@ public class JetRunConfigurationProducer extends RuntimeConfigurationProducer im
|
||||
return null;
|
||||
}
|
||||
|
||||
FqName startClassFQName = getStartClassFQName(location);
|
||||
if (startClassFQName == null) {
|
||||
JetFile file = getStartClassFile(location);
|
||||
if (file == null || !JetPluginUtil.isInSource(file)) {
|
||||
return null;
|
||||
}
|
||||
|
||||
mySourceElement = file;
|
||||
|
||||
FqName startClassFQName = PackageClassUtils.getPackageClassFqName(JetPsiUtil.getFQName(file));
|
||||
|
||||
return createConfigurationByQName(module, configurationContext, startClassFQName);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
private FqName getStartClassFQName(Location location) {
|
||||
private static JetFile getStartClassFile(@NotNull 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);
|
||||
return PackageClassUtils.getPackageClassFqName(fqName);
|
||||
return jetFile;
|
||||
}
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
|
||||
@NotNull
|
||||
private RunnerAndConfigurationSettings createConfigurationByQName(
|
||||
@NotNull Module module,
|
||||
@@ -105,11 +107,13 @@ public class JetRunConfigurationProducer extends RuntimeConfigurationProducer im
|
||||
@NotNull List<RunnerAndConfigurationSettings> existingConfigurations,
|
||||
ConfigurationContext context
|
||||
) {
|
||||
FqName startClassFQName = getStartClassFQName(location);
|
||||
if (startClassFQName == null) {
|
||||
JetFile file = getStartClassFile(location);
|
||||
if (file == null) {
|
||||
return null;
|
||||
}
|
||||
|
||||
FqName startClassFQName = PackageClassUtils.getPackageClassFqName(JetPsiUtil.getFQName(file));
|
||||
|
||||
for (RunnerAndConfigurationSettings existingConfiguration : existingConfigurations) {
|
||||
if (existingConfiguration.getType() instanceof JetRunConfigurationType) {
|
||||
JetRunConfiguration jetConfiguration = (JetRunConfiguration)existingConfiguration.getConfiguration();
|
||||
|
||||
@@ -34,6 +34,7 @@ import com.theoryinpractice.testng.util.TestNGUtil;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
import org.jetbrains.jet.asJava.LightClassUtil;
|
||||
import org.jetbrains.jet.lang.psi.*;
|
||||
import org.jetbrains.jet.plugin.JetPluginUtil;
|
||||
|
||||
public class JetTestNgConfigurationProducer extends TestNGConfigurationProducer {
|
||||
@Override
|
||||
@@ -51,6 +52,10 @@ public class JetTestNgConfigurationProducer extends TestNGConfigurationProducer
|
||||
Project project = context.getProject();
|
||||
PsiElement leaf = location.getPsiElement();
|
||||
|
||||
if (!JetPluginUtil.isInSource(leaf)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (!(leaf.getContainingFile() instanceof JetFile)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user