# unit-testing-plugin **Repository Path**: yangzhen94/unit-testing-plugin ## Basic Information - **Project Name**: unit-testing-plugin - **Description**: idea插件开发单元测试,有参考开源的maven版单测,学习idea的语法树进行文件分析(尚未完成开发) - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2022-03-11 - **Last Updated**: 2022-10-11 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README https://plugins.jetbrains.com/docs/intellij/welcome.html package com.idea.plugin.action; import com.idea.plugin.core.helper.JavaClassHelper; import com.intellij.openapi.actionSystem.AnAction; import com.intellij.openapi.actionSystem.AnActionEvent; import com.intellij.openapi.actionSystem.DataKey; import com.intellij.openapi.module.impl.ModuleImpl; import com.intellij.openapi.project.Project; import com.intellij.openapi.project.ProjectManager; import com.intellij.openapi.roots.ModuleRootManager; import com.intellij.openapi.roots.OrderRootType; import com.intellij.openapi.roots.impl.libraries.LibraryImpl; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.psi.JavaElementVisitor; import com.intellij.psi.JavaPsiFacade; import com.intellij.psi.PsiClass; import com.intellij.psi.PsiField; import com.intellij.psi.PsiFile; import com.intellij.psi.PsiIfStatement; import com.intellij.psi.PsiPackage; import com.intellij.psi.search.GlobalSearchScope; import com.thoughtworks.qdox.JavaProjectBuilder; import com.thoughtworks.qdox.model.JavaClass; import com.thoughtworks.qdox.model.JavaSource; import org.jetbrains.annotations.NotNull; import java.io.File; import java.io.StringReader; import java.util.ArrayList; import java.util.List; /** * @author yanzhao * @date 2022/2/16 10:23 * @since 1.0.0 */ public class BatchTestingAction extends AnAction { @Override public void actionPerformed(@NotNull AnActionEvent e) { final JavaProjectBuilder javaProjectBuilder = new JavaProjectBuilder(); // 虽然是数组,一般情况下,只会有一个Project,我还没尝试出来什么情况下有多个 // Project与e.getProject()是同一个 final ProjectManager instance = ProjectManager.getInstance(); final Project[] openProjects = instance.getOpenProjects(); final JavaPsiFacade javaPsiFacade = JavaPsiFacade.getInstance(e.getProject()); GlobalSearchScope searchScope = GlobalSearchScope.allScope(e.getProject()); final PsiClass psiClass = javaPsiFacade.findClass("com.example.edu.service.DependencyService", searchScope); final PsiFile containingFile = psiClass.getContainingFile(); final PsiClass aClass1 = javaPsiFacade.findClass("java.util.List", searchScope); final JavaSource javaSource = javaProjectBuilder.addSource(new StringReader(containingFile.getText())); final JavaClass classByName = javaSource.getClassByName("com.example.edu.service.DependencyService"); PsiPackage psiPackage = javaPsiFacade.findPackage("com.example.edu.service"); PsiClass[] doPsiClasss = psiPackage.findClassByShortName("DependencyService", searchScope); // PsiClass dtoPsiClass = JavaPsiFacade.getInstance((Project)this.getProject()).findClass(doPsiClass.getQualifiedName(), searchScope); // final PsiField[] psiFields = dtoPsiClass.getFields(); System.out.println(); final JavaElementVisitor javaElementVisitor = new JavaElementVisitor() { @Override public void visitIfStatement(PsiIfStatement statement) { System.out.println(statement); super.visitIfStatement(statement); } }; psiClass.accept(javaElementVisitor); final PsiClass aClass2 = javaPsiFacade.findClass("com.example.edu.domain.query.DependencyQuery", searchScope); final String text = aClass2.getSuperClass().getContainingFile().getText(); final PsiField[] fields = aClass2.getFields(); final JavaClass superClassByQualifiedName = JavaClassHelper.findSuperClassByQualifiedName("com.example.edu.domain.query.DependencyQuery"); System.out.println(); final Project project = e.getProject(); final List libraryList = new ArrayList<>(); final ModuleImpl module = e.getData(DataKey.create("module")); ModuleRootManager.getInstance(module).orderEntries().forEachLibrary(library -> { libraryList.add((LibraryImpl) library); final VirtualFile[] files = library.getFiles(OrderRootType.CLASSES); if (files != null && files.length > 0) { String path = files[0].getPath(); System.out.println(path); // javaProjectBuilder.addSource(new URL(path)); } return true; }); try { // jar:///Users/yangzhen/.m2/repository/org/springframework/boot/spring-boot-starter-web/2.4.5/spring-boot-starter-web-2.4.5.jar!/ final String basePath = project.getBasePath(); // 整个项目,但不包括依赖包 javaProjectBuilder.addSourceTree(new File(basePath)); System.out.println(); } catch (Exception e1) { e1.printStackTrace(); } } @Override public void update(@NotNull AnActionEvent e) { } }