diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/debugger/GroovyPositionManager.java b/plugins/groovy/src/org/jetbrains/plugins/groovy/debugger/GroovyPositionManager.java index 23eca597f975..b0b42c7f2f21 100644 --- a/plugins/groovy/src/org/jetbrains/plugins/groovy/debugger/GroovyPositionManager.java +++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/debugger/GroovyPositionManager.java @@ -40,6 +40,7 @@ import com.intellij.psi.PsiClass; import com.intellij.psi.PsiElement; import com.intellij.psi.PsiFile; import com.intellij.psi.search.GlobalSearchScope; +import com.intellij.psi.util.PsiClassUtil; import com.intellij.psi.util.PsiTreeUtil; import com.sun.jdi.AbsentInformationException; import com.sun.jdi.Location; @@ -178,7 +179,8 @@ public class GroovyPositionManager implements PositionManager { GroovyPsiElement sourceImage = findReferenceTypeSourceImage(position); if (sourceImage instanceof GrTypeDefinition) { return getClassNameForJvm((GrTypeDefinition)sourceImage); - } else if (sourceImage == null) { + } + else if (sourceImage == null) { return getScriptQualifiedName(position); } return null; @@ -259,7 +261,7 @@ public class GroovyPositionManager implements PositionManager { String runtimeName = dollar >= 0 ? originalQName.substring(0, dollar) : originalQName; String qName = getOriginalQualifiedName(refType, runtimeName); - GlobalSearchScope searchScope = addModuleContent(myDebugProcess.getSearchScope()); + GlobalSearchScope searchScope = myDebugProcess.getSearchScope(); GroovyShortNamesCache cache = GroovyShortNamesCache.getGroovyShortNamesCache(project); try { List classes = cache.getClassesByFQName(qName, searchScope, true); @@ -269,7 +271,12 @@ public class GroovyPositionManager implements PositionManager { if (classes.isEmpty()) { classes = cache.getClassesByFQName(qName, GlobalSearchScope.projectScope(project), false); } - PsiClass clazz = classes.size() == 1 ? classes.get(0) : null; + if (classes.isEmpty()) { + classes = cache.getClassesByFQName(qName, addModuleContent(searchScope), false); + } + if (classes.isEmpty()) return null; + classes.sort(PsiClassUtil.createScopeComparator(searchScope)); + PsiClass clazz = classes.get(0); if (clazz != null) return clazz.getContainingFile(); } catch (ProcessCanceledException e) { @@ -405,8 +412,9 @@ public class GroovyPositionManager implements PositionManager { } //noinspection LoopStatementThatDoesntLoop for (Location location : fromClass.allLineLocations()) { - final SourcePosition candidateFirstPosition = SourcePosition.createFromLine(toFind.getContainingFile(), location.lineNumber() - 1) - ; + final SourcePosition candidateFirstPosition = SourcePosition.createFromLine( + toFind.getContainingFile(), location.lineNumber() - 1 + ); if (toFind.equals(findReferenceTypeSourceImage(candidateFirstPosition))) { return fromClass; } diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/runner/GroovyScriptRunConfiguration.java b/plugins/groovy/src/org/jetbrains/plugins/groovy/runner/GroovyScriptRunConfiguration.java index e07f32a4ab30..7e838ace2fd3 100644 --- a/plugins/groovy/src/org/jetbrains/plugins/groovy/runner/GroovyScriptRunConfiguration.java +++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/runner/GroovyScriptRunConfiguration.java @@ -38,12 +38,15 @@ import com.intellij.openapi.roots.ProjectRootManager; import com.intellij.openapi.util.InvalidDataException; import com.intellij.openapi.util.JDOMExternalizer; import com.intellij.openapi.util.WriteExternalException; +import com.intellij.openapi.vfs.LocalFileSystem; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.openapi.vfs.VirtualFileManager; import com.intellij.psi.PsiClass; import com.intellij.psi.PsiElement; import com.intellij.psi.PsiFile; import com.intellij.psi.PsiManager; +import com.intellij.psi.search.DelegatingGlobalSearchScope; +import com.intellij.psi.search.GlobalSearchScope; import com.intellij.refactoring.listeners.RefactoringElementAdapter; import com.intellij.refactoring.listeners.RefactoringElementListener; import com.intellij.util.ObjectUtils; @@ -422,4 +425,27 @@ public class GroovyScriptRunConfiguration extends ModuleBasedConfiguration