plugin.xml
<idea-plugin> <id>com.your.company.unique.plugin.id</id> <name>Insert Logs</name> <version>1.0</version> <vendor email="[email protected]" url="http://www.yourcompany.com">YourCompany</vendor> <description><![CDATA[ Enter short description for your plugin here.<br> <em>most HTML tags may be used</em> ]]></description> <change-notes><![CDATA[ Add change notes here.<br> <em>most HTML tags may be used</em> ]]> </change-notes> <!-- please see https://www.jetbrains.org/intellij/sdk/docs/basics/getting_started/build_number_ranges.html for description --> <idea-version since-build="173.0"/> <!-- please see https://www.jetbrains.org/intellij/sdk/docs/basics/getting_started/plugin_compatibility.html on how to target different products --> <depends>com.intellij.modules.java</depends> <depends>com.intellij.modules.platform</depends> <extensions defaultExtensionNs="com.intellij"> <!-- Add your extensions here --> </extensions> <actions> <group id="insertLogsActionGroup" text="InsertLogs" popup="true"> <add-to-group group-id="EditorPopupMenu" anchor="first"/> </group> <!-- Add your actions here --> <action id="insert_logs" class="InsertLogsAction" text="前后插入日志" description="在执行方法前后插入日志"> <add-to-group group-id="insertLogsActionGroup"/> <keyboard-shortcut keymap="$default" first-keystroke="alt L" second-keystroke="G"/> </action> </actions> </idea-plugin>
InsertLogsAction.Java
import com.intellij.openapi.actionSystem.AnAction; import com.intellij.openapi.actionSystem.AnActionEvent; import com.intellij.openapi.actionSystem.CommonDataKeys; import com.intellij.openapi.actionSystem.LangDataKeys; import com.intellij.openapi.command.WriteCommandAction; import com.intellij.openapi.editor.Editor; import com.intellij.openapi.project.Project; import com.intellij.psi.*; import com.intellij.psi.codeStyle.CodeStyleManager; /** * @author hujiapeng3 * @description * @date 2022/6/19 11:24 */ public class InsertLogsAction extends AnAction { @Override public void actionPerformed(AnActionEvent e) { PsiFile psiFile = e.getData(LangDataKeys.PSI_FILE); if (!(psiFile instanceof PsiJavaFile)) { return; } PsiJavaFile psiJavaFile = (PsiJavaFile) psiFile; final Editor editor = e.getrequiredData(CommonDataKeys.EDITOR); //获取光标所在位置 final int offset = editor.getCaretModel().getoffset(); PsiElement element = psiFile.findElementAt(offset); final PsiElement methodCallerPsiEle = element.getParent(); if (!(element instanceof PsiIdentifier) || !(methodCallerPsiEle instanceof PsiReferenceExpression)) { return; } final Project project = e.getProject(); WriteCommandAction.runWriteCommandAction(project, () -> { final String methodExpression = methodCallerPsiEle.getParent().getText().replaceAll(" ", "").replaceAll( "\n", ""); final int left = methodExpression.indexOf("("); final int right = methodExpression.indexOf(")"); if (!(left > 0 && right > 0 && (right - left) > 1)) { return; } String paramStr = methodExpression.substring(left + 1, right).replaceAll(" ", ""); String[] params = paramStr.split(","); StringBuilder paramPoslogsSB = new StringBuilder(); StringBuilder paramValLogsSB = new StringBuilder(); for (String param : params) { if (paramPoslogsSB.length() > 0) { paramPoslogsSB.append(","); paramValLogsSB.append(","); } paramPoslogsSB.append("{}"); paramValLogsSB.append("JSON.toJSONString(" + param + ")"); } String preStr = "log.info(\"" + methodExpression + "入参:" + paramPoslogsSB.toString() + "\"," + paramValLogsSB.toString() + ");"; PsiLocalVariable localVarEle = null; PsiElement methodExpresionPsiEle = element; while (!(methodExpresionPsiEle.getParent() instanceof PsiCodeBlock)) { if (methodExpresionPsiEle instanceof PsiLocalVariable) { localVarEle = (PsiLocalVariable) methodExpresionPsiEle; } methodExpresionPsiEle = methodExpresionPsiEle.getParent(); } PsiElement codeBlock = methodExpresionPsiEle.getParent(); final PsiElementFactory psiElementFactory = PsiElementFactory.getInstance(element.getProject()); PsiElement newElement = psiElementFactory.createStatementFromText(preStr, element.getContext()); codeBlock.addBefore(newElement, methodExpresionPsiEle); if (localVarEle != null) { final String tempExp = methodCallerPsiEle.getText().replaceAll(" ", ""); String afterStr = "log.info(\"" + tempExp + "出参:{}\",JSON.toJSONString(" + localVarEle.getName() + "));"; newElement = psiElementFactory.createStatementFromText(afterStr, element.getContext()); codeBlock.addAfter(newElement, methodExpresionPsiEle); } }); CodeStyleManager codeStyleManager = CodeStyleManager.getInstance(project); codeStyleManager.reformat(psiJavaFile); } }
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。