IDEA 2020.1 기반 JAVA 코드 알림 플러그 인 개발 예

이전에 프로젝트 팀 은 자신의 코드 규범 이 있 기 때문에 평소의 개발 규범 을 제약 하기 위해 2019.1.3 버 전 을 바탕 으로 코드 알림 플러그 인 을 개발 했다.그러나 IDEA 를 2020.1 버 전 으로 전환 할 때 미 친 듯 이 오 류 를 보 고 했 지만 인터넷 에서 IDEA 플러그 인 개발 에 관 한 글 이 많 지 않 아 스스로 해결 할 수 밖 에 없 었 다.그래서 공식 SDK 문서 에 따라 Gradle 로 프로젝트 를 재 구축 하고 코드 를 끌 어 왔 습 니 다.다음은 2020.1 버 전에 따라 코드 이상 알림 플러그 인 을 간단하게 개발 하여 구 덩이 를 밟 기 쉬 운 곳 을 알려 드 리 겠 습 니 다.
1.먼저 IDEA 플러그 인 에 따라 공식 문 서 를 개발 하고 Gradle 로 procject 를 새로 만 듭 니 다.
선택file -> new -> Project...,팝 업 창 왼쪽 에서 선택Gradle,팝 업 창 아래 화면:

기본적으로 자바 를 선 택 했 습 니 다.추가 선택IntelliJ Platform Plugin을 통 해 이것 은 IDEA 플러그 인 항목 이 고 선택Kotlin/JVM이 필요 합 니 다.왜 이 항목 을 선 택 했 습 니까?홈 페이지 는 이렇게 소개 합 니 다.
To include support for the Kotlin language in the plugin, check the Kotlin/JVM box (circled in green below.) This option can be selected with or without the Java language.
즉,우리 가 개발 한 플러그 인 이 JAVA 코드 를 지원 해 야 한다 면 이 항목 을 선택 하 는 것 이다.모든 플러그 인 이 JAVA 코드 검 사 를 기반 으로 한다 면 이 옵션 을 선택해 야 합 니 다.
체크 를 한 후 next 를 클릭 하고 그 후의 정 보 는 자신의 실제 필요 에 따라 작성 하면 됩 니 다.그리고 finish 를 클릭 한 다음 에 Gradle 구축 프로젝트 를 묵묵히 기다 리 고 있 습 니 다.가능 하 다 면 사다 리 를 걸 고 가방 을 다운로드 하 는 것 이 느 립 니 다.
구 축 된 프로젝트 의 디 렉 터 리 구조 와 모든 디 렉 터 리 의 역할 은 공식 문 서 를 직접 볼 수 있 고 그 안에 소개 가 있 습 니 다.
https://www.jetbrains.org/intellij/sdk/docs/tutorials/build_system/prerequisites.html
2.프로젝트 를 구축 한 후 build.gradle 부분 배합 을 수정 해 야 합 니 다.
빌 드 가 완료 되면 기본적으로 파일build.gradle을 엽 니 다.내용 은 다음 과 같 습 니 다.

plugins {
  id 'java'
  id 'org.jetbrains.intellij' version '0.4.19'
  id 'org.jetbrains.kotlin.jvm' version '1.3.71'
}

group 'org.example'
version '1.0-SNAPSHOT'

repositories {
  mavenCentral()
}

dependencies {
  implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8"
  testCompile group: 'junit', name: 'junit', version: '4.12'
}

// See https://github.com/JetBrains/gradle-intellij-plugin/
intellij {
  version '2020.1'
}
compileKotlin {
  kotlinOptions.jvmTarget = "1.8"
}
compileTestKotlin {
  kotlinOptions.jvmTarget = "1.8"
}
patchPluginXml {
  changeNotes """
   Add change notes here.<br>
   <em>most HTML tags may be used</em>"""
}
여기에 구덩이 가 있 습 니 다.구축 이 끝 난 후에 저 는 예전 의 코드 를 복사 해서 일부 종 류 를 찾 지 못 했 음 을 알려 주 었 습 니 다.즉,해당 하 는 jar 가방 을 도입 하지 않 았 다 는 것 입 니 다.나중에 나 는 홈 페이지 의 예 에서 그것 의build.gradle파일 이 나의 build 파일 과 약간 다르다 는 것 을 발견 했다.구체 적 으로 다른 점 은 다음 과 같다.

// See https://github.com/JetBrains/gradle-intellij-plugin/
intellij {
 version = '2020.1'
 plugins = ['java']
 sameSinceUntilBuild = true
}
intellij 에plugins = ['java']옵션 이 하나 더 있 습 니 다.이 옵션 이 없 으 면java-api.jar등 jar 등 JAVA 코드 가 지원 하 는 jar 패키지 가 없어 서 일부 클래스 나 방법 을 사용 할 수 없습니다.그래서 JAVA 코드 가 지원 된다 면build.gradle파일 에plugins = ['java']줄 을 더 해 야 합 니 다.
3.plugin.xml 파일 수정plugin.xml파일 은 본 플러그 인의 역할 에 대한 설명 과 의존 관계 배합 입 니 다.구 축 된plugin.xml파일 의 내용 은 다음 과 같 습 니 다.

