ETC
IntelliJ IDEA 플러그인 개발을 위한 핵심 용어와 개념 정리
curiousKidd
2024. 12. 28. 23:25
반응형
IntelliJ IDEA는 플러그인 개발을 위한 강력한 SDK를 제공합니다.
플러그인을 개발하려면 IntelliJ 플랫폼에서 사용하는 주요 클래스와 인터페이스, 그리고 그 사용 방법을 이해해야 합니다.
이 글에서는 IntelliJ 플러그인 개발에서 사용되는 주요 용어와 개념을 정리하고, 예제 코드와 함께 설명하겠습니다.
1. DataKey
DataKey
는 IntelliJ 플랫폼에서 데이터 전달에 사용되는 키입니다. 플러그인이나 액션(Action)에서는 이 키를 사용해 컨텍스트에서 특정 데이터를 가져오거나 설정합니다.
예제 코드
public static final DataKey<PsiElement> PSI_ELEMENT = DataKey.create("psi.Element");
public void actionPerformed(@NotNull AnActionEvent event) {
PsiElement psiElement = event.getData(PSI_ELEMENT);
if (psiElement != null) {
System.out.println("Selected element: " + psiElement.getText());
}
}
PSI_ELEMENT
: 선택된 PSI 요소를 가져오는 키입니다.getData()
: 액션 이벤트에서 데이터를 가져옵니다.
2. PSI (Program Structure Interface)
PSI는 IntelliJ 플랫폼에서 코드 구조를 표현하는 API입니다. 파일, 클래스, 메서드, 변수 등 다양한 코드 요소를 객체로 다룰 수 있습니다.
주요 클래스
PsiElement
: 모든 PSI 요소의 기본 클래스.PsiFile
: 파일을 표현하는 클래스.PsiClass
: 클래스 정의를 표현하는 클래스.PsiMethod
: 메서드 정의를 표현하는 클래스.
예제 코드: 커서 위치에서 클래스 이름 가져오기
public void actionPerformed(@NotNull AnActionEvent event) {
PsiElement psiElement = event.getData(CommonDataKeys.PSI_ELEMENT);
if (psiElement instanceof PsiClass) {
PsiClass psiClass = (PsiClass) psiElement;
System.out.println("Class name: " + psiClass.getName());
}
}
CommonDataKeys.PSI_ELEMENT
: 현재 선택된 PSI 요소를 가져옵니다.instanceof
: PSI 요소가 클래스인지 확인합니다.
3. AnAction 및 AnActionEvent
AnAction
은 IntelliJ에서 사용자가 실행할 수 있는 동작(Action)을 정의합니다. AnActionEvent
는 액션 실행 시 전달되는 컨텍스트 데이터를 포함합니다.
예제 코드: 간단한 액션 구현
public class MyAction extends AnAction {
@Override
public void actionPerformed(@NotNull AnActionEvent event) {
Project project = event.getProject();
if (project != null) {
System.out.println("Project name: " + project.getName());
}
}
}
actionPerformed
: 액션 실행 시 호출됩니다.event.getProject()
: 현재 프로젝트를 가져옵니다.
4. JBPopupFactory
JBPopupFactory
는 팝업 메뉴나 대화 상자를 생성하는 데 사용됩니다.
예제 코드: 팝업 메뉴 생성
JBPopupFactory.getInstance().createMessage("Hello, IntelliJ Plugin!")
.showInFocusCenter();
createMessage
: 간단한 메시지 팝업을 생성합니다.showInFocusCenter
: 팝업을 화면 중앙에 표시합니다.
예제 코드: 액션 팝업 생성
ActionGroup actionGroup = new ActionGroup() {
@Override
public AnAction @NotNull [] getChildren(@Nullable AnActionEvent e) {
return new AnAction[] { new MyAction() };
}
};
JBPopupFactory.getInstance().createActionGroupPopup("Choose Action", actionGroup, event.getDataContext(),
JBPopupFactory.ActionSelectionAid.SPEEDSEARCH, false).showInBestPositionFor(event.getDataContext());
ActionGroup
: 여러 액션을 포함하는 그룹을 정의합니다.createActionGroupPopup
: 사용자가 선택할 수 있는 팝업 메뉴를 생성합니다.
5. PsiTreeUtil
PsiTreeUtil
은 PSI 트리를 탐색하는 유틸리티 클래스입니다.
예제 코드: 특정 PSI 요소 찾기
PsiMethod psiMethod = PsiTreeUtil.findElementOfClassAtOffset(psiFile, caret.getOffset(), PsiMethod.class, false);
if (psiMethod != null) {
System.out.println("Method name: " + psiMethod.getName());
}
findElementOfClassAtOffset
: 특정 오프셋 위치에서 지정된 타입의 PSI 요소를 찾습니다.PsiMethod
: 메서드 요소를 나타냅니다.
6. Service 사용 예시 (사용자 정의 서비스 예시)
IntelliJ에서 프로젝트와 연관된 서비스를 정의하고 사용하는 방법입니다.
서비스 정의
public class CustomService {
public void showDetails(PsiElement element) {
System.out.println("Showing details for: " + element.getText());
}
}
서비스 사용
CustomService service = project.getService(CustomService.class);
service.showDetails(psiElement);
project.getService
: 프로젝트와 연관된 서비스를 가져옵니다.
플러그인 개발에 추가적으로 알아야 할 사항
1. **플러그인 매니페스트 (plugin.xml
)
모든 플러그인은 META-INF/plugin.xml
파일에서 메타데이터를 정의합니다. 예:
<actions>
<action id="MyAction" class="com.example.MyAction" text="Run My Action"/>
</actions>
2. PSI 구조 시각화
- IntelliJ의 PSI Viewer 플러그인을 사용하여 PSI 구조를 탐색할 수 있습니다.
3. 디버깅과 테스트
- 플러그인 개발 시
LightPlatformTestCase
와 같은 JetBrains 제공 테스트 클래스를 사용하여 플러그인 동작을 검증할 수 있습니다.
반응형