59 lines
2.0 KiB
Java
59 lines
2.0 KiB
Java
package com.baeldung.intellij.stackoverflowplugin;
|
|
|
|
import com.intellij.ide.BrowserUtil;
|
|
import com.intellij.lang.Language;
|
|
import com.intellij.openapi.actionSystem.ActionManager;
|
|
import com.intellij.openapi.actionSystem.AnAction;
|
|
import com.intellij.openapi.actionSystem.AnActionEvent;
|
|
import com.intellij.openapi.actionSystem.CommonDataKeys;
|
|
import com.intellij.openapi.editor.CaretModel;
|
|
import com.intellij.openapi.editor.Editor;
|
|
import com.intellij.psi.PsiFile;
|
|
|
|
public class SearchAction extends AnAction
|
|
{
|
|
/**
|
|
* Convert selected text to a URL friendly string.
|
|
* @param e
|
|
*/
|
|
@Override
|
|
public void actionPerformed(AnActionEvent e)
|
|
{
|
|
final Editor editor = e.getRequiredData(CommonDataKeys.EDITOR);
|
|
CaretModel caretModel = editor.getCaretModel();
|
|
|
|
// For searches from the editor, we should also get file type information
|
|
// to help add scope to the search using the Stack overflow search syntax.
|
|
//
|
|
// https://stackoverflow.com/help/searching
|
|
|
|
String languageTag = "";
|
|
PsiFile file = e.getData(CommonDataKeys.PSI_FILE);
|
|
if(file != null)
|
|
{
|
|
Language lang = e.getData(CommonDataKeys.PSI_FILE).getLanguage();
|
|
languageTag = "+[" + lang.getDisplayName().toLowerCase() + "]";
|
|
}
|
|
|
|
// The update method below is only called periodically so need
|
|
// to be careful to check for selected text
|
|
if(caretModel.getCurrentCaret().hasSelection())
|
|
{
|
|
String query = caretModel.getCurrentCaret().getSelectedText().replace(' ', '+') + languageTag;
|
|
BrowserUtil.browse("https://stackoverflow.com/search?q=" + query);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Only make this action visible when text is selected.
|
|
* @param e
|
|
*/
|
|
@Override
|
|
public void update(AnActionEvent e)
|
|
{
|
|
final Editor editor = e.getRequiredData(CommonDataKeys.EDITOR);
|
|
CaretModel caretModel = editor.getCaretModel();
|
|
e.getPresentation().setEnabledAndVisible(caretModel.getCurrentCaret().hasSelection());
|
|
}
|
|
}
|