invalid_super_formal_parameter_location 진단: super 파라미터는 리다이렉팅이 아닌 generative 생성자에서만 쓸 수 있어요
invalid_super_formal_parameter_location 진단: super 파라미터는 리다이렉팅이 아닌 generative 생성자에서만 쓸 수 있어요
Dart 분석기가 내보내는 진단에는 이름이 있어요. invalid_super_formal_parameter_location은 super 파라미터가 리다이렉팅이 아닌 generative 생성자(non-redirecting generative constructor) 밖에서 사용될 때 분석기가 알려주는 진단이에요. super 파라미터를 쓸 수 있는 자리는 정해져 있답니다.
본문
설명
분석기는 super 파라미터가 리다이렉팅이 아닌 generative 생성자 외의 다른 곳에서 사용될 때 이 진단을 만들어요.
예시
다음 코드는 super 파라미터 x가 리다이렉팅 generative 생성자에 있기 때문에 이 진단이 나와요.
class A {
A(int x);
}
class B extends A {
B.b(super.x) : this._();
B._() : super(0);
}
다음 코드는 super 파라미터 x가 generative 생성자가 아닌 곳에 있기 때문에 이 진단이 나와요.
class A {
A(int x);
}
class C extends A {
factory C.c(super.x) => C._();
C._() : super(0);
}
다음 코드는 super 파라미터 x가 메서드에 있기 때문에 이 진단이 나와요.
class A {
A(int x);
}
class D extends A {
D() : super(0);
void m(super.x) {}
}
흔한 해결 방법
super 파라미터를 담고 있는 함수를 리다이렉팅이 아닌 generative 생성자로 바꿀 수 있다면 그렇게 해요.
class A {
A(int x);
}
class B extends A {
B.b(super.x);
}
만약 그 함수를 리다이렉팅이 아닌 generative 생성자로 바꿀 수 없다면, super를 제거해요.
class A {
A(int x);
}
class D extends A {
D() : super(0);
void m(int x) {}
}