diff --git a/java/execution/openapi/src/com/intellij/execution/JavaExecutionUtil.java b/java/execution/openapi/src/com/intellij/execution/JavaExecutionUtil.java index 453cbcb0d6cd..e3fd53132f1d 100644 --- a/java/execution/openapi/src/com/intellij/execution/JavaExecutionUtil.java +++ b/java/execution/openapi/src/com/intellij/execution/JavaExecutionUtil.java @@ -28,13 +28,14 @@ import com.intellij.openapi.module.Module; import com.intellij.openapi.module.ModuleUtilCore; import com.intellij.openapi.project.DumbService; import com.intellij.openapi.project.Project; +import com.intellij.openapi.roots.ProjectFileIndex; +import com.intellij.openapi.roots.ProjectRootManager; import com.intellij.openapi.util.Condition; import com.intellij.openapi.util.text.StringUtil; +import com.intellij.openapi.vfs.VirtualFile; import com.intellij.psi.*; import com.intellij.psi.search.GlobalSearchScope; -import com.intellij.psi.util.ClassUtil; -import com.intellij.psi.util.PsiClassUtil; -import com.intellij.psi.util.PsiTreeUtil; +import com.intellij.psi.util.*; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -183,8 +184,14 @@ public class JavaExecutionUtil { return name == null || name.startsWith(ExecutionBundle.message("run.configuration.unnamed.name.prefix")); } + @Nullable public static Location stepIntoSingleClass(@NotNull final Location location) { PsiElement element = location.getPsiElement(); + final VirtualFile virtualFile = PsiUtilCore.getVirtualFile(element); + final ProjectFileIndex fileIndex = ProjectRootManager.getInstance(location.getProject()).getFileIndex(); + if (virtualFile == null || !fileIndex.isInSource(virtualFile)) { + return null; + } if (!(element instanceof PsiClassOwner)) { if (PsiTreeUtil.getParentOfType(element, PsiClass.class) != null) return location; element = PsiTreeUtil.getParentOfType(element, PsiClassOwner.class); diff --git a/plugins/junit/src/com/intellij/execution/junit/JUnitConfigurationProducer.java b/plugins/junit/src/com/intellij/execution/junit/JUnitConfigurationProducer.java index 4ee75003c200..799250e78baa 100644 --- a/plugins/junit/src/com/intellij/execution/junit/JUnitConfigurationProducer.java +++ b/plugins/junit/src/com/intellij/execution/junit/JUnitConfigurationProducer.java @@ -52,6 +52,9 @@ public abstract class JUnitConfigurationProducer extends JavaRunConfigurationPro ? ((PsiMemberParameterizedLocation)contextLocation).getParamSetName() : null; assert contextLocation != null; Location location = JavaExecutionUtil.stepIntoSingleClass(contextLocation); + if (location == null) { + return false; + } final PsiElement element = location.getPsiElement(); final PsiClass testClass = JUnitUtil.getTestClass(element); final PsiMethod testMethod = JUnitUtil.getTestMethod(element, false); diff --git a/plugins/testng/src/com/theoryinpractice/testng/configuration/TestNGConfigurationProducer.java b/plugins/testng/src/com/theoryinpractice/testng/configuration/TestNGConfigurationProducer.java index 864b9ebcf93f..0914e2b476dc 100644 --- a/plugins/testng/src/com/theoryinpractice/testng/configuration/TestNGConfigurationProducer.java +++ b/plugins/testng/src/com/theoryinpractice/testng/configuration/TestNGConfigurationProducer.java @@ -49,6 +49,9 @@ public abstract class TestNGConfigurationProducer extends JavaRunConfigurationPr final RunConfiguration predefinedConfiguration = context.getOriginalConfiguration(TestNGConfigurationType.getInstance()); final Location contextLocation = context.getLocation(); Location location = JavaExecutionUtil.stepIntoSingleClass(contextLocation); + if (location == null) { + return false; + } final PsiElement element = location.getPsiElement(); RunnerAndConfigurationSettings template = RunManager.getInstance(location.getProject()).getConfigurationTemplate(getConfigurationFactory()); final Module predefinedModule = ((TestNGConfiguration)template.getConfiguration()).getConfigurationModule().getModule();