데이터 흐름 분석에 따라 절대 도달되지 않는 코드를 보고합니다. 이는 항상 true 또는 false인 이전 조건의 결과이거나 도달할 수 없는 루프 본문 또는 catch 섹션일 수 있습니다. 항상 그렇지는 않지만, 일반적으로 도달할 수 없는 코드는 이전 경고의 결과일 수 있으므로, "Null 가능성 및 데이터 흐름 문제", "상수값" 또는 "빈 컨테이너 내 불필요한 연산"과 같은 검사 경고 형식을 확인하면 원인을 더 명확하게 파악할 수 있습니다.

예:


  void finishApplication() {
    System.exit(0);
    System.out.println("Application is terminated"); // 도달할 수 없는 코드
  }

단, 이러한 삽입은 메서드 컨트랙트 추론에 의존한다는 점에 유의하세요. 특히 항상 예외를 던지는 static 또는 final 메서드를 호출하면 '항상 실패하는' 컨트랙트가 추론되며 메서드 호출 이후의 코드는 도달 불가능한 것으로 간주됩니다. 예:


  void run() {
    performAction();
    System.out.println("Action is performed"); // 도달할 수 없는 코드
  }
  
  static void performAction() {
    throw new AssertionError();
  }

이로 인해 코드 후처리가 사용되는 경우(예: 어노테이션 처리기가 메서드 본문을 유용한 다른 것으로 대체하는 경우), 위양성이 발생할 수 있습니다. 위양성 경고를 방지하려면, org.jetbrains:annotations 패키지의 명시적인 @org.jetbrains.annotations.Contract 어노테이션으로 자동 컨트랙트 추론을 억제하세요.


  void run() {
    performAction();
    System.out.println("Action is performed"); // 더 이상 경고가 발생하지 않습니다
  }

  @Contract("-> _") // 구현이 대체됩니다
  static void performAction() {
    throw new AssertionError();
  }

2024.1의 새로운 기능