From 44663f0c053b3185b3aade3c946b0275d5db3095 Mon Sep 17 00:00:00 2001 From: Dmitry Jemerov Date: Thu, 22 Sep 2011 14:28:33 +0200 Subject: [PATCH] use PsiShortNamesCache as independent service --- .../execution/filters/YourkitFilter.java | 2 +- .../codeInsight/ExpectedTypesProvider.java | 4 +- .../completion/JavaCharFilter.java | 3 +- .../completion/StaticMemberProcessor.java | 2 +- .../impl/quickfix/CreateFromUsageUtils.java | 18 +++++---- .../impl/quickfix/ImportClassFixBase.java | 3 +- .../impl/quickfix/MoveClassToModuleFix.java | 3 +- .../daemon/impl/quickfix/OrderEntryFix.java | 3 +- .../impl/quickfix/StaticImportMethodFix.java | 3 +- .../VariableParameterizedTypeFix.java | 2 +- .../actions/JavaQualifiedNameProvider.java | 3 +- .../ide/util/TreeJavaClassChooserDialog.java | 5 +-- .../DefaultClassNavigationContributor.java | 6 +-- .../DefaultSymbolNavigationContributor.java | 4 +- .../psi/impl/CompositeShortNamesCache.java | 15 +++++--- .../intellij/psi/impl/JavaPsiFacadeImpl.java | 37 ------------------- .../impl/search/AllClassesSearchExecutor.java | 5 +-- .../testIntegration/JavaTestFinder.java | 10 +++-- .../src/com/intellij/psi/JavaPsiFacade.java | 19 ---------- .../psi/search/PsiShortNamesCache.java | 15 ++++++-- .../dom/converters/OnClickConverter.java | 3 +- .../GroovyStaticImportMethodFix.java | 3 +- .../intellij/execution/ConfigurationUtil.java | 3 +- .../uiDesigner/GuiDesignerConfigurable.java | 2 +- resources/src/META-INF/IdeaPlugin.xml | 5 +++ 25 files changed, 69 insertions(+), 109 deletions(-) diff --git a/java/execution/impl/src/com/intellij/execution/filters/YourkitFilter.java b/java/execution/impl/src/com/intellij/execution/filters/YourkitFilter.java index be351c1a6e43..90e3091dd954 100644 --- a/java/execution/impl/src/com/intellij/execution/filters/YourkitFilter.java +++ b/java/execution/impl/src/com/intellij/execution/filters/YourkitFilter.java @@ -60,7 +60,7 @@ public class YourkitFilter implements Filter{ final int textStartOffset = entireLength - line.length(); - final PsiShortNamesCache cache = JavaPsiFacade.getInstance(myProject).getShortNamesCache(); + final PsiShortNamesCache cache = PsiShortNamesCache.getInstance(myProject); final PsiFile[] psiFiles = cache.getFilesByName(fileName); if (psiFiles.length == 0) return null; diff --git a/java/java-impl/src/com/intellij/codeInsight/ExpectedTypesProvider.java b/java/java-impl/src/com/intellij/codeInsight/ExpectedTypesProvider.java index 89babb8d2c95..52ab4e3d7da2 100644 --- a/java/java-impl/src/com/intellij/codeInsight/ExpectedTypesProvider.java +++ b/java/java-impl/src/com/intellij/codeInsight/ExpectedTypesProvider.java @@ -62,13 +62,13 @@ public class ExpectedTypesProvider { private static final ExpectedClassProvider ourGlobalScopeClassProvider = new ExpectedClassProvider() { public PsiField[] findDeclaredFields(final PsiManager manager, String name) { - final PsiShortNamesCache cache = JavaPsiFacade.getInstance(manager.getProject()).getShortNamesCache(); + final PsiShortNamesCache cache = PsiShortNamesCache.getInstance(manager.getProject()); GlobalSearchScope scope = GlobalSearchScope.allScope(manager.getProject()); return cache.getFieldsByName(name, scope); } public PsiMethod[] findDeclaredMethods(final PsiManager manager, String name) { - final PsiShortNamesCache cache = JavaPsiFacade.getInstance(manager.getProject()).getShortNamesCache(); + final PsiShortNamesCache cache = PsiShortNamesCache.getInstance(manager.getProject()); GlobalSearchScope scope = GlobalSearchScope.allScope(manager.getProject()); return cache.getMethodsByName(name, scope); } diff --git a/java/java-impl/src/com/intellij/codeInsight/completion/JavaCharFilter.java b/java/java-impl/src/com/intellij/codeInsight/completion/JavaCharFilter.java index f7c8118d1b05..8c8289d98fcd 100644 --- a/java/java-impl/src/com/intellij/codeInsight/completion/JavaCharFilter.java +++ b/java/java-impl/src/com/intellij/codeInsight/completion/JavaCharFilter.java @@ -31,6 +31,7 @@ import com.intellij.codeInsight.lookup.impl.LookupImpl; import com.intellij.patterns.PsiJavaPatterns; import com.intellij.psi.*; import com.intellij.psi.javadoc.PsiDocComment; +import com.intellij.psi.search.PsiShortNamesCache; import com.intellij.psi.util.PsiTreeUtil; public class JavaCharFilter extends CharFilter { @@ -54,7 +55,7 @@ public class JavaCharFilter extends CharFilter { Object o = item.getObject(); if (o instanceof PsiClass && ((PsiClass)o).getName().length() > lookup.itemPattern(item).length()) { - if (JavaPsiFacade.getInstance(file.getProject()).getShortNamesCache().getClassesByName(lookup.itemPattern(item), file.getResolveScope()).length > 0) { + if (PsiShortNamesCache.getInstance(file.getProject()).getClassesByName(lookup.itemPattern(item), file.getResolveScope()).length > 0) { return true; } } diff --git a/java/java-impl/src/com/intellij/codeInsight/completion/StaticMemberProcessor.java b/java/java-impl/src/com/intellij/codeInsight/completion/StaticMemberProcessor.java index 26d3eb7be78c..3ade436714c7 100644 --- a/java/java-impl/src/com/intellij/codeInsight/completion/StaticMemberProcessor.java +++ b/java/java-impl/src/com/intellij/codeInsight/completion/StaticMemberProcessor.java @@ -58,7 +58,7 @@ public abstract class StaticMemberProcessor { final PrefixMatcher matcher = resultSet.getPrefixMatcher(); final GlobalSearchScope scope = myPosition.getResolveScope(); - final PsiShortNamesCache namesCache = JavaPsiFacade.getInstance(myProject).getShortNamesCache(); + final PsiShortNamesCache namesCache = PsiShortNamesCache.getInstance(myProject); for (final String methodName : namesCache.getAllMethodNames()) { if (matcher.prefixMatches(methodName)) { Set classes = new THashSet(); diff --git a/java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/CreateFromUsageUtils.java b/java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/CreateFromUsageUtils.java index eed18cd22324..7e5effb41dd4 100644 --- a/java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/CreateFromUsageUtils.java +++ b/java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/CreateFromUsageUtils.java @@ -580,7 +580,7 @@ public class CreateFromUsageUtils { PsiManager manager = expression.getManager(); GlobalSearchScope resolveScope = expression.getResolveScope(); - ExpectedTypesProvider provider = ExpectedTypesProvider.getInstance(manager.getProject()); + ExpectedTypesProvider provider = ExpectedTypesProvider.getInstance(expression.getProject()); List typesList = new ArrayList(); List expectedMethodNames = new ArrayList(); List expectedFieldNames = new ArrayList(); @@ -596,15 +596,16 @@ public class CreateFromUsageUtils { } if (typesList.isEmpty()) { - final JavaPsiFacade facade = JavaPsiFacade.getInstance(manager.getProject()); + final JavaPsiFacade facade = JavaPsiFacade.getInstance(expression.getProject()); + final PsiShortNamesCache cache = PsiShortNamesCache.getInstance(expression.getProject()); PsiElementFactory factory = facade.getElementFactory(); for (String fieldName : expectedFieldNames) { - PsiField[] fields = facade.getShortNamesCache().getFieldsByName(fieldName, resolveScope); + PsiField[] fields = cache.getFieldsByName(fieldName, resolveScope); addMemberInfo(fields, expression, typesList, factory); } for (String methodName : expectedMethodNames) { - PsiMethod[] methods = facade.getShortNamesCache().getMethodsByName(methodName, resolveScope); + PsiMethod[] methods = cache.getMethodsByName(methodName, resolveScope); addMemberInfo(methods, expression, typesList, factory); } } @@ -647,14 +648,15 @@ public class CreateFromUsageUtils { if (typesList.isEmpty()) { final JavaPsiFacade facade = JavaPsiFacade.getInstance(manager.getProject()); + final PsiShortNamesCache cache = PsiShortNamesCache.getInstance(expression.getProject()); PsiElementFactory factory = facade.getElementFactory(); for (String fieldName : expectedFieldNames) { - PsiField[] fields = facade.getShortNamesCache().getFieldsByName(fieldName, resolveScope); + PsiField[] fields = cache.getFieldsByName(fieldName, resolveScope); addMemberInfo(fields, expression, typesList, factory); } for (String methodName : expectedMethodNames) { - PsiMethod[] methods = facade.getShortNamesCache().getMethodsByName(methodName, resolveScope); + PsiMethod[] methods = cache.getMethodsByName(methodName, resolveScope); addMemberInfo(methods, expression, typesList, factory); } } @@ -816,7 +818,7 @@ public class CreateFromUsageUtils { }); GlobalSearchScope descendantsSearchScope = GlobalSearchScope.moduleWithDependenciesScope(moduleForFile); final JavaPsiFacade facade = JavaPsiFacade.getInstance(project); - final PsiShortNamesCache cache = facade.getShortNamesCache(); + final PsiShortNamesCache cache = PsiShortNamesCache.getInstance(project); if (handleObjectMethod(possibleClassNames, facade, searchScope, method, memberName, staticAccess, addObjectInheritors)) { return; @@ -852,7 +854,7 @@ public class CreateFromUsageUtils { } private static boolean handleObjectMethod(Set possibleClassNames, final JavaPsiFacade facade, final GlobalSearchScope searchScope, final boolean method, final String memberName, final boolean staticAccess, boolean addInheritors) { - final PsiShortNamesCache cache = facade.getShortNamesCache(); + final PsiShortNamesCache cache = PsiShortNamesCache.getInstance(facade.getProject()); final boolean[] allClasses = {false}; ApplicationManager.getApplication().runReadAction(new Runnable() { public void run() { diff --git a/java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/ImportClassFixBase.java b/java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/ImportClassFixBase.java index 6dc4d1e971ab..8442b524e3f8 100644 --- a/java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/ImportClassFixBase.java +++ b/java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/ImportClassFixBase.java @@ -70,8 +70,7 @@ public abstract class ImportClassFixBase im protected abstract boolean hasTypeParameters(T reference); public List getClassesToImport() { - PsiManager manager = PsiManager.getInstance(myRef.getProject()); - PsiShortNamesCache cache = JavaPsiFacade.getInstance(manager.getProject()).getShortNamesCache(); + PsiShortNamesCache cache = PsiShortNamesCache.getInstance(myRef.getProject()); String name = getReferenceName(myRef); GlobalSearchScope scope = myRef.getResolveScope(); if (name == null) { diff --git a/java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/MoveClassToModuleFix.java b/java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/MoveClassToModuleFix.java index 354685a58b6b..68177ed86bdf 100644 --- a/java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/MoveClassToModuleFix.java +++ b/java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/MoveClassToModuleFix.java @@ -33,6 +33,7 @@ import com.intellij.openapi.roots.ProjectRootManager; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.psi.*; import com.intellij.psi.search.GlobalSearchScope; +import com.intellij.psi.search.PsiShortNamesCache; import com.intellij.refactoring.RefactoringActionHandler; import com.intellij.refactoring.RefactoringActionHandlerFactory; import com.intellij.util.IncorrectOperationException; @@ -73,7 +74,7 @@ public class MoveClassToModuleFix { if (sourceRoot == null) return; final JavaPsiFacade facade = JavaPsiFacade.getInstance(project); - PsiClass[] classes = facade.getShortNamesCache().getClassesByName(referenceName, GlobalSearchScope.allScope(project)); + PsiClass[] classes = PsiShortNamesCache.getInstance(project).getClassesByName(referenceName, GlobalSearchScope.allScope(project)); for (final PsiClass aClass : classes) { if (!facade.getResolveHelper().isAccessible(aClass, psiElement, aClass)) continue; final PsiFile psiFile = aClass.getContainingFile(); diff --git a/java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/OrderEntryFix.java b/java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/OrderEntryFix.java index ce71b1384f39..8ff135e152a8 100644 --- a/java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/OrderEntryFix.java +++ b/java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/OrderEntryFix.java @@ -41,6 +41,7 @@ import com.intellij.openapi.vfs.VirtualFile; import com.intellij.openapi.vfs.VirtualFileManager; import com.intellij.psi.*; import com.intellij.psi.search.GlobalSearchScope; +import com.intellij.psi.search.PsiShortNamesCache; import com.intellij.psi.util.PsiTreeUtil; import com.intellij.psi.util.PsiUtil; import gnu.trove.THashSet; @@ -165,7 +166,7 @@ public abstract class OrderEntryFix implements IntentionAction, LocalQuickFix { List result = new ArrayList(); Set librariesToAdd = new THashSet(); final JavaPsiFacade facade = JavaPsiFacade.getInstance(psiElement.getProject()); - PsiClass[] classes = facade.getShortNamesCache().getClassesByName(referenceName, GlobalSearchScope.allScope(project)); + PsiClass[] classes = PsiShortNamesCache.getInstance(project).getClassesByName(referenceName, GlobalSearchScope.allScope(project)); for (final PsiClass aClass : classes) { if (!facade.getResolveHelper().isAccessible(aClass, psiElement, aClass)) continue; PsiFile psiFile = aClass.getContainingFile(); diff --git a/java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/StaticImportMethodFix.java b/java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/StaticImportMethodFix.java index 1a83dbafc824..959df550e806 100644 --- a/java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/StaticImportMethodFix.java +++ b/java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/StaticImportMethodFix.java @@ -91,8 +91,7 @@ public class StaticImportMethodFix implements IntentionAction { @NotNull private List getMethodsToImport() { - final JavaPsiFacade facade = JavaPsiFacade.getInstance(myMethodCall.getProject()); - PsiShortNamesCache cache = facade.getShortNamesCache(); + PsiShortNamesCache cache = PsiShortNamesCache.getInstance(myMethodCall.getProject()); PsiMethodCallExpression element = myMethodCall.getElement(); PsiReferenceExpression reference = element.getMethodExpression(); PsiExpressionList argumentList = element.getArgumentList(); diff --git a/java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/VariableParameterizedTypeFix.java b/java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/VariableParameterizedTypeFix.java index 64f6feaa89f2..a7a666c13bf7 100644 --- a/java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/VariableParameterizedTypeFix.java +++ b/java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/VariableParameterizedTypeFix.java @@ -35,7 +35,7 @@ public class VariableParameterizedTypeFix { String shortName = ((PsiClassType)type).getClassName(); PsiManager manager = parameterList.getManager(); final JavaPsiFacade facade = JavaPsiFacade.getInstance(manager.getProject()); - PsiShortNamesCache shortNamesCache = facade.getShortNamesCache(); + PsiShortNamesCache shortNamesCache = PsiShortNamesCache.getInstance(parameterList.getProject()); PsiClass[] classes = shortNamesCache.getClassesByName(shortName, GlobalSearchScope.allScope(manager.getProject())); PsiElementFactory factory = facade.getElementFactory(); for (PsiClass aClass : classes) { diff --git a/java/java-impl/src/com/intellij/ide/actions/JavaQualifiedNameProvider.java b/java/java-impl/src/com/intellij/ide/actions/JavaQualifiedNameProvider.java index 58d53560c85c..0c26bd0a90ae 100644 --- a/java/java-impl/src/com/intellij/ide/actions/JavaQualifiedNameProvider.java +++ b/java/java-impl/src/com/intellij/ide/actions/JavaQualifiedNameProvider.java @@ -29,6 +29,7 @@ import com.intellij.psi.*; import com.intellij.psi.codeStyle.CodeStyleManager; import com.intellij.psi.codeStyle.JavaCodeStyleManager; import com.intellij.psi.search.GlobalSearchScope; +import com.intellij.psi.search.PsiShortNamesCache; import com.intellij.psi.util.PsiTreeUtil; import com.intellij.psi.util.PsiUtil; import com.intellij.util.IncorrectOperationException; @@ -127,7 +128,7 @@ public class JavaQualifiedNameProvider implements QualifiedNameProvider { } VirtualFile file = LocalFileSystem.getInstance().findFileByPath(fqn); if (file != null) return file; - PsiFile[] files = JavaPsiFacade.getInstance(project).getShortNamesCache().getFilesByName(fqn); + PsiFile[] files = PsiShortNamesCache.getInstance(project).getFilesByName(fqn); for (PsiFile psiFile : files) { VirtualFile virtualFile = psiFile.getVirtualFile(); if (virtualFile != null) return virtualFile; diff --git a/java/java-impl/src/com/intellij/ide/util/TreeJavaClassChooserDialog.java b/java/java-impl/src/com/intellij/ide/util/TreeJavaClassChooserDialog.java index e7468e299420..d9d54d4c21ec 100644 --- a/java/java-impl/src/com/intellij/ide/util/TreeJavaClassChooserDialog.java +++ b/java/java-impl/src/com/intellij/ide/util/TreeJavaClassChooserDialog.java @@ -20,7 +20,6 @@ import com.intellij.ide.projectView.impl.nodes.ClassTreeNode; import com.intellij.openapi.project.Project; import com.intellij.openapi.util.Condition; import com.intellij.openapi.util.Conditions; -import com.intellij.psi.JavaPsiFacade; import com.intellij.psi.PsiClass; import com.intellij.psi.PsiJavaFile; import com.intellij.psi.search.GlobalSearchScope; @@ -99,7 +98,7 @@ public class TreeJavaClassChooserDialog extends AbstractTreeClassChooserDialog

set = new HashSet(); cache.getAllMethodNames(set); cache.getAllFieldNames(set); @@ -45,7 +45,7 @@ public class DefaultSymbolNavigationContributor implements ChooseByNameContribut public NavigationItem[] getItemsByName(String name, final String pattern, Project project, boolean includeNonProjectItems) { GlobalSearchScope scope = includeNonProjectItems ? GlobalSearchScope.allScope(project) : GlobalSearchScope.projectScope(project); - PsiShortNamesCache cache = JavaPsiFacade.getInstance(project).getShortNamesCache(); + PsiShortNamesCache cache = PsiShortNamesCache.getInstance(project); PsiMethod[] methods = cache.getMethodsByName(name, scope); methods = filterInheritedMethods(methods); diff --git a/java/java-impl/src/com/intellij/psi/impl/CompositeShortNamesCache.java b/java/java-impl/src/com/intellij/psi/impl/CompositeShortNamesCache.java index 40c5af792b87..d98e3a868e0b 100644 --- a/java/java-impl/src/com/intellij/psi/impl/CompositeShortNamesCache.java +++ b/java/java-impl/src/com/intellij/psi/impl/CompositeShortNamesCache.java @@ -15,6 +15,7 @@ */ package com.intellij.psi.impl; +import com.intellij.openapi.project.Project; import com.intellij.psi.PsiClass; import com.intellij.psi.PsiField; import com.intellij.psi.PsiFile; @@ -37,17 +38,19 @@ public class CompositeShortNamesCache extends PsiShortNamesCache { private final List myCaches = new ArrayList(); private PsiShortNamesCache[] myCacheArray = new PsiShortNamesCache[0]; + public CompositeShortNamesCache(Project project) { + if (!project.isDefault()) { + for (final PsiShortNamesCache cache : project.getExtensions(PsiShortNamesCache.EP_NAME)) { + addCache(cache); + } + } + } + public void addCache(PsiShortNamesCache cache) { myCaches.add(cache); myCacheArray = myCaches.toArray(new PsiShortNamesCache[myCaches.size()]); } - public void runStartupActivity() { - for (PsiShortNamesCache cache : myCaches) { - cache.runStartupActivity(); - } - } - @NotNull public PsiFile[] getFilesByName(@NotNull String name) { Merger merger = null; diff --git a/java/java-impl/src/com/intellij/psi/impl/JavaPsiFacadeImpl.java b/java/java-impl/src/com/intellij/psi/impl/JavaPsiFacadeImpl.java index e14dd2266594..0b6648b3cb43 100644 --- a/java/java-impl/src/com/intellij/psi/impl/JavaPsiFacadeImpl.java +++ b/java/java-impl/src/com/intellij/psi/impl/JavaPsiFacadeImpl.java @@ -16,7 +16,6 @@ package com.intellij.psi.impl; import com.intellij.openapi.Disposable; -import com.intellij.openapi.application.ApplicationManager; import com.intellij.openapi.application.ReadActionProcessor; import com.intellij.openapi.diagnostic.Logger; import com.intellij.openapi.progress.ProgressManager; @@ -44,7 +43,6 @@ import com.intellij.psi.impl.source.resolve.PsiResolveHelperImpl; import com.intellij.psi.impl.source.tree.JavaChangeUtilSupport; import com.intellij.psi.impl.source.tree.JavaElementType; import com.intellij.psi.search.GlobalSearchScope; -import com.intellij.psi.search.PsiShortNamesCache; import com.intellij.psi.util.PsiModificationTracker; import com.intellij.psi.xml.XmlFile; import com.intellij.util.ConcurrencyUtil; @@ -68,7 +66,6 @@ public class JavaPsiFacadeImpl extends JavaPsiFacadeEx implements Disposable { private PsiMigrationImpl myCurrentMigration; private final PsiElementFinder[] myElementFinders; - private PsiShortNamesCache myShortNamesCache; private final PsiResolveHelper myResolveHelper; private final PsiNameHelper myNameHelper; private final PsiConstantEvaluationHelper myConstantEvaluationHelper; @@ -97,16 +94,6 @@ public class JavaPsiFacadeImpl extends JavaPsiFacadeEx implements Disposable { boolean isProjectDefault = project.isDefault(); - if (isProjectDefault) { - myShortNamesCache = new EmptyShortNamesCacheImpl(); - } - else { - myShortNamesCache = new PsiShortNamesCacheImpl((PsiManagerEx)PsiManager.getInstance(project)); - for (final PsiShortNamesCache cache : project.getExtensions(PsiShortNamesCache.EP_NAME)) { - _registerShortNamesCache(cache); - } - } - myFileManager = new JavaFileManagerImpl(psiManager, projectRootManagerEx, psiManager.getFileManager(), bus); final PsiModificationTrackerImpl modificationTracker = (PsiModificationTrackerImpl)psiManager.getModificationTracker(); @@ -141,7 +128,6 @@ public class JavaPsiFacadeImpl extends JavaPsiFacadeEx implements Disposable { private void runStartupActivity() { myFileManager.initialize(); - myShortNamesCache.runStartupActivity(); } public void dispose() { @@ -265,29 +251,6 @@ public class JavaPsiFacadeImpl extends JavaPsiFacadeEx implements Disposable { return myResolveHelper; } - @NotNull - public PsiShortNamesCache getShortNamesCache() { - return myShortNamesCache; - } - - public void registerShortNamesCache(@NotNull PsiShortNamesCache cache) { - ApplicationManager.getApplication().assertWriteAccessAllowed(); - _registerShortNamesCache(cache); - } - - private void _registerShortNamesCache(PsiShortNamesCache cache) { - assert !(cache instanceof CompositeShortNamesCache) : cache; - if (myShortNamesCache instanceof CompositeShortNamesCache) { - ((CompositeShortNamesCache)myShortNamesCache).addCache(cache); - } - else { - CompositeShortNamesCache composite = new CompositeShortNamesCache(); - composite.addCache(myShortNamesCache); - composite.addCache(cache); - myShortNamesCache = composite; - } - } - @NotNull public PsiMigration startMigration() { LOG.assertTrue(myCurrentMigration == null); diff --git a/java/java-impl/src/com/intellij/psi/impl/search/AllClassesSearchExecutor.java b/java/java-impl/src/com/intellij/psi/impl/search/AllClassesSearchExecutor.java index e2fcbcec8acd..d53e70a7de36 100644 --- a/java/java-impl/src/com/intellij/psi/impl/search/AllClassesSearchExecutor.java +++ b/java/java-impl/src/com/intellij/psi/impl/search/AllClassesSearchExecutor.java @@ -54,10 +54,7 @@ public class AllClassesSearchExecutor implements QueryExecutor processor, AllClassesSearch.SearchParameters parameters) { - final PsiManager manager = PsiManager.getInstance(parameters.getProject()); - - final JavaPsiFacade facade = JavaPsiFacade.getInstance(manager.getProject()); - final PsiShortNamesCache cache = facade.getShortNamesCache(); + final PsiShortNamesCache cache = PsiShortNamesCache.getInstance(parameters.getProject()); final String[] names = ApplicationManager.getApplication().runReadAction(new Computable() { public String[] compute() { diff --git a/java/java-impl/src/com/intellij/testIntegration/JavaTestFinder.java b/java/java-impl/src/com/intellij/testIntegration/JavaTestFinder.java index 9b4877fe4d0d..08995f829055 100644 --- a/java/java-impl/src/com/intellij/testIntegration/JavaTestFinder.java +++ b/java/java-impl/src/com/intellij/testIntegration/JavaTestFinder.java @@ -20,7 +20,6 @@ import com.intellij.openapi.module.Module; import com.intellij.openapi.roots.ProjectFileIndex; import com.intellij.openapi.roots.ProjectRootManager; import com.intellij.openapi.util.Pair; -import com.intellij.psi.JavaPsiFacade; import com.intellij.psi.PsiClass; import com.intellij.psi.PsiElement; import com.intellij.psi.PsiNamedElement; @@ -30,7 +29,10 @@ import com.intellij.util.containers.HashSet; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -import java.util.*; +import java.util.ArrayList; +import java.util.Collection; +import java.util.Collections; +import java.util.List; import java.util.regex.Pattern; public class JavaTestFinder implements TestFinder { @@ -52,7 +54,7 @@ public class JavaTestFinder implements TestFinder { scope = GlobalSearchScope.projectScope(element.getProject()); } - PsiShortNamesCache cache = JavaPsiFacade.getInstance(element.getProject()).getShortNamesCache(); + PsiShortNamesCache cache = PsiShortNamesCache.getInstance(element.getProject()); List> classesWithWeights = new ArrayList>(); for (Pair eachNameWithWeight : TestFinderHelper.collectPossibleClassNamesWithWeights(klass.getName())) { @@ -90,7 +92,7 @@ public class JavaTestFinder implements TestFinder { scope = GlobalSearchScope.projectScope(element.getProject()); } - PsiShortNamesCache cache = JavaPsiFacade.getInstance(element.getProject()).getShortNamesCache(); + PsiShortNamesCache cache = PsiShortNamesCache.getInstance(element.getProject()); String klassName = klass.getName(); Pattern pattern = Pattern.compile(".*" + klassName + ".*"); diff --git a/java/openapi/src/com/intellij/psi/JavaPsiFacade.java b/java/openapi/src/com/intellij/psi/JavaPsiFacade.java index 217deb154970..ad43bff13031 100644 --- a/java/openapi/src/com/intellij/psi/JavaPsiFacade.java +++ b/java/openapi/src/com/intellij/psi/JavaPsiFacade.java @@ -23,7 +23,6 @@ import com.intellij.openapi.components.ServiceManager; import com.intellij.openapi.project.Project; import com.intellij.openapi.util.NotNullLazyKey; import com.intellij.psi.search.GlobalSearchScope; -import com.intellij.psi.search.PsiShortNamesCache; import org.jetbrains.annotations.NonNls; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -112,24 +111,6 @@ public abstract class JavaPsiFacade { @NotNull public abstract PsiResolveHelper getResolveHelper(); - /** - * Returns the short name cache for the project, which can be used to locate files, classes, - * methods and fields by non-qualified names. - * - * @return the short name cache instance. - */ - @NotNull - public abstract PsiShortNamesCache getShortNamesCache(); - - /** - * Registers a custom short name cache implementation for the project, which is used - * in addition to the standard IDEA implementation. Should not be used by most plugins. - * - * @param cache the short name cache instance. - * @deprecated register cache via extension - */ - public abstract void registerShortNamesCache(@NotNull PsiShortNamesCache cache); - /** * Initiates a migrate refactoring. The refactoring is finished when * {@link com.intellij.psi.PsiMigration#finish()} is called. diff --git a/java/openapi/src/com/intellij/psi/search/PsiShortNamesCache.java b/java/openapi/src/com/intellij/psi/search/PsiShortNamesCache.java index 98c433671412..57b05bccec8d 100644 --- a/java/openapi/src/com/intellij/psi/search/PsiShortNamesCache.java +++ b/java/openapi/src/com/intellij/psi/search/PsiShortNamesCache.java @@ -15,7 +15,9 @@ */ package com.intellij.psi.search; +import com.intellij.openapi.components.ServiceManager; import com.intellij.openapi.extensions.ExtensionPointName; +import com.intellij.openapi.project.Project; import com.intellij.psi.*; import com.intellij.util.ArrayUtil; import com.intellij.util.containers.HashSet; @@ -29,13 +31,18 @@ import org.jetbrains.annotations.NotNull; * @see JavaPsiFacade#getShortNamesCache() */ public abstract class PsiShortNamesCache { - public static final ExtensionPointName EP_NAME = ExtensionPointName.create("com.intellij.java.shortNamesCache"); - /** - * Initializes the cache. To be used by custom PsiShortNameCache implementations + * Return the composite short names cache, uniting all short name cache instances registered via extensions. + * + * @param project the project to return the cache for. + * @return the cache instance. */ - public void runStartupActivity() { + + public static PsiShortNamesCache getInstance(Project project) { + return ServiceManager.getService(project, PsiShortNamesCache.class); } + + public static final ExtensionPointName EP_NAME = ExtensionPointName.create("com.intellij.java.shortNamesCache"); /** * Returns the list of files with the specified name. diff --git a/plugins/android/src/org/jetbrains/android/dom/converters/OnClickConverter.java b/plugins/android/src/org/jetbrains/android/dom/converters/OnClickConverter.java index fb3b26f4fa32..abd1d86db155 100644 --- a/plugins/android/src/org/jetbrains/android/dom/converters/OnClickConverter.java +++ b/plugins/android/src/org/jetbrains/android/dom/converters/OnClickConverter.java @@ -77,8 +77,7 @@ public class OnClickConverter extends Converter implements CustomReferen } final Project project = myElement.getProject(); - final JavaPsiFacade psiFacade = JavaPsiFacade.getInstance(project); - final PsiShortNamesCache cache = psiFacade.getShortNamesCache(); + final PsiShortNamesCache cache = PsiShortNamesCache.getInstance(project); final PsiMethod[] methods = cache.getMethodsByName(methodName, GlobalSearchScope.projectScope(project)); if (methods.length == 0) { diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/annotator/intentions/GroovyStaticImportMethodFix.java b/plugins/groovy/src/org/jetbrains/plugins/groovy/annotator/intentions/GroovyStaticImportMethodFix.java index b7051754d9c6..4293d647ff48 100644 --- a/plugins/groovy/src/org/jetbrains/plugins/groovy/annotator/intentions/GroovyStaticImportMethodFix.java +++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/annotator/intentions/GroovyStaticImportMethodFix.java @@ -96,8 +96,7 @@ public class GroovyStaticImportMethodFix implements IntentionAction { @NotNull private List getMethodsToImport() { - final JavaPsiFacade facade = JavaPsiFacade.getInstance(myMethodCall.getProject()); - PsiShortNamesCache cache = facade.getShortNamesCache(); + PsiShortNamesCache cache = PsiShortNamesCache.getInstance(myMethodCall.getProject()); GrMethodCall element = myMethodCall.getElement(); LOG.assertTrue(element != null); diff --git a/plugins/junit/src/com/intellij/execution/ConfigurationUtil.java b/plugins/junit/src/com/intellij/execution/ConfigurationUtil.java index 62924233e351..2fb6926c3925 100644 --- a/plugins/junit/src/com/intellij/execution/ConfigurationUtil.java +++ b/plugins/junit/src/com/intellij/execution/ConfigurationUtil.java @@ -26,6 +26,7 @@ import com.intellij.psi.*; import com.intellij.psi.search.GlobalSearchScope; import com.intellij.psi.search.PsiElementProcessor; import com.intellij.psi.search.PsiElementProcessorAdapter; +import com.intellij.psi.search.PsiShortNamesCache; import com.intellij.psi.search.searches.AnnotatedMembersSearch; import com.intellij.psi.search.searches.ClassInheritorsSearch; import com.intellij.psi.util.PsiUtilBase; @@ -54,7 +55,7 @@ public class ConfigurationUtil { final PsiMethod[] suiteMethods = ApplicationManager.getApplication().runReadAction( new Computable() { public PsiMethod[] compute() { - return JavaPsiFacade.getInstance(project).getShortNamesCache().getMethodsByName(JUnitUtil.SUITE_METHOD_NAME, scope); + return PsiShortNamesCache.getInstance(project).getMethodsByName(JUnitUtil.SUITE_METHOD_NAME, scope); } } ); diff --git a/plugins/ui-designer/src/com/intellij/uiDesigner/GuiDesignerConfigurable.java b/plugins/ui-designer/src/com/intellij/uiDesigner/GuiDesignerConfigurable.java index 53bc0bf2f915..de5fca8b6356 100644 --- a/plugins/ui-designer/src/com/intellij/uiDesigner/GuiDesignerConfigurable.java +++ b/plugins/ui-designer/src/com/intellij/uiDesigner/GuiDesignerConfigurable.java @@ -165,7 +165,7 @@ public final class GuiDesignerConfigurable implements SearchableConfigurable { * Removes all generated sources */ private void vanishGeneratedSources() { - final PsiShortNamesCache cache = JavaPsiFacade.getInstance(myProject).getShortNamesCache(); + final PsiShortNamesCache cache = PsiShortNamesCache.getInstance(myProject); final PsiMethod[] methods = cache.getMethodsByName(AsmCodeGenerator.SETUP_METHOD_NAME, GlobalSearchScope.projectScope(myProject)); CodeInsightUtil.preparePsiElementsForWrite(methods); diff --git a/resources/src/META-INF/IdeaPlugin.xml b/resources/src/META-INF/IdeaPlugin.xml index db4e03c696ea..7321231518e6 100644 --- a/resources/src/META-INF/IdeaPlugin.xml +++ b/resources/src/META-INF/IdeaPlugin.xml @@ -323,6 +323,11 @@ + + + +