Skip to content

Commit 1c28061

Browse files
committed
Move caret to first JSON error in variables editor on query execution, and use JSON editor error message when available (#64)
1 parent 6e3d0b8 commit 1c28061

File tree

1 file changed

+26
-13
lines changed

1 file changed

+26
-13
lines changed

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

Lines changed: 26 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,12 @@
1111
import com.google.common.collect.Maps;
1212
import com.google.gson.Gson;
1313
import com.google.gson.JsonSyntaxException;
14+
import com.intellij.codeInsight.CodeSmellInfo;
1415
import com.intellij.codeInsight.actions.ReformatCodeProcessor;
1516
import com.intellij.codeInsight.daemon.DaemonCodeAnalyzer;
17+
import com.intellij.codeInsight.hint.HintManager;
18+
import com.intellij.codeInsight.hint.HintManagerImpl;
19+
import com.intellij.codeInsight.hint.HintUtil;
1620
import com.intellij.execution.filters.UrlFilter;
1721
import com.intellij.execution.process.OSProcessHandler;
1822
import com.intellij.execution.process.ProcessAdapter;
@@ -63,6 +67,7 @@
6367
import com.intellij.openapi.ui.ComboBox;
6468
import com.intellij.openapi.util.Disposer;
6569
import com.intellij.openapi.util.Key;
70+
import com.intellij.openapi.vcs.CodeSmellDetector;
6671
import com.intellij.openapi.vfs.VirtualFile;
6772
import com.intellij.openapi.vfs.VirtualFileManager;
6873
import com.intellij.openapi.wm.ToolWindow;
@@ -71,10 +76,7 @@
7176
import com.intellij.psi.PsiFile;
7277
import com.intellij.psi.util.PsiUtilCore;
7378
import com.intellij.testFramework.LightVirtualFile;
74-
import com.intellij.ui.EditorNotifications;
75-
import com.intellij.ui.IdeBorderFactory;
76-
import com.intellij.ui.OnePixelSplitter;
77-
import com.intellij.ui.SideBorder;
79+
import com.intellij.ui.*;
7880
import com.intellij.ui.components.JBLabel;
7981
import com.intellij.ui.components.panels.NonOpaquePanel;
8082
import com.intellij.ui.content.Content;
@@ -409,16 +411,27 @@ public void executeGraphQL(Editor editor, VirtualFile virtualFile) {
409411
try {
410412
requestData.put("variables", getQueryVariables(editor));
411413
} catch (JsonSyntaxException jse) {
412-
if (myToolWindowManagerInitialized) {
413-
myToolWindowManager.logCurrentErrors(ContainerUtil.immutableList(
414-
new JSGraphQLErrorResult(
415-
"Failed to parse variables as JSON: " + jse.getMessage(),
416-
virtualFile.getPath(),
417-
"Error",
418-
0,
419-
0))
420-
, true);
414+
Editor errorEditor = editor.getUserData(GRAPH_QL_VARIABLES_EDITOR);
415+
String errorMessage = jse.getMessage();
416+
if(errorEditor != null) {
417+
errorEditor.getContentComponent().grabFocus();
418+
final VirtualFile errorFile = FileDocumentManager.getInstance().getFile(errorEditor.getDocument());
419+
if (errorFile != null) {
420+
final List<CodeSmellInfo> errors = CodeSmellDetector.getInstance(myProject).findCodeSmells(ContainerUtil.list(errorFile));
421+
for (CodeSmellInfo error : errors) {
422+
errorMessage = error.getDescription();
423+
errorEditor.getCaretModel().moveToOffset(error.getTextRange().getStartOffset());
424+
break;
425+
}
426+
}
427+
} else {
428+
errorEditor = editor;
421429
}
430+
final HintManagerImpl hintManager = HintManagerImpl.getInstanceImpl();
431+
final JComponent label = HintUtil.createErrorLabel("Failed to parse variables as JSON:\n" + errorMessage);
432+
final LightweightHint lightweightHint = new LightweightHint(label);
433+
final Point hintPosition = hintManager.getHintPosition(lightweightHint, errorEditor, HintManager.UNDER);
434+
hintManager.showEditorHint(lightweightHint, editor, hintPosition, 0, 10000, false, HintManager.UNDER);
422435
return;
423436
}
424437
final String requestJson = new Gson().toJson(requestData);

0 commit comments

Comments
 (0)