IntelliJ 플러그인 개발 기록 – ToolWindow 구조 이해

1. 개요

이번 개발 기록에서는 IntelliJ Platform Plugin 환경에서 ToolWindowFactory를 중심으로 플러그인 구조를 분석한 내용을 정리한다.
ToolWindow가 언제 생성되고, 어떤 라이프사이클을 통해 UI가 구성되는지 이해하는 것을 목표로 하였고, 코드 단위로 IntelliJ의 IoC 구조와 Kotlin 문법 요소까지 함께 점검하였다.


2. 내용

2-1. IntelliJ Plugin은 IoC 기반 프레임워크이다

여러 기록을 통해 IntelliJ Plugin이 단순 라이브러리 호출이 아니라,
IDE 내부 프레임워크가 객체 생성·호출 시점을 전담하는 IoC(Inversion of Control) 구조임을 확인했다.

  • ToolWindowFactory
  • Service
  • Action
  • EditorFactory
  • InspectionProvider

2-2. ToolWindowFactory의 라이프사이클과 역할

plugin.xml에 ToolWindowFactory를 등록하면 IDE는 다음 순서로 동작한다:

  1. 프로젝트 오픈
  2. 플러그인 로딩
  3. ToolWindowManager가 ToolWindow 초기화
  4. MyToolWindowFactory 인스턴스 생성
  5. createToolWindowContent() 자동 호출
  6. UI가 IDE 화면에 등록됨

2-3. Kotlin 문법 요소 점검 (init, override, 생성자)

(1) init 블록

init {
    thisLogger().warn("...")
}

(2) override 필수

Kotlin은 자동 override가 없으므로 반드시 명시해야 한다.

(3) 생성자 문법

class User(val name: String, val age: Int)

2-4. Project vs ToolWindow 역할 구분

  • Project: IDE 전체 컨텍스트
  • ToolWindow: UI 패널, 반드시 toolWindow.project로 서비스 접근
private val service = toolWindow.project.service<MyProjectService>()

2-5. UI 구성과 ContentManager

val content = ContentFactory.getInstance().createContent(
    myToolWindow.getContent(),
    null,
    false
)
toolWindow.contentManager.addContent(content)
  • null → 탭 이름 없음
  • false → 잠금 불가

addContent()가 실행되는 즉시 UI가 표시된다.


3. 마무리 정리

  • IntelliJ는 플러그인 개발자에게 IoC 기반 라이프사이클을 제공한다.
  • ToolWindow는 Project 컨텍스트에 의존하며, Content 추가만으로 UI가 생성된다.

향후 DevLog 프로젝트에서는 코드 드래그 기록, 메모 저장, 스냅샷 추출 기능 등을 확장할 계획이다.