package com.xiaohansong.codemaker.action; import java.awt.datatransfer.DataFlavor; import java.util.List; import com.intellij.designer.clipboard.SimpleTransferable; import com.intellij.openapi.actionSystem.AnAction; import com.intellij.openapi.actionSystem.AnActionEvent; import com.intellij.openapi.actionSystem.CommonDataKeys; import com.intellij.openapi.diagnostic.Logger; import com.intellij.openapi.editor.Editor; import com.intellij.openapi.ide.CopyPasteManager; import com.intellij.openapi.project.DumbAware; import com.intellij.openapi.project.DumbService; import com.intellij.openapi.project.Project; import com.intellij.psi.PsiClass; import com.intellij.psi.PsiFile; import com.xiaohansong.codemaker.ClassEntry; import com.xiaohansong.codemaker.util.CodeMakerUtil; /** * @author hansong.xhs * @version $Id: GenerateApiTableAction.java, v 0.1 2018年03月08日 下午7:09 hansong.xhs Exp $ */ public class GenerateApiTableMarkdownAction extends AnAction implements DumbAware { /** * The constant LOGGER. */ private static final Logger LOGGER = Logger.getInstance(GenerateApiTableMarkdownAction.class); @Override public void actionPerformed(AnActionEvent e) { Project project = e.getProject(); if (project == null) { return; } DumbService dumbService = DumbService.getInstance(project); if (dumbService.isDumb()) { dumbService .showDumbModeNotification("CodeMaker plugin is not available during indexing"); return; } PsiFile javaFile = e.getData(CommonDataKeys.PSI_FILE); Editor editor = e.getData(CommonDataKeys.EDITOR); if (javaFile == null || editor == null) { return; } List<PsiClass> classes = CodeMakerUtil.getClasses(javaFile); StringBuilder table = new StringBuilder(128); table.append("| | | |\n"); table.append("| --- | --- | --- |\n"); for (PsiClass psiClass : classes) { for (ClassEntry.Field field : CodeMakerUtil.getAllFields(psiClass)) { if (field.getModifier().contains("static")) { continue; } table.append("|").append(field.getName()); table.append("|").append(CodeMakerUtil.escapeMarkdown(field.getType())); table.append("|").append(CodeMakerUtil.escapeMarkdown(field.getComment())) .append("|\n"); } } CopyPasteManager.getInstance() .setContents(new SimpleTransferable(table.toString(), DataFlavor.stringFlavor)); } }