<idea-plugin>
  <id>org.example.new-plugin-for-java</id>
  <name>Plugin display name here</name>
  <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>

  <!-- please see https://www.jetbrains.org/intellij/sdk/docs/basics/getting_started/plugin_compatibility.html
     on how to target different products -->
  <depends>com.intellij.java</depends>

  <extensions defaultExtensionNs="com.intellij">
    <!-- Add your extensions here -->
    <localInspection
        language="JAVA"
        displayName="test displayer"
        groupPath="Java"
        groupBundle="messages.InspectionsBundle"
        groupKey="group.names.probable.bugs"
        enabledByDefault="true"
        level="ERROR"
        implementationClass="com.nw.TestInsepction"/>
  </extensions>

  <actions>
    <!-- Add your actions here -->
  </actions>
</idea-plugin>
여기에 구덩이 가 있 습 니 다.IDEA 2019.2 이전 버 전이 라면 이 파일 은 다른 것 을 사용 하지 않 고 인터넷 의 플러그 인 개발 튜 토리 얼 을 참고 하여 코드 를 작성 하면 정상적으로 실 행 될 수 있 습 니 다.그러나 IDEA 2019.2 버 전이 라면 실 행 될 때 미 친 듯 이 오 류 를 보고 할 수 있 습 니 다.처음에 왜 그런 지 모 르 겠 지만 공식 적 인 예 를 뒤 져 서 여러분 과 함께 다른 것 을 찾 아 보 았 습 니 다.그 결과 홈 페이지 의 예 를 들 어 아래 의 설정 정 보 는 기본 적 인 구축 과 다 릅 니 다.

 <!-- Evaluates java PSI -->
 <depends>com.intellij.modules.java</depends>
