실행 라이브러리에서 도달할 수 없는 멤버

실행 라이브러리에서 도달할 수 없는 멤버

실행 가능한(executable) 라이브러리 안에서 public으로 선언된 멤버가, 그 라이브러리의 진입점(entry point)에서 직간접적으로 참조되지 않을 때 이 진단이 발생해요. 어디서부터 호출되어야 하는지, 어떤 선언은 무시되는지 함께 살펴볼게요.

출처: unreachable_from_main

본문

설명

analyzer는 실행 가능한 라이브러리 안의 public 선언이 그 라이브러리의 진입점에서 직간접적으로 참조되지 않을 때 이 진단을 내보내요.

실행 가능한 라이브러리는 진입점을 포함하는 라이브러리를 말해요. 진입점은 다음 중 하나인 최상위(top-level) 함수예요.

  • 이름이 main인 함수.
  • @pragma('vm:entry-point')로 주석이 달린 함수.
  • Flutter의 위젯 미리보기 주석인 @Preview로 주석이 달린 함수.

analyzer는 package:meta@visibleForTesting이나 Flutter의 @Preview로 주석이 달린 선언에 대해서는 이 진단을 보고하지 않아요.

예시

다음 코드는 함수 fmain 함수에서 참조되지 않기 때문에 진단이 발생해요.

void main() {}

void f() {}

다음 코드는 메서드 m이, 그것을 포함하는 클래스 C가 참조되더라도 참조되지 않기 때문에 진단이 발생해요.

void main() {
  C();
}

class C {
  void m() {}
}

일반적인 해결 방법

선언이 사용될 의도라면 빠진 참조를 추가해 줘요.

void main() {
  f();
}

void f() {}

선언이 필요 없다면 그것을 제거해요.

void main() {}

선언이 public인 이유가 테스트에서 사용하기 위해서라면 @visibleForTesting 주석을 추가해 줘요.

import 'package:meta/meta.dart';

void main() {}

@visibleForTesting
void f() {}

더 알아보기