export_legacy_symbol 진단: 레거시 라이브러리의 심볼은 재-export할 수 없어요
export_legacy_symbol 진단: 레거시 라이브러리의 심볼은 재-export할 수 없어요
분석기가 내보내는 진단에는 이름이 있어요. export_legacy_symbol은 널 안전성(null safety)이 활성화된 라이브러리가 널 안전성에서 제외된(opted out) 라이브러리를 export할 때 Dart 분석기가 알려주는 컴파일 타임 진단이에요. 널 안전성이 꺼진 라이브러리에 정의된 심볼은 널 안전성 쪽으로 다시 내보낼 수 없어요.
본문
설명
분석기는 널 안전성에 들어온(opted in) 라이브러리가 다른 라이브러리를 export할 때, 그 export된 라이브러리가 널 안전성에서 제외된 경우 이 진단을 만들어요. 먼저 널 안전성에서 제외된 라이브러리를 하나 준비해 볼게요.
// @dart=2.8
String s;
다음 코드는 제외된(opted-out) 라이브러리에서 심볼을 export하고 있기 때문에 이 진단을 만들어요.
export 'optedOut.dart';
class C {}
흔한 해결 방법
가능하다면 export된 라이브러리를 널 안전성에서 제외할 필요가 없도록 마이그레이션해요.
String? s;
라이브러리를 마이그레이션할 수 없다면 export를 제거해요.
class C {}
한 가지 더 알아둘 점이 있어요. 만약 export된 라이브러리(제외된 쪽)가 그 자체로 널 안전성에 들어온 라이브러리를 export하고 있다면, 나의 라이브러리가 그 들어온 라이브러리의 심볼을 간접적으로 export하는 것은 유효해요. 그럴 때는 나의 라이브러리 export 지시문에 hide 조합자(combinator)를 추가해서, 제외된 라이브러리에 선언된 모든 이름을 숨기면 돼요.