Skip to content

Commit 28811d7

Browse files
committed
Removes GraphQL schema from scratch file formats (#14)
1 parent 5633b88 commit 28811d7

File tree

6 files changed

+65
-19
lines changed

6 files changed

+65
-19
lines changed

CHANGELOG.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,9 @@
1+
## 1.3.2 (2016-06-23)
2+
3+
Changes:
4+
5+
- Closes #14 Remove GraphQL schema from scratch file formats
6+
17
## 1.3.1 (2016-06-09)
28

39
Changes:

resources/META-INF/plugin.xml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
<idea-plugin version="2">
1111
<id>com.intellij.lang.jsgraphql</id>
1212
<name>JS GraphQL</name>
13-
<version>1.3.1</version>
13+
<version>1.3.2</version>
1414
<vendor>Jim Kynde Meyer - [email protected]</vendor>
1515

1616
<description><![CDATA[
@@ -29,6 +29,7 @@
2929

3030
<change-notes><![CDATA[
3131
<ul>
32+
<li>1.3.2: Removes GraphQL schema from scratch file formats.</li>
3233
<li>1.3.1: Fixes compatibility issue with WebStorm 2016.2 EAP.</li>
3334
<li>1.3.0: Adds support for GraphQL Scratch Files. Query results are now formatted.</li>
3435
<li>1.2.0: Contextual query support: Execute buffer, selection, or named operations at the caret position in the GraphQL editor</li>

src/main/com/intellij/lang/jsgraphql/ide/project/JSGraphQLLanguageUIProjectService.java

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -305,12 +305,14 @@ private void insertEditorHeaderComponentIfApplicable(@NotNull FileEditorManager
305305
if(editor.getHeaderComponent() instanceof JSGraphQLEditorHeaderComponent) {
306306
return;
307307
}
308-
final JComponent headerComponent = createHeaderComponent(fileEditor, editor);
309-
editor.setHeaderComponent(headerComponent);
310-
if(editor instanceof EditorEx) {
311-
((EditorEx) editor).setPermanentHeaderComponent(headerComponent);
312-
}
313-
editor.getScrollingModel().scrollVertically(-1000);
308+
UIUtil.invokeLaterIfNeeded(() -> { // ensure components are created on the swing thread
309+
final JComponent headerComponent = createHeaderComponent(fileEditor, editor);
310+
editor.setHeaderComponent(headerComponent);
311+
if(editor instanceof EditorEx) {
312+
((EditorEx) editor).setPermanentHeaderComponent(headerComponent);
313+
}
314+
editor.getScrollingModel().scrollVertically(-1000);
315+
});
314316
}
315317
}
316318
}

src/main/com/intellij/lang/jsgraphql/schema/JSGraphQLSchemaFileType.java

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,13 @@
77
*/
88
package com.intellij.lang.jsgraphql.schema;
99

10+
import com.intellij.ide.scratch.ScratchFileType;
1011
import com.intellij.lang.jsgraphql.icons.JSGraphQLIcons;
1112
import com.intellij.openapi.fileTypes.LanguageFileType;
13+
import com.intellij.openapi.project.Project;
14+
import com.intellij.openapi.vfs.VirtualFile;
15+
import com.intellij.psi.PsiFile;
16+
import com.intellij.psi.PsiManager;
1217
import org.jetbrains.annotations.NotNull;
1318
import org.jetbrains.annotations.Nullable;
1419

@@ -45,4 +50,20 @@ public String getDefaultExtension() {
4550
public Icon getIcon() {
4651
return JSGraphQLIcons.Files.GraphQLSchema;
4752
}
53+
54+
/**
55+
* Scratch virtual files don't return their actual file type, so we need to find the PsiFile to determine
56+
* whether it's a GraphQL schema scratch file
57+
* @return true if the scratch file contains a GraphQL Schema PsiFile
58+
*/
59+
public static boolean isGraphQLScratchFile(Project project, VirtualFile file) {
60+
if(file.getFileType() instanceof ScratchFileType) {
61+
final PsiManager psiManager = PsiManager.getInstance(project);
62+
final PsiFile psiFile = psiManager.findFile(file);
63+
if(psiFile != null && psiFile.getFileType() == JSGraphQLSchemaFileType.INSTANCE) {
64+
return true;
65+
}
66+
}
67+
return false;
68+
}
4869
}

src/main/com/intellij/lang/jsgraphql/schema/JSGraphQLSchemaLanguage.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,12 @@
77
*/
88
package com.intellij.lang.jsgraphql.schema;
99

10+
import com.intellij.lang.DependentLanguage;
1011
import com.intellij.lang.Language;
1112

12-
public class JSGraphQLSchemaLanguage extends Language {
13+
// implement DependentLanguage to prevent Scratch files
14+
// (see com.intellij.ide.scratch.ScratchFileServiceImpl.MyLanguages.getAvailableValues())
15+
public class JSGraphQLSchemaLanguage extends Language implements DependentLanguage {
1316
public static final JSGraphQLSchemaLanguage INSTANCE = new JSGraphQLSchemaLanguage();
1417
public static final String LANGUAGE_ID = "GraphQL Schema";
1518

src/main/com/intellij/lang/jsgraphql/schema/ide/project/JSGraphQLSchemaLanguageProjectService.java

Lines changed: 24 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,12 @@ public JSGraphQLSchemaLanguageProjectService(@NotNull final Project project) {
7171
final MessageBusConnection connection = project.getMessageBus().connect(this);
7272
connection.subscribe(FileEditorManagerListener.FILE_EDITOR_MANAGER, this);
7373
connection.subscribe(JSGraphQLLanguageServiceListener.TOPIC, this);
74+
75+
// mark restored schema files as viewers
76+
final FileEditorManager fileEditorManager = FileEditorManager.getInstance(project);
77+
for (VirtualFile virtualFile : fileEditorManager.getOpenFiles()) {
78+
markSchemaFileAsViewer(fileEditorManager, virtualFile);
79+
}
7480
}
7581

7682

@@ -174,27 +180,34 @@ public PsiElement getReference(PsiElement element) {
174180

175181
@Override
176182
public void fileOpened(@NotNull FileEditorManager source, @NotNull VirtualFile file) {
177-
if(file.getFileType() == JSGraphQLSchemaFileType.INSTANCE) {
178-
// mark the schema editor as viewer only
179-
final FileEditor fileEditor = source.getSelectedEditor(file);
180-
if (fileEditor instanceof TextEditor) {
181-
final Editor editor = ((TextEditor) fileEditor).getEditor();
182-
if (editor instanceof EditorEx) {
183-
((EditorEx) editor).setViewer(true);
184-
}
185-
}
186-
}
183+
markSchemaFileAsViewer(source, file);
187184
}
188185

189186
@Override
190187
public void fileClosed(@NotNull FileEditorManager source, @NotNull VirtualFile file) {}
191188

192189
@Override
193-
public void selectionChanged(@NotNull FileEditorManagerEvent event) {}
190+
public void selectionChanged(@NotNull FileEditorManagerEvent event) {
191+
if(event.getNewFile() != null) {
192+
markSchemaFileAsViewer(event.getManager(), event.getNewFile());
193+
}
194+
}
194195

195196
@Override
196197
public void dispose() {}
197198

199+
private void markSchemaFileAsViewer(@NotNull FileEditorManager source, @NotNull VirtualFile file) {
200+
if(file.getFileType() == JSGraphQLSchemaFileType.INSTANCE || JSGraphQLSchemaFileType.isGraphQLScratchFile(project, file)) {
201+
// mark the schema editor as viewer only
202+
final FileEditor fileEditor = source.getSelectedEditor(file);
203+
if (fileEditor instanceof TextEditor) {
204+
final Editor editor = ((TextEditor) fileEditor).getEditor();
205+
if (editor instanceof EditorEx) {
206+
((EditorEx) editor).setViewer(true);
207+
}
208+
}
209+
}
210+
}
198211

199212
// ---- JSGraphQLLanguageServiceListener ----
200213

0 commit comments

Comments
 (0)