mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-01-08 15:09:39 +07:00
don't load GroovyPsiManager when we only need GroovyShortNamesCache
This commit is contained in:
@@ -50,7 +50,7 @@ import org.jetbrains.plugins.groovy.lang.psi.GroovyFileBase;
|
||||
import org.jetbrains.plugins.groovy.lang.psi.GroovyPsiElement;
|
||||
import org.jetbrains.plugins.groovy.lang.psi.api.statements.blocks.GrClosableBlock;
|
||||
import org.jetbrains.plugins.groovy.lang.psi.api.statements.typedef.GrTypeDefinition;
|
||||
import org.jetbrains.plugins.groovy.lang.psi.impl.GroovyPsiManager;
|
||||
import org.jetbrains.plugins.groovy.lang.stubs.GroovyShortNamesCache;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
@@ -241,7 +241,7 @@ public class GroovyPositionManager implements PositionManager {
|
||||
|
||||
final GlobalSearchScope searchScope = myDebugProcess.getSearchScope();
|
||||
try {
|
||||
final List<PsiClass> classes = GroovyPsiManager.getInstance(project).getNamesCache().getClassesByFQName(qName, searchScope);
|
||||
final List<PsiClass> classes = GroovyShortNamesCache.getGroovyShortNamesCache(project).getClassesByFQName(qName, searchScope);
|
||||
PsiClass clazz = classes.size() == 1 ? classes.get(0) : null;
|
||||
if (clazz != null) return clazz.getContainingFile();
|
||||
}
|
||||
|
||||
@@ -29,7 +29,6 @@ import com.intellij.openapi.util.RecursionManager;
|
||||
import com.intellij.psi.*;
|
||||
import com.intellij.psi.impl.PsiManagerEx;
|
||||
import com.intellij.psi.search.GlobalSearchScope;
|
||||
import com.intellij.psi.search.PsiShortNamesCache;
|
||||
import com.intellij.psi.util.InheritanceUtil;
|
||||
import com.intellij.reference.SoftReference;
|
||||
import com.intellij.util.ConcurrencyUtil;
|
||||
@@ -37,14 +36,12 @@ import com.intellij.util.Function;
|
||||
import com.intellij.util.IncorrectOperationException;
|
||||
import com.intellij.util.containers.ConcurrentHashMap;
|
||||
import com.intellij.util.containers.ConcurrentWeakHashMap;
|
||||
import com.intellij.util.containers.ContainerUtil;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
import org.jetbrains.plugins.groovy.lang.psi.GroovyPsiElement;
|
||||
import org.jetbrains.plugins.groovy.lang.psi.GroovyPsiElementFactory;
|
||||
import org.jetbrains.plugins.groovy.lang.psi.api.statements.typedef.GrTypeDefinition;
|
||||
import org.jetbrains.plugins.groovy.lang.psi.util.GroovyCommonClassNames;
|
||||
import org.jetbrains.plugins.groovy.lang.stubs.GroovyShortNamesCache;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
@@ -64,18 +61,15 @@ public class GroovyPsiManager {
|
||||
CommonClassNames.JAVA_LANG_STRING);
|
||||
private final Project myProject;
|
||||
|
||||
private GrTypeDefinition myArrayClass;
|
||||
private volatile GrTypeDefinition myArrayClass;
|
||||
|
||||
private final ConcurrentMap<GroovyPsiElement, PsiType> myCalculatedTypes = new ConcurrentWeakHashMap<GroovyPsiElement, PsiType>();
|
||||
private final ConcurrentMap<String, SoftReference<Map<GlobalSearchScope, PsiClass>>> myClassCache = new ConcurrentHashMap<String, SoftReference<Map<GlobalSearchScope, PsiClass>>>();
|
||||
private final GroovyShortNamesCache myCache;
|
||||
|
||||
private static final String SYNTHETIC_CLASS_TEXT = "class __ARRAY__ { public int length }";
|
||||
private static final RecursionGuard ourGuard = RecursionManager.createGuard("groovyPsiManager");
|
||||
|
||||
public GroovyPsiManager(Project project) {
|
||||
myProject = project;
|
||||
myCache = ContainerUtil.findInstance(project.getExtensions(PsiShortNamesCache.EP_NAME), GroovyShortNamesCache.class);
|
||||
|
||||
((PsiManagerEx)PsiManager.getInstance(myProject)).registerRunnableToRunOnAnyChange(new Runnable() {
|
||||
public void run() {
|
||||
@@ -175,7 +169,7 @@ public class GroovyPsiManager {
|
||||
public GrTypeDefinition getArrayClass() {
|
||||
if (myArrayClass == null) {
|
||||
try {
|
||||
myArrayClass = GroovyPsiElementFactory.getInstance(myProject).createTypeDefinition(SYNTHETIC_CLASS_TEXT);
|
||||
myArrayClass = GroovyPsiElementFactory.getInstance(myProject).createTypeDefinition("class __ARRAY__ { public int length }");
|
||||
}
|
||||
catch (IncorrectOperationException e) {
|
||||
LOG.error(e);
|
||||
@@ -196,7 +190,4 @@ public class GroovyPsiManager {
|
||||
return ourGuard.doPreventingRecursion(element, computable);
|
||||
}
|
||||
|
||||
public GroovyShortNamesCache getNamesCache() {
|
||||
return myCache;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -16,12 +16,13 @@
|
||||
|
||||
package org.jetbrains.plugins.groovy.lang.psi.impl.javaView;
|
||||
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.psi.PsiClass;
|
||||
import com.intellij.psi.PsiElementFinder;
|
||||
import com.intellij.psi.search.GlobalSearchScope;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
import org.jetbrains.plugins.groovy.lang.psi.impl.GroovyPsiManager;
|
||||
import org.jetbrains.plugins.groovy.lang.stubs.GroovyShortNamesCache;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
@@ -30,21 +31,21 @@ import java.util.List;
|
||||
* @author ven
|
||||
*/
|
||||
public class GroovyClassFinder extends PsiElementFinder {
|
||||
private final GroovyPsiManager myGroovyPsiManager;
|
||||
private final GroovyShortNamesCache myCache;
|
||||
|
||||
public GroovyClassFinder(final GroovyPsiManager groovyPsiManager) {
|
||||
myGroovyPsiManager = groovyPsiManager;
|
||||
public GroovyClassFinder(Project project) {
|
||||
myCache = GroovyShortNamesCache.getGroovyShortNamesCache(project);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public PsiClass findClass(@NotNull String qualifiedName, @NotNull GlobalSearchScope scope) {
|
||||
final List<PsiClass> classes = myGroovyPsiManager.getNamesCache().getScriptClassesByFQName(qualifiedName, scope, true);
|
||||
final List<PsiClass> classes = myCache.getScriptClassesByFQName(qualifiedName, scope, true);
|
||||
return classes.isEmpty() ? null : classes.get(0);
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public PsiClass[] findClasses(@NotNull String qualifiedName, @NotNull GlobalSearchScope scope) {
|
||||
final Collection<PsiClass> classes = myGroovyPsiManager.getNamesCache().getScriptClassesByFQName(qualifiedName, scope, true);
|
||||
final Collection<PsiClass> classes = myCache.getScriptClassesByFQName(qualifiedName, scope, true);
|
||||
return classes.isEmpty() ? PsiClass.EMPTY_ARRAY : classes.toArray(new PsiClass[classes.size()]);
|
||||
}
|
||||
|
||||
|
||||
@@ -26,6 +26,7 @@ import com.intellij.psi.search.GlobalSearchScope;
|
||||
import com.intellij.psi.search.PsiShortNamesCache;
|
||||
import com.intellij.psi.stubs.StubIndex;
|
||||
import com.intellij.util.ArrayUtil;
|
||||
import com.intellij.util.ObjectUtils;
|
||||
import com.intellij.util.containers.CollectionFactory;
|
||||
import com.intellij.util.containers.ContainerUtil;
|
||||
import com.intellij.util.containers.HashSet;
|
||||
@@ -50,6 +51,10 @@ public class GroovyShortNamesCache extends PsiShortNamesCache {
|
||||
myProject = project;
|
||||
}
|
||||
|
||||
public static GroovyShortNamesCache getGroovyShortNamesCache(Project project) {
|
||||
return ObjectUtils.assertNotNull(ContainerUtil.findInstance(project.getExtensions(PsiShortNamesCache.EP_NAME), GroovyShortNamesCache.class));
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public PsiClass[] getClassesByName(@NotNull @NonNls String name, @NotNull GlobalSearchScope scope) {
|
||||
Collection<PsiClass> allClasses = getAllScriptClasses(name, scope);
|
||||
|
||||
Reference in New Issue
Block a user