From 17d49b4f09ae02a8785e9e7baf30fe172b3145c6 Mon Sep 17 00:00:00 2001 From: zhaojunxia Date: Wed, 19 Oct 2022 15:42:49 +0800 Subject: [PATCH] feat: add assist tools intellj plugin Signed-off-by: zhaojunxia --- .../resources/META-INF/plugin.xml | 29 ++ .../resources/images/close.png | Bin 0 -> 327 bytes .../resources/images/cloudic_manager.png | Bin 0 -> 630 bytes .../resources/images/gn.png | Bin 0 -> 1945 bytes .../resources/images/napi.png | Bin 0 -> 1213 bytes .../resources/images/search.png | Bin 0 -> 408 bytes .../resources/images/tools_center.png | Bin 0 -> 740 bytes .../com/kh/tools/dialog/ToolCenterDialog.java | 132 +++++++++ .../com/kh/tools/dialog/ToolCenterPanel.form | 280 ++++++++++++++++++ .../com/kh/tools/dialog/ToolCenterPanel.java | 202 +++++++++++++ .../src/com/kh/tools/ng/AssistCenterMenu.java | 43 +++ .../src/com/kh/tools/utils/PluginUtils.java | 62 ++++ 12 files changed, 748 insertions(+) create mode 100644 hdc/assist_tools_IntelliJ_plugin/resources/META-INF/plugin.xml create mode 100644 hdc/assist_tools_IntelliJ_plugin/resources/images/close.png create mode 100644 hdc/assist_tools_IntelliJ_plugin/resources/images/cloudic_manager.png create mode 100644 hdc/assist_tools_IntelliJ_plugin/resources/images/gn.png create mode 100644 hdc/assist_tools_IntelliJ_plugin/resources/images/napi.png create mode 100644 hdc/assist_tools_IntelliJ_plugin/resources/images/search.png create mode 100644 hdc/assist_tools_IntelliJ_plugin/resources/images/tools_center.png create mode 100644 hdc/assist_tools_IntelliJ_plugin/src/com/kh/tools/dialog/ToolCenterDialog.java create mode 100644 hdc/assist_tools_IntelliJ_plugin/src/com/kh/tools/dialog/ToolCenterPanel.form create mode 100644 hdc/assist_tools_IntelliJ_plugin/src/com/kh/tools/dialog/ToolCenterPanel.java create mode 100644 hdc/assist_tools_IntelliJ_plugin/src/com/kh/tools/ng/AssistCenterMenu.java create mode 100644 hdc/assist_tools_IntelliJ_plugin/src/com/kh/tools/utils/PluginUtils.java diff --git a/hdc/assist_tools_IntelliJ_plugin/resources/META-INF/plugin.xml b/hdc/assist_tools_IntelliJ_plugin/resources/META-INF/plugin.xml new file mode 100644 index 00000000..570daa1f --- /dev/null +++ b/hdc/assist_tools_IntelliJ_plugin/resources/META-INF/plugin.xml @@ -0,0 +1,29 @@ + + com.kh.tools.ng + Assist Tools + 1.0 + 深圳开鸿数字产业发展有限公司 + + + + com.intellij.modules.lang + com.sk.ng + com.sk.gn + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/hdc/assist_tools_IntelliJ_plugin/resources/images/close.png b/hdc/assist_tools_IntelliJ_plugin/resources/images/close.png new file mode 100644 index 0000000000000000000000000000000000000000..32edfa363b1a1f764fade91a3a80fc7f626a0315 GIT binary patch literal 327 zcmV-N0l5B&P)Px$0ZBwbR5(wilRZj9K@>*MhY;c_TtG-0(%MS8nAoI9l_quy7NWR{G*%Wiu@u{+ z3;`1`KFU8%QC`vEwS^c2p;fB`TE zhGh`jx4;DGOWLFWVPm@#VtWeQ0X<1yNtHPVwtK)kFp~6o0AB--Ku6Lpeqy0S+vmUn zxB(i#J#Z#zpY>DP1=}594SWMlNk2t$s{q0BCD01uBt8EbU^@v9fm7hK3{oWV7?!j> zNbCZuB1j4l-<*V#vLmr$NiVrJR)r(T1@Hk}NeV-kn#550JbQCiob5i)&W-YaKUMAD Z_zM(%Wf9$H&z1lH002ovPDHLkV1kXofJOiS literal 0 HcmV?d00001 diff --git a/hdc/assist_tools_IntelliJ_plugin/resources/images/cloudic_manager.png b/hdc/assist_tools_IntelliJ_plugin/resources/images/cloudic_manager.png new file mode 100644 index 0000000000000000000000000000000000000000..5764627e6afb5383806b62f945bc47a1459d4ddc GIT binary patch literal 630 zcmV-+0*U>JP)Px%FiAu~R7gwhl}V_MVHC%I|BRUyhJ})>WFZ+A%0dcRTuO#4Bnh>ba+SSSl!LWUBuQ{03iWk`U(kO-I!90C?qK`MxujQ~1;9gEQbI9@Vu1P_T+kWOHs&!iQ=L|`T`D+UjcHeesHLQ+R7fPTOh zV5he$RqD%e1egTOk<{4=;54w`14M|KRl%nM8zo(Hcmzxa&X(Vcv_-x_?ZA3TSIw+% zgaGGD<{o^LpQ-$_4t$79fIbQE3%CWWlk~H!X@q?81ug?m$}msX4EZo{N7Cjz1Ampy0TY_6-`jEpe>5{!{IVwJ z{Pk*M@B9Bd&vVZ2InO!I?|065&V`U*UmY!D zEdT&?{QbO`5b_|eMWdj2u;6Jk1h7P=uP0C^H<<+h&At9!9{adabLGlYhG9lM6|>*3 zVw5+BBG~SfA>@?r#h847aphniTQQ=%`-6m`Ir(cdwBxFU%ArD_?alrY#RR+%0dM-~CiwmMCA9W1TlIpP3g-nIffT z^h&V|NL>aS7nBvBG44Zc9W&=NvB>ml(nNO#4hQ#iN4cZXFd_j#Kng%y9;^zGAWplZ z`+!(DO*Rc;LR%ii;1>_SGgbE9vt4L2=0>J+o77J(oS1;6w2sCAUt7*l9 z*yKnK_!x$t_!%N%`=R!m=J7}xP((ty&IWm~ZJHb~1roYM#78H&qfSy}`uWyUFDr!Y zhJGN>iw33Gf2DbQ!8G_SnJWw*T>)aH&}buD2?!NLw1nvcRw1!8I4#~6=9rB}lzDT& zCl)l>(GB?M#vid#mKSQo)&dc?DIY5L0Z@6O4z4mPKqX`Qf!$dg(3C-w<-AFwO{{`b zikVz%Bl)GnC0jUY=DzZvsv|eEX6-x9dUq_;^Id()r^d)6V;KW!Yta41WCG*z{y^i3Sm%=0BPk z$uz9XwcAu^KlpC4sAls*Z?tg>UWNji?UB!%n!x#|-w?~mU(CC|4Y#u|=!Z7}xU=ZG z9Pz?j37PxqgZc*SF#CYrIQKevjW8YSlk8%x30}S2a9nfs%ntU6`x3=?{H(V=zrXN2 zqjzgSDXjSM%G%V&k%fInPN5TD8v3ILx+_}g8GA3sK2+LJuKpHsAanW9q3|Vc5W-UX z!8)unrQQ|fGN!j<^0Q=M{NyAy{e2muN1YM*1G#s64ntR%P>%fgDA7{qLENtF`e0H* z;wWPvDX;%C^(ms$Y_(PYSRjrsJ$Ioz{2g(RD-fnDUCEDFOTVXM;`mB0xsDO3N>&q8 zgv=S%*9KQ;9~P%sZTENPd@fCSLJO)qb?&4_v1;_WAn3#$=d=Go)zk~dY@0~GHq=X4 z*F~ZljvaC(4IJL`)xEoFQ%?vqFl= zVG@$Eldr{-Dt=0Q`8HnFxkF*Il^Y&S!VNG)XQEE}6tR45ooh3q7l$p{-v!4cWZr8w zLI(oX@B?L=BNe3|^CFuG7V-dzR+m7Vhuf1R!@Mbqh z#Be1JITb0fgFoH%y>ZE9cFr1pg**<-6Nj{Ox*a+vZx*h- zF<7$J5J)>%7iL%pkK^MHx4H!vs$d?{V=h!vS#EC5Wh@VmOTyKbUx*% zNX$wse<#j}-SMY?<-AYxC89^O1PsF+#FzG-=`h^BLHj0Nj8!z+@rJoctj7T&-CJ7l zMyu5E@~&qbF~=?LPlTZXwE6&};$dvfpi`+&D^j--3x++hctLY~jfz?uqvIDF#B%TB z?Vlu`Z>tKN?(VoQB1Z&*NhhXKU{v$09oHJGh}@FJ)OGr%@EbY-0(8an#Qo%=t&T@ zRW=LU^YP4IaB%YU#%>Z)IFJ{RiSr}ZTW=$VaI*H<2;2kCdM99b77o=+B9i%tA`CmVrE+R1~g%LYAaNtOG(b^@}mF*aLvf M-#gf=&NG_-4=l4i8UO$Q literal 0 HcmV?d00001 diff --git a/hdc/assist_tools_IntelliJ_plugin/resources/images/napi.png b/hdc/assist_tools_IntelliJ_plugin/resources/images/napi.png new file mode 100644 index 0000000000000000000000000000000000000000..81d5e40a6e854c85d789eb33f75f7fec3213b62a GIT binary patch literal 1213 zcmeAS@N?(olHy`uVBq!ia0vp^jX=DHgAGW=Ogg^(QPFbmO!@11iu+oAPY!PhI3DR#EI8*tz6fO~I5#m~;ae|Z6 zt+VCX-RIvezD>VXJny~b{Y+=$y#@%d+HbWB~wT3M6&-OmneihV1q8@K0g2~$Jt z>3{31rfYMoE4#&X)Lfu}fkh%ifq{|3;DQ4KlR!ek(}vrOd=3qaa~YVoG4ogmCp@^t z$nLDrz`(p#*U#VouXy2cPlkhi%muY-7dQhLn0Q{WNNkWzI53lenXgS^$4rS`vI>kW z5*IiP608q27&EfT@EATQYiN{azr!~HU3r1^fdl#MF@g&pbagO>yYTE#N;)7a$h@vY zqQLb?gSHY|o~(iTfhJ2vwlhHU{2CaGnRsRhCmfi=!2FCw0w{H0E_0h}f`QJVhD1R& zo^FGLh!)1fN<0!`i3c`t0Hq{=QU~POeRwV=By}(fJM+wtNJ`LFYdigUe(uk=kK$&r z`+vWEaI^d3Wj0SYyVXAaFVJl-Ay@zNUf=#dJHnqmJbnD_ho_SR_s;ngxp-fpKu@|l z$Fa{vAxpm|^T7raM}q@fR!+ac_ebClU1zxb!_Pu7Qt$WGB{AX5br{9J2-F_FI zPX|h_kDLaS+(s?Q>KgSAj+gfxkgqDWVd1a+Qr+eEK>2y;54YeM+C4kxSm+&>`JYKzwC+$>v?wuXExA>O*dDx*jpS4L-_Jhv;xHd*8 zZk)>eG2F%Qnk<9k-NO~E0!Q2<^ch%6`5%iq2*@YyWe~Vx+Y`>Px$Qb|NXR5(wilD$jSVHk$5OQld84j2t0I64R-O)jmr^#?Q*f{GuTD5!*Z2*Rl$ z2bJ5=MC9Bq zFsd%J1FQoT^>rspB4PkYcvU@W%r!Rn4s5EY-8_wmW#F+|Ed!2$S@mZR!1FX%T`dEC z0Bh=555OWYrtXvh+d#kiri%xC871&e-7fn0D8w^#BPx%o=HSOR7gv;RnJcoVGw<@R!*XLA_8Zdvc(wET|-KuMosi&6fef$uTnk9fj_`B z-i-;Kq+22w<3-V%CTi3~V%TknkzJsk1=Ew5a>BA>zHYZ}%Wk(|_>SMszBe;(=6!@+ zJ|ytt>HHlqU#xKv&6wH5!|iYfVK@XM#s`3p0`#>4+CUJ!`MGN^wT**t8layH+_N<0 znKyxY0td^~l#?C;KwNCeI>VCu!}vmgTKmReDS|WK9;xsBs&o=|@IncC)4D7%%q>97 zPt4r0tE~|T4Fsc4-*-gd!K+lz^!T;N(dm`hoftxf>}LNrAz+fzM#5TC=A-Siovz3X z6baM?@IHX1O)YU9APyq&C&;iAU&%iP^Ds#?wlJYQ@B+vwBT2-s0kktgwX&*#3`@N$ zMoh#lb}LJ6Wi^5$xAjwYnXiceCTTx`&jToJN}DH^CI;pkGmPEJ_ea3T7k(wiMTHTm z?WH?u4CrNh<3eF_aJ51pj~JJU`6&pVifEk~XRVwv8zxgcr9TH@s4kB2!py0coH0%5 z%OFI(0StV%G_~$7h$udyuK_sF@cp-`sU6il2o4C#-syl|AmDI)EG?Uw5_2mEEHRA0 z5gc!vsj40ZGtm`cClvzWHNGO1lEuD*`Oz}UpMr$mW7{9aG>N@{ZI=X|6rm~CM*fNF zGiGvHSBRmDX=0{xje_^3=f;@neq|qe5;y#oE@YFL;wgO!M8g2BGgypWCm8Sk@WyDN zlq|{}M!%I+@W8ADa+g%&J!7y%#Uk zu6IPRo%cWxI5vW}-c1*F5Y(c82PgQ+tl0^07vMuRktYXN-S#wpGI#sY58KxN`TiHE Wta&J-e%<;20000 + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/hdc/assist_tools_IntelliJ_plugin/src/com/kh/tools/dialog/ToolCenterPanel.java b/hdc/assist_tools_IntelliJ_plugin/src/com/kh/tools/dialog/ToolCenterPanel.java new file mode 100644 index 00000000..a33d60ea --- /dev/null +++ b/hdc/assist_tools_IntelliJ_plugin/src/com/kh/tools/dialog/ToolCenterPanel.java @@ -0,0 +1,202 @@ +/* + * Copyright (c) 2022 Guangzhou Digitalchina Information Technology Co., Ltd. + * All rights reserved. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.kh.tools.dialog; + +import com.kh.tools.utils.PluginUtils; + +import javax.swing.JButton; +import javax.swing.JComponent; +import javax.swing.JDialog; +import javax.swing.JLabel; +import javax.swing.JPanel; +import javax.swing.JTabbedPane; +import javax.swing.JTextField; +import javax.swing.KeyStroke; +import javax.swing.border.EmptyBorder; +import javax.swing.event.DocumentEvent; +import javax.swing.event.DocumentListener; +import java.awt.Color; +import java.awt.Dimension; +import java.awt.Font; +import java.awt.event.FocusEvent; +import java.awt.event.FocusListener; +import java.awt.event.KeyEvent; +import java.util.HashMap; + +/** + * 插件中心 + * + * @author: zhaoxudong@kaihong.com + * @see: tool conversion plug-in + * @version: v1.0.0 + * @since 2022-09-16 + */ +public class ToolCenterPanel extends JDialog { + private JPanel contentPane; + private JPanel searchPanel; + private JTextField searchTextField; + private JTabbedPane tabbedPane; + private JLabel toolSecondNameLabel; + private JLabel toolDescLabel; + private JButton buttonNapi; + private JButton buttonNapiName; + private JButton gnButton; + private JButton buttonGn; + private JButton buttonClose; + private JPanel napiPanel; + private JPanel servicePanel; + private String isSelectButton = "Napi"; + + /** + * 构造函数 + */ + public ToolCenterPanel() { + tabbedPane.removeTabAt(1); + setContentPane(contentPane); + setModal(true); + contentPane.registerKeyboardAction(e -> onCancel(), KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0), + JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT); + searchTextField.addFocusListener(new FocusListener() { + @Override + public void focusGained(FocusEvent focusEvent) { + searchPanel.setBorder(PluginUtils.BORDER_FOCUS_GAINED); + if (searchTextField.getText().equals("search")) { + searchTextField.setText(""); + } + } + + @Override + public void focusLost(FocusEvent focusEvent) { + searchPanel.setBorder(PluginUtils.BORDER_FOCUS_LOST_SEARCH); + if (searchTextField.getText().trim().length() < 1) { + searchTextField.setText("search"); + } + } + }); + searchTextField.setForeground(Color.white); + searchTextField.setBackground(Color.decode("#3c3f41")); + searchTextField.setBorder(new EmptyBorder(0, 0, 0, 0)); + searchTextField.setCaretColor(Color.white); + searchTextField.setFont(new Font(null, Font.PLAIN, 15)); + setButtonStyle(); + textFieldAction(); + buttonAction(); + } + + private void setButtonStyle() { + buttonClose.setPreferredSize(new Dimension(40, 10)); + buttonClose.setContentAreaFilled(false); + buttonClose.setBorder(new EmptyBorder(0, 0, 0, 0)); + buttonNapiName.setContentAreaFilled(false); + buttonNapiName.setBorder(new EmptyBorder(0, 0, 0, 0)); + gnButton.setContentAreaFilled(false); + gnButton.setBorder(new EmptyBorder(0, 0, 0, 0)); + } + + private void textFieldAction() { + searchTextField.getDocument().addDocumentListener(new DocumentListener() { + HashMap result; + + @Override + public void insertUpdate(DocumentEvent documentEvent) { + result = searchTools(searchTextField.getText().trim()); + if (result.containsKey(buttonNapi.getToolTipText())) { + napiPanel.setVisible(true); + } else { + napiPanel.setVisible(false); + } + if (result.containsKey(buttonGn.getToolTipText())) { + servicePanel.setVisible(true); + } else { + servicePanel.setVisible(false); + } + } + + @Override + public void removeUpdate(DocumentEvent documentEvent) { + result = searchTools(searchTextField.getText().trim()); + if (result.containsKey(buttonNapi.getToolTipText())) { + napiPanel.setVisible(true); + } else { + napiPanel.setVisible(false); + } + if (result.containsKey(buttonGn.getToolTipText())) { + servicePanel.setVisible(true); + } else { + servicePanel.setVisible(false); + } + } + + @Override + public void changedUpdate(DocumentEvent documentEvent) { + } + }); + buttonClose.addActionListener(actionEvent -> searchTextField.setText("search")); + } + + private void buttonAction() { + buttonNapi.addActionListener(e -> { + isSelectButton = "Napi"; + toolSecondNameLabel.setText(buttonNapi.getToolTipText()); + toolDescLabel.setText(PluginUtils.TOOLS.get(buttonNapi.getToolTipText())); + buttonNapiName.setForeground(Color.white); + gnButton.setForeground(Color.decode("#BBBBBB")); + }); + buttonGn.addActionListener(e -> { + isSelectButton = "Gn"; + toolSecondNameLabel.setText(buttonGn.getToolTipText()); + toolDescLabel.setText(PluginUtils.TOOLS.get(buttonGn.getToolTipText())); + gnButton.setForeground(Color.white); + buttonNapiName.setForeground(Color.decode("#BBBBBB")); + }); + } + + private void onCancel() { + dispose(); + } + + @Override + public Dimension getPreferredSize() { + return new Dimension(1000, 600); + } + + JPanel getContentPanel() { + return contentPane; + } + + public String isSelectButton() { + return isSelectButton; + } + + /** + * 搜索结果 + * + * @param key 关键字 + * @return 搜索结果 + */ + private HashMap searchTools(String key) { + if (key.equals("search")) { + return PluginUtils.TOOLS; + } + HashMap searchResultList = new HashMap<>(); + for (HashMap.Entry entry : PluginUtils.TOOLS.entrySet()) { + if (entry.getKey().contains(key)) { + searchResultList.put(entry.getKey(), entry.getValue()); + } + } + return searchResultList; + } +} diff --git a/hdc/assist_tools_IntelliJ_plugin/src/com/kh/tools/ng/AssistCenterMenu.java b/hdc/assist_tools_IntelliJ_plugin/src/com/kh/tools/ng/AssistCenterMenu.java new file mode 100644 index 00000000..4c970f57 --- /dev/null +++ b/hdc/assist_tools_IntelliJ_plugin/src/com/kh/tools/ng/AssistCenterMenu.java @@ -0,0 +1,43 @@ +/* + * Copyright (c) 2022 Guangzhou Digitalchina Information Technology Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.kh.tools.ng; + +import com.intellij.openapi.actionSystem.AnAction; +import com.intellij.openapi.actionSystem.AnActionEvent; +import com.intellij.openapi.project.Project; +import com.kh.tools.dialog.ToolCenterDialog; +import org.jetbrains.annotations.NotNull; + +/** + * 工具菜单入口 + * + * @author: zhaoxudong@kaihong.com + * @see: tool conversion plug-in + * @version: v1.0.0 + * @since 2022-09-19 + */ +public class AssistCenterMenu extends AnAction { + + @Override + public void actionPerformed(@NotNull AnActionEvent anActionEvent) { + Project project = anActionEvent.getProject(); + + if (project == null) { + return; + } + ToolCenterDialog wrapper = new ToolCenterDialog(project); + wrapper.showAndGet(); + } +} diff --git a/hdc/assist_tools_IntelliJ_plugin/src/com/kh/tools/utils/PluginUtils.java b/hdc/assist_tools_IntelliJ_plugin/src/com/kh/tools/utils/PluginUtils.java new file mode 100644 index 00000000..aebb33f8 --- /dev/null +++ b/hdc/assist_tools_IntelliJ_plugin/src/com/kh/tools/utils/PluginUtils.java @@ -0,0 +1,62 @@ +/* + * Copyright (c) 2022 Shenzhen Kaihong Digital Industry Development Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.kh.tools.utils; + +import javax.swing.BorderFactory; +import javax.swing.border.Border; +import java.awt.Color; +import java.util.HashMap; + +/** + * 工具类 + * + * @author: zhaoxudong@kaihong.com + * @see: tool conversion plug-in + * @version: v1.0.0 + * @since 2022-09-19 + */ +public class PluginUtils { + + /** + * 项目代码路径 + */ + public static final String URL = ""; + + /** + * 应用名称 + */ + public static final String TITLE = "App dev Tools"; + + /** + * 获取焦点色值 + */ + public static final Border BORDER_FOCUS_GAINED = BorderFactory.createLineBorder(Color.decode("#385584"), 2); + + /** + * 默认色值 + */ + public static final Border BORDER_FOCUS_LOST_SEARCH = BorderFactory.createLineBorder(Color.decode("#646567"), 2); + + /** + * 工具描述 + */ + public static final HashMap TOOLS = new HashMap() { + { + put("NAPI Generator", "NAPI tool generates NAPI framework code by typescript file."); + put("Gn Generator", "The Gn generation tool generates gn scripts by other script type files, or perform " + + "reverse conversion."); + } + }; +} -- Gitee