티스토리 뷰

[1] update method orveride

기능을 구현하기 전에 먼저 해당 액션이 사용가능한 곳에서만 보일 수 있게 하여야 하는데, 

이는 update메서드를 통해서 적용시킬 수 있다.

 

인텔리 제이가 제공하는 샘플코드는 다음과 같으며

intellij-sdk-code-samples/PopupDialogAction.java at main · JetBrains/intellij-sdk-code-samples (github.com)

 

    @Override
    public void update(@NotNull AnActionEvent e) {
        final PsiFile psiFile = e.getData(CommonDataKeys.PSI_FILE);
        final Editor editor = e.getData(CommonDataKeys.EDITOR);
        boolean visible = false;
        if (psiFile != null && editor != null) {
            visible = isClassElement(psiFile, editor);
        }
        e.getPresentation().setEnabledAndVisible(visible);
    }

 

 

final PsiFile psiFile = e.getData(CommonDataKeys.PSI_FILE);

PsiFile은 파일로부터 계층구조를 읽어오는 인텔리제이가 제공하는 인터페이스이다.  
final Editor editor = e.getData(CommonDataKeys.EDITOR);

Editor는 사용자가 접근한 편집기 (Caret, Cursor등을 알아 올 수 있는 객체)

해당 Caret의 위치가 클래스 요소가 존재하는 곳에 있는지 확인 후 존재할 경우에만 해당 버튼이 활성화 되도록 하였다.

 

 

[2] actionPerformed method orveride

버튼이 클릭되었을 때 동작해야하는 로직을 작성하는 메서드이다.

@Override
    public void actionPerformed(AnActionEvent e) {

        PsiFile psiFile = e.getData(CommonDataKeys.PSI_FILE);
        Editor editor = e.getData(CommonDataKeys.EDITOR);
        if (psiFile == null || editor == null) return;

        PsiElement currentCaretElement = psiFile.findElementAt(editor.getCaretModel().getOffset());
        String menuText = e.getPresentation().getText();
        ResultMapMenu resultMapMenu = ResultMapMenu.findResultMapMenu(menuText);

        if (resultMapMenu == null) return;

        PsiClass psiClass = PsiTreeUtil.getParentOfType(currentCaretElement, PsiClass.class);
        int maxRecursiveCount = resultMapMenu.getMaxRecursiveCount();
        AtomicInteger maxCount = new AtomicInteger(maxRecursiveCount);
        Map<String, ResultMapStructure> resultMap = new HashMap<>();
        extractResultMap(psiClass, resultMap, maxCount);
        String resultMapString =  createResultMapBuilder(resultMap);

        Toolkit.getDefaultToolkit()
                .getSystemClipboard()
                .setContents(new StringSelection(resultMapString), null);
    }

 

메뉴 버튼과, Class 요소를 통해 각각 재귀가능한 횟수, ResultMap으로 바꿔줄 클래스를 지정해주었고,

재귀를 통해 만들어진 Map을 통해 MyBatis의 ResultMap XML파일을 만들어 줄 수 있도록 제작하였다.

 

맨 밑의 Toolkit은 OS Clipboard에 해당 내용을 복사하여 붙여넣기만 하면 바로 사용할 수 있도록 하였다.

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/03   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31
글 보관함