invalid_visible_outside_template_annotation — visibleOutsideTemplate 어노테이션의 잘못된 사용
invalid_visible_outside_template_annotation — visibleOutsideTemplate 어노테이션의 잘못된 사용
@visibleOutsideTemplate 어노테이션이 잘못된 곳에 사용될 때 나타나는 진단이에요. 이 어노테이션은 @visibleForTemplate가 붙은 클래스·enum·mixin의 멤버에만 의미가 있어요. 올바른 사용법을 살펴볼게요.
본문
분석기는 @visibleOutsideTemplate 어노테이션이 잘못 사용될 때 이 진단을 내보내요. 이 어노테이션은 @visibleForTemplate 어노테이션이 달린 클래스·enum·mixin의 멤버에만 붙일 수 있어요. 그렇게 하면 그 멤버들을 @visibleForTemplate이 부과하는 가시성 제한에서 제외(opt out)시키는 역할을 해요.
바꿔 말하면, "이 멤버만은 템플릿 밖에서도 참조할 수 있게 해줘"라는 의미예요.
예시
아래 코드는 클래스 레벨에 @visibleForTemplate이 없는데도 멤버에 @visibleOutsideTemplate을 붙여서 진단이 나타나요.
import 'package:angular_meta/angular_meta.dart';
class C {
@visibleOutsideTemplate
int m() {
return 1;
}
}
아래 코드는 어노테이션이 클래스·enum·mixin의 멤버가 아니라 클래스 선언 자체에 붙어서 진단이 나타나요.
import 'package:angular_meta/angular_meta.dart';
@visibleOutsideTemplate
class C {}
흔한 해결 방법
만약 클래스가 템플릿이 참조할 수 있도록만 공개된 거라면, 클래스에 @visibleForTemplate 어노테이션을 추가해 주면 돼요.
import 'package:angular_meta/angular_meta.dart';
@visibleForTemplate
class C {
@visibleOutsideTemplate
int m() {
return 1;
}
}
이제 클래스 전체는 템플릿에서만 보이고, 그중에서 m 멤버만 템플릿 밖에서도 참조할 수 있게 되는 거예요.
반대로, @visibleOutsideTemplate 어노테이션이 @visibleForTemplate가 달린 클래스·enum·mixin의 멤버가 아닌 다른 곳에 붙어 있다면, 어노테이션을 제거하면 돼요.
class C {}
더 알아보기
visibleForTemplate·visibleOutsideTemplate어노테이션은 Angular 기반 템플릿 가시성을 다루는 데 쓰여요. 자세한 내용은package:angular_meta패키지 문서를 참고하세요.- 가시성 어노테이션 일반(
visibleForTesting,visibleForOverriding등)은package:meta문서에서 한 번에 살펴보면 좋아요.