Don't produce run configurations for files out of source roots

#KT-3973 Fixed
This commit is contained in:
Alexander Udalov
2013-09-06 18:42:41 +04:00
parent f63e3da594
commit f700266b11
4 changed files with 35 additions and 9 deletions
@@ -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;
}