From e9f1953a2059d1cfde80df31319f2d00b5912a0b Mon Sep 17 00:00:00 2001 From: "zhirui.li" Date: Thu, 9 Jun 2022 16:21:05 +0800 Subject: [PATCH 1/2] =?UTF-8?q?1=E3=80=81=E5=A2=9E=E5=8A=A0=E4=BA=86ctrl+\?= =?UTF-8?q?=E5=88=A4=E6=96=ADpackage-info=E6=96=87=E4=BB=B6=E7=9A=84?= =?UTF-8?q?=E5=A4=84=E7=90=86=EF=BC=8C=E8=87=AA=E5=8A=A8=E6=B7=BB=E5=8A=A0?= =?UTF-8?q?=E6=B3=A8=E9=87=8A=202=E3=80=81=E5=A2=9E=E5=8A=A0=E4=BA=86ctrl+?= =?UTF-8?q?shit+\=E5=9C=A8=E5=8C=85=E4=B8=8A=E8=BE=93=E5=85=A5=E6=97=B6?= =?UTF-8?q?=E7=9A=84=E5=A4=84=E7=90=86=EF=BC=8C=E6=94=AF=E6=8C=81=E5=A4=9A?= =?UTF-8?q?=E9=80=89=E5=8C=85=E6=96=87=E4=BB=B6=EF=BC=8C=E9=80=89=E6=8B=A9?= =?UTF-8?q?=E5=90=8E=E5=8F=AF=E4=BB=A5=E5=AF=B9=E5=8C=85=E8=BF=9B=E8=A1=8C?= =?UTF-8?q?=E6=B3=A8=E9=87=8A=E7=BC=96=E8=BE=91=EF=BC=8C=E8=87=AA=E5=8A=A8?= =?UTF-8?q?=E7=94=9F=E6=88=90package-info=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 啰嗦两句: 这个插件第一次写,可能有些坑。然后我看了之前的代码,也没有啥设计模式,我也就按着随心所欲的方式丢代码里面了。 起因是6月8日体验了下show comment,显示文件注释,看起来真的爽,但是包看不到注释呀~~,然后留言了javaeasydoc一个评论,希望作者弄一弄。 然后我把easydoc的源码下载,折腾了好久,卡在了如何启动调试这步,到现在没解决,是开了一个新的插件工程再在那个里面完成的~~弄完了又复制过来~~。 水平有限,很多配置啥的,干脆没加~~保留可以让人输入的功能就差不多了~~有大佬弄个配置更好。 --- .../action/GenerateAllJavadocAction.java | 53 +++++++++-- .../easydoc/action/GenerateJavadocAction.java | 22 ++++- .../easydoc/action/PackageInfoHandle.java | 90 +++++++++++++++++++ .../listener/AppActivationListener.java | 70 +++++++-------- .../easydoc/service/DocGeneratorService.java | 15 ++-- .../impl/PackageInfoDocGenerator.java | 30 +++++++ .../translator/impl/TencentTranslator.java | 23 +++-- .../view/inner/PackageDescribeView.form | 26 ++++++ .../view/inner/PackageDescribeView.java | 71 +++++++++++++++ 9 files changed, 333 insertions(+), 67 deletions(-) create mode 100644 src/main/java/com/star/easydoc/action/PackageInfoHandle.java create mode 100644 src/main/java/com/star/easydoc/service/generator/impl/PackageInfoDocGenerator.java create mode 100644 src/main/java/com/star/easydoc/view/inner/PackageDescribeView.form create mode 100644 src/main/java/com/star/easydoc/view/inner/PackageDescribeView.java diff --git a/src/main/java/com/star/easydoc/action/GenerateAllJavadocAction.java b/src/main/java/com/star/easydoc/action/GenerateAllJavadocAction.java index 56943e6..2776f62 100644 --- a/src/main/java/com/star/easydoc/action/GenerateAllJavadocAction.java +++ b/src/main/java/com/star/easydoc/action/GenerateAllJavadocAction.java @@ -1,27 +1,29 @@ package com.star.easydoc.action; -import java.util.Arrays; -import java.util.Optional; - +import com.intellij.ide.util.PackageChooserDialog; import com.intellij.openapi.actionSystem.AnAction; import com.intellij.openapi.actionSystem.AnActionEvent; import com.intellij.openapi.actionSystem.LangDataKeys; import com.intellij.openapi.components.ServiceManager; import com.intellij.openapi.project.Project; -import com.intellij.psi.PsiClass; -import com.intellij.psi.PsiElement; -import com.intellij.psi.PsiElementFactory; -import com.intellij.psi.PsiField; -import com.intellij.psi.PsiMethod; +import com.intellij.psi.*; import com.intellij.psi.javadoc.PsiDocComment; import com.star.easydoc.config.EasyJavadocConfigComponent; import com.star.easydoc.model.EasyJavadocConfiguration; import com.star.easydoc.service.DocGeneratorService; +import com.star.easydoc.service.TranslatorService; import com.star.easydoc.service.WriterService; import com.star.easydoc.view.inner.GenerateAllView; +import com.star.easydoc.view.inner.PackageDescribeView; import org.apache.commons.lang3.StringUtils; import org.jetbrains.annotations.NotNull; +import java.util.Arrays; +import java.util.List; +import java.util.Map; +import java.util.Optional; +import java.util.stream.Collectors; + /** * 生成所有文档注释 * @@ -38,17 +40,50 @@ public class GenerateAllJavadocAction extends AnAction { private WriterService writerService = ServiceManager.getService(WriterService.class); private EasyJavadocConfiguration config = ServiceManager.getService(EasyJavadocConfigComponent.class).getState(); + private TranslatorService translatorService = ServiceManager.getService(TranslatorService.class); @Override public void actionPerformed(@NotNull AnActionEvent e) { + Project project = e.getData(LangDataKeys.PROJECT); // 前置规则校验 PsiElement psiElement = e.getData(LangDataKeys.PSI_ELEMENT); if (psiElement == null) { return; } + //对文件夹选择的额外处理下 + if (psiElement instanceof PsiDirectory) { + PackageChooserDialog selector = new PackageChooserDialog("选择多个Packages创建package-info", project); + PsiPackage psiPackage = JavaDirectoryService.getInstance().getPackage((PsiDirectory) psiElement); + if (psiPackage!=null) { + selector.selectPackage(psiPackage.getQualifiedName()); + } + selector.show(); + + List packages = selector.getSelectedPackages(); + if (packages==null||packages.size()==0){ + return; + } + //执行 + Map packMap = packages.stream().collect(Collectors.toMap(s -> s, s -> { + String result = translatorService.autoTranslate(s.getName()); + return result; + })); + //显示列表,一个个的修改后再提交写入更好 + + PackageDescribeView packageDescribeView = new PackageDescribeView(packMap); + if (packageDescribeView.showAndGet()) { + //重新获取一次 + Map finalMap = packageDescribeView.getFinalMap(); + //下面是执行,可以考虑并发 + for (Map.Entry entry : finalMap.entrySet()) { + PackageInfoHandle.handle(entry.getKey(),entry.getValue()); + } + } + return; + } + if (!(psiElement instanceof PsiClass)) { return; } - Project project = e.getData(LangDataKeys.PROJECT); // 弹出选择框 GenerateAllView generateAllView = new GenerateAllView(); generateAllView.getClassCheckBox().setSelected(Optional.ofNullable(config.getGenAllClass()).orElse(false)); diff --git a/src/main/java/com/star/easydoc/action/GenerateJavadocAction.java b/src/main/java/com/star/easydoc/action/GenerateJavadocAction.java index f191c7e..e594d03 100644 --- a/src/main/java/com/star/easydoc/action/GenerateJavadocAction.java +++ b/src/main/java/com/star/easydoc/action/GenerateJavadocAction.java @@ -11,8 +11,7 @@ import com.intellij.openapi.components.ServiceManager; import com.intellij.openapi.editor.Editor; import com.intellij.openapi.project.Project; import com.intellij.openapi.util.Disposer; -import com.intellij.psi.PsiElement; -import com.intellij.psi.PsiElementFactory; +import com.intellij.psi.*; import com.intellij.psi.javadoc.PsiDocComment; import com.intellij.util.messages.MessageBusConnection; import com.star.easydoc.listener.AppActivationListener; @@ -46,6 +45,7 @@ public class GenerateJavadocAction extends AnAction { connection.subscribe(ApplicationActivationListener.TOPIC, new AppActivationListener()); } + @Override public void actionPerformed(@NotNull AnActionEvent anActionEvent) { Project project = anActionEvent.getData(LangDataKeys.PROJECT); @@ -72,10 +72,26 @@ public class GenerateJavadocAction extends AnAction { } PsiElement psiElement = anActionEvent.getData(LangDataKeys.PSI_ELEMENT); - if (psiElement == null || psiElement.getNode() == null) { + //选中文件夹则判断包里面是否需要创建package-info.java,创建package-info 并携带注释 + if (psiElement instanceof PsiDirectory) { + PsiPackage psiPackage = JavaDirectoryService.getInstance().getPackage((PsiDirectory) psiElement); + String comment = translatorService.autoTranslate(psiPackage.getName()); + PackageInfoHandle.handle(psiPackage,comment); + return; + } + PsiFile psiFile = anActionEvent.getData(LangDataKeys.PSI_FILE); + //判断是否是package-info.java若是则进行package-info注释 + if (psiFile != null && PackageInfoHandle.INFO_FILE_NAME.equals(psiFile.getName())) { + PsiDirectory psiDirectory = psiFile.getParent(); + PsiPackage psiPackage = JavaDirectoryService.getInstance().getPackage(psiDirectory); + String comment = translatorService.autoTranslate(psiPackage.getName()); + PackageInfoHandle.handle(psiPackage,comment); return; } + if (psiElement == null || psiElement.getNode() == null) { + return; + } String comment = docGeneratorService.generate(psiElement); if (StringUtils.isEmpty(comment)) { return; diff --git a/src/main/java/com/star/easydoc/action/PackageInfoHandle.java b/src/main/java/com/star/easydoc/action/PackageInfoHandle.java new file mode 100644 index 0000000..d6105d9 --- /dev/null +++ b/src/main/java/com/star/easydoc/action/PackageInfoHandle.java @@ -0,0 +1,90 @@ +package com.star.easydoc.action; + +import com.intellij.openapi.command.WriteCommandAction; +import com.intellij.openapi.components.ServiceManager; +import com.intellij.openapi.project.Project; +import com.intellij.openapi.vfs.VirtualFile; +import com.intellij.openapi.vfs.VirtualFileManager; +import com.intellij.psi.PsiDirectory; +import com.intellij.psi.PsiFile; +import com.intellij.psi.PsiInvalidElementAccessException; +import com.intellij.psi.PsiPackage; +import com.intellij.util.IncorrectOperationException; +import com.star.easydoc.service.DocGeneratorService; + +import java.io.IOException; +import java.io.InputStream; +import java.nio.charset.StandardCharsets; + +/** + * 创建类, 可能有更便捷的方式创建实体类. 有待优化 + */ +public class PackageInfoHandle { + public static final String INFO_FILE_NAME = "package-info.java"; + public static final String PACKAGE_INFO_DESCRIBE = "PACKAGE_INFO_DESCRIBE"; + private static DocGeneratorService docGeneratorService = ServiceManager.getService(DocGeneratorService.class); + public static void handle(PsiPackage psiPackage,String comment) { + try { + Project project = psiPackage.getProject(); + PsiDirectory psiDirectory = psiPackage.getDirectories()[0]; + //是文件夹,文件夹处理 + VirtualFile virtualFile = psiDirectory.getVirtualFile().findChild(PackageInfoHandle.INFO_FILE_NAME); + if (virtualFile == null) { + //文件不存在则创建文件 + String result = docGeneratorService.generate(psiPackage).replace("${"+PACKAGE_INFO_DESCRIBE+"}",comment) + + "package " + psiPackage.getQualifiedName() + ";\n"; + WriteCommandAction.writeCommandAction(project).run(() -> { + try { + PsiFile file = psiDirectory.createFile(PackageInfoHandle.INFO_FILE_NAME); + VirtualFile fileVirtualFile = file.getVirtualFile(); + fileVirtualFile.setBinaryContent(result.getBytes(StandardCharsets.UTF_8)); + } catch (PsiInvalidElementAccessException | IOException | IncorrectOperationException ignored) { + ignored.printStackTrace(); + } + }); + //处理完就结束了 + return; + } else { +// virtualFile.getCharset() + try(InputStream inputStream = virtualFile.getInputStream()) { + int available = inputStream.available(); + byte[] bytes = new byte[available]; + inputStream.read(bytes); + String val = new String(bytes, virtualFile.getCharset()); + int index = val.indexOf("/**"); + StringBuffer buffer = new StringBuffer(); + if (index>=0){ + if (index>0){ + buffer.append(val, 0, index); + } + buffer.append("/**\n"); + buffer.append(" * ").append(comment); + buffer.append("\n"); + buffer.append(" * "); + buffer.append(val,index+3,val.length()); + }else { + //没有注释生成就行了 + buffer.append(docGeneratorService.generate(psiPackage).replace("${"+PACKAGE_INFO_DESCRIBE+"}",comment)); + buffer.append(val); + } + String finalVal = buffer.toString(); + WriteCommandAction.writeCommandAction(project).run(() -> { + try { + virtualFile.setBinaryContent(finalVal.getBytes(StandardCharsets.UTF_8)); + } catch (PsiInvalidElementAccessException | IOException | IncorrectOperationException ignored) { + ignored.printStackTrace(); + } + }); + } + //存在package-info,逻辑需要处理,先干脆不动算了,即然存在,应该会写注释的~~ +// System.out.println("6666"); + } + } catch (Exception e) { + //由于外面stream执行,错误处理直接吞掉,保证后续也可以执行 + e.printStackTrace(); + } + VirtualFileManager.getInstance().refreshWithoutFileWatcher(true); + + } + +} diff --git a/src/main/java/com/star/easydoc/listener/AppActivationListener.java b/src/main/java/com/star/easydoc/listener/AppActivationListener.java index 03b7052..5a040bb 100644 --- a/src/main/java/com/star/easydoc/listener/AppActivationListener.java +++ b/src/main/java/com/star/easydoc/listener/AppActivationListener.java @@ -34,41 +34,41 @@ public class AppActivationListener implements ApplicationActivationListener { @Override public synchronized void applicationActivated(@NotNull IdeFrame ideFrame) { - if (System.currentTimeMillis() - lastNoticeTime.get() < INTERVAL) { - return; - } - NotificationGroup group = new NotificationGroup("Easy Javadoc", NotificationDisplayType.BALLOON, true, null, - General.AddJdk); - Notification notification = group.createNotification( - "支持EasyJavadoc", "如果这款小而精的插件为您节约了不少时间,请支持一下开发者!", - NotificationType.INFORMATION, NotificationListener.URL_OPENING_LISTENER); - - // 去点star - notification.addAction(new NotificationAction("✨ 去点star") { - @Override - public void actionPerformed(@NotNull AnActionEvent e, @NotNull Notification notification) { - try { - Desktop dp = Desktop.getDesktop(); - if (dp.isSupported(Desktop.Action.BROWSE)) { - dp.browse(URI.create("https://github.com/starcwang/easy_javadoc")); - } - } catch (Exception ex) { - LOGGER.error("打开链接失败:https://github.com/starcwang/easy_javadoc", ex); - } - } - }); - - // 支付 - notification.addAction(new NotificationAction("☕ 请喝咖啡") { - @Override - public void actionPerformed(@NotNull AnActionEvent e, @NotNull Notification notification) { - SupportView supportView = new SupportView(); - supportView.show(); - } - }); - - notification.notify(null); - lastNoticeTime.set(System.currentTimeMillis()); + //if (System.currentTimeMillis() - lastNoticeTime.get() < INTERVAL) { + // return; + //} + //NotificationGroup group = new NotificationGroup("Easy Javadoc", NotificationDisplayType.BALLOON, true, null, + // General.AddJdk); + //Notification notification = group.createNotification( + // "支持EasyJavadoc", "如果这款小而精的插件为您节约了不少时间,请支持一下开发者!", + // NotificationType.INFORMATION, NotificationListener.URL_OPENING_LISTENER); + // + //// 去点star + //notification.addAction(new NotificationAction("✨ 去点star") { + // @Override + // public void actionPerformed(@NotNull AnActionEvent e, @NotNull Notification notification) { + // try { + // Desktop dp = Desktop.getDesktop(); + // if (dp.isSupported(Desktop.Action.BROWSE)) { + // dp.browse(URI.create("https://github.com/starcwang/easy_javadoc")); + // } + // } catch (Exception ex) { + // LOGGER.error("打开链接失败:https://github.com/starcwang/easy_javadoc", ex); + // } + // } + //}); + // + //// 支付 + //notification.addAction(new NotificationAction("☕ 请喝咖啡") { + // @Override + // public void actionPerformed(@NotNull AnActionEvent e, @NotNull Notification notification) { + // SupportView supportView = new SupportView(); + // supportView.show(); + // } + //}); + // + //notification.notify(null); + //lastNoticeTime.set(System.currentTimeMillis()); } @Override diff --git a/src/main/java/com/star/easydoc/service/DocGeneratorService.java b/src/main/java/com/star/easydoc/service/DocGeneratorService.java index 83d436c..909908e 100644 --- a/src/main/java/com/star/easydoc/service/DocGeneratorService.java +++ b/src/main/java/com/star/easydoc/service/DocGeneratorService.java @@ -1,20 +1,18 @@ package com.star.easydoc.service; -import java.util.Map; -import java.util.Map.Entry; -import java.util.Objects; - import com.google.common.collect.ImmutableMap; -import com.intellij.psi.PsiClass; -import com.intellij.psi.PsiElement; -import com.intellij.psi.PsiField; -import com.intellij.psi.PsiMethod; +import com.intellij.psi.*; import com.star.easydoc.service.generator.DocGenerator; import com.star.easydoc.service.generator.impl.ClassDocGenerator; import com.star.easydoc.service.generator.impl.FieldDocGenerator; import com.star.easydoc.service.generator.impl.MethodDocGenerator; +import com.star.easydoc.service.generator.impl.PackageInfoDocGenerator; import org.apache.commons.lang3.StringUtils; +import java.util.Map; +import java.util.Map.Entry; +import java.util.Objects; + /** * @author wangchao * @date 2019/08/25 @@ -26,6 +24,7 @@ public class DocGeneratorService { .put(PsiClass.class, new ClassDocGenerator()) .put(PsiMethod.class, new MethodDocGenerator()) .put(PsiField.class, new FieldDocGenerator()) + .put(PsiPackage.class, new PackageInfoDocGenerator()) .build(); public String generate(PsiElement psiElement) { diff --git a/src/main/java/com/star/easydoc/service/generator/impl/PackageInfoDocGenerator.java b/src/main/java/com/star/easydoc/service/generator/impl/PackageInfoDocGenerator.java new file mode 100644 index 0000000..54e9c81 --- /dev/null +++ b/src/main/java/com/star/easydoc/service/generator/impl/PackageInfoDocGenerator.java @@ -0,0 +1,30 @@ +package com.star.easydoc.service.generator.impl; + +import com.intellij.openapi.components.ServiceManager; +import com.intellij.psi.PsiElement; +import com.intellij.psi.PsiPackage; +import com.star.easydoc.action.PackageInfoHandle; +import com.star.easydoc.service.TranslatorService; +import com.star.easydoc.service.generator.DocGenerator; +import org.apache.commons.lang3.StringUtils; + + +public class PackageInfoDocGenerator implements DocGenerator { + + private TranslatorService translatorService = ServiceManager.getService(TranslatorService.class); + @Override + public String generate(PsiElement psiElement) { + if (!(psiElement instanceof PsiPackage)) { + return StringUtils.EMPTY; + } + PsiPackage psiPackage = (PsiPackage)psiElement; + + return defaultGenerate(psiPackage); + } + + private String defaultGenerate(PsiPackage psiPackage) { + return "/**\n" + + " * ${"+ PackageInfoHandle.PACKAGE_INFO_DESCRIBE+"} \n" + + "**/\n"; + } +} diff --git a/src/main/java/com/star/easydoc/service/translator/impl/TencentTranslator.java b/src/main/java/com/star/easydoc/service/translator/impl/TencentTranslator.java index 3e1007a..ab39186 100644 --- a/src/main/java/com/star/easydoc/service/translator/impl/TencentTranslator.java +++ b/src/main/java/com/star/easydoc/service/translator/impl/TencentTranslator.java @@ -1,15 +1,5 @@ package com.star.easydoc.service.translator.impl; -import java.nio.charset.StandardCharsets; -import java.util.Map.Entry; -import java.util.Random; -import java.util.SortedMap; -import java.util.TreeMap; - -import javax.crypto.Mac; -import javax.crypto.spec.SecretKeySpec; -import javax.xml.bind.DatatypeConverter; - import com.fasterxml.jackson.annotation.JsonProperty; import com.intellij.openapi.components.ServiceManager; import com.intellij.openapi.diagnostic.Logger; @@ -18,6 +8,15 @@ import com.star.easydoc.model.EasyJavadocConfiguration; import com.star.easydoc.util.HttpUtil; import com.star.easydoc.util.JsonUtil; +import javax.crypto.Mac; +import javax.crypto.spec.SecretKeySpec; +import java.nio.charset.StandardCharsets; +import java.security.SecureRandom; +import java.util.Base64; +import java.util.Map.Entry; +import java.util.SortedMap; +import java.util.TreeMap; + /** * 腾讯翻译 * @@ -54,7 +53,7 @@ public class TencentTranslator extends AbstractTranslator { TencentResponse response = null; for (int i = 0; i < 10; i++) { SortedMap params = new TreeMap<>(); - params.put("Nonce", new Random().nextInt(java.lang.Integer.MAX_VALUE)); + params.put("Nonce", new SecureRandom().nextInt(java.lang.Integer.MAX_VALUE)); params.put("Timestamp", System.currentTimeMillis() / 1000); params.put("Region", "ap-beijing"); params.put("SecretId", config.getSecretId()); @@ -85,7 +84,7 @@ public class TencentTranslator extends AbstractTranslator { SecretKeySpec secretKeySpec = new SecretKeySpec(key.getBytes(StandardCharsets.UTF_8), mac.getAlgorithm()); mac.init(secretKeySpec); byte[] hash = mac.doFinal(s.getBytes(StandardCharsets.UTF_8)); - return DatatypeConverter.printBase64Binary(hash); + return Base64.getEncoder().encodeToString(hash); } public static String getStringToSign(String method, String endpoint, SortedMap params) { diff --git a/src/main/java/com/star/easydoc/view/inner/PackageDescribeView.form b/src/main/java/com/star/easydoc/view/inner/PackageDescribeView.form new file mode 100644 index 0000000..2e6f32a --- /dev/null +++ b/src/main/java/com/star/easydoc/view/inner/PackageDescribeView.form @@ -0,0 +1,26 @@ + +
+ + + + + + + + + + + + + + + + + + + + + + + +
diff --git a/src/main/java/com/star/easydoc/view/inner/PackageDescribeView.java b/src/main/java/com/star/easydoc/view/inner/PackageDescribeView.java new file mode 100644 index 0000000..cac413e --- /dev/null +++ b/src/main/java/com/star/easydoc/view/inner/PackageDescribeView.java @@ -0,0 +1,71 @@ +package com.star.easydoc.view.inner; + +import com.intellij.openapi.ui.DialogWrapper; +import com.intellij.psi.PsiPackage; +import org.jetbrains.annotations.Nullable; + +import javax.swing.*; +import javax.swing.table.DefaultTableModel; +import javax.swing.table.TableCellEditor; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +public class PackageDescribeView extends DialogWrapper { + private JPanel panel1; + private JTable packageInfoTable; + public PackageDescribeView(Map packMap) { + super(false); + + this.packMap = packMap; + createMap(packMap); + + init(); + setTitle("包信息生成"); + } + private Map packMap; + private Map packIndexMap; + public Map getFinalMap(){ +// packageInfoTable.get + TableCellEditor editor = packageInfoTable.getCellEditor(); + if (editor!=null){ + editor.stopCellEditing(); + } + Map finalPackMap = new HashMap<>(); + for (Integer index : packIndexMap.keySet()) { + PsiPackage psiPackage = packIndexMap.get(index); + String value = (String)packageInfoTable.getValueAt(index, 1); + finalPackMap.put(psiPackage,value); + } + return finalPackMap; + } + public void createMap(Map packMap){ + List> list = new ArrayList<>(packMap.entrySet()); + String[][] objs = new String[list.size()][2]; + packIndexMap = new HashMap<>(); + for (int i = 0; i < list.size(); i++) { + PsiPackage aPackage = list.get(i).getKey(); + objs[i][0]= aPackage.getQualifiedName(); + objs[i][1]=list.get(i).getValue(); + packIndexMap.put(i,aPackage); + } + DefaultTableModel innerModel = new DefaultTableModel(objs, new String[]{"包名称","注释"}){ + @Override + public boolean isCellEditable(int row, int column) { + if (column==1){ + return true; + }else { + return false; + } + } + }; + packageInfoTable.setModel(innerModel); +// packageInfoTable.colum(0) + } + + @Override + protected @Nullable JComponent createCenterPanel() { + return panel1; + } +} -- Gitee From 0450888ba2edf2f4f760e32b29c25dec23306f3c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=B3=95=E5=B7=A6=E8=93=9D?= Date: Mon, 13 Jun 2022 09:00:21 +0000 Subject: [PATCH 2/2] =?UTF-8?q?update=20src/main/java/com/star/easydoc/lis?= =?UTF-8?q?tener/AppActivationListener.java.=20=E8=BF=98=E5=8E=9F=E8=BF=99?= =?UTF-8?q?=E9=87=8C=E7=9A=84=E6=B3=A8=E9=87=8A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../listener/AppActivationListener.java | 70 +++++++++---------- 1 file changed, 35 insertions(+), 35 deletions(-) diff --git a/src/main/java/com/star/easydoc/listener/AppActivationListener.java b/src/main/java/com/star/easydoc/listener/AppActivationListener.java index 5a040bb..4392824 100644 --- a/src/main/java/com/star/easydoc/listener/AppActivationListener.java +++ b/src/main/java/com/star/easydoc/listener/AppActivationListener.java @@ -34,41 +34,41 @@ public class AppActivationListener implements ApplicationActivationListener { @Override public synchronized void applicationActivated(@NotNull IdeFrame ideFrame) { - //if (System.currentTimeMillis() - lastNoticeTime.get() < INTERVAL) { - // return; - //} - //NotificationGroup group = new NotificationGroup("Easy Javadoc", NotificationDisplayType.BALLOON, true, null, - // General.AddJdk); - //Notification notification = group.createNotification( - // "支持EasyJavadoc", "如果这款小而精的插件为您节约了不少时间,请支持一下开发者!", - // NotificationType.INFORMATION, NotificationListener.URL_OPENING_LISTENER); - // - //// 去点star - //notification.addAction(new NotificationAction("✨ 去点star") { - // @Override - // public void actionPerformed(@NotNull AnActionEvent e, @NotNull Notification notification) { - // try { - // Desktop dp = Desktop.getDesktop(); - // if (dp.isSupported(Desktop.Action.BROWSE)) { - // dp.browse(URI.create("https://github.com/starcwang/easy_javadoc")); - // } - // } catch (Exception ex) { - // LOGGER.error("打开链接失败:https://github.com/starcwang/easy_javadoc", ex); - // } - // } - //}); - // - //// 支付 - //notification.addAction(new NotificationAction("☕ 请喝咖啡") { - // @Override - // public void actionPerformed(@NotNull AnActionEvent e, @NotNull Notification notification) { - // SupportView supportView = new SupportView(); - // supportView.show(); - // } - //}); - // - //notification.notify(null); - //lastNoticeTime.set(System.currentTimeMillis()); + if (System.currentTimeMillis() - lastNoticeTime.get() < INTERVAL) { + return; + } + NotificationGroup group = new NotificationGroup("Easy Javadoc", NotificationDisplayType.BALLOON, true, null, + General.AddJdk); + Notification notification = group.createNotification( + "支持EasyJavadoc", "如果这款小而精的插件为您节约了不少时间,请支持一下开发者!", + NotificationType.INFORMATION, NotificationListener.URL_OPENING_LISTENER); + + // 去点star + notification.addAction(new NotificationAction("✨ 去点star") { + @Override + public void actionPerformed(@NotNull AnActionEvent e, @NotNull Notification notification) { + try { + Desktop dp = Desktop.getDesktop(); + if (dp.isSupported(Desktop.Action.BROWSE)) { + dp.browse(URI.create("https://github.com/starcwang/easy_javadoc")); + } + } catch (Exception ex) { + LOGGER.error("打开链接失败:https://github.com/starcwang/easy_javadoc", ex); + } + } + }); + + // 支付 + notification.addAction(new NotificationAction("☕ 请喝咖啡") { + @Override + public void actionPerformed(@NotNull AnActionEvent e, @NotNull Notification notification) { + SupportView supportView = new SupportView(); + supportView.show(); + } + }); + + notification.notify(null); + lastNoticeTime.set(System.currentTimeMillis()); } @Override -- Gitee