non_constant_type_argument 진단: 타입 인자는 컴파일 타임에 알 수 있어야 해요

non_constant_type_argument 진단: 타입 인자는 컴파일 타임에 알 수 있어야 해요

Dart 분석기가 만들어 내는 non_constant_type_argument 진단은 어떤 메서드의 타입 인자가 컴파일 타임에 반드시 알려져야 하는데, 컴파일 타임에 값을 알 수 없는 타입 파라미터가 타입 인자로 쓰였을 때 알려주는 컴파일 타임 진단이에요.

출처: non_constant_type_argument

본문

설명

분석기는 메서드에 전달되는 타입 인자가 컴파일 타임에 알려져야 하는데, 컴파일 타임에 값을 알 수 없는 타입 파라미터가 타입 인자로 사용될 때 이 진단을 만들어요.

FFI에 대한 더 자세한 내용은 C interop using dart:ffi에서 확인할 수 있어요.

예시

다음 코드는 Pointer.asFunction의 타입 인자가 컴파일 타임에 알려져야 하는데, 컴파일 타임에 알 수 없는 타입 파라미터 R이 타입 인자로 사용되기 때문에 이 진단을 만들어요.

import 'dart:ffi';

typedef T = int Function(int);

class C<R extends T> {
  void m(Pointer<NativeFunction<T>> p) {
    p.asFunction<R>();
  }
}

흔한 해결 방법

타입 파라미터 사용을 모두 제거해요.

import 'dart:ffi';

class C {
  void m(Pointer<NativeFunction<Int64 Function(Int64)>> p) {
    p.asFunction<int Function(int)>();
  }
}

더 알아보기