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 da10d345..5e805440 100644 --- a/build.gradle +++ b/build.gradle @@ -6,28 +6,24 @@ buildscript { 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" - } } //2.1 插件配置 // 这两个插件是必备 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.4-RELEASE' +version '1.2.8-RELEASE' sourceCompatibility = JavaVersion.VERSION_1_8 targetCompatibility = JavaVersion.VERSION_1_8 +compileJava.options.encoding = "UTF-8" +compileTestJava.options.encoding = "UTF-8" repositories { - jcenter() mavenCentral() } @@ -46,9 +42,10 @@ intellij { // 企业版 type 'IU' // 各种IDEA版本去这里找 + // https://data.services.jetbrains.com/products?code=PS&fields=releases.version%2Creleases.date%2Creleases.build // https://www.jetbrains.com/intellij-repository/releases // 依赖的插件 - plugins = ['java', 'DatabaseTools'] + plugins = ['com.intellij.modules.platform','com.intellij.database'] //Disables updating since-build attribute in plugin.xml updateSinceUntilBuild false downloadSources = true 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..0a949120 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-dn.com/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 deleted file mode 100644 index e8068c51..00000000 --- a/src/main/java/com/sjhy/plugin/actions/EasyCodeEntityAction.java +++ /dev/null @@ -1,78 +0,0 @@ -package com.sjhy.plugin.actions; - -import com.google.common.collect.Lists; -import com.intellij.openapi.actionSystem.AnAction; -import com.intellij.openapi.actionSystem.AnActionEvent; -import com.intellij.openapi.actionSystem.CommonDataKeys; -import com.intellij.openapi.project.Project; -import com.intellij.openapi.vfs.VirtualFile; -import com.intellij.psi.PsiClass; -import com.intellij.psi.PsiJavaFile; -import com.intellij.psi.PsiManager; -import com.intellij.psi.PsiModifier; -import com.sjhy.plugin.tool.CacheDataUtils; -import com.sjhy.plugin.ui.SelectSavePath; -import org.jetbrains.annotations.NotNull; - -import java.util.Arrays; -import java.util.List; -import java.util.stream.Collectors; - -/** - * 从Java类生成代码菜单 - * - * @author Mario Luo - */ -public class EasyCodeEntityAction extends AnAction { - - private final CacheDataUtils cacheDataUtils = CacheDataUtils.getInstance(); - - @Override - public void actionPerformed(@NotNull AnActionEvent event) { - Project project = event.getProject(); - if (project == null) { - return; - } - - // 过滤选择Java文件 - VirtualFile[] psiFiles = event.getData(CommonDataKeys.VIRTUAL_FILE_ARRAY); - if (psiFiles == null) { - return; - } - PsiManager psiManager = PsiManager.getInstance(project); - List psiJavaFiles = Arrays.stream(psiFiles) - .map(psiManager::findFile) - .filter(f -> f instanceof PsiJavaFile) - .map(f -> (PsiJavaFile) f) - .collect(Collectors.toList()); - if (psiJavaFiles.size() == 0) { - return; - } - - // 获取选中的类 - List psiClassList = resolvePsiClassByFile(psiJavaFiles); - if (psiClassList.size() == 0) { - return; - } - - // 缓存选中值 - cacheDataUtils.setSelectPsiClass(psiClassList.get(0)); - cacheDataUtils.setPsiClassList(psiClassList); - new SelectSavePath(project, true).show(); - } - - /** - * 解析类 - */ - private List resolvePsiClassByFile(List psiJavaFiles) { - List psiClassList = Lists.newArrayListWithCapacity(psiJavaFiles.size()); - for (PsiJavaFile psiJavaFile : psiJavaFiles) { - Arrays.stream(psiJavaFile.getClasses()) - .filter(o -> o.getModifierList() != null && o.getModifierList().hasModifierProperty(PsiModifier.PUBLIC)) - .findFirst().ifPresent(psiClassList::add); - } - return psiClassList; - } - - -} diff --git a/src/main/java/com/sjhy/plugin/actions/MainActionGroup.java b/src/main/java/com/sjhy/plugin/actions/MainActionGroup.java index 42128fea..5a4fd060 100644 --- a/src/main/java/com/sjhy/plugin/actions/MainActionGroup.java +++ b/src/main/java/com/sjhy/plugin/actions/MainActionGroup.java @@ -119,7 +119,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); } }; diff --git a/src/main/java/com/sjhy/plugin/dict/GlobalDict.java b/src/main/java/com/sjhy/plugin/dict/GlobalDict.java index b0d03a0f..7697c942 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.8"; /** * 作者名称 */ diff --git a/src/main/java/com/sjhy/plugin/dto/ColumnInfoDTO.java b/src/main/java/com/sjhy/plugin/dto/ColumnInfoDTO.java index 1dd54342..cded87bc 100644 --- a/src/main/java/com/sjhy/plugin/dto/ColumnInfoDTO.java +++ b/src/main/java/com/sjhy/plugin/dto/ColumnInfoDTO.java @@ -1,17 +1,13 @@ package com.sjhy.plugin.dto; import com.intellij.database.model.DasColumn; -import com.intellij.psi.PsiField; import com.sjhy.plugin.entity.TypeMapper; import com.sjhy.plugin.enums.MatchType; 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; /** @@ -25,20 +21,12 @@ @NoArgsConstructor public class ColumnInfoDTO { - public ColumnInfoDTO(PsiField field) { - this.name = field.getName(); - this.comment = DocCommentUtils.getComment(field.getDocComment()); - this.type = field.getType().getCanonicalText(); - this.custom = false; - this.ext = new HashMap(); - } - public ColumnInfoDTO(DasColumn column) { this.name = NameUtils.getInstance().getJavaName(column.getName()); this.comment = column.getComment(); this.type = getJavaType(column.getDataType().toString()); this.custom = false; - this.ext = new HashMap(); + this.ext = "{}"; } private String getJavaType(String dbType) { @@ -74,7 +62,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/GenerateOptions.java b/src/main/java/com/sjhy/plugin/dto/GenerateOptions.java index 1f1d5b4b..0b4be47b 100644 --- a/src/main/java/com/sjhy/plugin/dto/GenerateOptions.java +++ b/src/main/java/com/sjhy/plugin/dto/GenerateOptions.java @@ -13,10 +13,6 @@ @Data @Builder public class GenerateOptions { - /** - * 实体类模式 - */ - private Boolean entityModel; /** * 统一配置 */ diff --git a/src/main/java/com/sjhy/plugin/dto/TableInfoDTO.java b/src/main/java/com/sjhy/plugin/dto/TableInfoDTO.java index 87fb20e1..64f4e0cc 100644 --- a/src/main/java/com/sjhy/plugin/dto/TableInfoDTO.java +++ b/src/main/java/com/sjhy/plugin/dto/TableInfoDTO.java @@ -3,8 +3,6 @@ import com.intellij.database.model.DasColumn; import com.intellij.database.psi.DbTable; import com.intellij.database.util.DasUtil; -import com.intellij.psi.PsiClass; -import com.intellij.psi.PsiField; import com.intellij.util.containers.JBIterable; import com.sjhy.plugin.entity.ColumnInfo; import com.sjhy.plugin.entity.TableInfo; @@ -34,25 +32,6 @@ public TableInfoDTO(TableInfoDTO dto, DbTable dbTable) { merge(dto, this); } - public TableInfoDTO(TableInfoDTO dto, PsiClass psiClass) { - this(psiClass); - merge(dto, this); - } - - private TableInfoDTO(PsiClass psiClass) { - this.name = psiClass.getName(); - this.preName = ""; - this.comment = DocCommentUtils.getComment(psiClass.getDocComment()); - this.templateGroupName = ""; - this.savePackageName = ""; - this.savePath = ""; - this.saveModelName = ""; - this.fullColumn = new ArrayList(); - for (PsiField field : psiClass.getAllFields()) { - this.fullColumn.add(new ColumnInfoDTO(field)); - } - } - private TableInfoDTO(DbTable dbTable) { this.name = NameUtils.getInstance().getClassName(dbTable.getName()); this.preName = ""; @@ -70,7 +49,7 @@ private TableInfoDTO(DbTable dbTable) { } private static void merge(TableInfoDTO oldData, TableInfoDTO newData) { - if (oldData == null || CollectionUtil.isEmpty(oldData.getFullColumn())) { + if (oldData == null) { return; } if (!StringUtils.isEmpty(oldData.getPreName())) { @@ -88,27 +67,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(); @@ -149,39 +167,7 @@ private static void merge(TableInfoDTO oldData, TableInfoDTO newData) { */ private String saveModelName; - public TableInfo toTableInfo(PsiClass psiClass) { - TableInfo tableInfo = new TableInfo(); - tableInfo.setPsiClassObj(psiClass); - tableInfo.setName(this.getName()); - tableInfo.setPreName(this.getPreName()); - tableInfo.setTemplateGroupName(this.getTemplateGroupName()); - tableInfo.setSavePackageName(this.getSavePackageName()); - tableInfo.setSavePath(this.getSavePath()); - tableInfo.setComment(this.getComment()); - tableInfo.setSaveModelName(this.getSaveModelName()); - tableInfo.setFullColumn(new ArrayList()); - tableInfo.setPkColumn(new ArrayList()); - tableInfo.setOtherColumn(new ArrayList()); - for (PsiField field : psiClass.getAllFields()) { - if (PsiClassGenerateUtils.isSkipField(field)) { - continue; - } - ColumnInfo columnInfo = new ColumnInfo(); - columnInfo.setName(field.getName()); - columnInfo.setShortType(field.getType().getPresentableText()); - columnInfo.setType(field.getType().getCanonicalText()); - columnInfo.setComment(DocCommentUtils.getComment(field.getDocComment())); - columnInfo.setCustom(false); - tableInfo.getFullColumn().add(columnInfo); - if (PsiClassGenerateUtils.isPkField(field)) { - tableInfo.getPkColumn().add(columnInfo); - } else { - tableInfo.getOtherColumn().add(columnInfo); - } - } - return tableInfo; - } - + @SuppressWarnings("unchecked") public TableInfo toTableInfo(DbTable dbTable) { TableInfo tableInfo = new TableInfo(); tableInfo.setObj(dbTable); @@ -211,7 +197,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 +223,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..c727a9db 100644 --- a/src/main/java/com/sjhy/plugin/dto/TableInfoSettingsDTO.java +++ b/src/main/java/com/sjhy/plugin/dto/TableInfoSettingsDTO.java @@ -3,14 +3,14 @@ import com.intellij.database.model.DasNamespace; import com.intellij.database.psi.DbElement; import com.intellij.database.psi.DbTable; -import com.intellij.psi.PsiClass; import com.sjhy.plugin.entity.TableInfo; +import com.sjhy.plugin.tool.ReflectionUtils; import lombok.Data; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; -import java.util.HashMap; import java.util.Map; +import java.util.TreeMap; /** * 表格信息设置传输对象 @@ -24,7 +24,7 @@ public class TableInfoSettingsDTO { private Map tableInfoMap; public TableInfoSettingsDTO() { - this.tableInfoMap = new HashMap(16); + this.tableInfoMap = new TreeMap(); } private String generateKey(DbTable dbTable) { @@ -39,9 +39,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,则不再继续获取 @@ -52,24 +55,6 @@ private String generateKey(DbTable dbTable) { return builder.toString(); } - private String generateKey(PsiClass psiClass) { - return psiClass.getQualifiedName(); - } - /** - * 读表信息 - * - * @param psiClass psi类 - * @return {@link TableInfo} - */ - @SuppressWarnings("Duplicates") - public TableInfo readTableInfo(PsiClass psiClass) { - String key = generateKey(psiClass); - TableInfoDTO dto = this.tableInfoMap.get(key); - dto = new TableInfoDTO(dto, psiClass); - this.tableInfoMap.put(key, dto); - return dto.toTableInfo(psiClass); - } - /** * 读表信息 * @@ -80,6 +65,7 @@ public TableInfo readTableInfo(PsiClass psiClass) { public TableInfo readTableInfo(DbTable dbTable) { String key = generateKey(dbTable); TableInfoDTO dto = this.tableInfoMap.get(key); + // 表可能新增了字段,需要重新合并保存 dto = new TableInfoDTO(dto, dbTable); this.tableInfoMap.put(key, dto); return dto.toTableInfo(dbTable); @@ -95,16 +81,10 @@ 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 { - return; + String key = generateKey(dbTable); + this.tableInfoMap.put(key, TableInfoDTO.valueOf(tableInfo)); } - this.tableInfoMap.put(key, TableInfoDTO.valueOf(tableInfo)); } /** @@ -116,4 +96,14 @@ public void resetTableInfo(DbTable dbTable) { String key = generateKey(dbTable); this.tableInfoMap.put(key, new TableInfoDTO(null, dbTable)); } + + /** + * 删除表信息 + * + * @param dbTable 数据库表 + */ + public void removeTableInfo(DbTable dbTable) { + String key = generateKey(dbTable); + this.tableInfoMap.remove(key); + } } 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/SaveFile.java b/src/main/java/com/sjhy/plugin/entity/SaveFile.java index 11b3b32a..54467931 100644 --- a/src/main/java/com/sjhy/plugin/entity/SaveFile.java +++ b/src/main/java/com/sjhy/plugin/entity/SaveFile.java @@ -249,7 +249,9 @@ private void saveOrReplaceFile(VirtualFile file, VirtualFile directory) { FileUtils.getInstance().reformatFile(project, file); } // 提交文档改动,并非VCS中的提交文件 - psiDocumentManager.commitDocument(document); + if (document != null) { + psiDocumentManager.commitDocument(document); + } } private String getFileText(VirtualFile file) { diff --git a/src/main/java/com/sjhy/plugin/entity/TableInfo.java b/src/main/java/com/sjhy/plugin/entity/TableInfo.java index 7286b6a9..2f5b975d 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; @@ -22,12 +21,6 @@ public class TableInfo { @JsonIgnore private DbTable obj; - /** - * 原始对象(从实体生成) - */ - @JsonIgnore - private PsiClass 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..7f339206 100644 --- a/src/main/java/com/sjhy/plugin/service/TableInfoSettingsService.java +++ b/src/main/java/com/sjhy/plugin/service/TableInfoSettingsService.java @@ -1,14 +1,17 @@ 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.psi.PsiClass; +import com.intellij.openapi.vfs.VirtualFile; 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 +24,26 @@ public interface TableInfoSettingsService extends PersistentStateComponent { + try { + configFile.delete(null); + } catch (IOException ex) { + ex.printStackTrace(); + } + }); + } + } + // 重新获取配置 + return ServiceManager.getService(ProjectUtils.getCurrProject(), TableInfoSettingsServiceImpl.class); + } } /** @@ -32,14 +54,6 @@ static TableInfoSettingsService getInstance() { */ TableInfo getTableInfo(DbTable dbTable); - /** - * 获取表信息 - * - * @param psiClass psi类 - * @return {@link TableInfo} - */ - TableInfo getTableInfo(PsiClass psiClass); - /** * 保存表信息 * @@ -53,4 +67,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..d561650c 100644 --- a/src/main/java/com/sjhy/plugin/service/impl/CodeGenerateServiceImpl.java +++ b/src/main/java/com/sjhy/plugin/service/impl/CodeGenerateServiceImpl.java @@ -66,44 +66,34 @@ public CodeGenerateServiceImpl(Project project) { @Override public void generate(Collection