데이터 흐름 분석에 따르면 절대 도달되지 않는 코드를 보고합니다. 이는 항상 참이거나 항상 거짓인 이전 조건의 결과이거나 도달할 수 없는 반복문 본문 혹은 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의 새로운 기능