mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
[groovy] honor order of classes in the scope, prepend the script file currently beiung run to the scope (IDEA-153553)
This commit is contained in:
+13
-5
@@ -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<PsiClass> 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;
|
||||
}
|
||||
|
||||
+26
@@ -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<RunCo
|
||||
public void setScriptPath(@Nullable String scriptPath) {
|
||||
this.scriptPath = scriptPath;
|
||||
}
|
||||
|
||||
@Override
|
||||
public GlobalSearchScope getScope() {
|
||||
GlobalSearchScope superScope = super.getScope();
|
||||
|
||||
String path = getScriptPath();
|
||||
if (path == null) return superScope;
|
||||
|
||||
VirtualFile scriptFile = LocalFileSystem.getInstance().findFileByPath(path);
|
||||
if (scriptFile == null) return superScope;
|
||||
|
||||
GlobalSearchScope fileScope = GlobalSearchScope.fileScope(getProject(), scriptFile);
|
||||
if (superScope == null) return fileScope;
|
||||
|
||||
return new DelegatingGlobalSearchScope(fileScope.union(superScope)) {
|
||||
@Override
|
||||
public int compare(@NotNull VirtualFile file1, @NotNull VirtualFile file2) {
|
||||
if (file1.equals(scriptFile)) return 1;
|
||||
if (file2.equals(scriptFile)) return -1;
|
||||
return super.compare(file1, file2);
|
||||
}
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user