メインコンテンツにスキップ

abi_specific_integer_invalid

'AbiSpecificInteger' を拡張するクラスは、const コンストラクタを 1 つだけ持ち、その他のメンバーがなく、型パラメータを持たない必要があります。

説明

#

アナライザーは、AbiSpecificInteger を拡張するクラスが以下のすべての要件を満たさない場合に、この診断を生成します。

  • コンストラクタは 1 つだけ存在する必要があります
  • コンストラクタは const とマークされている必要があります
  • 1 つのコンストラクタ以外のメンバーは存在しない必要があります
  • 型パラメータは存在しない必要があります

#

以下のコードは、クラス C が const コンストラクタを定義していないため、この診断を生成します。

dart
import 'dart:ffi';

@AbiSpecificIntegerMapping({Abi.macosX64 : Int8()})
final class C extends AbiSpecificInteger {
}

以下のコードは、コンストラクタが const コンストラクタではないため、この診断を生成します。

dart
import 'dart:ffi';

@AbiSpecificIntegerMapping({Abi.macosX64 : Int8()})
final class C extends AbiSpecificInteger {
  C();
}

以下のコードは、クラス C が複数のコンストラクタを定義しているため、この診断を生成します。

dart
import 'dart:ffi';

@AbiSpecificIntegerMapping({Abi.macosX64 : Int8()})
final class C extends AbiSpecificInteger {
  const C.zero();
  const C.one();
}

以下のコードは、クラス C がフィールドを定義しているため、この診断を生成します。

dart
import 'dart:ffi';

@AbiSpecificIntegerMapping({Abi.macosX64 : Int8()})
final class C extends AbiSpecificInteger {
  final int i;

  const C(this.i);
}

以下のコードは、クラス C が型パラメータを持っているため、この診断を生成します。

dart
import 'dart:ffi';

@AbiSpecificIntegerMapping({Abi.macosX64 : Int8()})
final class C<T> extends AbiSpecificInteger { // type parameters
  const C();
}

一般的な修正

#

型パラメータがなく、const コンストラクタを 1 つだけ持つという要件を満たすようにクラスを変更してください。

dart
import 'dart:ffi';

@AbiSpecificIntegerMapping({Abi.macosX64 : Int8()})
final class C extends AbiSpecificInteger {
  const C();
}