格式化代码
public static void reformatJavaFile(PsiElement theElement) {
CodeStyleManager codeStyleManager = CodeStyleManager.getInstance(theElement.getProject());
try {
codeStyleManager.reformat(theElement);
} catch (Exception e) {
LOGGER.error("reformat code failed", e);
}
}
NotificationGroup notificationGroup = NotificationGroupManager.getInstance().getNotificationGroup("notificationGroup");
这里,"notificationGroup" 是你的通知组的 ID。确保在你的插件中使用唯一的 ID,以避免与其他插件冲突。
请注意,随着 IntelliJ 平台的发展,API 可能会发生变化。始终建议查看最新的官方文档或 IntelliJ Platform SDK DevGuide 来获取最新的信息和最佳实践。
notificationGroup还必须在plugin.xml中申明
例如:
<extensions defaultExtensionNs="com.intellij">
<notificationGroup id="notificationGroup"
displayType="BALLOON"
toolWindowId=""
isLogByDefault="true"
icon="/icons/pluginIcon.svg"
/>
使用粘贴板
CopyPasteManager.getInstance()
.setContents(new SimpleTransferable(table.toString(), DataFlavor.allHtmlFlavor));
一个类文件中可能会有内部类,所以读取的时候返回的是一个列表
public static List<PsiClass> getClasses(PsiElement element) {
List<PsiClass> elements = Lists.newArrayList();
List<PsiClass> classElements = PsiTreeUtil.getChildrenOfTypeAsList(element, PsiClass.class);
elements.addAll(classElements);
for (PsiClass classElement : classElements) {
//这里用了递归的方式获取内部类
elements.addAll(getClasses(classElement));
}
return elements;
}
//获取当前事件触发时,光标所在的元素
PsiElement psiElement = anActionEvent.getData(LangDataKeys.PSI_ELEMENT);
//如果光标选择的不是类,弹出对话框提醒
if (psiElement == null || !(psiElement instanceof PsiClass)) {
Messages.showMessageDialog(project, "Please focus on a class", "Generate Failed", null);
return;
}
对插件的全生命周期进行控制
public class HywayApplication implements ProjectComponent {
@Override
public void disposeComponent() {
System.out.println("组件销毁~~~~~");
ProjectComponent.super.disposeComponent();
}
@Override
public void projectOpened() {
System.out.println("项目打开阶段");
ProjectComponent.super.projectOpened();
}
@Override
public void initComponent() {
}
// 其他方法和组件生命周期方法(如disposeComponent)省略
}
还需要在resource->META-INFO->plugin文件中进行配置
<application-components>
<component>
<implementation-class>com.atelier.plugin.projectWizard.HywayApplication</implementation-class>
</component>
</application-components>
public class MyToolWindowFactory implements ToolWindowFactory {
private Template file=new Template("test","");
/**
* 编辑器组件
*/
private Editor editor;
@Override
public void createToolWindowContent(@NotNull Project project, @NotNull ToolWindow toolWindow) {
ContentFactory instance = ContentFactory.SERVICE.getInstance();
这里加入自己的组件进入面板
Content fuck = instance.createContent(mainPanel, "Atelier", false);
toolWindow.getContentManager().addContent(fuck);
}
}
VirtualFile newFile = LocalFileSystem.getInstance().findFileByIoFile(new File("文件路径"));
FileEditor[] fileEditors = FileEditorManagerEx.getInstance(project).openFile(newFile, true);
JComponent component = fileEditors[0].getComponent();
FileSystemTree fileSystemTree = FileSystemTreeFactory.SERVICE.getInstance()
.createFileSystemTree
(project,
new FileChooserDescriptor
(true,
true, true, true, true, true));
JTree tree = fileSystemTree.getTree();
VirtualFile newFile = LocalFileSystem.getInstance().findFileByIoFile(nodeFile);
com.intellij.psi.search.FilenameIndex.getFilesByName
⚠️ 特别注意,对PsiElement的写操作需要在 writeAction 上下文中
WriteCommandAction.runWriteCommandAction
虚拟文件VirtualFile(VF)是在IntelliJ的虚拟文件系统(VFS)中的文件表示。虚拟文件即本地文件系统中的文件。
不过,虚拟文件也可以表示JAR文件中的文件:
Library library = LibraryUtil.findLibraryByClass(psiClass.getQualifiedName(), project);
VirtualFile YmlFile = library.getFiles(OrderRootType.CLASSES)[0].findChild(TModuleExplorer.T_YAML);
PsiFile psiFile = PsiManager.getInstance(serverModule.getProject()).findFile(virtualFile);
VirtualFile virtualFile = psiFile.getVirtualFile();
定义
com.intellij.openapi.actionSystem.AnAction是所有Action的基类。
⚠️DefaultActionGroup 和 ActionGroup 都是 IntelliJ IDEA 中用于组织菜单的类,但它们之间有一些重要区别:
ActionGroup 是一个抽象类,表示一个菜单组。您可以扩展 ActionGroup 来创建自定义的菜单组,并添加子操作(包括其他组)。
DefaultActionGroup 是 ActionGroup 的一个具体实现,通常用于创建具有默认行为的组。DefaultActionGroup 通常用于创建基本的菜单项或工具栏按钮,而不是用于创建嵌套组。
如果您想要创建嵌套组的菜单,最好使用 ActionGroup。在上一条示例代码中,我将 ActionGroup 用于创建组织菜单的不同层级。
总之,如果您希望创建一个包含子组的嵌套菜单结构,使用 ActionGroup 是更好的选择,而不是 DefaultActionGroup。确保使用正确的类来创建您的菜单组结构,以获得所需的外观和行为。
⚠️注册配置xml文件的顺序需要遵循否则会使用 reference标签报错
根据上述Action定义手动创建。利用Plugin DevKit;