don't load GroovyPsiManager when we only need GroovyShortNamesCache

This commit is contained in:
peter
2011-06-06 16:41:31 +02:00
parent aed71eb5de
commit e1293791da
4 changed files with 16 additions and 19 deletions

View File

@@ -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();
}

View File

@@ -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;
}
}

View File

@@ -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()]);
}

View File

@@ -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);