Skip to content

Commit 08a2d74

Browse files
Merge branch 'master' of https://github.com/breandan/idear
2 parents 96c346b + 97e2a37 commit 08a2d74

5 files changed

Lines changed: 90 additions & 1 deletion

File tree

META-INF/plugin.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,7 @@
5252
<actionRecognizer implementation="com.jetbrains.idear.actions.recognition.FindUsagesActionRecognizer"/>
5353
<actionRecognizer implementation="com.jetbrains.idear.actions.recognition.NavigateToDeclarationRecognizer"/>
5454
<actionRecognizer implementation="com.jetbrains.idear.actions.recognition.RenameActionRecognizer"/>
55+
<actionRecognizer implementation="com.jetbrains.idear.actions.recognition.SurroundWithNoNullCheckRecognizer"/>
5556
</extensions>
5657

5758

src/com/jetbrains/idear/actions/ExecuteActionByCommandText.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ public void actionPerformed(AnActionEvent e) {
1919
// String text = "idea extract to variable name";
2020
// String text = "idea inline";
2121

22-
String text = "idra debug";
22+
String text = "surround with not null check";
2323

2424
TextToActionConverter provider = new TextToActionConverter(e.getDataContext());
2525
ActionCallInfo info = provider.extractAction(text);
Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,75 @@
1+
package com.jetbrains.idear.actions.recognition;
2+
3+
import com.intellij.codeInsight.daemon.impl.HighlightInfo;
4+
import com.intellij.codeInsight.daemon.impl.ShowIntentionsPass;
5+
import com.intellij.ide.DataManager;
6+
import com.intellij.ide.actions.ApplyIntentionAction;
7+
import com.intellij.openapi.actionSystem.*;
8+
import com.intellij.openapi.application.ApplicationManager;
9+
import com.intellij.openapi.editor.Editor;
10+
import com.intellij.openapi.project.Project;
11+
import com.intellij.openapi.util.Computable;
12+
import com.intellij.psi.PsiDocumentManager;
13+
import com.intellij.psi.PsiFile;
14+
import org.jetbrains.annotations.NotNull;
15+
16+
import java.util.ArrayList;
17+
import java.util.List;
18+
19+
public class SurroundWithNoNullCheckRecognizer implements ActionRecognizer {
20+
21+
@Override
22+
public boolean isMatching(@NotNull String sentence) {
23+
return sentence.contains("check") && sentence.contains("not");
24+
}
25+
26+
@Override
27+
public ActionCallInfo getActionInfo(@NotNull String sentence, DataContext dataContext) {
28+
final Editor editor = CommonDataKeys.EDITOR.getData(dataContext);
29+
final Project project = CommonDataKeys.PROJECT.getData(dataContext);
30+
31+
if (project == null || editor == null) return null;
32+
33+
PsiFile file = PsiDocumentManager.getInstance(project).getPsiFile(editor.getDocument());
34+
35+
if (file == null) return null;
36+
37+
38+
final ShowIntentionsPass.IntentionsInfo info = new ShowIntentionsPass.IntentionsInfo();
39+
ApplicationManager.getApplication().runReadAction(() -> {
40+
ShowIntentionsPass.getActionsToShow(editor, file, info, -1);
41+
});
42+
if (info.isEmpty()) return null;
43+
44+
final List<HighlightInfo.IntentionActionDescriptor> actions = new ArrayList<>();
45+
actions.addAll(info.errorFixesToShow);
46+
actions.addAll(info.inspectionFixesToShow);
47+
actions.addAll(info.intentionsToShow);
48+
49+
final ApplyIntentionAction[] result = new ApplyIntentionAction[actions.size()];
50+
for (int i = 0; i < result.length; i++) {
51+
final HighlightInfo.IntentionActionDescriptor descriptor = actions.get(i);
52+
final String actionText = ApplicationManager.getApplication().runReadAction((Computable<String>) () -> descriptor.getAction().getText());
53+
result[i] = new ApplyIntentionAction(descriptor, actionText, editor, file);
54+
}
55+
56+
57+
ApplyIntentionAction nNull = result[1];
58+
59+
DataManager manager = DataManager.getInstance();
60+
if (manager != null) {
61+
DataContext context = manager.getDataContext(editor.getContentComponent());
62+
63+
nNull.actionPerformed(new AnActionEvent(
64+
null, context, "",
65+
new Presentation("surround with not null"),
66+
ActionManager.getInstance(),
67+
0)
68+
);
69+
}
70+
71+
return null;
72+
}
73+
}
74+
75+

src/com/jetbrains/idear/asr/ASRServiceImpl.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
import com.intellij.util.Consumer;
99
import com.jetbrains.idear.GoogleHelper;
1010
import com.jetbrains.idear.actions.ExecuteVoiceCommandAction;
11+
import com.jetbrains.idear.actions.recognition.SurroundWithNoNullCheckRecognizer;
1112
import com.jetbrains.idear.recognizer.CustomLiveSpeechRecognizer;
1213
import com.jetbrains.idear.recognizer.CustomMicrophone;
1314
import com.jetbrains.idear.tts.TTSService;
@@ -300,6 +301,15 @@ else if (c.startsWith("step")) {
300301
else if (c.startsWith("tell me a joke")) {
301302
tellJoke();
302303
}
304+
305+
else if (c.contains("check")) {
306+
SurroundWithNoNullCheckRecognizer r = new SurroundWithNoNullCheckRecognizer();
307+
if (r.isMatching(c)) {
308+
DataManager.getInstance().getDataContextFromFocus().doWhenDone((Consumer<DataContext>) dataContext -> {
309+
r.getActionInfo(c, dataContext);
310+
});
311+
}
312+
}
303313
}
304314

305315
private void tellJoke() {

src/resources/com.jetbrains.idear/grammars/command.gram

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,8 @@ grammar dialog;
5656

5757
<google_command> = (okay | ok) google;
5858

59+
<check_not_null> = check not null;
60+
5961
<joke_command> = tell me a joke | who is there | wait who | who are you;
6062

6163
<navigate_command> = navigate;
@@ -69,4 +71,5 @@ public <command> = <init_command> |
6971
<google_command> |
7072
<debug_command> |
7173
<joke_command> |
74+
<check_not_null> |
7275
<keyboard_command>;

0 commit comments

Comments
 (0)