養髮神器:重複程式碼一鍵生成,從此遠離加班,告別禿頭!

2023-03-01 12:00:40

一、背景

作為Java開發,經常需要根據資料庫某個欄位獲取對應的列舉類,然後就要在列舉類新增如下的方法:

    public static TestEnum getByCode(Integer code) {
        return Arrays.asList(values()).stream().filter(i -> i.getCode().equals(code)).findFirst().orElse(null);
    }

這種方法在不同列舉類的實現都是很相似的,有什麼辦法可以避免這種重複勞動呢?
  於是,我就想到了寫一個Idea外掛去自動生成程式碼,EnumHepler應運而生。

二、外掛展示

目前該外掛已經發布,在Marketplace搜尋EnumHepler下載安裝即可體驗,有其他建議大家也可以留言。

使用教學:

  1. 複製你想要查詢的列舉欄位
  2. 生成對應的列舉方法

三、踩坑總結

該專案程式碼不是很複雜,就不在這裡貼出來了,如果你感興趣的話可以檢視原始碼,網上也有一些不錯的外掛開發教學這裡簡單列一下。

相關教學:

你們要的Intellij IDEA 外掛開發祕籍,來了!
IDEA外掛開發實戰
官方檔案:https://plugins.jetbrains.com/docs/intellij/plugins-quick-start.html

但是在開發過程中還是踩了不少坑,覺得有必要在這裡記錄下。

問題1: 外掛開發建立專案有兩種方式,第一種是選擇Intelij Platform Plugin直接建立,第二種是選擇Gradle的方式建立,開始選擇了第一種方式,ProjectSDK選擇時沒有IntelliJ Platform Plugin SDK這個選項!

解決方案: 後面發現這個SDK是需要手動建立的,Project Structure-->SDKs-->點選+號新增。而且對於這兩種方式,如果你不需要引入其他第三方依賴,那麼推薦第一種方式建立專案更簡單,畢竟Gradle設定太麻煩而且有很多人不熟悉Gradle。

問題2: 控制檯顯示Caused by: java.lang.ClassNotFoundException

解決方案: 後來發現包依賴不全,需要在plugin.xml新增如下兩個包。

    <depends>com.intellij.modules.lang</depends>
    <depends>com.intellij.modules.java</depends>

問題3: 通過New-->Plugin Devkit-->Action建立的action,快捷鍵觸發無效!

解決方案: 看了官方檔案才發現,idea建立的action設定是不全的,只有預設的情況,我的筆電是Mac OS系統需要在plugin.xml新增設定如下:

 <keyboard-shortcut
                    keymap="$default"
                    first-keystroke="control shift J"/>

            <!-- ...except the "Mac OS X" keymap and its children. -->
            <keyboard-shortcut
                    keymap="Mac OS X"
                    first-keystroke="control shift J"
                    remove="true"/>

            <!-- The "Mac OS X 10.5+" keymap and its children will have only
            this keyboard shortcut for this action. -->
            <keyboard-shortcut
                    keymap="Mac OS X 10.5+"
                    first-keystroke="control shift J"
                    replace-all="true"/>

問題4: 當時程式碼寫完功能也測試完了,準備打包才發現找不到打包方式