1010import com .google .common .collect .Maps ;
1111import com .intellij .json .JsonFileType ;
1212import com .intellij .lang .jsgraphql .GraphQLFileType ;
13- import com .intellij .lang .jsgraphql .GraphQLLanguage ;
14- import com .intellij .lang .jsgraphql .GraphQLSettings ;
1513import com .intellij .lang .jsgraphql .endpoint .ide .project .JSGraphQLEndpointNamedTypeRegistry ;
16- import com .intellij .lang .jsgraphql .ide .introspection .GraphQLIntrospectionService ;
14+ import com .intellij .lang .jsgraphql .ide .introspection .GraphQLIntrospectionFilesManager ;
1715import com .intellij .lang .jsgraphql .ide .project .graphqlconfig .GraphQLConfigManager ;
1816import com .intellij .lang .jsgraphql .ide .search .GraphQLPsiSearchHelper ;
19- import com .intellij .lang .jsgraphql .psi .GraphQLFile ;
2017import com .intellij .lang .jsgraphql .psi .GraphQLPsiUtil ;
2118import com .intellij .lang .jsgraphql .types .GraphQLException ;
2219import com .intellij .lang .jsgraphql .types .InvalidSyntaxError ;
3128import com .intellij .openapi .vfs .VirtualFile ;
3229import com .intellij .psi .PsiElement ;
3330import com .intellij .psi .PsiFile ;
34- import com .intellij .psi .PsiFileFactory ;
3531import com .intellij .psi .PsiManager ;
3632import com .intellij .psi .search .FileTypeIndex ;
3733import com .intellij .psi .search .GlobalSearchScope ;
38- import com .intellij .psi .util .CachedValueProvider ;
39- import com .intellij .psi .util .CachedValuesManager ;
4034import com .intellij .util .TimeoutUtil ;
4135import org .jetbrains .annotations .NotNull ;
4236
43- import java .io .IOException ;
4437import java .util .ArrayList ;
4538import java .util .Collections ;
4639import java .util .List ;
4740import java .util .Map ;
4841
49- import static com .intellij .lang .jsgraphql .schema .GraphQLSchemaKeys .*;
50-
5142public class GraphQLRegistryProvider implements Disposable {
5243
5344 private static final Logger LOG = Logger .getInstance (GraphQLRegistryProvider .class );
5445
5546 private final GraphQLPsiSearchHelper graphQLPsiSearchHelper ;
56- private final Project project ;
47+ private final Project myProject ;
5748 private final GlobalSearchScope graphQLFilesScope ;
5849 private final GlobalSearchScope jsonIntrospectionScope ;
5950 private final PsiManager psiManager ;
6051 private final JSGraphQLEndpointNamedTypeRegistry graphQLEndpointNamedTypeRegistry ;
6152 private final GraphQLConfigManager graphQLConfigManager ;
62- private final GraphQLSettings mySettings ;
6353
6454 private final Map <GlobalSearchScope , GraphQLRegistryInfo > scopeToRegistry = Maps .newConcurrentMap ();
6555
@@ -68,15 +58,14 @@ public static GraphQLRegistryProvider getInstance(@NotNull Project project) {
6858 }
6959
7060 public GraphQLRegistryProvider (Project project ) {
71- this . project = project ;
61+ myProject = project ;
7262 graphQLFilesScope = GlobalSearchScope .getScopeRestrictedByFileTypes (GlobalSearchScope .allScope (project ), GraphQLFileType .INSTANCE );
7363 jsonIntrospectionScope = GlobalSearchScope
7464 .getScopeRestrictedByFileTypes (GlobalSearchScope .projectScope (project ), JsonFileType .INSTANCE );
7565 psiManager = PsiManager .getInstance (project );
7666 graphQLEndpointNamedTypeRegistry = JSGraphQLEndpointNamedTypeRegistry .getService (project );
7767 graphQLPsiSearchHelper = GraphQLPsiSearchHelper .getInstance (project );
7868 graphQLConfigManager = GraphQLConfigManager .getService (project );
79- mySettings = GraphQLSettings .getSettings (project );
8069
8170 project .getMessageBus ().connect (this ).subscribe (GraphQLSchemaChangeTracker .TOPIC , scopeToRegistry ::clear );
8271 }
@@ -140,9 +129,9 @@ public GraphQLRegistryInfo getRegistryInfo(@NotNull PsiElement scopedElement) {
140129
141130 }
142131
143- private boolean processJsonFile (GraphQLSchemaDocumentProcessor processor ,
144- VirtualFile file ,
145- List <GraphQLException > errors ) {
132+ private boolean processJsonFile (@ NotNull GraphQLSchemaDocumentProcessor processor ,
133+ @ NotNull VirtualFile file ,
134+ @ NotNull List <GraphQLException > errors ) {
146135 // only JSON files that are directly referenced as "schemaPath" from the .graphqlconfig will be
147136 // considered within scope, so we can just go ahead and try to turn the JSON into GraphQL
148137 final PsiFile psiFile = psiManager .findFile (file );
@@ -151,28 +140,7 @@ private boolean processJsonFile(GraphQLSchemaDocumentProcessor processor,
151140 }
152141
153142 try {
154- synchronized (GRAPHQL_INTROSPECTION_JSON_TO_SDL ) {
155- GraphQLFile introspectionSDL = CachedValuesManager .getCachedValue (psiFile , GRAPHQL_INTROSPECTION_JSON_TO_SDL , () -> {
156- final String introspectionJsonAsGraphQL =
157- GraphQLIntrospectionService .getInstance (project ).printIntrospectionAsGraphQL (psiFile .getText ());
158- final PsiFileFactory psiFileFactory = PsiFileFactory .getInstance (project );
159- final String fileName = file .getPath ();
160- final GraphQLFile newIntrospectionFile =
161- (GraphQLFile ) psiFileFactory .createFileFromText (fileName , GraphQLLanguage .INSTANCE , introspectionJsonAsGraphQL );
162- newIntrospectionFile .putUserData (IS_GRAPHQL_INTROSPECTION_SDL , true );
163- newIntrospectionFile .putUserData (GRAPHQL_INTROSPECTION_SDL_TO_JSON , psiFile );
164- newIntrospectionFile .getVirtualFile ().putUserData (IS_GRAPHQL_INTROSPECTION_SDL , true );
165- newIntrospectionFile .getVirtualFile ().putUserData (GRAPHQL_INTROSPECTION_SDL_TO_JSON , psiFile );
166- try {
167- newIntrospectionFile .getVirtualFile ().setWritable (false );
168- } catch (IOException e ) {
169- LOG .warn (e );
170- }
171- return CachedValueProvider .Result .create (newIntrospectionFile , psiFile , mySettings .getModificationTracker ());
172- });
173-
174- processor .process (introspectionSDL );
175- }
143+ processor .process (GraphQLIntrospectionFilesManager .getOrCreateIntrospectionSDL (file , psiFile ));
176144 } catch (ProcessCanceledException e ) {
177145 throw e ;
178146 } catch (SchemaProblem e ) {
0 commit comments