PsiElement接口是文件中光标所在的那个字段,或者光标所在的那个方法的抽象,例如下图中PsiElement就是public String getName()
,它的实现类是PsiMethodImpl
下面的代码会演示:如果光标在方法上,就打印方法名字,我们在写代码之前还要做一些其他工作,由于IntelliJ平台的变化,导致不在默认加载PsiMethodImpl
和PsiFieldImpl
两个类所在的jar包,而我们恰好要用到这两个类,所以需要手动依赖这两个类,我们在plugin.xml
增加如下依赖,官网说明在这个地址
// 下面这1行是项目创建的时候就自带的
<depends>com.intellij.modules.platform</depends>
// 下面这2行是我们刚刚添加的,我们需要的两个类就在下面的jar包下
<depends>com.intellij.modules.lang</depends>
<depends>com.intellij.modules.java</depends>
代码示例
import com.intellij.openapi.actionSystem.*;
import com.intellij.openapi.command.WriteCommandAction;
import com.intellij.openapi.editor.*;
import com.intellij.openapi.project.Project;
import com.intellij.psi.PsiElement;
import com.intellij.psi.PsiFile;
import com.intellij.psi.PsiManager;
import com.intellij.psi.impl.source.PsiFieldImpl;
import com.intellij.psi.impl.source.PsiMethodImpl;
import com.intellij.psi.tree.IElementType;
import com.intellij.util.keyFMap.KeyFMap;
import org.jetbrains.annotations.NotNull;
public class MyAction extends AnAction {
@Override
public void actionPerformed(@NotNull AnActionEvent e) {
PsiElement psiElement = e.getData(PlatformDataKeys.PSI_ELEMENT);
if (psiElement != null) {
PsiManager manager = psiElement.getManager();
IElementType elementType = psiElement.getNode().getElementType();
// 如果光标所在位置是一个Java方法
if ("METHOD".equals(elementType.toString())) {
PsiMethodImpl m = (PsiMethodImpl) psiElement;
System.out.println(m.getName());
}
}
}
}
部分方法总结,前提示例代码如下:
public class UserEntity {
/**
* 想睡HR不过分吧?
**/
public String m1() {
return "方法M1";
}
}