2828import com .intellij .notification .Notification ;
2929import com .intellij .notification .NotificationType ;
3030import com .intellij .notification .Notifications ;
31+ import com .intellij .openapi .Disposable ;
3132import com .intellij .openapi .components .ServiceManager ;
3233import com .intellij .openapi .diagnostic .Logger ;
3334import com .intellij .openapi .extensions .PluginDescriptor ;
6263/**
6364 * Enables cross-file searches for PSI references
6465 */
65- public class GraphQLPsiSearchHelper {
66+ public class GraphQLPsiSearchHelper implements Disposable {
6667
6768 private static final Key <PsiFile > GRAPHQL_BUILT_IN_SCHEMA_PSI_FILE = Key .create ("JSGraphQL.built-in.schema.psi-file" );
6869 private static final Key <PsiFile > RELAY_MODERN_DIRECTIVES_SCHEMA_PSI_FILE = Key .create ("JSGraphQL.relay.modern.directives.schema.psi-file" );
@@ -72,7 +73,7 @@ public class GraphQLPsiSearchHelper {
7273 private final Project myProject ;
7374 private final Map <String , GlobalSearchScope > fileNameToSchemaScope = Maps .newConcurrentMap ();
7475 private final PluginDescriptor pluginDescriptor ;
75- private final GlobalSearchScope myGlobalSearchScope ;
76+ private final GlobalSearchScope myGlobalScope ;
7677 private final GlobalSearchScope allBuiltInSchemaScopes ;
7778 private final GraphQLConfigManager graphQLConfigManager ;
7879
@@ -106,8 +107,11 @@ public GraphQLPsiSearchHelper(@NotNull final Project project) {
106107 .union (defaultProjectFileScope );
107108
108109 final FileType [] searchScopeFileTypes = GraphQLFindUsagesUtil .getService ().getIncludedFileTypes ().toArray (FileType .EMPTY_ARRAY );
109- myGlobalSearchScope = GlobalSearchScope .getScopeRestrictedByFileTypes (GlobalSearchScope .projectScope (myProject ), searchScopeFileTypes ).union (allBuiltInSchemaScopes );
110- project .getMessageBus ().connect ().subscribe (PsiManagerImpl .ANY_PSI_CHANGE_TOPIC , new AnyPsiChangeListener () {
110+ myGlobalScope = GlobalSearchScope
111+ .getScopeRestrictedByFileTypes (GlobalSearchScope .projectScope (myProject ), searchScopeFileTypes )
112+ .union (allBuiltInSchemaScopes );
113+
114+ project .getMessageBus ().connect (this ).subscribe (PsiManagerImpl .ANY_PSI_CHANGE_TOPIC , new AnyPsiChangeListener () {
111115 @ Override
112116 public void beforePsiChanged (boolean isPhysical ) {
113117 // clear the cache on each PSI change
@@ -135,11 +139,11 @@ public GlobalSearchScope getSchemaScope(@NotNull PsiElement element) {
135139 final NamedScope schemaScope = graphQLConfigManager .getSchemaScope (virtualFile );
136140 if (schemaScope != null ) {
137141 final GlobalSearchScope filterSearchScope = GlobalSearchScopesCore .filterScope (myProject , schemaScope );
138- return myGlobalSearchScope .intersectWith (filterSearchScope .union (allBuiltInSchemaScopes ));
142+ return myGlobalScope .intersectWith (filterSearchScope .union (allBuiltInSchemaScopes ));
139143 }
140144
141145 // default is entire project limited by relevant file types
142- return myGlobalSearchScope ;
146+ return myGlobalScope ;
143147 });
144148 }
145149
@@ -152,7 +156,7 @@ public GlobalSearchScope getUseScope(@NotNull PsiElement element) {
152156 if (element .getContainingFile ().getVirtualFile () != null ) {
153157 return getSchemaScope (element );
154158 } else {
155- return myGlobalSearchScope ;
159+ return myGlobalScope ;
156160 }
157161 }
158162
@@ -424,4 +428,8 @@ public void processAdditionalBuiltInPsiFiles(@NotNull GlobalSearchScope schemaSc
424428 consumer .accept (relayModernDirectivesSchema );
425429 }
426430 }
431+
432+ @ Override
433+ public void dispose () {
434+ }
427435}
0 commit comments