diff --git a/README.md b/README.md index b8702079..73f4ad55 100644 --- a/README.md +++ b/README.md @@ -73,4 +73,6 @@ > 3. 不要解压zip包,安装时直接选zip包即可。 > ``` -#### QQ群:[373603580](https://shang.qq.com/wpa/qunwpa?idkey=4d495321e527ec2ce459c0d0d6320414cd9677d92d5287df831d4e1c4ec09740) +#### QQ群1:[373603580](https://shang.qq.com/wpa/qunwpa?idkey=4d495321e527ec2ce459c0d0d6320414cd9677d92d5287df831d4e1c4ec09740) +#### QQ群2:[167490920](https://qm.qq.com/cgi-bin/qm/qr?k=r0emWZbPZIb6BqxpLM4Z4jo2mHoC0zZK&jump_from=webapi) +#### Telegram:[https://t.me/gotoeasycode](https://t.me/gotoeasycode) diff --git a/build.gradle b/build.gradle index 8eb27aee..ec91ef30 100644 --- a/build.gradle +++ b/build.gradle @@ -3,12 +3,6 @@ buildscript { mavenCentral() maven { url 'https://plugins.gradle.org/m2/' } maven { url 'https://oss.sonatype.org/content/repositories/releases/' } - maven { url 'https://dl.bintray.com/jetbrains/intellij-plugin-service' } - maven { url 'https://dl.bintray.com/jetbrains/intellij-third-party-dependencies/' } - } - // https://github.com/JetBrains/gradle-intellij-plugin/ 关注开发插件版本 - dependencies { - classpath "org.jetbrains.intellij.plugins:gradle-intellij-plugin:0.6.5" } } @@ -16,18 +10,19 @@ buildscript { // 这两个插件是必备 plugins { id 'java' - id 'org.jetbrains.intellij' version '0.6.5' + id 'org.jetbrains.intellij' version '0.7.3' } group 'com.sjhy' -version '1.2.5-java.RELEASE' +version '1.2.9-java.RELEASE' -sourceCompatibility = JavaVersion.VERSION_1_8 -targetCompatibility = JavaVersion.VERSION_1_8 +sourceCompatibility = JavaVersion.VERSION_11 +targetCompatibility = JavaVersion.VERSION_11 +compileJava.options.encoding = "UTF-8" +compileTestJava.options.encoding = "UTF-8" repositories { - jcenter() mavenCentral() } @@ -40,7 +35,7 @@ intellij { // 沙箱目录位置,用于保存IDEA的设置,默认在build文件下面,防止clean,放在根目录下。 sandboxDirectory = "${rootProject.rootDir}/idea-sandbox" // 开发环境运行时使用的版本 - version '2020.1.2' + version '2021.2.2' // 社区版 // type 'IC' // 企业版 @@ -48,7 +43,7 @@ intellij { // 各种IDEA版本去这里找 // https://www.jetbrains.com/intellij-repository/releases // 依赖的插件 - plugins = ['java', 'DatabaseTools'] + plugins = ['com.intellij.java', 'com.intellij.database'] //Disables updating since-build attribute in plugin.xml updateSinceUntilBuild false downloadSources = true @@ -75,6 +70,3 @@ dependencies { testCompile 'junit:junit:4.12' } -tasks.withType(JavaCompile) { - options.encoding = "UTF-8" -} diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar index 01b8bf6b..7454180f 100644 Binary files a/gradle/wrapper/gradle-wrapper.jar and b/gradle/wrapper/gradle-wrapper.jar differ diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 3928e236..59d220e3 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,5 @@ -#Tue Jul 17 15:13:01 CST 2018 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists +distributionUrl=https\://downloads.gradle.org/distributions/gradle-6.9-bin.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-5.4.1-all.zip diff --git a/src/main/java/com/sjhy/plugin/actions/EasyCodeEntityAction.java b/src/main/java/com/sjhy/plugin/actions/EasyCodeEntityAction.java index e8068c51..4ed3049a 100644 --- a/src/main/java/com/sjhy/plugin/actions/EasyCodeEntityAction.java +++ b/src/main/java/com/sjhy/plugin/actions/EasyCodeEntityAction.java @@ -4,6 +4,8 @@ import com.intellij.openapi.actionSystem.AnAction; import com.intellij.openapi.actionSystem.AnActionEvent; import com.intellij.openapi.actionSystem.CommonDataKeys; +import com.intellij.openapi.actionSystem.LangDataKeys; +import com.intellij.openapi.module.Module; import com.intellij.openapi.project.Project; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.psi.PsiClass; @@ -74,5 +76,23 @@ private List resolvePsiClassByFile(List psiJavaFiles) { return psiClassList; } + @Override + public void update(@NotNull AnActionEvent event) { + // 不存在模块不展示:选择多个模块 + Project project = event.getData(CommonDataKeys.PROJECT); + Module module = event.getData(LangDataKeys.MODULE); + if (project == null || module == null) { + event.getPresentation().setVisible(false); + return; + } + + // 非java的文件不显示 + VirtualFile file = event.getDataContext().getData(CommonDataKeys.VIRTUAL_FILE); + if (file != null && !file.isDirectory() && !"java".equals(file.getExtension())) { + event.getPresentation().setVisible(false); + return; + } + } + } diff --git a/src/main/java/com/sjhy/plugin/actions/MainAction.java b/src/main/java/com/sjhy/plugin/actions/MainAction.java index 8c1c3675..8ea9ceb6 100644 --- a/src/main/java/com/sjhy/plugin/actions/MainAction.java +++ b/src/main/java/com/sjhy/plugin/actions/MainAction.java @@ -15,6 +15,7 @@ import com.sjhy.plugin.entity.TypeMapper; import com.sjhy.plugin.enums.MatchType; import com.sjhy.plugin.tool.CacheDataUtils; +import com.sjhy.plugin.tool.CompatibleUtils; import com.sjhy.plugin.tool.CurrGroupUtils; import com.sjhy.plugin.tool.StringUtils; import com.sjhy.plugin.ui.SelectSavePath; @@ -84,7 +85,7 @@ private boolean typeValidator(Project project, DbTable dbTable) { FLAG: for (DasColumn column : columns) { - String typeName = column.getDataType().getSpecification(); + String typeName = CompatibleUtils.getDataType(column).getSpecification(); for (TypeMapper typeMapper : typeMapperList) { try { if (typeMapper.getMatchType() == MatchType.ORDINARY) { @@ -114,7 +115,7 @@ private boolean typeValidator(Project project, DbTable dbTable) { public static class Dialog extends DialogWrapper { - private String typeName; + private final String typeName; private JPanel mainPanel; diff --git a/src/main/java/com/sjhy/plugin/actions/MainActionGroup.java b/src/main/java/com/sjhy/plugin/actions/MainActionGroup.java index 42128fea..0aa37ce7 100644 --- a/src/main/java/com/sjhy/plugin/actions/MainActionGroup.java +++ b/src/main/java/com/sjhy/plugin/actions/MainActionGroup.java @@ -25,22 +25,7 @@ public class MainActionGroup extends ActionGroup { /** * 缓存数据工具类 */ - private CacheDataUtils cacheDataUtils = CacheDataUtils.getInstance(); - - /** - * 是否不存在子菜单 - */ - private boolean notExistsChildren; - - /** - * 是否分组按钮 - * - * @return 是否隐藏 - */ - @Override - public boolean hideIfNoVisibleChildren() { - return this.notExistsChildren; - } + private final CacheDataUtils cacheDataUtils = CacheDataUtils.getInstance(); /** @@ -64,9 +49,6 @@ public AnAction[] getChildren(@Nullable AnActionEvent event) { if (psiElement instanceof DbTable) { selectDbTable = (DbTable) psiElement; } - if (selectDbTable == null) { - return getEmptyAnAction(); - } //获取选中的所有表 PsiElement[] psiElements = event.getData(LangDataKeys.PSI_ELEMENT_ARRAY); if (psiElements == null || psiElements.length == 0) { @@ -83,11 +65,13 @@ public AnAction[] getChildren(@Nullable AnActionEvent event) { if (dbTableList.isEmpty()) { return getEmptyAnAction(); } + if (selectDbTable == null) { + selectDbTable = dbTableList.get(0); + } //保存数据到缓存 cacheDataUtils.setDbTableList(dbTableList); cacheDataUtils.setSelectDbTable(selectDbTable); - this.notExistsChildren = false; return getMenuList(); } @@ -119,7 +103,7 @@ public void actionPerformed(@NotNull AnActionEvent e) { if (dbTable == null) { return; } - TableInfoSettingsService.getInstance().resetTableInfo(dbTable); + TableInfoSettingsService.getInstance().removeTableInfo(dbTable); Messages.showInfoMessage(dbTable.getName() + "表配置信息已重置成功", GlobalDict.TITLE_INFO); } }; @@ -134,7 +118,6 @@ public void actionPerformed(@NotNull AnActionEvent e) { * @return 空菜单组 */ private AnAction[] getEmptyAnAction() { - this.notExistsChildren = true; return AnAction.EMPTY_ARRAY; } } diff --git a/src/main/java/com/sjhy/plugin/dict/GlobalDict.java b/src/main/java/com/sjhy/plugin/dict/GlobalDict.java index b0d03a0f..7c43f57d 100644 --- a/src/main/java/com/sjhy/plugin/dict/GlobalDict.java +++ b/src/main/java/com/sjhy/plugin/dict/GlobalDict.java @@ -15,7 +15,7 @@ public interface GlobalDict { /** * 版本号 */ - String VERSION = "1.2.4"; + String VERSION = "1.2.9"; /** * 作者名称 */ @@ -39,7 +39,6 @@ public interface GlobalDict { "java.lang.Short", "java.lang.Byte", "java.lang.Character", - "java.lang.Character", "java.math.BigDecimal", "java.math.BigInteger", "java.lang.Double", diff --git a/src/main/java/com/sjhy/plugin/dto/ColumnInfoDTO.java b/src/main/java/com/sjhy/plugin/dto/ColumnInfoDTO.java index 1dd54342..494d99e6 100644 --- a/src/main/java/com/sjhy/plugin/dto/ColumnInfoDTO.java +++ b/src/main/java/com/sjhy/plugin/dto/ColumnInfoDTO.java @@ -4,14 +4,13 @@ import com.intellij.psi.PsiField; import com.sjhy.plugin.entity.TypeMapper; import com.sjhy.plugin.enums.MatchType; +import com.sjhy.plugin.tool.CompatibleUtils; import com.sjhy.plugin.tool.CurrGroupUtils; import com.sjhy.plugin.tool.DocCommentUtils; import com.sjhy.plugin.tool.NameUtils; import lombok.Data; import lombok.NoArgsConstructor; -import java.util.HashMap; -import java.util.Map; import java.util.regex.Pattern; /** @@ -30,15 +29,15 @@ public ColumnInfoDTO(PsiField field) { this.comment = DocCommentUtils.getComment(field.getDocComment()); this.type = field.getType().getCanonicalText(); this.custom = false; - this.ext = new HashMap(); + this.ext = "{}"; } public ColumnInfoDTO(DasColumn column) { this.name = NameUtils.getInstance().getJavaName(column.getName()); this.comment = column.getComment(); - this.type = getJavaType(column.getDataType().toString()); + this.type = getJavaType(CompatibleUtils.getDataType(column).toString()); this.custom = false; - this.ext = new HashMap(); + this.ext = "{}"; } private String getJavaType(String dbType) { @@ -74,7 +73,7 @@ private String getJavaType(String dbType) { */ private Boolean custom; /** - * 扩展数据 + * 扩展数据(JSON字符串) */ - private Map ext; + private String ext; } diff --git a/src/main/java/com/sjhy/plugin/dto/TableInfoDTO.java b/src/main/java/com/sjhy/plugin/dto/TableInfoDTO.java index 87fb20e1..ec77edeb 100644 --- a/src/main/java/com/sjhy/plugin/dto/TableInfoDTO.java +++ b/src/main/java/com/sjhy/plugin/dto/TableInfoDTO.java @@ -88,27 +88,66 @@ private static void merge(TableInfoDTO oldData, TableInfoDTO newData) { if (!StringUtils.isEmpty(oldData.getSaveModelName())) { newData.saveModelName = oldData.getSaveModelName(); } - // 补充自定义列 - for (ColumnInfoDTO oldColumn : oldData.getFullColumn()) { - if (!oldColumn.getCustom()) { - continue; + List allNewColumnNames = newData.getFullColumn().stream().map(ColumnInfoDTO::getName).collect(Collectors.toList()); + // 列出旧的顺序,并删除已经不存在的列,不包括自定义列 + List oldSequenceColumn = oldData.getFullColumn().stream() + .filter(item -> allNewColumnNames.contains(item.getName()) || Boolean.TRUE.equals(item.getCustom())) + .collect(Collectors.toList()); + // 尽可能的保留原始顺序(把自定义列按原始位置插入) + Map nameMap = new HashMap(oldSequenceColumn.size()); + for (int i = 0; i < oldSequenceColumn.size(); i++) { + ColumnInfoDTO columnInfo = oldSequenceColumn.get(i); + if (columnInfo.getCustom()) { + // 如果原本是自定义列,现在变成了数据库列,则忽略调原本的自定义列 + if (allNewColumnNames.contains(columnInfo.getName())) { + continue; + } + // 获取当前自定义列的前一个名称 + String beforeName = ""; + if (i> 0) { + beforeName = oldSequenceColumn.get(i - 1).getName(); + } + nameMap.put(beforeName, columnInfo.getName()); } - newData.getFullColumn().add(oldColumn); } - // 保持旧列的顺序 - Map map = newData.getFullColumn().stream().collect(Collectors.toMap(ColumnInfoDTO::getName, val -> val)); + // 将自定义列按顺序插入到新表中 + nameMap.forEach((k, v) -> { + if (StringUtils.isEmpty(k)) { + allNewColumnNames.add(0, v); + } else { + for (int i = 0; i < allNewColumnNames.size(); i++) { + if (allNewColumnNames.get(i).equals(k)) { + allNewColumnNames.add(i + 1, v); + return; + } + } + } + }); + // 按顺序依次重写数据 + Map oldColumnMap = oldData.getFullColumn().stream().collect(Collectors.toMap(ColumnInfoDTO::getName, v -> v)); + Map newColumnMap = newData.getFullColumn().stream().collect(Collectors.toMap(ColumnInfoDTO::getName, v -> v)); List tmpList = new ArrayList(); - for (ColumnInfoDTO columnInfo : oldData.getFullColumn()) { - ColumnInfoDTO newColumn = map.get(columnInfo.getName()); - if (newColumn != null) { - tmpList.add(newColumn); + for (String name : allNewColumnNames) { + ColumnInfoDTO newColumnInfo = newColumnMap.get(name); + if (newColumnInfo == null) { + newColumnInfo = oldColumnMap.get(name); + if (newColumnInfo == null) { + throw new NullPointerException("找不到列信息"); + } + tmpList.add(newColumnInfo); + continue; } - } - // 补充剩余列 - for (ColumnInfoDTO columnInfoDTO : newData.getFullColumn()) { - if (!tmpList.contains(columnInfoDTO)) { - tmpList.add(columnInfoDTO); + ColumnInfoDTO oldColumnInfo = oldColumnMap.get(name); + if (oldColumnInfo == null) { + tmpList.add(newColumnInfo); + continue; + } + // 需要进行合并操作 + newColumnInfo.setExt(oldColumnInfo.getExt()); + if (StringUtils.isEmpty(newColumnInfo.getComment())) { + newColumnInfo.setComment(oldColumnInfo.getComment()); } + tmpList.add(newColumnInfo); } // list数据替换 newData.getFullColumn().clear(); @@ -182,6 +221,7 @@ public TableInfo toTableInfo(PsiClass psiClass) { return tableInfo; } + @SuppressWarnings("unchecked") public TableInfo toTableInfo(DbTable dbTable) { TableInfo tableInfo = new TableInfo(); tableInfo.setObj(dbTable); @@ -211,7 +251,7 @@ public TableInfo toTableInfo(DbTable dbTable) { columnInfo.setShortType(split[split.length - 1]); columnInfo.setComment(dto.getComment()); columnInfo.setCustom(dto.getCustom()); - columnInfo.setExt(dto.getExt()); + columnInfo.setExt(JSON.parse(dto.getExt(), HashMap.class)); tableInfo.getFullColumn().add(columnInfo); if (columnInfo.getObj() != null && DasUtil.isPrimary(columnInfo.getObj())) { tableInfo.getPkColumn().add(columnInfo); @@ -237,7 +277,7 @@ public static TableInfoDTO valueOf(TableInfo tableInfo) { ColumnInfoDTO columnInfoDTO = new ColumnInfoDTO(); columnInfoDTO.setName(columnInfo.getName()); columnInfoDTO.setType(columnInfo.getType()); - columnInfoDTO.setExt(columnInfo.getExt()); + columnInfoDTO.setExt(JSON.toJson(columnInfo.getExt())); columnInfoDTO.setCustom(columnInfo.getCustom()); columnInfoDTO.setComment(columnInfo.getComment()); dto.getFullColumn().add(columnInfoDTO); diff --git a/src/main/java/com/sjhy/plugin/dto/TableInfoSettingsDTO.java b/src/main/java/com/sjhy/plugin/dto/TableInfoSettingsDTO.java index d5b43f5a..4e4f94fc 100644 --- a/src/main/java/com/sjhy/plugin/dto/TableInfoSettingsDTO.java +++ b/src/main/java/com/sjhy/plugin/dto/TableInfoSettingsDTO.java @@ -3,14 +3,20 @@ import com.intellij.database.model.DasNamespace; import com.intellij.database.psi.DbElement; import com.intellij.database.psi.DbTable; +import com.intellij.openapi.ui.Messages; import com.intellij.psi.PsiClass; +import com.sjhy.plugin.dict.GlobalDict; import com.sjhy.plugin.entity.TableInfo; +import com.sjhy.plugin.tool.JSON; +import com.sjhy.plugin.tool.ReflectionUtils; +import com.sjhy.plugin.tool.StringUtils; import lombok.Data; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; -import java.util.HashMap; +import java.util.Base64; import java.util.Map; +import java.util.TreeMap; /** * 表格信息设置传输对象 @@ -21,10 +27,10 @@ */ @Data public class TableInfoSettingsDTO { - private Map tableInfoMap; + private Map tableInfoMap; public TableInfoSettingsDTO() { - this.tableInfoMap = new HashMap(16); + this.tableInfoMap = new TreeMap(); } private String generateKey(DbTable dbTable) { @@ -39,9 +45,12 @@ private String generateKey(DbTable dbTable) { } builder.insert(0, name); try { - Method method = element.getClass().getDeclaredMethod("getParent"); + Method method = ReflectionUtils.getDeclaredMethod(element.getClass(), "getParent"); + if (method == null) { + break; + } element = (DbElement) method.invoke(element); - } catch (NoSuchMethodException | IllegalAccessException | InvocationTargetException e) { + } catch (IllegalAccessException | InvocationTargetException e) { break; } // 未必所有的数据库都是存在三层,例如MySQL就只有两层。如果上次层不是Namespace,则不再继续获取 @@ -64,9 +73,9 @@ private String generateKey(PsiClass psiClass) { @SuppressWarnings("Duplicates") public TableInfo readTableInfo(PsiClass psiClass) { String key = generateKey(psiClass); - TableInfoDTO dto = this.tableInfoMap.get(key); + TableInfoDTO dto = decode(this.tableInfoMap.get(key)); dto = new TableInfoDTO(dto, psiClass); - this.tableInfoMap.put(key, dto); + this.tableInfoMap.put(key, encode(dto)); return dto.toTableInfo(psiClass); } @@ -79,9 +88,10 @@ public TableInfo readTableInfo(PsiClass psiClass) { @SuppressWarnings("Duplicates") public TableInfo readTableInfo(DbTable dbTable) { String key = generateKey(dbTable); - TableInfoDTO dto = this.tableInfoMap.get(key); + TableInfoDTO dto = decode(this.tableInfoMap.get(key)); + // 表可能新增了字段,需要重新合并保存 dto = new TableInfoDTO(dto, dbTable); - this.tableInfoMap.put(key, dto); + this.tableInfoMap.put(key, encode(dto)); return dto.toTableInfo(dbTable); } @@ -95,16 +105,16 @@ public void saveTableInfo(TableInfo tableInfo) { return; } DbTable dbTable = tableInfo.getObj(); - PsiClass psiClass = tableInfo.getPsiClassObj(); String key; if (dbTable != null) { key = generateKey(dbTable); - } else if (psiClass != null) { - key = generateKey(psiClass); + } else if (tableInfo.getPsiClassObj() != null) { + key = generateKey((PsiClass) tableInfo.getPsiClassObj()); } else { + Messages.showInfoMessage(tableInfo.getName() + "表配置信息保存失败", GlobalDict.TITLE_INFO); return; } - this.tableInfoMap.put(key, TableInfoDTO.valueOf(tableInfo)); + this.tableInfoMap.put(key, encode(TableInfoDTO.valueOf(tableInfo))); } /** @@ -114,6 +124,27 @@ public void saveTableInfo(TableInfo tableInfo) { */ public void resetTableInfo(DbTable dbTable) { String key = generateKey(dbTable); - this.tableInfoMap.put(key, new TableInfoDTO(null, dbTable)); + this.tableInfoMap.put(key, encode(new TableInfoDTO(null, dbTable))); + } + + /** + * 删除表信息 + * + * @param dbTable 数据库表 + */ + public void removeTableInfo(DbTable dbTable) { + String key = generateKey(dbTable); + this.tableInfoMap.remove(key); + } + + private static String encode(TableInfoDTO tableInfo) { + return Base64.getEncoder().encodeToString(JSON.toJson(tableInfo).getBytes()); + } + + private static TableInfoDTO decode(String base64) { + if (StringUtils.isEmpty(base64)) { + return null; + } + return JSON.parse(new String(Base64.getDecoder().decode(base64)), TableInfoDTO.class); } } diff --git a/src/main/java/com/sjhy/plugin/entity/AbstractGroup.java b/src/main/java/com/sjhy/plugin/entity/AbstractGroup.java index 526f3eda..0cc93a50 100644 --- a/src/main/java/com/sjhy/plugin/entity/AbstractGroup.java +++ b/src/main/java/com/sjhy/plugin/entity/AbstractGroup.java @@ -58,8 +58,8 @@ default E defaultChild() { * * @return {@link T} */ + @SuppressWarnings("unchecked") default T cloneObj() { - //noinspection unchecked return (T) CloneUtils.cloneByJson(this); } } diff --git a/src/main/java/com/sjhy/plugin/entity/TableInfo.java b/src/main/java/com/sjhy/plugin/entity/TableInfo.java index 7286b6a9..169ad13c 100644 --- a/src/main/java/com/sjhy/plugin/entity/TableInfo.java +++ b/src/main/java/com/sjhy/plugin/entity/TableInfo.java @@ -2,7 +2,6 @@ import com.fasterxml.jackson.annotation.JsonIgnore; import com.intellij.database.psi.DbTable; -import com.intellij.psi.PsiClass; import lombok.Data; import java.util.List; @@ -24,9 +23,11 @@ public class TableInfo { /** * 原始对象(从实体生成) + * + * Note: 实际类型是com.intellij.psi.PsiClass,为了避免velocity反射出现ClassNotFound,写为Object类型 */ @JsonIgnore - private PsiClass psiClassObj; + private Object psiClassObj; /** * 表名(首字母大写) diff --git a/src/main/java/com/sjhy/plugin/factory/AbstractItemFactory.java b/src/main/java/com/sjhy/plugin/factory/AbstractItemFactory.java index b3acc8d5..003e5186 100644 --- a/src/main/java/com/sjhy/plugin/factory/AbstractItemFactory.java +++ b/src/main/java/com/sjhy/plugin/factory/AbstractItemFactory.java @@ -2,6 +2,8 @@ import com.sjhy.plugin.entity.AbstractItem; +import java.lang.reflect.InvocationTargetException; + /** * 抽象的项目工厂 * @@ -13,9 +15,9 @@ public class AbstractItemFactory { public static > T createDefaultVal(Class cls) { try { - T instance = cls.newInstance(); + T instance = cls.getDeclaredConstructor().newInstance(); return instance.defaultVal(); - } catch (InstantiationException | IllegalAccessException e) { + } catch (InstantiationException | IllegalAccessException | NoSuchMethodException | InvocationTargetException e) { throw new IllegalArgumentException("构建示例失败", e); } } diff --git a/src/main/java/com/sjhy/plugin/factory/CellEditorFactory.java b/src/main/java/com/sjhy/plugin/factory/CellEditorFactory.java index cec9f545..d9e45c4a 100644 --- a/src/main/java/com/sjhy/plugin/factory/CellEditorFactory.java +++ b/src/main/java/com/sjhy/plugin/factory/CellEditorFactory.java @@ -1,8 +1,6 @@ package com.sjhy.plugin.factory; import com.intellij.openapi.ui.ComboBox; -import com.intellij.ui.BooleanTableCellEditor; -import com.intellij.ui.JBColor; import com.intellij.ui.components.JBTextField; import javax.swing.*; @@ -10,7 +8,6 @@ import java.awt.event.ActionListener; import java.awt.event.FocusEvent; import java.awt.event.FocusListener; -import java.util.stream.Stream; /** * 表格编辑器构建工厂类 @@ -21,17 +18,6 @@ */ public class CellEditorFactory { - /** - * 创建下拉框编辑器 - * - * @param editable 可编辑的 - * @return {@link TableCellEditor} - */ - public static TableCellEditor createComboBoxEditor(boolean editable, Class enumCls) { - Enum[] enumConstants = enumCls.getEnumConstants(); - return createComboBoxEditor(editable, Stream.of(enumConstants).map(Enum::name).toArray(value -> new String[enumConstants.length])); - } - /** * 创建下拉框编辑器 * @@ -42,21 +28,12 @@ public static TableCellEditor createComboBoxEditor(boolean editable, Class comboBox = new ComboBox(items); comboBox.setEditable(editable); - // 配色 - if (comboBox.getPopup() != null) { - comboBox.getPopup().getList().setBackground(JBColor.WHITE); - comboBox.getPopup().getList().setForeground(JBColor.GREEN); - } if (!editable) { transmitFocusEvent(comboBox); } return new DefaultCellEditor(comboBox); } - public static TableCellEditor createBooleanEditor() { - return new BooleanTableCellEditor(); - } - /** * 创建文本框编辑器 * diff --git a/src/main/java/com/sjhy/plugin/service/TableInfoSettingsService.java b/src/main/java/com/sjhy/plugin/service/TableInfoSettingsService.java index 7f1d80a4..b725bd9a 100644 --- a/src/main/java/com/sjhy/plugin/service/TableInfoSettingsService.java +++ b/src/main/java/com/sjhy/plugin/service/TableInfoSettingsService.java @@ -1,14 +1,18 @@ package com.sjhy.plugin.service; import com.intellij.database.psi.DbTable; +import com.intellij.openapi.command.WriteCommandAction; import com.intellij.openapi.components.PersistentStateComponent; import com.intellij.openapi.components.ServiceManager; +import com.intellij.openapi.vfs.VirtualFile; import com.intellij.psi.PsiClass; import com.sjhy.plugin.dto.TableInfoSettingsDTO; import com.sjhy.plugin.entity.TableInfo; import com.sjhy.plugin.service.impl.TableInfoSettingsServiceImpl; import com.sjhy.plugin.tool.ProjectUtils; +import java.io.IOException; + /** * @author makejava * @version 1.0.0 @@ -21,7 +25,26 @@ public interface TableInfoSettingsService extends PersistentStateComponent { + try { + configFile.delete(null); + } catch (IOException ex) { + ex.printStackTrace(); + } + }); + } + } + // 重新获取配置 + return ServiceManager.getService(ProjectUtils.getCurrProject(), TableInfoSettingsServiceImpl.class); + } } /** @@ -53,4 +76,11 @@ static TableInfoSettingsService getInstance() { * @param dbTable 数据库表 */ void resetTableInfo(DbTable dbTable); + + /** + * 删除表信息 + * + * @param dbTable 数据库表 + */ + void removeTableInfo(DbTable dbTable); } diff --git a/src/main/java/com/sjhy/plugin/service/impl/ClipboardExportImportSettingsServiceImpl.java b/src/main/java/com/sjhy/plugin/service/impl/ClipboardExportImportSettingsServiceImpl.java index d45ad45f..5606b81f 100644 --- a/src/main/java/com/sjhy/plugin/service/impl/ClipboardExportImportSettingsServiceImpl.java +++ b/src/main/java/com/sjhy/plugin/service/impl/ClipboardExportImportSettingsServiceImpl.java @@ -25,7 +25,7 @@ public class ClipboardExportImportSettingsServiceImpl implements ExportImportSet */ @Override public void exportConfig(SettingsStorageDTO settingsStorage) { - String json = JSON.toJson(settingsStorage); + String json = JSON.toJsonByFormat(settingsStorage); CopyPasteManager.getInstance().setContents(new TextTransferable(json)); Messages.showInfoMessage("Config info success write to clipboard!", GlobalDict.TITLE_INFO); } diff --git a/src/main/java/com/sjhy/plugin/service/impl/CodeGenerateServiceImpl.java b/src/main/java/com/sjhy/plugin/service/impl/CodeGenerateServiceImpl.java index b8eeabeb..de41c397 100644 --- a/src/main/java/com/sjhy/plugin/service/impl/CodeGenerateServiceImpl.java +++ b/src/main/java/com/sjhy/plugin/service/impl/CodeGenerateServiceImpl.java @@ -7,6 +7,7 @@ import com.intellij.openapi.module.ModuleManager; import com.intellij.openapi.project.Project; import com.intellij.openapi.ui.Messages; +import com.intellij.psi.PsiClass; import com.intellij.util.ReflectionUtil; import com.sjhy.plugin.dict.GlobalDict; import com.sjhy.plugin.dto.GenerateOptions; @@ -80,7 +81,8 @@ public void generate(Collection