mixin_application_no_concrete_super_invoked_member 진단: super로 호출한 멤버의 실제 구현이 없어요

mixin_application_no_concrete_super_invoked_member 진단: super로 호출한 멤버의 실제 구현이 없어요

분석기가 내보내는 진단에는 이름이 있어요. mixin_application_no_concrete_super_invoked_membermixin을 적용한 결과 만들어진 클래스(mixin application)가, 그 슈퍼클래스에서 이름이 같은 어떤 멤버의 실제 구현(concrete implementation)도 갖지 않는 상태에서 superclass의 멤버를 호출할 때 Dart 분석기가 알려주는 컴파일 타임 진단이에요.

출처: mixin_application_no_concrete_super_invoked_member

본문

설명

분석기는 mixin을 클래스에 적용해서 만든 mixin application이 그 슈퍼클래스에서 어떤 멤버를 호출하는데, mixin application의 슈퍼클래스에 그 이름을 가진 실제 멤버가 없는 경우에 이 진단을 만들어요. 즉 super.멤버() 호출이 실제로 실행될 구현을 찾지 못하는 상황이에요.

예시

다음 코드는 mixin Msuper.m() 호출이 들어 있는데, mixin application A+M의 슈퍼클래스인 클래스 Am의 실제 구현이 정의되어 있지 않아서 이 진단이 나와요.

abstract class A {
 void m();
}

mixin M on A {
 void bar() {
  super.m();
 }
}

abstract class B extends A with M {}

흔한 해결 방법

만약 mixin Mm의 실제 구현을 가진 다른 클래스에 적용하려던 거였다면, 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 {}

BA의 서브클래스로 만들어야 한다면, Am의 실제 구현을 추가해 줘요.

abstract class A {
 void m() {}
}

mixin M on A {
 void bar() {
  super.m();
 }
}

abstract class B extends A with M {}

더 알아보기