Skip to content

Commit 1b4a5da

Browse files
committed
解决新版类不存在无法编译通过问题,但事实上类是存在的。
1 parent cd62440 commit 1b4a5da

File tree

1 file changed

+37
-9
lines changed

1 file changed

+37
-9
lines changed

src/main/java/com/sjhy/plugin/ui/SelectSavePath.java

Lines changed: 37 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,15 @@
11
package com.sjhy.plugin.ui;
22

3-
import com.intellij.ide.util.PackageChooserDialog;
3+
//import com.intellij.ide.util.PackageChooserDialog;
44
import com.intellij.openapi.fileChooser.FileChooser;
55
import com.intellij.openapi.fileChooser.FileChooserDescriptorFactory;
66
import com.intellij.openapi.module.Module;
77
import com.intellij.openapi.module.ModuleManager;
88
import com.intellij.openapi.project.Project;
99
import com.intellij.openapi.ui.Messages;
1010
import com.intellij.openapi.vfs.VirtualFile;
11-
import com.intellij.psi.PsiPackage;
11+
//import com.intellij.psi.PsiPackage;
12+
import com.intellij.util.ExceptionUtil;
1213
import com.sjhy.plugin.constants.MsgValue;
1314
import com.sjhy.plugin.constants.StrState;
1415
import com.sjhy.plugin.entity.TableInfo;
@@ -24,6 +25,9 @@
2425
import javax.swing.*;
2526
import java.awt.*;
2627
import java.awt.event.*;
28+
import java.lang.reflect.Constructor;
29+
import java.lang.reflect.InvocationTargetException;
30+
import java.lang.reflect.Method;
2731
import java.util.ArrayList;
2832
import java.util.LinkedList;
2933
import java.util.List;
@@ -254,14 +258,38 @@ private void init() {
254258

255259
//添加包选择事件
256260
packageChooseButton.addActionListener(e -> {
257-
PackageChooserDialog dialog = new PackageChooserDialog("Package Chooser", project);
258-
dialog.show();
259-
PsiPackage psiPackage = dialog.getSelectedPackage();
260-
if (psiPackage != null) {
261-
packageField.setText(psiPackage.getQualifiedName());
262-
// 刷新路径
263-
refreshPath();
261+
// 这里不知道发生了什么,明明类是存在的但是编译时就是找不到,只用通过反射来使用
262+
try {
263+
// 构建dialog
264+
Class<?> cls = Class.forName("com.intellij.ide.util.PackageChooserDialog");
265+
Constructor<?> constructor = cls.getConstructor(String.class, Project.class);
266+
Object dialog = constructor.newInstance("Package Chooser", project);
267+
// 打开dialog窗口
268+
Method show = dialog.getClass().getMethod("show");
269+
show.invoke(dialog);
270+
// 获取选中的包信息
271+
Method getSelectedPackage = dialog.getClass().getMethod("getSelectedPackage");
272+
Object psiPackage = getSelectedPackage.invoke(dialog);
273+
// 获取名字
274+
if (psiPackage != null) {
275+
Method getQualifiedName = psiPackage.getClass().getMethod("getQualifiedName");
276+
String packageName = (String) getQualifiedName.invoke(psiPackage);
277+
packageField.setText(packageName);
278+
// 刷新路径
279+
refreshPath();
280+
}
281+
} catch (IllegalAccessException | InvocationTargetException | NoSuchMethodException | InstantiationException | ClassNotFoundException e1) {
282+
// 抛出异常信息
283+
ExceptionUtil.rethrow(e1);
264284
}
285+
// PackageChooserDialog dialog = new PackageChooserDialog("Package Chooser", project);
286+
// dialog.show();
287+
// PsiPackage psiPackage = dialog.getSelectedPackage();
288+
// if (psiPackage != null) {
289+
// packageField.setText(psiPackage.getQualifiedName());
290+
// // 刷新路径
291+
// refreshPath();
292+
// }
265293
});
266294

267295
// 添加包编辑框失去焦点事件

0 commit comments

Comments
 (0)