mixin_application_no_concrete_super_invoked_member 진단: super로 호출한 멤버의 실제 구현이 없어요
mixin_application_no_concrete_super_invoked_member 진단: super로 호출한 멤버의 실제 구현이 없어요
분석기가 내보내는 진단에는 이름이 있어요. mixin_application_no_concrete_super_invoked_member는 mixin을 적용한 결과 만들어진 클래스(mixin application)가, 그 슈퍼클래스에서 이름이 같은 어떤 멤버의 실제 구현(concrete implementation)도 갖지 않는 상태에서 superclass의 멤버를 호출할 때 Dart 분석기가 알려주는 컴파일 타임 진단이에요.
본문
설명
분석기는 mixin을 클래스에 적용해서 만든 mixin application이 그 슈퍼클래스에서 어떤 멤버를 호출하는데, mixin application의 슈퍼클래스에 그 이름을 가진 실제 멤버가 없는 경우에 이 진단을 만들어요. 즉 super.멤버() 호출이 실제로 실행될 구현을 찾지 못하는 상황이에요.
예시
다음 코드는 mixin M에 super.m() 호출이 들어 있는데, mixin application A+M의 슈퍼클래스인 클래스 A에 m의 실제 구현이 정의되어 있지 않아서 이 진단이 나와요.
abstract class A {
void m();
}
mixin M on A {
void bar() {
super.m();
}
}
abstract class B extends A with M {}
흔한 해결 방법
만약 mixin M을 m의 실제 구현을 가진 다른 클래스에 적용하려던 거였다면, B의 슈퍼클래스를 그 클래스로 바꿔 줘요.
abstract class A {
void m();
}
mixin M on A {
void bar() {
super.m();
}
}
class C implements A {
@override
void m() {}
}
abstract class B extends C with M {}
B를 A의 서브클래스로 만들어야 한다면, A에 m의 실제 구현을 추가해 줘요.
abstract class A {
void m() {}
}
mixin M on A {
void bar() {
super.m();
}
}
abstract class B extends A with M {}