원래 이곳 의 의존 도 는 좀 고 쳐 야 한다.위 에서 이렇게 바 꿔 야 한다.그런데 왜 이 의존 으로 바 꿔 야 하 는 지 알 게 되 었 다.이때 나 는 기본 적 으로 구 축 된plugin.xml안에 depends 위 에 주석 이 있다 는 것 을 알 게 되 었 다.대충 말 하면 주석 안의 사이트 에 가서 제품 에 따라 대응 하 는 depends 를 선택 하 는 방법 을 찾 아 보 세 요.그러면 간단 합 니 다.직접 홈 페이지 에 올 라 가 보 세 요.많은 소개 와 다양한 depends 가 무엇 을 하 는 지.홈 페이지 에 이런 말 이 있다.
(2) The Java language functionality was extracted as a plugin in version 2019.2 of the IntelliJ Platform. This refactoring separated the Java implementation from the other, non-language portions of the platform. Consequently, Java dependencies are expressed differently in plugin.xml depending on the version of the IntelliJ Platform being targeted:
Syntax required for releases prior to 2019.2, allowable in all releases:
  • plugin.xml include com.intellij.modules.java
  • Syntax for 2019.2 and later releases:
  • plugin.xml allowable alternative include com.intellij.java
  • build.gradle required to include intellij.plugins 'java'
  • 아마도 2019.2 버 전부터 자바 코드 와 관련 된 지원 은 하나의 플러그 인 으로 추출 되 었 고 기본 구 축 된 가방 에 포함 되 지 않 았 기 때문에 2019.2 버 전부터plugin.xmlbuild.gradle관련 설정 으로 수정 해 야 합 니 다.이것 도 우리 가 두 번 째 단 계 를 고 쳐 야 하 는 이유 이다.
    4.인터넷 의 예 를 참고 하여 첫 번 째 코드 알림 플러그 인 을 작성 합 니 다.
    자바 클래스 를 새로 만 듭 니 다.내용 은 다음 과 같 습 니 다.테스트 용 알림 플러그 인 입 니 다.모든 변수 에"this is error"를 표시 합 니 다.
    
    package com;
    
    import com.intellij.codeInspection.AbstractBaseJavaLocalInspectionTool;
    import com.intellij.codeInspection.ProblemsHolder;
    import com.intellij.psi.JavaElementVisitor;
    import com.intellij.psi.PsiElementVisitor;
    import com.intellij.psi.PsiField;
    import org.jetbrains.annotations.NotNull;
    
    /**
     *             ,         "this is an error"
     * @author LiuYeFeng
     * @date 2020/5/5
     * @e-mail [email protected]
     */
    public class TestInspectionTool extends AbstractBaseJavaLocalInspectionTool {
    
      @NotNull
      @Override
      public PsiElementVisitor buildVisitor(@NotNull ProblemsHolder holder, boolean isOnTheFly) {
        //     java      ,          ,      
        return new JavaElementVisitor() {
          @Override
          public void visitField(PsiField field) {
            super.visitField(field);
            //     ,                 ,   "this is an error"
         		//       ,                 
            holder.registerProblem(field, "this is an error");
          }
        };
      }
    }
    그리고build.gradle에 작 성 된 플러그 인 을 추가 합 니 다.다음 과 같 습 니 다.
    
     <extensions defaultExtensionNs="com.intellij">
        <!-- Add your extensions here -->
        <localInspection
            language="JAVA"
            displayName="Test field error"
            groupPath="Java"
            groupBundle="messages.InspectionsBundle"
            groupKey="group.names.probable.bugs"
            enabledByDefault="true"
            level="ERROR"
            implementationClass="com.TestInspectionTool"/>
      </extensions>
    상기 설정 은 대체적으로 코드 알림 구성 요 소 를 등록 하 는 것 입 니 다.그 안의 매개 변 수 는 IDEA 의 어떤 분류 에 설정 하 는 지,그리고 제시 하 는 등급 을 결정 합 니 다.예 를 들 어 ERROR 등급 으로 간단하게 볼 수 있 습 니 다.
    5.코드 알림 플러그 인의 효 과 를 보기 시작 합 니 다.
    오른쪽 상단 의 debug 를 누 르 면 컴 파일 이 실 행 될 때 까지 기 다 립 니 다.실행 하면 새로운 IDEA 가 나타 납 니 다.이 IDEA 는 우리 가 만 든 플러그 인 을 불 러 옵 니 다.또한 원래 플러그 인 을 만 든 IDEA 에 서 는 로그 출력 등 을 볼 수 있 고 중단 할 수도 있 습 니 다.새로운 IDEA 는 웹 디 버 깅 백 엔 드 인 터 페 이 스 를 사용 하 는 브 라 우 저 로 간단하게 이해 할 수 있 습 니 다.
    우리 가 작성 한 플러그 인 은 변 수 를 새로 쓰기 때 문 입 니 다.무작정 잘못 보고 할 수 있 습 니 다.알림plugin.xml의 효 과 는 다음 과 같 습 니 다.

    여기 서 완 성 된 코드 이상 알림 플러그 인 이 간단하게 완 성 됩 니 다.
    6.코드 알림 플러그 인 은 할 수 있 습 니 다.
    우리 가 만 든 이 플러그 인 은 사실 비교적 간단 하 며 논리 적 분석 을 하지 않 았 다.우 리 는 실제 수요 에 따라 프로젝트 그룹 자체 의 독특한 기능 을 작성 할 수 있 습 니 다.예 를 들 어 특수 클래스 의 모든 필드 를 계승 하려 면 주석 이 있어 야 합 니 다.Service 에서 의 방법 은 이상 하 게 돌아 가기 전에 로그 나 다른 작업 등 을 기록 해 야 합 니 다.모두 할 수 있 고 빠 른 복구(quick fix)도 할 수 있 습 니 다.예 를 들 어 필드 에 주석 이 없 으 면 주석 을 신속하게 생 성 할 수 있 습 니 다.
    이 는 IDEA 문법 트 리 에 대해 알 아야 한다.IDEA 는 코드 를 Psi 문법 트 리 로 추상 화하 고 서로 다른 코드 기능 에 따라 서로 다른extensions으로 나 누 었 다.예 를 들 어 주석 은this is an error이 고 필드 는PsiElement이 며 방법 은PsiComment이 며 유형 은PsiField이다.IDEA 자체 도 상당히 많은 도구 류 를 제공 했다.예 를 들 어PsiMethod클래스 나 방법의 인용 점 을 찾 을 수 있 고PsiClass코드 문법 트 리 위의 일부 조작 을 처리 할 수 있다.예 를 들 어 변수 가 있 는 방법 을 얻 는 방법,ReferencesSearch코드 를 분석 할 수 있 는 방법 등 이 있다.그리고PsiTreeUtilControlFlowUtil등 각종 관련 성 도구 류 는 각종 편리 한 조작 을 제공 할 수 있다.플러그 인 개발 자가 직접 찾 아야 합 니 다.문제 가 생기 면 IDEA 공식 문답 포럼 에 가서 다른 사람 이 이미 당신 을 도와 이 문 제 를 해결 해 주 었 을 지도 모른다 고 찾 아 보 세 요.
    추가:
    IntelliJ Platform SDK 홈 페이지 PsiClassUtilIntelliJ 플러그 인 개발 커 뮤 니 티 PsiFieldUtilIDEA 2020.1 을 기반 으로 한 JAVA 코드 알림 플러그 인 개발 예 에 대한 상세 한 설명 을 담 은 이 글 은 여기까지 입 니 다.더 많은 관련 IDEA 2020.1 JAVA 코드 알림 플러그 인 내용 은 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 읽 어 주시 기 바 랍 니 다.앞으로 도 많은 응원 부 탁 드 리 겠 습 니 다!

    좋은 웹페이지 즐겨찾기