[vm/ffi] Add class modifiers
Adds class modifiers to `dart:ffi`. Migrates all user-defined subclasses of `Struct`, `Union`, `Opaque`, and `AbiSpecificInteger` to be `final class`es. Does not remove the manual error checking, so some errors will show up twice now in language version 3.0. In language version <3.0, only the FFI-specific error will show up. In a follow-up CL, we will try to make the language-errors to show up also <3.0 so that we can remove the FFI-specific errors. Examples of duplicated errors: pkg/analyzer/test/src/diagnostics/subtype_of_ffi_class_test.dart TEST=pkg/analyzer/test/ (for the analyzer) TEST=pkg/front_end/testcases/ (for the CFE) TEST=test/ffi/ (for the VM) CoreLibraryReviewExempt: No need for dart2js to review. Bug: https://github.com/dart-lang/sdk/issues/51683 Change-Id: I2964ceccb7db59fbdaf6be5319f5e4ec2dabe0f3 Cq-Include-Trybots: luci.dart.try:pkg-linux-debug-try,pkg-win-release-try,pkg-mac-release-try,vm-precomp-ffi-qemu-linux-release-riscv64-try,vm-precomp-ffi-qemu-linux-release-arm-try,vm-ffi-android-debug-arm64c-try,vm-ffi-android-debug-arm-try,vm-reload-rollback-linux-debug-x64-try,analyzer-analysis-server-linux-try,analyzer-linux-release-try Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/289223 Reviewed-by: Johnni Winther <johnniwinther@google.com> Reviewed-by: Devon Carew <devoncarew@google.com> Reviewed-by: Brian Wilkerson <brianwilkerson@google.com> Reviewed-by: Jackson Gardner <jacksongardner@google.com> Reviewed-by: Lasse Nielsen <lrn@google.com> Commit-Queue: Daco Harkes <dacoharkes@google.com>
This commit is contained in:
committed by
Commit Queue
parent
80c2b02bd0
commit
1755f89092
@@ -7,13 +7,13 @@
|
||||
import 'dart:ffi';
|
||||
|
||||
/// digest algorithm.
|
||||
class EVP_MD extends Opaque {}
|
||||
final class EVP_MD extends Opaque {}
|
||||
|
||||
/// digest context.
|
||||
class EVP_MD_CTX extends Opaque {}
|
||||
final class EVP_MD_CTX extends Opaque {}
|
||||
|
||||
/// Type for `void*` used to represent opaque data.
|
||||
class Data extends Opaque {
|
||||
final class Data extends Opaque {
|
||||
static Pointer<Data> fromUint8Pointer(Pointer<Uint8> p) => p.cast<Data>();
|
||||
}
|
||||
|
||||
@@ -22,7 +22,7 @@ extension DataPointerAsUint8Pointer on Pointer<Data> {
|
||||
}
|
||||
|
||||
/// Type for `uint8_t*` used to represent byte data.
|
||||
class Bytes extends Opaque {
|
||||
final class Bytes extends Opaque {
|
||||
static Pointer<Data> fromUint8Pointer(Pointer<Uint8> p) => p.cast<Data>();
|
||||
}
|
||||
|
||||
|
||||
@@ -80,7 +80,7 @@ void main() {
|
||||
//
|
||||
// Test struct.
|
||||
//
|
||||
class VeryLargeStruct extends Struct {
|
||||
final class VeryLargeStruct extends Struct {
|
||||
@Int8()
|
||||
external int a;
|
||||
|
||||
|
||||
@@ -8,16 +8,16 @@ import 'package:ffi/ffi.dart';
|
||||
|
||||
import 'FfiStructCopy.dart';
|
||||
|
||||
class Struct1Bytes extends Struct {
|
||||
final class Struct1Bytes extends Struct {
|
||||
@Array(1)
|
||||
external Array<Uint8> a0;
|
||||
}
|
||||
|
||||
class Struct1BytesWrapper extends Struct {
|
||||
final class Struct1BytesWrapper extends Struct {
|
||||
external Struct1Bytes nested;
|
||||
}
|
||||
|
||||
class Copy1Bytes extends StructCopyBenchmark {
|
||||
final class Copy1Bytes extends StructCopyBenchmark {
|
||||
@override
|
||||
Pointer<Struct1BytesWrapper> from = nullptr;
|
||||
@override
|
||||
@@ -42,16 +42,16 @@ class Copy1Bytes extends StructCopyBenchmark {
|
||||
}
|
||||
}
|
||||
|
||||
class Struct32Bytes extends Struct {
|
||||
final class Struct32Bytes extends Struct {
|
||||
@Array(32)
|
||||
external Array<Uint8> a0;
|
||||
}
|
||||
|
||||
class Struct32BytesWrapper extends Struct {
|
||||
final class Struct32BytesWrapper extends Struct {
|
||||
external Struct32Bytes nested;
|
||||
}
|
||||
|
||||
class Copy32Bytes extends StructCopyBenchmark {
|
||||
final class Copy32Bytes extends StructCopyBenchmark {
|
||||
@override
|
||||
Pointer<Struct32BytesWrapper> from = nullptr;
|
||||
@override
|
||||
@@ -76,16 +76,16 @@ class Copy32Bytes extends StructCopyBenchmark {
|
||||
}
|
||||
}
|
||||
|
||||
class Struct1024Bytes extends Struct {
|
||||
final class Struct1024Bytes extends Struct {
|
||||
@Array(1024)
|
||||
external Array<Uint8> a0;
|
||||
}
|
||||
|
||||
class Struct1024BytesWrapper extends Struct {
|
||||
final class Struct1024BytesWrapper extends Struct {
|
||||
external Struct1024Bytes nested;
|
||||
}
|
||||
|
||||
class Copy1024Bytes extends StructCopyBenchmark {
|
||||
final class Copy1024Bytes extends StructCopyBenchmark {
|
||||
@override
|
||||
Pointer<Struct1024BytesWrapper> from = nullptr;
|
||||
@override
|
||||
@@ -110,16 +110,16 @@ class Copy1024Bytes extends StructCopyBenchmark {
|
||||
}
|
||||
}
|
||||
|
||||
class Struct32768Bytes extends Struct {
|
||||
final class Struct32768Bytes extends Struct {
|
||||
@Array(32768)
|
||||
external Array<Uint8> a0;
|
||||
}
|
||||
|
||||
class Struct32768BytesWrapper extends Struct {
|
||||
final class Struct32768BytesWrapper extends Struct {
|
||||
external Struct32768Bytes nested;
|
||||
}
|
||||
|
||||
class Copy32768Bytes extends StructCopyBenchmark {
|
||||
final class Copy32768Bytes extends StructCopyBenchmark {
|
||||
@override
|
||||
Pointer<Struct32768BytesWrapper> from = nullptr;
|
||||
@override
|
||||
|
||||
@@ -35,16 +35,16 @@ import 'FfiStructCopy.dart';
|
||||
''';
|
||||
|
||||
String generateSize(int size) => '''
|
||||
class Struct${size}Bytes extends Struct {
|
||||
final class Struct${size}Bytes extends Struct {
|
||||
@Array($size)
|
||||
external Array<Uint8> a0;
|
||||
}
|
||||
|
||||
class Struct${size}BytesWrapper extends Struct {
|
||||
final class Struct${size}BytesWrapper extends Struct {
|
||||
external Struct${size}Bytes nested;
|
||||
}
|
||||
|
||||
class Copy${size}Bytes extends StructCopyBenchmark {
|
||||
final class Copy${size}Bytes extends StructCopyBenchmark {
|
||||
@override
|
||||
Pointer<Struct${size}BytesWrapper> from = nullptr;
|
||||
@override
|
||||
|
||||
+5
-5
@@ -103,17 +103,17 @@ class B01 {}
|
||||
assertResponse('''
|
||||
suggestions
|
||||
A01
|
||||
kind: constructorInvocation
|
||||
kind: class
|
||||
A01
|
||||
kind: class
|
||||
A02
|
||||
kind: constructorInvocation
|
||||
A02
|
||||
kind: class
|
||||
B01
|
||||
kind: class
|
||||
A02
|
||||
kind: constructorInvocation
|
||||
B01
|
||||
kind: constructorInvocation
|
||||
B01
|
||||
kind: class
|
||||
const
|
||||
kind: keyword
|
||||
dynamic
|
||||
|
||||
+39
-25
@@ -207,12 +207,16 @@ class SubtypeOfFfiClassInExtendsTest extends FixProcessorTest {
|
||||
Future<void> test_oneName() async {
|
||||
await resolveTestCode('''
|
||||
import 'dart:ffi';
|
||||
class C extends Double {}
|
||||
final class C extends Double {}
|
||||
''');
|
||||
await assertHasFix('''
|
||||
await assertHasFix(
|
||||
'''
|
||||
import 'dart:ffi';
|
||||
class C {}
|
||||
''');
|
||||
final class C {}
|
||||
''',
|
||||
errorFilter: (error) =>
|
||||
error.errorCode == FfiCode.SUBTYPE_OF_FFI_CLASS_IN_EXTENDS,
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -224,12 +228,16 @@ class SubtypeOfFfiClassInImplementsTest extends FixProcessorTest {
|
||||
Future<void> test_oneName() async {
|
||||
await resolveTestCode('''
|
||||
import 'dart:ffi';
|
||||
class C implements Double {}
|
||||
final class C implements Double {}
|
||||
''');
|
||||
await assertHasFix('''
|
||||
await assertHasFix(
|
||||
'''
|
||||
import 'dart:ffi';
|
||||
class C {}
|
||||
''');
|
||||
final class C {}
|
||||
''',
|
||||
errorFilter: (error) =>
|
||||
error.errorCode == FfiCode.SUBTYPE_OF_FFI_CLASS_IN_IMPLEMENTS,
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -241,11 +249,11 @@ class SubtypeOfFfiClassInWithTest extends FixProcessorTest {
|
||||
Future<void> test_oneName() async {
|
||||
await resolveTestCode('''
|
||||
import 'dart:ffi';
|
||||
class C with Double {}
|
||||
final class C with Double {}
|
||||
''');
|
||||
await assertHasFix('''
|
||||
import 'dart:ffi';
|
||||
class C {}
|
||||
final class C {}
|
||||
''',
|
||||
errorFilter: (error) =>
|
||||
error.errorCode == FfiCode.SUBTYPE_OF_FFI_CLASS_IN_WITH);
|
||||
@@ -260,17 +268,17 @@ class SubtypeOfStructClassInExtendsTest extends FixProcessorTest {
|
||||
Future<void> test_oneName() async {
|
||||
await resolveTestCode('''
|
||||
import 'dart:ffi';
|
||||
class S extends Struct {
|
||||
final class S extends Struct {
|
||||
external Pointer notEmpty;
|
||||
}
|
||||
class C extends S {}
|
||||
final class C extends S {}
|
||||
''');
|
||||
await assertHasFix('''
|
||||
import 'dart:ffi';
|
||||
class S extends Struct {
|
||||
final class S extends Struct {
|
||||
external Pointer notEmpty;
|
||||
}
|
||||
class C {}
|
||||
final class C {}
|
||||
''');
|
||||
}
|
||||
}
|
||||
@@ -283,12 +291,16 @@ class SubtypeOfStructClassInImplementsTest extends FixProcessorTest {
|
||||
Future<void> test_oneName() async {
|
||||
await resolveTestCode('''
|
||||
import 'dart:ffi';
|
||||
class C implements Struct {}
|
||||
final class C implements Struct {}
|
||||
''');
|
||||
await assertHasFix('''
|
||||
await assertHasFix(
|
||||
'''
|
||||
import 'dart:ffi';
|
||||
class C {}
|
||||
''');
|
||||
final class C {}
|
||||
''',
|
||||
errorFilter: (error) =>
|
||||
error.errorCode == FfiCode.SUBTYPE_OF_FFI_CLASS_IN_IMPLEMENTS,
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -300,15 +312,17 @@ class SubtypeOfStructClassInWithTest extends FixProcessorTest {
|
||||
Future<void> test_oneName() async {
|
||||
await resolveTestCode('''
|
||||
import 'dart:ffi';
|
||||
class S extends Struct {}
|
||||
class C with S {}
|
||||
final class S extends Struct {}
|
||||
final class C with S {}
|
||||
''');
|
||||
await assertHasFix('''
|
||||
await assertHasFix(
|
||||
'''
|
||||
import 'dart:ffi';
|
||||
class S extends Struct {}
|
||||
class C {}
|
||||
final class S extends Struct {}
|
||||
final class C {}
|
||||
''',
|
||||
errorFilter: (error) =>
|
||||
error.errorCode == FfiCode.SUBTYPE_OF_STRUCT_CLASS_IN_WITH);
|
||||
errorFilter: (error) =>
|
||||
error.errorCode == FfiCode.SUBTYPE_OF_STRUCT_CLASS_IN_WITH,
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -20,7 +20,7 @@ abstract class Allocator {
|
||||
void free(Pointer pointer);
|
||||
}
|
||||
|
||||
class Utf8 extends Opaque {}
|
||||
final class Utf8 extends Opaque {}
|
||||
|
||||
class _CallocAllocator implements Allocator {
|
||||
@override
|
||||
|
||||
@@ -708,63 +708,63 @@ final MockSdkLibrary _LIB_FFI = MockSdkLibrary('ffi', [
|
||||
@Since('2.6')
|
||||
library dart.ffi;
|
||||
|
||||
class NativeType {
|
||||
final class NativeType {
|
||||
const NativeType();
|
||||
}
|
||||
|
||||
@Since('2.9')
|
||||
class Handle extends NativeType {}
|
||||
abstract final class Handle extends NativeType {}
|
||||
|
||||
@Since('2.12')
|
||||
abstract class Opaque extends NativeType {}
|
||||
abstract base class Opaque extends NativeType {}
|
||||
|
||||
class Void extends NativeType {}
|
||||
final class Void extends NativeType {}
|
||||
|
||||
class Int8 extends NativeType {
|
||||
final class Int8 extends NativeType {
|
||||
const Int8();
|
||||
}
|
||||
|
||||
class Uint8 extends NativeType {
|
||||
final class Uint8 extends NativeType {
|
||||
const Uint8();
|
||||
}
|
||||
|
||||
class Int16 extends NativeType {
|
||||
final class Int16 extends NativeType {
|
||||
const Int16();
|
||||
}
|
||||
|
||||
class Uint16 extends NativeType {
|
||||
final class Uint16 extends NativeType {
|
||||
const Uint16();
|
||||
}
|
||||
|
||||
class Int32 extends NativeType {
|
||||
final class Int32 extends NativeType {
|
||||
const Int32();
|
||||
}
|
||||
|
||||
class Uint32 extends NativeType {
|
||||
final class Uint32 extends NativeType {
|
||||
const Uint32();
|
||||
}
|
||||
|
||||
class Int64 extends NativeType {
|
||||
final class Int64 extends NativeType {
|
||||
const Int64();
|
||||
}
|
||||
|
||||
class Uint64 extends NativeType {
|
||||
final class Uint64 extends NativeType {
|
||||
const Uint64();
|
||||
}
|
||||
|
||||
class Float extends NativeType {
|
||||
final class Float extends NativeType {
|
||||
const Float();
|
||||
}
|
||||
|
||||
class Double extends NativeType {
|
||||
final class Double extends NativeType {
|
||||
const Double();
|
||||
}
|
||||
|
||||
class IntPtr extends NativeType {
|
||||
final class IntPtr extends NativeType {
|
||||
const IntPtr();
|
||||
}
|
||||
|
||||
class Pointer<T extends NativeType> extends NativeType {
|
||||
final class Pointer<T extends NativeType> extends NativeType {
|
||||
external factory Pointer.fromAddress(int ptr);
|
||||
|
||||
static Pointer<NativeFunction<T>> fromFunction<T extends Function>(
|
||||
@@ -779,22 +779,22 @@ extension NativeFunctionPointer<NF extends Function>
|
||||
external DF asFunction<DF extends Function>({bool isLeaf = false});
|
||||
}
|
||||
|
||||
class _Compound extends NativeType {}
|
||||
final class _Compound extends NativeType {}
|
||||
|
||||
@Since('2.12')
|
||||
class Struct extends _Compound {}
|
||||
base class Struct extends _Compound {}
|
||||
|
||||
@Since('2.14')
|
||||
class Union extends _Compound {}
|
||||
base class Union extends _Compound {}
|
||||
|
||||
@Since('2.13')
|
||||
class Packed {
|
||||
final class Packed {
|
||||
final int memberAlignment;
|
||||
|
||||
const Packed(this.memberAlignment);
|
||||
}
|
||||
|
||||
abstract class DynamicLibrary {
|
||||
abstract final class DynamicLibrary {
|
||||
external factory DynamicLibrary.open(String name);
|
||||
}
|
||||
|
||||
@@ -803,14 +803,14 @@ extension DynamicLibraryExtension on DynamicLibrary {
|
||||
String symbolName, {bool isLeaf:false});
|
||||
}
|
||||
|
||||
abstract class NativeFunction<T extends Function> extends NativeType {}
|
||||
abstract final class NativeFunction<T extends Function> extends NativeType {}
|
||||
|
||||
class DartRepresentationOf {
|
||||
final class DartRepresentationOf {
|
||||
const DartRepresentationOf(String nativeType);
|
||||
}
|
||||
|
||||
@Since('2.13')
|
||||
class Array<T extends NativeType> extends NativeType {
|
||||
final class Array<T extends NativeType> extends NativeType {
|
||||
const factory Array(int dimension1,
|
||||
[int dimension2,
|
||||
int dimension3,
|
||||
@@ -820,7 +820,7 @@ class Array<T extends NativeType> extends NativeType {
|
||||
const factory Array.multi(List<int> dimensions) = _ArraySize<T>.multi;
|
||||
}
|
||||
|
||||
class _ArraySize<T extends NativeType> implements Array<T> {
|
||||
final class _ArraySize<T extends NativeType> implements Array<T> {
|
||||
final int? dimension1;
|
||||
final int? dimension2;
|
||||
final int? dimension3;
|
||||
@@ -847,14 +847,14 @@ extension StructPointer<T extends Struct> on Pointer<T> {
|
||||
external T operator [](int index);
|
||||
}
|
||||
|
||||
class FfiNative<T> {
|
||||
final class FfiNative<T> {
|
||||
final String nativeName;
|
||||
final bool isLeaf;
|
||||
const FfiNative(this.nativeName, {this.isLeaf = false});
|
||||
}
|
||||
|
||||
@Since('2.19')
|
||||
class Native<T> {
|
||||
final class Native<T> {
|
||||
final String? symbol;
|
||||
final String? asset;
|
||||
final bool isLeaf;
|
||||
@@ -866,12 +866,12 @@ class Native<T> {
|
||||
});
|
||||
}
|
||||
|
||||
class Asset {
|
||||
final class Asset {
|
||||
final String asset;
|
||||
const Asset(this.asset);
|
||||
}
|
||||
|
||||
class Abi {
|
||||
final class Abi {
|
||||
static const androidArm = _androidArm;
|
||||
static const androidArm64 = _androidArm64;
|
||||
static const androidIA32 = _androidIA32;
|
||||
@@ -908,24 +908,24 @@ enum _OS {
|
||||
}
|
||||
|
||||
@Since('2.16')
|
||||
class AbiSpecificInteger extends NativeType {
|
||||
base class AbiSpecificInteger extends NativeType {
|
||||
const AbiSpecificInteger();
|
||||
}
|
||||
|
||||
@Since('2.16')
|
||||
class AbiSpecificIntegerMapping {
|
||||
final class AbiSpecificIntegerMapping {
|
||||
final Map<Abi, NativeType> mapping;
|
||||
|
||||
const AbiSpecificIntegerMapping(this.mapping);
|
||||
}
|
||||
|
||||
@Since('2.17')
|
||||
abstract class Finalizable {
|
||||
abstract interface class Finalizable {
|
||||
factory Finalizable._() => throw UnsupportedError("");
|
||||
}
|
||||
|
||||
@Since('3.0')
|
||||
abstract class VarArgs<T extends Record> extends NativeType {}
|
||||
abstract final class VarArgs<T extends Record> extends NativeType {}
|
||||
''',
|
||||
)
|
||||
]);
|
||||
|
||||
+62
-62
@@ -16124,7 +16124,7 @@ FfiCode:
|
||||
import 'dart:ffi';
|
||||
|
||||
@AbiSpecificIntegerMapping({Abi.macosX64 : Int8()})
|
||||
class [!C!] extends AbiSpecificInteger {
|
||||
final class [!C!] extends AbiSpecificInteger {
|
||||
}
|
||||
```
|
||||
|
||||
@@ -16135,7 +16135,7 @@ FfiCode:
|
||||
import 'dart:ffi';
|
||||
|
||||
@AbiSpecificIntegerMapping({Abi.macosX64 : Int8()})
|
||||
class [!C!] extends AbiSpecificInteger {
|
||||
final class [!C!] extends AbiSpecificInteger {
|
||||
C();
|
||||
}
|
||||
```
|
||||
@@ -16147,7 +16147,7 @@ FfiCode:
|
||||
import 'dart:ffi';
|
||||
|
||||
@AbiSpecificIntegerMapping({Abi.macosX64 : Int8()})
|
||||
class [!C!] extends AbiSpecificInteger {
|
||||
final class [!C!] extends AbiSpecificInteger {
|
||||
const C.zero();
|
||||
const C.one();
|
||||
}
|
||||
@@ -16160,7 +16160,7 @@ FfiCode:
|
||||
import 'dart:ffi';
|
||||
|
||||
@AbiSpecificIntegerMapping({Abi.macosX64 : Int8()})
|
||||
class [!C!] extends AbiSpecificInteger {
|
||||
final class [!C!] extends AbiSpecificInteger {
|
||||
final int i;
|
||||
|
||||
const C(this.i);
|
||||
@@ -16174,7 +16174,7 @@ FfiCode:
|
||||
import 'dart:ffi';
|
||||
|
||||
@AbiSpecificIntegerMapping({Abi.macosX64 : Int8()})
|
||||
class [!C!]<T> extends AbiSpecificInteger { // type parameters
|
||||
final class [!C!]<T> extends AbiSpecificInteger { // type parameters
|
||||
const C();
|
||||
}
|
||||
```
|
||||
@@ -16188,7 +16188,7 @@ FfiCode:
|
||||
import 'dart:ffi';
|
||||
|
||||
@AbiSpecificIntegerMapping({Abi.macosX64 : Int8()})
|
||||
class C extends AbiSpecificInteger {
|
||||
final class C extends AbiSpecificInteger {
|
||||
const C();
|
||||
}
|
||||
```
|
||||
@@ -16214,7 +16214,7 @@ FfiCode:
|
||||
|
||||
@AbiSpecificIntegerMapping({Abi.macosX64 : Int8()})
|
||||
@[!AbiSpecificIntegerMapping!]({Abi.linuxX64 : Uint16()})
|
||||
class C extends AbiSpecificInteger {
|
||||
final class C extends AbiSpecificInteger {
|
||||
const C();
|
||||
}
|
||||
```
|
||||
@@ -16228,7 +16228,7 @@ FfiCode:
|
||||
import 'dart:ffi';
|
||||
|
||||
@AbiSpecificIntegerMapping({Abi.macosX64 : Int8(), Abi.linuxX64 : Uint16()})
|
||||
class C extends AbiSpecificInteger {
|
||||
final class C extends AbiSpecificInteger {
|
||||
const C();
|
||||
}
|
||||
```
|
||||
@@ -16252,7 +16252,7 @@ FfiCode:
|
||||
```dart
|
||||
import 'dart:ffi';
|
||||
|
||||
class [!C!] extends AbiSpecificInteger {
|
||||
final class [!C!] extends AbiSpecificInteger {
|
||||
const C();
|
||||
}
|
||||
```
|
||||
@@ -16265,7 +16265,7 @@ FfiCode:
|
||||
import 'dart:ffi';
|
||||
|
||||
@AbiSpecificIntegerMapping({Abi.macosX64 : Int8()})
|
||||
class C extends AbiSpecificInteger {
|
||||
final class C extends AbiSpecificInteger {
|
||||
const C();
|
||||
}
|
||||
```
|
||||
@@ -16300,7 +16300,7 @@ FfiCode:
|
||||
import 'dart:ffi';
|
||||
|
||||
@AbiSpecificIntegerMapping({Abi.macosX64 : [!Array<Uint8>(4)!]})
|
||||
class C extends AbiSpecificInteger {
|
||||
final class C extends AbiSpecificInteger {
|
||||
const C();
|
||||
}
|
||||
```
|
||||
@@ -16313,7 +16313,7 @@ FfiCode:
|
||||
import 'dart:ffi';
|
||||
|
||||
@AbiSpecificIntegerMapping({Abi.macosX64 : Int8()})
|
||||
class C extends AbiSpecificInteger {
|
||||
final class C extends AbiSpecificInteger {
|
||||
const C();
|
||||
}
|
||||
```
|
||||
@@ -16340,7 +16340,7 @@ FfiCode:
|
||||
```dart
|
||||
import 'dart:ffi';
|
||||
|
||||
class C extends Struct {
|
||||
final class C extends Struct {
|
||||
[!@Double()!]
|
||||
external Pointer<Int8> p;
|
||||
}
|
||||
@@ -16353,7 +16353,7 @@ FfiCode:
|
||||
```dart
|
||||
import 'dart:ffi';
|
||||
|
||||
class C extends Struct {
|
||||
final class C extends Struct {
|
||||
external Pointer<Int8> p;
|
||||
}
|
||||
```
|
||||
@@ -16438,7 +16438,7 @@ FfiCode:
|
||||
```dart
|
||||
import 'dart:ffi';
|
||||
|
||||
class [!S!] extends Struct implements Finalizable {
|
||||
final class [!S!] extends Struct implements Finalizable {
|
||||
external Pointer notEmpty;
|
||||
}
|
||||
```
|
||||
@@ -16450,7 +16450,7 @@ FfiCode:
|
||||
```dart
|
||||
import 'dart:ffi';
|
||||
|
||||
class S extends Struct {
|
||||
final class S extends Struct {
|
||||
external Pointer notEmpty;
|
||||
}
|
||||
```
|
||||
@@ -16475,7 +16475,7 @@ FfiCode:
|
||||
```dart
|
||||
import 'dart:ffi';
|
||||
|
||||
class C extends Struct {
|
||||
final class C extends Struct {
|
||||
@Int32()
|
||||
external int a;
|
||||
}
|
||||
@@ -16494,7 +16494,7 @@ FfiCode:
|
||||
import 'dart:ffi';
|
||||
import 'package:ffi/ffi.dart';
|
||||
|
||||
class C extends Struct {
|
||||
final class C extends Struct {
|
||||
@Int32()
|
||||
external int a;
|
||||
}
|
||||
@@ -16531,7 +16531,7 @@ FfiCode:
|
||||
```dart
|
||||
import 'dart:ffi';
|
||||
|
||||
class [!C!] extends Struct {}
|
||||
final class [!C!] extends Struct {}
|
||||
```
|
||||
|
||||
#### Common fixes
|
||||
@@ -16541,7 +16541,7 @@ FfiCode:
|
||||
```dart
|
||||
import 'dart:ffi';
|
||||
|
||||
class C extends Struct {
|
||||
final class C extends Struct {
|
||||
@Int32()
|
||||
external int x;
|
||||
}
|
||||
@@ -16553,7 +16553,7 @@ FfiCode:
|
||||
```dart
|
||||
import 'dart:ffi';
|
||||
|
||||
class C extends Opaque {}
|
||||
final class C extends Opaque {}
|
||||
```
|
||||
|
||||
If the class isn't intended to be a struct, then remove or change the
|
||||
@@ -16584,7 +16584,7 @@ FfiCode:
|
||||
```dart
|
||||
import 'dart:ffi';
|
||||
|
||||
class C extends Struct {
|
||||
final class C extends Struct {
|
||||
@Int32()
|
||||
[!@Int16()!]
|
||||
external int x;
|
||||
@@ -16597,7 +16597,7 @@ FfiCode:
|
||||
|
||||
```dart
|
||||
import 'dart:ffi';
|
||||
class C extends Struct {
|
||||
final class C extends Struct {
|
||||
@Int32()
|
||||
external int x;
|
||||
}
|
||||
@@ -16624,7 +16624,7 @@ FfiCode:
|
||||
```dart
|
||||
import 'dart:ffi';
|
||||
|
||||
class C extends Struct {
|
||||
final class C extends Struct {
|
||||
@Array(4)
|
||||
[!@Array(8)!]
|
||||
external Array<Uint8> a0;
|
||||
@@ -16638,7 +16638,7 @@ FfiCode:
|
||||
```dart
|
||||
import 'dart:ffi';
|
||||
|
||||
class C extends Struct {
|
||||
final class C extends Struct {
|
||||
@Array(8)
|
||||
external Array<Uint8> a0;
|
||||
}
|
||||
@@ -16687,7 +16687,7 @@ FfiCode:
|
||||
// @dart = 2.9
|
||||
import 'dart:ffi';
|
||||
|
||||
class C extends Struct {
|
||||
final class C extends Struct {
|
||||
@Int32()
|
||||
int f;
|
||||
|
||||
@@ -16703,7 +16703,7 @@ FfiCode:
|
||||
// @dart = 2.9
|
||||
import 'dart:ffi';
|
||||
|
||||
class C extends Struct {
|
||||
final class C extends Struct {
|
||||
@Int32()
|
||||
int f;
|
||||
|
||||
@@ -16732,7 +16732,7 @@ FfiCode:
|
||||
// @dart = 2.9
|
||||
import 'dart:ffi';
|
||||
|
||||
class C extends Struct {
|
||||
final class C extends Struct {
|
||||
Pointer [!p!] = nullptr;
|
||||
}
|
||||
```
|
||||
@@ -16745,7 +16745,7 @@ FfiCode:
|
||||
// @dart = 2.9
|
||||
import 'dart:ffi';
|
||||
|
||||
class C extends Struct {
|
||||
final class C extends Struct {
|
||||
Pointer p;
|
||||
}
|
||||
```
|
||||
@@ -16770,7 +16770,7 @@ FfiCode:
|
||||
```dart
|
||||
import 'dart:ffi';
|
||||
|
||||
class C extends Struct {
|
||||
final class C extends Struct {
|
||||
@Int16()
|
||||
int [!a!];
|
||||
}
|
||||
@@ -16783,7 +16783,7 @@ FfiCode:
|
||||
```dart
|
||||
import 'dart:ffi';
|
||||
|
||||
class C extends Struct {
|
||||
final class C extends Struct {
|
||||
@Int16()
|
||||
external int a;
|
||||
}
|
||||
@@ -16811,7 +16811,7 @@ FfiCode:
|
||||
```dart
|
||||
import 'dart:ffi';
|
||||
|
||||
class [!S!]<T> extends Struct {
|
||||
final class [!S!]<T> extends Struct {
|
||||
external Pointer notEmpty;
|
||||
}
|
||||
```
|
||||
@@ -16823,7 +16823,7 @@ FfiCode:
|
||||
```dart
|
||||
import 'dart:ffi';
|
||||
|
||||
class S extends Struct {
|
||||
final class S extends Struct {
|
||||
external Pointer notEmpty;
|
||||
}
|
||||
```
|
||||
@@ -16899,7 +16899,7 @@ FfiCode:
|
||||
```dart
|
||||
import 'dart:ffi';
|
||||
|
||||
class C extends Struct {
|
||||
final class C extends Struct {
|
||||
external [!String!] s;
|
||||
|
||||
@Int32()
|
||||
@@ -16915,7 +16915,7 @@ FfiCode:
|
||||
import 'dart:ffi';
|
||||
import 'package:ffi/ffi.dart';
|
||||
|
||||
class C extends Struct {
|
||||
final class C extends Struct {
|
||||
external Pointer<Utf8> s;
|
||||
|
||||
@Int32()
|
||||
@@ -17051,7 +17051,7 @@ FfiCode:
|
||||
```dart
|
||||
import 'dart:ffi';
|
||||
|
||||
class C extends Struct {
|
||||
final class C extends Struct {
|
||||
[!@Double()!]
|
||||
external int x;
|
||||
}
|
||||
@@ -17064,7 +17064,7 @@ FfiCode:
|
||||
```dart
|
||||
import 'dart:ffi';
|
||||
|
||||
class C extends Struct {
|
||||
final class C extends Struct {
|
||||
@Int32()
|
||||
external int x;
|
||||
}
|
||||
@@ -17075,7 +17075,7 @@ FfiCode:
|
||||
```dart
|
||||
import 'dart:ffi';
|
||||
|
||||
class C extends Struct {
|
||||
final class C extends Struct {
|
||||
@Double()
|
||||
external double x;
|
||||
}
|
||||
@@ -17107,7 +17107,7 @@ FfiCode:
|
||||
```dart
|
||||
import 'dart:ffi';
|
||||
|
||||
class C extends Struct {
|
||||
final class C extends Struct {
|
||||
external [!int!] x;
|
||||
}
|
||||
```
|
||||
@@ -17119,7 +17119,7 @@ FfiCode:
|
||||
```dart
|
||||
import 'dart:ffi';
|
||||
|
||||
class C extends Struct {
|
||||
final class C extends Struct {
|
||||
@Int64()
|
||||
external int x;
|
||||
}
|
||||
@@ -17191,7 +17191,7 @@ FfiCode:
|
||||
```dart
|
||||
import 'dart:ffi';
|
||||
|
||||
class C extends Struct {
|
||||
final class C extends Struct {
|
||||
external var [!str!];
|
||||
|
||||
@Int32()
|
||||
@@ -17207,7 +17207,7 @@ FfiCode:
|
||||
import 'dart:ffi';
|
||||
import 'package:ffi/ffi.dart';
|
||||
|
||||
class C extends Struct {
|
||||
final class C extends Struct {
|
||||
external Pointer<Utf8> str;
|
||||
|
||||
@Int32()
|
||||
@@ -17236,7 +17236,7 @@ FfiCode:
|
||||
```dart
|
||||
import 'dart:ffi';
|
||||
|
||||
class C extends Struct {
|
||||
final class C extends Struct {
|
||||
external [!Array<Uint8>!] a0;
|
||||
}
|
||||
```
|
||||
@@ -17248,7 +17248,7 @@ FfiCode:
|
||||
```dart
|
||||
import 'dart:ffi';
|
||||
|
||||
class C extends Struct {
|
||||
final class C extends Struct {
|
||||
@Array(8)
|
||||
external Array<Uint8> a0;
|
||||
}
|
||||
@@ -17491,7 +17491,7 @@ FfiCode:
|
||||
```dart
|
||||
import 'dart:ffi';
|
||||
|
||||
class MyStruct extends Struct {
|
||||
final class MyStruct extends Struct {
|
||||
@Array([!-8!])
|
||||
external Array<Uint8> a0;
|
||||
}
|
||||
@@ -17504,7 +17504,7 @@ FfiCode:
|
||||
```dart
|
||||
import 'dart:ffi';
|
||||
|
||||
class MyStruct extends Struct {
|
||||
final class MyStruct extends Struct {
|
||||
@Array(8)
|
||||
external Array<Uint8> a0;
|
||||
}
|
||||
@@ -17535,7 +17535,7 @@ FfiCode:
|
||||
```dart
|
||||
import 'dart:ffi';
|
||||
|
||||
class C extends Struct {
|
||||
final class C extends Struct {
|
||||
@Array(8)
|
||||
external Array<[!Void!]> a0;
|
||||
}
|
||||
@@ -17548,7 +17548,7 @@ FfiCode:
|
||||
```dart
|
||||
import 'dart:ffi';
|
||||
|
||||
class C extends Struct {
|
||||
final class C extends Struct {
|
||||
@Array(8)
|
||||
external Array<Uint8> a0;
|
||||
}
|
||||
@@ -17576,7 +17576,7 @@ FfiCode:
|
||||
|
||||
@Packed(1)
|
||||
[!@Packed(1)!]
|
||||
class C extends Struct {
|
||||
final class C extends Struct {
|
||||
external Pointer<Uint8> notEmpty;
|
||||
}
|
||||
```
|
||||
@@ -17589,7 +17589,7 @@ FfiCode:
|
||||
import 'dart:ffi';
|
||||
|
||||
@Packed(1)
|
||||
class C extends Struct {
|
||||
final class C extends Struct {
|
||||
external Pointer<Uint8> notEmpty;
|
||||
}
|
||||
```
|
||||
@@ -17615,7 +17615,7 @@ FfiCode:
|
||||
import 'dart:ffi';
|
||||
|
||||
@Packed([!3!])
|
||||
class C extends Struct {
|
||||
final class C extends Struct {
|
||||
external Pointer<Uint8> notEmpty;
|
||||
}
|
||||
```
|
||||
@@ -17628,7 +17628,7 @@ FfiCode:
|
||||
import 'dart:ffi';
|
||||
|
||||
@Packed(4)
|
||||
class C extends Struct {
|
||||
final class C extends Struct {
|
||||
external Pointer<Uint8> notEmpty;
|
||||
}
|
||||
```
|
||||
@@ -17655,7 +17655,7 @@ FfiCode:
|
||||
```dart
|
||||
import 'dart:ffi';
|
||||
|
||||
class C extends Struct {
|
||||
final class C extends Struct {
|
||||
[!@Array(8, 8)!]
|
||||
external Array<Array<Array<Uint8>>> a0;
|
||||
}
|
||||
@@ -17669,7 +17669,7 @@ FfiCode:
|
||||
```dart
|
||||
import 'dart:ffi';
|
||||
|
||||
class C extends Struct {
|
||||
final class C extends Struct {
|
||||
@Array(8, 8, 4)
|
||||
external Array<Array<Array<Uint8>>> a0;
|
||||
}
|
||||
@@ -17680,7 +17680,7 @@ FfiCode:
|
||||
```dart
|
||||
import 'dart:ffi';
|
||||
|
||||
class C extends Struct {
|
||||
final class C extends Struct {
|
||||
@Array(8, 8)
|
||||
external Array<Array<Uint8>> a0;
|
||||
}
|
||||
@@ -17712,7 +17712,7 @@ FfiCode:
|
||||
```dart
|
||||
import 'dart:ffi';
|
||||
|
||||
class C extends [!Double!] {}
|
||||
final class C extends [!Double!] {}
|
||||
```
|
||||
|
||||
#### Common fixes
|
||||
@@ -17723,7 +17723,7 @@ FfiCode:
|
||||
```dart
|
||||
import 'dart:ffi';
|
||||
|
||||
class C extends Struct {
|
||||
final class C extends Struct {
|
||||
@Int32()
|
||||
external int i;
|
||||
}
|
||||
@@ -17733,7 +17733,7 @@ FfiCode:
|
||||
references to FFI classes:
|
||||
|
||||
```dart
|
||||
class C {}
|
||||
final class C {}
|
||||
```
|
||||
SUBTYPE_OF_FFI_CLASS_IN_IMPLEMENTS:
|
||||
sharedName: SUBTYPE_OF_FFI_CLASS
|
||||
@@ -17779,11 +17779,11 @@ FfiCode:
|
||||
```dart
|
||||
import 'dart:ffi';
|
||||
|
||||
class S extends Struct {
|
||||
final class S extends Struct {
|
||||
external Pointer f;
|
||||
}
|
||||
|
||||
class C extends [!S!] {
|
||||
final class C extends [!S!] {
|
||||
external Pointer g;
|
||||
}
|
||||
```
|
||||
@@ -17797,11 +17797,11 @@ FfiCode:
|
||||
```dart
|
||||
import 'dart:ffi';
|
||||
|
||||
class S extends Struct {
|
||||
final class S extends Struct {
|
||||
external Pointer f;
|
||||
}
|
||||
|
||||
class C extends Struct {
|
||||
final class C extends Struct {
|
||||
external Pointer f;
|
||||
|
||||
external Pointer g;
|
||||
|
||||
@@ -20,7 +20,7 @@ class AbiSpecificIntegerMappingTest extends PubPackageResolutionTest {
|
||||
import 'dart:ffi';
|
||||
@AbiSpecificIntegerMapping({})
|
||||
@AbiSpecificIntegerMapping({})
|
||||
class UintPtr extends AbiSpecificInteger {
|
||||
final class UintPtr extends AbiSpecificInteger {
|
||||
const UintPtr();
|
||||
}
|
||||
''', [
|
||||
@@ -36,7 +36,7 @@ import 'dart:ffi';
|
||||
Abi.androidArm64: IntPtr(),
|
||||
Abi.androidIA32: UintPtr(),
|
||||
})
|
||||
class UintPtr extends AbiSpecificInteger {
|
||||
final class UintPtr extends AbiSpecificInteger {
|
||||
const UintPtr();
|
||||
}
|
||||
''', [
|
||||
@@ -56,7 +56,7 @@ const c = {
|
||||
Abi.androidIA32: UintPtr(),
|
||||
};
|
||||
@AbiSpecificIntegerMapping(c)
|
||||
class UintPtr extends AbiSpecificInteger {
|
||||
final class UintPtr extends AbiSpecificInteger {
|
||||
const UintPtr();
|
||||
}
|
||||
''', [
|
||||
@@ -70,11 +70,11 @@ class UintPtr extends AbiSpecificInteger {
|
||||
test_noMapping() async {
|
||||
await assertErrorsInCode(r'''
|
||||
import 'dart:ffi';
|
||||
class UintPtr extends AbiSpecificInteger {
|
||||
final class UintPtr extends AbiSpecificInteger {
|
||||
const UintPtr();
|
||||
}
|
||||
''', [
|
||||
error(FfiCode.ABI_SPECIFIC_INTEGER_MAPPING_MISSING, 25, 7),
|
||||
error(FfiCode.ABI_SPECIFIC_INTEGER_MAPPING_MISSING, 31, 7),
|
||||
]);
|
||||
}
|
||||
|
||||
@@ -82,7 +82,7 @@ class UintPtr extends AbiSpecificInteger {
|
||||
await assertNoErrorsInCode(r'''
|
||||
import 'dart:ffi';
|
||||
@AbiSpecificIntegerMapping({})
|
||||
class UintPtr extends AbiSpecificInteger {
|
||||
final class UintPtr extends AbiSpecificInteger {
|
||||
const UintPtr();
|
||||
}
|
||||
''');
|
||||
@@ -96,7 +96,7 @@ import 'dart:ffi';
|
||||
Abi.androidArm64: Uint64(),
|
||||
Abi.androidIA32: Uint32(),
|
||||
})
|
||||
class UintPtr extends AbiSpecificInteger {
|
||||
final class UintPtr extends AbiSpecificInteger {
|
||||
const UintPtr();
|
||||
}
|
||||
''');
|
||||
|
||||
@@ -18,24 +18,24 @@ class AnnotationOnPointerFieldTest extends PubPackageResolutionTest {
|
||||
test_double() async {
|
||||
await assertErrorsInCode(r'''
|
||||
import 'dart:ffi';
|
||||
class C extends Struct {
|
||||
final class C extends Struct {
|
||||
@Double()
|
||||
external Pointer<Int8> x;
|
||||
}
|
||||
''', [
|
||||
error(FfiCode.ANNOTATION_ON_POINTER_FIELD, 46, 9),
|
||||
error(FfiCode.ANNOTATION_ON_POINTER_FIELD, 52, 9),
|
||||
]);
|
||||
}
|
||||
|
||||
test_int32() async {
|
||||
await assertErrorsInCode(r'''
|
||||
import 'dart:ffi';
|
||||
class C extends Struct {
|
||||
final class C extends Struct {
|
||||
@Int32()
|
||||
external Pointer<Float> x;
|
||||
}
|
||||
''', [
|
||||
error(FfiCode.ANNOTATION_ON_POINTER_FIELD, 46, 8),
|
||||
error(FfiCode.ANNOTATION_ON_POINTER_FIELD, 52, 8),
|
||||
]);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -19,7 +19,7 @@ class CreationOfStructOrUnionTest extends PubPackageResolutionTest {
|
||||
await assertErrorsInCode(r'''
|
||||
import 'dart:ffi';
|
||||
|
||||
class A extends Struct {
|
||||
final class A extends Struct {
|
||||
@Int32()
|
||||
external int a;
|
||||
}
|
||||
@@ -28,7 +28,7 @@ void f() {
|
||||
A();
|
||||
}
|
||||
''', [
|
||||
error(FfiCode.CREATION_OF_STRUCT_OR_UNION, 90, 1),
|
||||
error(FfiCode.CREATION_OF_STRUCT_OR_UNION, 96, 1),
|
||||
]);
|
||||
}
|
||||
|
||||
@@ -36,7 +36,7 @@ void f() {
|
||||
await assertErrorsInCode(r'''
|
||||
import 'dart:ffi';
|
||||
|
||||
class A extends Union {
|
||||
final class A extends Union {
|
||||
@Int32()
|
||||
external int a;
|
||||
}
|
||||
@@ -45,7 +45,7 @@ void f() {
|
||||
A();
|
||||
}
|
||||
''', [
|
||||
error(FfiCode.CREATION_OF_STRUCT_OR_UNION, 89, 1),
|
||||
error(FfiCode.CREATION_OF_STRUCT_OR_UNION, 95, 1),
|
||||
]);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -18,7 +18,7 @@ class ExtraAnnotationOnStructFieldTest extends PubPackageResolutionTest {
|
||||
test_one() async {
|
||||
await assertNoErrorsInCode(r'''
|
||||
import 'dart:ffi';
|
||||
class C extends Struct {
|
||||
final class C extends Struct {
|
||||
@Int32()
|
||||
external int x;
|
||||
}
|
||||
@@ -28,13 +28,13 @@ class C extends Struct {
|
||||
test_two() async {
|
||||
await assertErrorsInCode(r'''
|
||||
import 'dart:ffi';
|
||||
class C extends Struct {
|
||||
final class C extends Struct {
|
||||
@Int32()
|
||||
@Int16()
|
||||
external int x;
|
||||
}
|
||||
''', [
|
||||
error(FfiCode.EXTRA_ANNOTATION_ON_STRUCT_FIELD, 57, 8),
|
||||
error(FfiCode.EXTRA_ANNOTATION_ON_STRUCT_FIELD, 63, 8),
|
||||
]);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -21,7 +21,7 @@ import 'dart:ffi';
|
||||
|
||||
const EIGHT = 8;
|
||||
|
||||
class Struct8BytesInlineArrayInt extends Struct {
|
||||
final class Struct8BytesInlineArrayInt extends Struct {
|
||||
@Array(EIGHT)
|
||||
external Array<Uint8> a0;
|
||||
}
|
||||
@@ -32,7 +32,7 @@ class Struct8BytesInlineArrayInt extends Struct {
|
||||
await assertNoErrorsInCode(r'''
|
||||
import 'dart:ffi';
|
||||
|
||||
class C extends Struct {
|
||||
final class C extends Struct {
|
||||
@Array(8)
|
||||
external Array<Uint8> a0;
|
||||
}
|
||||
@@ -43,13 +43,13 @@ class C extends Struct {
|
||||
await assertErrorsInCode(r'''
|
||||
import 'dart:ffi';
|
||||
|
||||
class C extends Struct {
|
||||
final class C extends Struct {
|
||||
@Array(8)
|
||||
@Array(8)
|
||||
external Array<Uint8> a0;
|
||||
}
|
||||
''', [
|
||||
error(FfiCode.EXTRA_SIZE_ANNOTATION_CARRAY, 59, 9),
|
||||
error(FfiCode.EXTRA_SIZE_ANNOTATION_CARRAY, 65, 9),
|
||||
]);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -20,13 +20,14 @@ class FieldMustBeExternalInStructTest extends PubPackageResolutionTest
|
||||
|
||||
mixin FieldMustBeExternalInStructTestCases on PubPackageResolutionTest {
|
||||
test_struct() async {
|
||||
final keyword = isNullSafetyEnabled ? 'final ' : '';
|
||||
var expectedErrors = expectedErrorsByNullability(nullable: [
|
||||
error(FfiCode.FIELD_MUST_BE_EXTERNAL_IN_STRUCT, 62, 1),
|
||||
error(FfiCode.FIELD_MUST_BE_EXTERNAL_IN_STRUCT, 68, 1),
|
||||
], legacy: []);
|
||||
await assertErrorsInCode(r'''
|
||||
await assertErrorsInCode('''
|
||||
import 'dart:ffi';
|
||||
|
||||
class A extends Struct {
|
||||
${keyword}class A extends Struct {
|
||||
@Int16()
|
||||
int a;
|
||||
}
|
||||
@@ -34,13 +35,14 @@ class A extends Struct {
|
||||
}
|
||||
|
||||
test_union() async {
|
||||
final keyword = isNullSafetyEnabled ? 'final ' : '';
|
||||
var expectedErrors = expectedErrorsByNullability(nullable: [
|
||||
error(FfiCode.FIELD_MUST_BE_EXTERNAL_IN_STRUCT, 61, 1),
|
||||
error(FfiCode.FIELD_MUST_BE_EXTERNAL_IN_STRUCT, 67, 1),
|
||||
], legacy: []);
|
||||
await assertErrorsInCode(r'''
|
||||
await assertErrorsInCode('''
|
||||
import 'dart:ffi';
|
||||
|
||||
class A extends Union {
|
||||
${keyword}class A extends Union {
|
||||
@Int16()
|
||||
int a;
|
||||
}
|
||||
|
||||
@@ -18,29 +18,29 @@ class GenericStructSubclassTest extends PubPackageResolutionTest {
|
||||
test_genericStruct() async {
|
||||
await assertErrorsInCode(r'''
|
||||
import 'dart:ffi';
|
||||
class S<T> extends Struct {
|
||||
final class S<T> extends Struct {
|
||||
external Pointer notEmpty;
|
||||
}
|
||||
''', [
|
||||
error(FfiCode.GENERIC_STRUCT_SUBCLASS, 25, 1, messageContains: ["'S'"]),
|
||||
error(FfiCode.GENERIC_STRUCT_SUBCLASS, 31, 1, messageContains: ["'S'"]),
|
||||
]);
|
||||
}
|
||||
|
||||
test_genericUnion() async {
|
||||
await assertErrorsInCode(r'''
|
||||
import 'dart:ffi';
|
||||
class S<T> extends Union {
|
||||
final class S<T> extends Union {
|
||||
external Pointer notEmpty;
|
||||
}
|
||||
''', [
|
||||
error(FfiCode.GENERIC_STRUCT_SUBCLASS, 25, 1, messageContains: ["'S'"]),
|
||||
error(FfiCode.GENERIC_STRUCT_SUBCLASS, 31, 1, messageContains: ["'S'"]),
|
||||
]);
|
||||
}
|
||||
|
||||
test_validStruct() async {
|
||||
await assertNoErrorsInCode(r'''
|
||||
import 'dart:ffi';
|
||||
class S extends Struct {
|
||||
final class S extends Struct {
|
||||
external Pointer notEmpty;
|
||||
}
|
||||
''');
|
||||
|
||||
@@ -19,13 +19,13 @@ class InvalidFieldTypeInStructTest extends PubPackageResolutionTest {
|
||||
test_instance_invalid() async {
|
||||
await assertErrorsInCode(r'''
|
||||
import 'dart:ffi';
|
||||
class C extends Struct {
|
||||
final class C extends Struct {
|
||||
external String str;
|
||||
|
||||
external Pointer notEmpty;
|
||||
}
|
||||
''', [
|
||||
error(FfiCode.INVALID_FIELD_TYPE_IN_STRUCT, 55, 6),
|
||||
error(FfiCode.INVALID_FIELD_TYPE_IN_STRUCT, 61, 6),
|
||||
]);
|
||||
}
|
||||
|
||||
@@ -33,31 +33,31 @@ class C extends Struct {
|
||||
test_instance_invalid2() async {
|
||||
await assertErrorsInCode(r'''
|
||||
import 'dart:ffi';
|
||||
class C extends Union {
|
||||
final class C extends Union {
|
||||
external String str;
|
||||
|
||||
external Pointer notEmpty;
|
||||
}
|
||||
''', [
|
||||
error(FfiCode.INVALID_FIELD_TYPE_IN_STRUCT, 54, 6),
|
||||
error(FfiCode.INVALID_FIELD_TYPE_IN_STRUCT, 60, 6),
|
||||
]);
|
||||
}
|
||||
|
||||
test_instance_invalid3() async {
|
||||
await assertErrorsInCode(r'''
|
||||
import 'dart:ffi';
|
||||
class C extends Struct {
|
||||
final class C extends Struct {
|
||||
external Pointer? p;
|
||||
}
|
||||
''', [
|
||||
error(FfiCode.INVALID_FIELD_TYPE_IN_STRUCT, 55, 8),
|
||||
error(FfiCode.INVALID_FIELD_TYPE_IN_STRUCT, 61, 8),
|
||||
]);
|
||||
}
|
||||
|
||||
test_instance_valid() async {
|
||||
await assertNoErrorsInCode(r'''
|
||||
import 'dart:ffi';
|
||||
class C extends Struct {
|
||||
final class C extends Struct {
|
||||
external Pointer p;
|
||||
}
|
||||
''');
|
||||
@@ -66,7 +66,7 @@ class C extends Struct {
|
||||
test_static() async {
|
||||
await assertNoErrorsInCode(r'''
|
||||
import 'dart:ffi';
|
||||
class C extends Struct {
|
||||
final class C extends Struct {
|
||||
static String? str;
|
||||
|
||||
external Pointer notEmpty;
|
||||
|
||||
@@ -18,24 +18,24 @@ class MismatchedAnnotationOnStructFieldTest extends PubPackageResolutionTest {
|
||||
test_double_on_int() async {
|
||||
await assertErrorsInCode(r'''
|
||||
import 'dart:ffi';
|
||||
class C extends Struct {
|
||||
final class C extends Struct {
|
||||
@Double()
|
||||
external int x;
|
||||
}
|
||||
''', [
|
||||
error(FfiCode.MISMATCHED_ANNOTATION_ON_STRUCT_FIELD, 46, 9),
|
||||
error(FfiCode.MISMATCHED_ANNOTATION_ON_STRUCT_FIELD, 52, 9),
|
||||
]);
|
||||
}
|
||||
|
||||
test_int32_on_double() async {
|
||||
await assertErrorsInCode(r'''
|
||||
import 'dart:ffi';
|
||||
class C extends Struct {
|
||||
final class C extends Struct {
|
||||
@Int32()
|
||||
external double x;
|
||||
}
|
||||
''', [
|
||||
error(FfiCode.MISMATCHED_ANNOTATION_ON_STRUCT_FIELD, 46, 8),
|
||||
error(FfiCode.MISMATCHED_ANNOTATION_ON_STRUCT_FIELD, 52, 8),
|
||||
]);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -18,18 +18,18 @@ class MissingAnnotationOnStructFieldTest extends PubPackageResolutionTest {
|
||||
test_missing_int() async {
|
||||
await assertErrorsInCode(r'''
|
||||
import 'dart:ffi';
|
||||
class C extends Struct {
|
||||
final class C extends Struct {
|
||||
external int x;
|
||||
}
|
||||
''', [
|
||||
error(FfiCode.MISSING_ANNOTATION_ON_STRUCT_FIELD, 55, 3),
|
||||
error(FfiCode.MISSING_ANNOTATION_ON_STRUCT_FIELD, 61, 3),
|
||||
]);
|
||||
}
|
||||
|
||||
test_notMissing() async {
|
||||
await assertNoErrorsInCode(r'''
|
||||
import 'dart:ffi';
|
||||
class C extends Struct {
|
||||
final class C extends Struct {
|
||||
@Int32()
|
||||
external int x;
|
||||
}
|
||||
|
||||
@@ -18,20 +18,20 @@ class MissingFieldTypeInStructTest extends PubPackageResolutionTest {
|
||||
test_missing() async {
|
||||
await assertErrorsInCode(r'''
|
||||
import 'dart:ffi';
|
||||
class C extends Struct {
|
||||
final class C extends Struct {
|
||||
external var str;
|
||||
|
||||
external Pointer notEmpty;
|
||||
}
|
||||
''', [
|
||||
error(FfiCode.MISSING_FIELD_TYPE_IN_STRUCT, 59, 3),
|
||||
error(FfiCode.MISSING_FIELD_TYPE_IN_STRUCT, 65, 3),
|
||||
]);
|
||||
}
|
||||
|
||||
test_valid() async {
|
||||
await assertNoErrorsInCode(r'''
|
||||
import 'dart:ffi';
|
||||
class C extends Struct {
|
||||
final class C extends Struct {
|
||||
external Pointer p;
|
||||
}
|
||||
''');
|
||||
|
||||
@@ -19,7 +19,7 @@ class MissingSizeAnnotationArray extends PubPackageResolutionTest {
|
||||
await assertNoErrorsInCode(r'''
|
||||
import 'dart:ffi';
|
||||
|
||||
class C extends Struct {
|
||||
final class C extends Struct {
|
||||
@Array(8)
|
||||
external Array<Uint8> a0;
|
||||
}
|
||||
@@ -30,11 +30,11 @@ class C extends Struct {
|
||||
await assertErrorsInCode(r'''
|
||||
import 'dart:ffi';
|
||||
|
||||
class C extends Struct {
|
||||
final class C extends Struct {
|
||||
external Array<Uint8> a0;
|
||||
}
|
||||
''', [
|
||||
error(FfiCode.MISSING_SIZE_ANNOTATION_CARRAY, 56, 12),
|
||||
error(FfiCode.MISSING_SIZE_ANNOTATION_CARRAY, 62, 12),
|
||||
]);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -37,7 +37,7 @@ class NonConstantTypeArgumentWarningTest extends PubPackageResolutionTest {
|
||||
await assertNoErrorsInCode(r'''
|
||||
import 'dart:ffi';
|
||||
|
||||
class MyStruct extends Struct {
|
||||
final class MyStruct extends Struct {
|
||||
@Uint8()
|
||||
external int myField;
|
||||
}
|
||||
@@ -53,7 +53,7 @@ void main() {
|
||||
await assertNoErrorsInCode(r'''
|
||||
import 'dart:ffi';
|
||||
|
||||
class MyStruct extends Struct {
|
||||
final class MyStruct extends Struct {
|
||||
@Uint8()
|
||||
external int myField;
|
||||
}
|
||||
|
||||
@@ -19,12 +19,12 @@ class NonPositiveArrayDimensionTest extends PubPackageResolutionTest {
|
||||
await assertErrorsInCode('''
|
||||
import "dart:ffi";
|
||||
|
||||
class MyStruct extends Struct {
|
||||
final class MyStruct extends Struct {
|
||||
@Array.multi([-1])
|
||||
external Array<Uint8> a0;
|
||||
}
|
||||
''', [
|
||||
error(FfiCode.NON_POSITIVE_ARRAY_DIMENSION, 68, 2),
|
||||
error(FfiCode.NON_POSITIVE_ARRAY_DIMENSION, 74, 2),
|
||||
]);
|
||||
}
|
||||
|
||||
@@ -32,12 +32,12 @@ class MyStruct extends Struct {
|
||||
await assertErrorsInCode('''
|
||||
import "dart:ffi";
|
||||
|
||||
class MyStruct extends Struct {
|
||||
final class MyStruct extends Struct {
|
||||
@Array.multi([1, 2, 3, -4, 5, 6])
|
||||
external Array<Array<Array<Array<Array<Array<Uint8>>>>>> a0;
|
||||
}
|
||||
''', [
|
||||
error(FfiCode.NON_POSITIVE_ARRAY_DIMENSION, 77, 2),
|
||||
error(FfiCode.NON_POSITIVE_ARRAY_DIMENSION, 83, 2),
|
||||
]);
|
||||
}
|
||||
|
||||
@@ -45,7 +45,7 @@ class MyStruct extends Struct {
|
||||
await assertNoErrorsInCode('''
|
||||
import "dart:ffi";
|
||||
|
||||
class MyStruct extends Struct {
|
||||
final class MyStruct extends Struct {
|
||||
@Array.multi([1])
|
||||
external Array<Uint8> a0;
|
||||
}
|
||||
@@ -56,12 +56,12 @@ class MyStruct extends Struct {
|
||||
await assertErrorsInCode('''
|
||||
import "dart:ffi";
|
||||
|
||||
class MyStruct extends Struct {
|
||||
final class MyStruct extends Struct {
|
||||
@Array.multi([0])
|
||||
external Array<Uint8> a0;
|
||||
}
|
||||
''', [
|
||||
error(FfiCode.NON_POSITIVE_ARRAY_DIMENSION, 68, 1),
|
||||
error(FfiCode.NON_POSITIVE_ARRAY_DIMENSION, 74, 1),
|
||||
]);
|
||||
}
|
||||
|
||||
@@ -69,12 +69,12 @@ class MyStruct extends Struct {
|
||||
await assertErrorsInCode('''
|
||||
import "dart:ffi";
|
||||
|
||||
class MyStruct extends Struct {
|
||||
final class MyStruct extends Struct {
|
||||
@Array(-12)
|
||||
external Array<Uint8> a0;
|
||||
}
|
||||
''', [
|
||||
error(FfiCode.NON_POSITIVE_ARRAY_DIMENSION, 61, 3),
|
||||
error(FfiCode.NON_POSITIVE_ARRAY_DIMENSION, 67, 3),
|
||||
]);
|
||||
}
|
||||
|
||||
@@ -82,7 +82,7 @@ class MyStruct extends Struct {
|
||||
await assertNoErrorsInCode('''
|
||||
import "dart:ffi";
|
||||
|
||||
class MyStruct extends Struct {
|
||||
final class MyStruct extends Struct {
|
||||
@Array(1)
|
||||
external Array<Uint8> a0;
|
||||
}
|
||||
@@ -93,12 +93,12 @@ class MyStruct extends Struct {
|
||||
await assertErrorsInCode('''
|
||||
import "dart:ffi";
|
||||
|
||||
class MyStruct extends Struct {
|
||||
final class MyStruct extends Struct {
|
||||
@Array(0)
|
||||
external Array<Uint8> a0;
|
||||
}
|
||||
''', [
|
||||
error(FfiCode.NON_POSITIVE_ARRAY_DIMENSION, 61, 1),
|
||||
error(FfiCode.NON_POSITIVE_ARRAY_DIMENSION, 67, 1),
|
||||
]);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -19,12 +19,12 @@ class NonSizedTypeArgument extends PubPackageResolutionTest {
|
||||
await assertErrorsInCode(r'''
|
||||
import 'dart:ffi';
|
||||
|
||||
class C extends Struct {
|
||||
final class C extends Struct {
|
||||
@Array(8)
|
||||
external Array<Void> a0;
|
||||
}
|
||||
''', [
|
||||
error(FfiCode.NON_SIZED_TYPE_ARGUMENT, 74, 4),
|
||||
error(FfiCode.NON_SIZED_TYPE_ARGUMENT, 80, 4),
|
||||
]);
|
||||
}
|
||||
|
||||
@@ -32,12 +32,12 @@ class C extends Struct {
|
||||
await assertErrorsInCode(r'''
|
||||
import 'dart:ffi';
|
||||
|
||||
class C extends Union {
|
||||
final class C extends Union {
|
||||
@Array(8)
|
||||
external Array<Void> a0;
|
||||
}
|
||||
''', [
|
||||
error(FfiCode.NON_SIZED_TYPE_ARGUMENT, 73, 4),
|
||||
error(FfiCode.NON_SIZED_TYPE_ARGUMENT, 79, 4),
|
||||
]);
|
||||
}
|
||||
|
||||
@@ -45,7 +45,7 @@ class C extends Union {
|
||||
await assertNoErrorsInCode(r'''
|
||||
import 'dart:ffi';
|
||||
|
||||
class C extends Struct {
|
||||
final class C extends Struct {
|
||||
@Array(8)
|
||||
external Array<Uint8> a0;
|
||||
}
|
||||
|
||||
+1
-1
@@ -49,7 +49,7 @@ class A {
|
||||
await assertNoErrorsInCode('''
|
||||
import 'dart:ffi';
|
||||
|
||||
class A extends Struct {
|
||||
final class A extends Struct {
|
||||
@Double()
|
||||
external double foo;
|
||||
}
|
||||
|
||||
@@ -20,7 +20,7 @@ class PackedAnnotationAlignment extends PubPackageResolutionTest {
|
||||
import 'dart:ffi';
|
||||
|
||||
@Packed(3)
|
||||
class C extends Struct {
|
||||
final class C extends Struct {
|
||||
external Pointer<Uint8> notEmpty;
|
||||
}
|
||||
''', [
|
||||
@@ -33,7 +33,7 @@ class C extends Struct {
|
||||
import 'dart:ffi';
|
||||
|
||||
@Packed(1)
|
||||
class C extends Struct {
|
||||
final class C extends Struct {
|
||||
external Pointer<Uint8> notEmpty;
|
||||
}
|
||||
''');
|
||||
|
||||
@@ -22,7 +22,7 @@ import 'dart:ffi';
|
||||
|
||||
@Packed(1)
|
||||
@Packed(1)
|
||||
class C extends Struct {
|
||||
final class C extends Struct {
|
||||
external Pointer<Uint8> notEmpty;
|
||||
}
|
||||
''', [
|
||||
@@ -36,7 +36,7 @@ class C extends Struct {
|
||||
import 'dart:ffi';
|
||||
|
||||
@Packed()
|
||||
class C extends Struct {
|
||||
final class C extends Struct {
|
||||
external Pointer<Uint8> notEmpty;
|
||||
}
|
||||
''', [
|
||||
@@ -50,7 +50,7 @@ class C extends Struct {
|
||||
await assertNoErrorsInCode(r'''
|
||||
import 'dart:ffi';
|
||||
|
||||
class C extends Struct {
|
||||
final class C extends Struct {
|
||||
external Pointer<Uint8> notEmpty;
|
||||
}
|
||||
''');
|
||||
@@ -61,7 +61,7 @@ class C extends Struct {
|
||||
import 'dart:ffi';
|
||||
|
||||
@Packed(1)
|
||||
class C extends Struct {
|
||||
final class C extends Struct {
|
||||
external Pointer<Uint8> notEmpty;
|
||||
}
|
||||
''');
|
||||
@@ -72,7 +72,7 @@ class C extends Struct {
|
||||
await assertNoErrorsInCode(r'''
|
||||
import 'dart:ffi';
|
||||
|
||||
class C extends Union {
|
||||
final class C extends Union {
|
||||
external Pointer<Uint8> notEmpty;
|
||||
}
|
||||
''');
|
||||
@@ -84,7 +84,7 @@ class C extends Union {
|
||||
import 'dart:ffi';
|
||||
|
||||
@Packed(1)
|
||||
class C extends Union {
|
||||
final class C extends Union {
|
||||
external Pointer<Uint8> notEmpty;
|
||||
}
|
||||
''');
|
||||
@@ -97,7 +97,7 @@ import 'dart:ffi';
|
||||
|
||||
@Packed(1)
|
||||
@Packed(1)
|
||||
class C extends Union {
|
||||
final class C extends Union {
|
||||
external Pointer<Uint8> notEmpty;
|
||||
}
|
||||
''');
|
||||
|
||||
@@ -19,12 +19,12 @@ class SizeAnnotationDimensions extends PubPackageResolutionTest {
|
||||
await assertErrorsInCode(r'''
|
||||
import 'dart:ffi';
|
||||
|
||||
class C extends Struct {
|
||||
final class C extends Struct {
|
||||
@Array(8, 8)
|
||||
external Array<Array<Array<Uint8>>> a0;
|
||||
}
|
||||
''', [
|
||||
error(FfiCode.SIZE_ANNOTATION_DIMENSIONS, 47, 12),
|
||||
error(FfiCode.SIZE_ANNOTATION_DIMENSIONS, 53, 12),
|
||||
]);
|
||||
}
|
||||
|
||||
@@ -32,12 +32,12 @@ class C extends Struct {
|
||||
await assertErrorsInCode(r'''
|
||||
import 'dart:ffi';
|
||||
|
||||
class C extends Struct {
|
||||
final class C extends Struct {
|
||||
@Array(8, 8, 8)
|
||||
external Array<Array<Uint8>> a0;
|
||||
}
|
||||
''', [
|
||||
error(FfiCode.SIZE_ANNOTATION_DIMENSIONS, 47, 15),
|
||||
error(FfiCode.SIZE_ANNOTATION_DIMENSIONS, 53, 15),
|
||||
]);
|
||||
}
|
||||
|
||||
@@ -45,12 +45,12 @@ class C extends Struct {
|
||||
await assertErrorsInCode(r'''
|
||||
import 'dart:ffi';
|
||||
|
||||
class C extends Struct {
|
||||
final class C extends Struct {
|
||||
@Array.multi([8, 8])
|
||||
external Array<Array<Array<Uint8>>> a0;
|
||||
}
|
||||
''', [
|
||||
error(FfiCode.SIZE_ANNOTATION_DIMENSIONS, 47, 20),
|
||||
error(FfiCode.SIZE_ANNOTATION_DIMENSIONS, 53, 20),
|
||||
]);
|
||||
}
|
||||
|
||||
@@ -58,7 +58,7 @@ class C extends Struct {
|
||||
await assertNoErrorsInCode(r'''
|
||||
import 'dart:ffi';
|
||||
|
||||
class C extends Struct {
|
||||
final class C extends Struct {
|
||||
@Array(8, 8)
|
||||
external Array<Array<Uint8>> a0;
|
||||
}
|
||||
|
||||
@@ -21,9 +21,11 @@ class SubtypeOfFfiClassInExtendsTest extends PubPackageResolutionTest {
|
||||
test_Double() async {
|
||||
await assertErrorsInCode(r'''
|
||||
import 'dart:ffi';
|
||||
class C extends Double {}
|
||||
final class C extends Double {}
|
||||
''', [
|
||||
error(FfiCode.SUBTYPE_OF_FFI_CLASS_IN_EXTENDS, 35, 6),
|
||||
error(
|
||||
CompileTimeErrorCode.FINAL_CLASS_EXTENDED_OUTSIDE_OF_LIBRARY, 41, 6),
|
||||
error(FfiCode.SUBTYPE_OF_FFI_CLASS_IN_EXTENDS, 41, 6),
|
||||
]);
|
||||
}
|
||||
|
||||
@@ -43,6 +45,8 @@ class C extends Finalizable {}
|
||||
import 'dart:ffi';
|
||||
class C extends Float {}
|
||||
''', [
|
||||
error(
|
||||
CompileTimeErrorCode.FINAL_CLASS_EXTENDED_OUTSIDE_OF_LIBRARY, 35, 5),
|
||||
error(FfiCode.SUBTYPE_OF_FFI_CLASS_IN_EXTENDS, 35, 5),
|
||||
]);
|
||||
}
|
||||
@@ -52,6 +56,8 @@ class C extends Float {}
|
||||
import 'dart:ffi';
|
||||
class C extends Int16 {}
|
||||
''', [
|
||||
error(
|
||||
CompileTimeErrorCode.FINAL_CLASS_EXTENDED_OUTSIDE_OF_LIBRARY, 35, 5),
|
||||
error(FfiCode.SUBTYPE_OF_FFI_CLASS_IN_EXTENDS, 35, 5),
|
||||
]);
|
||||
}
|
||||
@@ -61,6 +67,8 @@ class C extends Int16 {}
|
||||
import 'dart:ffi';
|
||||
class C extends Int32 {}
|
||||
''', [
|
||||
error(
|
||||
CompileTimeErrorCode.FINAL_CLASS_EXTENDED_OUTSIDE_OF_LIBRARY, 35, 5),
|
||||
error(FfiCode.SUBTYPE_OF_FFI_CLASS_IN_EXTENDS, 35, 5),
|
||||
]);
|
||||
}
|
||||
@@ -70,6 +78,8 @@ class C extends Int32 {}
|
||||
import 'dart:ffi';
|
||||
class C extends Int64 {}
|
||||
''', [
|
||||
error(
|
||||
CompileTimeErrorCode.FINAL_CLASS_EXTENDED_OUTSIDE_OF_LIBRARY, 35, 5),
|
||||
error(FfiCode.SUBTYPE_OF_FFI_CLASS_IN_EXTENDS, 35, 5),
|
||||
]);
|
||||
}
|
||||
@@ -79,6 +89,8 @@ class C extends Int64 {}
|
||||
import 'dart:ffi';
|
||||
class C extends Int8 {}
|
||||
''', [
|
||||
error(
|
||||
CompileTimeErrorCode.FINAL_CLASS_EXTENDED_OUTSIDE_OF_LIBRARY, 35, 4),
|
||||
error(FfiCode.SUBTYPE_OF_FFI_CLASS_IN_EXTENDS, 35, 4),
|
||||
]);
|
||||
}
|
||||
@@ -90,6 +102,8 @@ class C extends Pointer {
|
||||
external factory C();
|
||||
}
|
||||
''', [
|
||||
error(
|
||||
CompileTimeErrorCode.FINAL_CLASS_EXTENDED_OUTSIDE_OF_LIBRARY, 35, 7),
|
||||
error(FfiCode.SUBTYPE_OF_FFI_CLASS_IN_EXTENDS, 35, 7),
|
||||
]);
|
||||
}
|
||||
@@ -97,7 +111,7 @@ class C extends Pointer {
|
||||
test_Struct() async {
|
||||
await assertNoErrorsInCode(r'''
|
||||
import 'dart:ffi';
|
||||
class C extends Struct {
|
||||
final class C extends Struct {
|
||||
external Pointer notEmpty;
|
||||
}
|
||||
''');
|
||||
@@ -108,6 +122,8 @@ class C extends Struct {
|
||||
import 'dart:ffi';
|
||||
class C extends Uint16 {}
|
||||
''', [
|
||||
error(
|
||||
CompileTimeErrorCode.FINAL_CLASS_EXTENDED_OUTSIDE_OF_LIBRARY, 35, 6),
|
||||
error(FfiCode.SUBTYPE_OF_FFI_CLASS_IN_EXTENDS, 35, 6),
|
||||
]);
|
||||
}
|
||||
@@ -117,6 +133,8 @@ class C extends Uint16 {}
|
||||
import 'dart:ffi';
|
||||
class C extends Uint32 {}
|
||||
''', [
|
||||
error(
|
||||
CompileTimeErrorCode.FINAL_CLASS_EXTENDED_OUTSIDE_OF_LIBRARY, 35, 6),
|
||||
error(FfiCode.SUBTYPE_OF_FFI_CLASS_IN_EXTENDS, 35, 6),
|
||||
]);
|
||||
}
|
||||
@@ -126,6 +144,8 @@ class C extends Uint32 {}
|
||||
import 'dart:ffi';
|
||||
class C extends Uint64 {}
|
||||
''', [
|
||||
error(
|
||||
CompileTimeErrorCode.FINAL_CLASS_EXTENDED_OUTSIDE_OF_LIBRARY, 35, 6),
|
||||
error(FfiCode.SUBTYPE_OF_FFI_CLASS_IN_EXTENDS, 35, 6),
|
||||
]);
|
||||
}
|
||||
@@ -135,6 +155,8 @@ class C extends Uint64 {}
|
||||
import 'dart:ffi';
|
||||
class C extends Uint8 {}
|
||||
''', [
|
||||
error(
|
||||
CompileTimeErrorCode.FINAL_CLASS_EXTENDED_OUTSIDE_OF_LIBRARY, 35, 5),
|
||||
error(FfiCode.SUBTYPE_OF_FFI_CLASS_IN_EXTENDS, 35, 5),
|
||||
]);
|
||||
}
|
||||
@@ -142,7 +164,7 @@ class C extends Uint8 {}
|
||||
test_Union() async {
|
||||
await assertNoErrorsInCode(r'''
|
||||
import 'dart:ffi';
|
||||
class C extends Union {
|
||||
final class C extends Union {
|
||||
external Pointer notEmpty;
|
||||
}
|
||||
''');
|
||||
@@ -153,6 +175,8 @@ class C extends Union {
|
||||
import 'dart:ffi';
|
||||
class C extends Void {}
|
||||
''', [
|
||||
error(
|
||||
CompileTimeErrorCode.FINAL_CLASS_EXTENDED_OUTSIDE_OF_LIBRARY, 35, 4),
|
||||
error(FfiCode.SUBTYPE_OF_FFI_CLASS_IN_EXTENDS, 35, 4),
|
||||
]);
|
||||
}
|
||||
@@ -165,6 +189,8 @@ class SubtypeOfFfiClassInImplementsTest extends PubPackageResolutionTest {
|
||||
import 'dart:ffi';
|
||||
class C implements Double {}
|
||||
''', [
|
||||
error(CompileTimeErrorCode.FINAL_CLASS_IMPLEMENTED_OUTSIDE_OF_LIBRARY, 38,
|
||||
6),
|
||||
error(FfiCode.SUBTYPE_OF_FFI_CLASS_IN_IMPLEMENTS, 38, 6,
|
||||
messageContains: ["class 'C'", "implement 'Double'"]),
|
||||
]);
|
||||
@@ -175,6 +201,8 @@ class C implements Double {}
|
||||
import 'dart:ffi' as ffi;
|
||||
class C implements ffi.Double {}
|
||||
''', [
|
||||
error(CompileTimeErrorCode.FINAL_CLASS_IMPLEMENTED_OUTSIDE_OF_LIBRARY, 45,
|
||||
10),
|
||||
error(FfiCode.SUBTYPE_OF_FFI_CLASS_IN_IMPLEMENTS, 45, 10,
|
||||
messageContains: ["class 'C'", "implement 'ffi.Double'"]),
|
||||
]);
|
||||
@@ -192,6 +220,8 @@ class C implements Finalizable {}
|
||||
import 'dart:ffi';
|
||||
class C implements Float {}
|
||||
''', [
|
||||
error(CompileTimeErrorCode.FINAL_CLASS_IMPLEMENTED_OUTSIDE_OF_LIBRARY, 38,
|
||||
5),
|
||||
error(FfiCode.SUBTYPE_OF_FFI_CLASS_IN_IMPLEMENTS, 38, 5),
|
||||
]);
|
||||
}
|
||||
@@ -201,6 +231,8 @@ class C implements Float {}
|
||||
import 'dart:ffi';
|
||||
class C implements Int16 {}
|
||||
''', [
|
||||
error(CompileTimeErrorCode.FINAL_CLASS_IMPLEMENTED_OUTSIDE_OF_LIBRARY, 38,
|
||||
5),
|
||||
error(FfiCode.SUBTYPE_OF_FFI_CLASS_IN_IMPLEMENTS, 38, 5),
|
||||
]);
|
||||
}
|
||||
@@ -210,6 +242,8 @@ class C implements Int16 {}
|
||||
import 'dart:ffi';
|
||||
class C implements Int32 {}
|
||||
''', [
|
||||
error(CompileTimeErrorCode.FINAL_CLASS_IMPLEMENTED_OUTSIDE_OF_LIBRARY, 38,
|
||||
5),
|
||||
error(FfiCode.SUBTYPE_OF_FFI_CLASS_IN_IMPLEMENTS, 38, 5),
|
||||
]);
|
||||
}
|
||||
@@ -219,6 +253,8 @@ class C implements Int32 {}
|
||||
import 'dart:ffi';
|
||||
class C implements Int64 {}
|
||||
''', [
|
||||
error(CompileTimeErrorCode.FINAL_CLASS_IMPLEMENTED_OUTSIDE_OF_LIBRARY, 38,
|
||||
5),
|
||||
error(FfiCode.SUBTYPE_OF_FFI_CLASS_IN_IMPLEMENTS, 38, 5),
|
||||
]);
|
||||
}
|
||||
@@ -228,6 +264,8 @@ class C implements Int64 {}
|
||||
import 'dart:ffi';
|
||||
class C implements Int8 {}
|
||||
''', [
|
||||
error(CompileTimeErrorCode.FINAL_CLASS_IMPLEMENTED_OUTSIDE_OF_LIBRARY, 38,
|
||||
4),
|
||||
error(FfiCode.SUBTYPE_OF_FFI_CLASS_IN_IMPLEMENTS, 38, 4),
|
||||
]);
|
||||
}
|
||||
@@ -237,6 +275,8 @@ class C implements Int8 {}
|
||||
import 'dart:ffi';
|
||||
class C implements Pointer {}
|
||||
''', [
|
||||
error(CompileTimeErrorCode.FINAL_CLASS_IMPLEMENTED_OUTSIDE_OF_LIBRARY, 38,
|
||||
7),
|
||||
error(FfiCode.SUBTYPE_OF_FFI_CLASS_IN_IMPLEMENTS, 38, 7),
|
||||
]);
|
||||
}
|
||||
@@ -244,9 +284,11 @@ class C implements Pointer {}
|
||||
test_Struct() async {
|
||||
await assertErrorsInCode(r'''
|
||||
import 'dart:ffi';
|
||||
class C implements Struct {}
|
||||
final class C implements Struct {}
|
||||
''', [
|
||||
error(FfiCode.SUBTYPE_OF_FFI_CLASS_IN_IMPLEMENTS, 38, 6),
|
||||
error(CompileTimeErrorCode.BASE_CLASS_IMPLEMENTED_OUTSIDE_OF_LIBRARY, 44,
|
||||
6),
|
||||
error(FfiCode.SUBTYPE_OF_FFI_CLASS_IN_IMPLEMENTS, 44, 6),
|
||||
]);
|
||||
}
|
||||
|
||||
@@ -255,6 +297,8 @@ class C implements Struct {}
|
||||
import 'dart:ffi';
|
||||
class C implements Uint16 {}
|
||||
''', [
|
||||
error(CompileTimeErrorCode.FINAL_CLASS_IMPLEMENTED_OUTSIDE_OF_LIBRARY, 38,
|
||||
6),
|
||||
error(FfiCode.SUBTYPE_OF_FFI_CLASS_IN_IMPLEMENTS, 38, 6),
|
||||
]);
|
||||
}
|
||||
@@ -264,6 +308,8 @@ class C implements Uint16 {}
|
||||
import 'dart:ffi';
|
||||
class C implements Uint32 {}
|
||||
''', [
|
||||
error(CompileTimeErrorCode.FINAL_CLASS_IMPLEMENTED_OUTSIDE_OF_LIBRARY, 38,
|
||||
6),
|
||||
error(FfiCode.SUBTYPE_OF_FFI_CLASS_IN_IMPLEMENTS, 38, 6),
|
||||
]);
|
||||
}
|
||||
@@ -273,6 +319,8 @@ class C implements Uint32 {}
|
||||
import 'dart:ffi';
|
||||
class C implements Uint64 {}
|
||||
''', [
|
||||
error(CompileTimeErrorCode.FINAL_CLASS_IMPLEMENTED_OUTSIDE_OF_LIBRARY, 38,
|
||||
6),
|
||||
error(FfiCode.SUBTYPE_OF_FFI_CLASS_IN_IMPLEMENTS, 38, 6),
|
||||
]);
|
||||
}
|
||||
@@ -282,6 +330,8 @@ class C implements Uint64 {}
|
||||
import 'dart:ffi';
|
||||
class C implements Uint8 {}
|
||||
''', [
|
||||
error(CompileTimeErrorCode.FINAL_CLASS_IMPLEMENTED_OUTSIDE_OF_LIBRARY, 38,
|
||||
5),
|
||||
error(FfiCode.SUBTYPE_OF_FFI_CLASS_IN_IMPLEMENTS, 38, 5),
|
||||
]);
|
||||
}
|
||||
@@ -289,9 +339,11 @@ class C implements Uint8 {}
|
||||
test_Union() async {
|
||||
await assertErrorsInCode(r'''
|
||||
import 'dart:ffi';
|
||||
class C implements Union {}
|
||||
final class C implements Union {}
|
||||
''', [
|
||||
error(FfiCode.SUBTYPE_OF_FFI_CLASS_IN_IMPLEMENTS, 38, 5),
|
||||
error(CompileTimeErrorCode.BASE_CLASS_IMPLEMENTED_OUTSIDE_OF_LIBRARY, 44,
|
||||
5),
|
||||
error(FfiCode.SUBTYPE_OF_FFI_CLASS_IN_IMPLEMENTS, 44, 5),
|
||||
]);
|
||||
}
|
||||
|
||||
@@ -300,6 +352,8 @@ class C implements Union {}
|
||||
import 'dart:ffi';
|
||||
class C implements Void {}
|
||||
''', [
|
||||
error(CompileTimeErrorCode.FINAL_CLASS_IMPLEMENTED_OUTSIDE_OF_LIBRARY, 38,
|
||||
4),
|
||||
error(FfiCode.SUBTYPE_OF_FFI_CLASS_IN_IMPLEMENTS, 38, 4),
|
||||
]);
|
||||
}
|
||||
@@ -399,10 +453,10 @@ class C with Pointer {}
|
||||
test_Struct() async {
|
||||
await assertErrorsInCode(r'''
|
||||
import 'dart:ffi';
|
||||
class C with Struct {}
|
||||
final class C with Struct {}
|
||||
''', [
|
||||
error(CompileTimeErrorCode.MIXIN_INHERITS_FROM_NOT_OBJECT, 32, 6),
|
||||
error(FfiCode.SUBTYPE_OF_FFI_CLASS_IN_WITH, 32, 6),
|
||||
error(CompileTimeErrorCode.MIXIN_INHERITS_FROM_NOT_OBJECT, 38, 6),
|
||||
error(FfiCode.SUBTYPE_OF_FFI_CLASS_IN_WITH, 38, 6),
|
||||
]);
|
||||
}
|
||||
|
||||
@@ -453,10 +507,10 @@ class C with Uint8 {}
|
||||
test_Union() async {
|
||||
await assertErrorsInCode(r'''
|
||||
import 'dart:ffi';
|
||||
class C with Union {}
|
||||
final class C with Union {}
|
||||
''', [
|
||||
error(CompileTimeErrorCode.MIXIN_INHERITS_FROM_NOT_OBJECT, 32, 5),
|
||||
error(FfiCode.SUBTYPE_OF_FFI_CLASS_IN_WITH, 32, 5),
|
||||
error(CompileTimeErrorCode.MIXIN_INHERITS_FROM_NOT_OBJECT, 38, 5),
|
||||
error(FfiCode.SUBTYPE_OF_FFI_CLASS_IN_WITH, 38, 5),
|
||||
]);
|
||||
}
|
||||
|
||||
|
||||
@@ -21,24 +21,24 @@ class SubtypeOfStructClassInExtendsTest extends PubPackageResolutionTest {
|
||||
test_extends_struct() async {
|
||||
await assertErrorsInCode(r'''
|
||||
import 'dart:ffi';
|
||||
class S extends Struct {
|
||||
final class S extends Struct {
|
||||
external Pointer notEmpty;
|
||||
}
|
||||
class C extends S {}
|
||||
final class C extends S {}
|
||||
''', [
|
||||
error(FfiCode.SUBTYPE_OF_STRUCT_CLASS_IN_EXTENDS, 91, 1),
|
||||
error(FfiCode.SUBTYPE_OF_STRUCT_CLASS_IN_EXTENDS, 103, 1),
|
||||
]);
|
||||
}
|
||||
|
||||
test_extends_union() async {
|
||||
await assertErrorsInCode(r'''
|
||||
import 'dart:ffi';
|
||||
class S extends Union {
|
||||
final class S extends Union {
|
||||
external Pointer notEmpty;
|
||||
}
|
||||
class C extends S {}
|
||||
final class C extends S {}
|
||||
''', [
|
||||
error(FfiCode.SUBTYPE_OF_STRUCT_CLASS_IN_EXTENDS, 90, 1),
|
||||
error(FfiCode.SUBTYPE_OF_STRUCT_CLASS_IN_EXTENDS, 102, 1),
|
||||
]);
|
||||
}
|
||||
}
|
||||
@@ -51,25 +51,25 @@ import 'dart:ffi';
|
||||
@AbiSpecificIntegerMapping({
|
||||
Abi.androidArm: Uint32(),
|
||||
})
|
||||
class AbiSpecificInteger1 extends AbiSpecificInteger {
|
||||
final class AbiSpecificInteger1 extends AbiSpecificInteger {
|
||||
const AbiSpecificInteger1();
|
||||
}
|
||||
class AbiSpecificInteger4 implements AbiSpecificInteger1 {
|
||||
final class AbiSpecificInteger4 implements AbiSpecificInteger1 {
|
||||
const AbiSpecificInteger4();
|
||||
}
|
||||
''', [
|
||||
error(FfiCode.SUBTYPE_OF_STRUCT_CLASS_IN_IMPLEMENTS, 204, 19),
|
||||
error(FfiCode.SUBTYPE_OF_STRUCT_CLASS_IN_IMPLEMENTS, 216, 19),
|
||||
]);
|
||||
}
|
||||
|
||||
test_implements_struct() async {
|
||||
await assertErrorsInCode(r'''
|
||||
import 'dart:ffi';
|
||||
class S extends Struct {}
|
||||
class C implements S {}
|
||||
final class S extends Struct {}
|
||||
final class C implements S {}
|
||||
''', [
|
||||
error(FfiCode.EMPTY_STRUCT, 25, 1),
|
||||
error(FfiCode.SUBTYPE_OF_STRUCT_CLASS_IN_IMPLEMENTS, 64, 1,
|
||||
error(FfiCode.EMPTY_STRUCT, 31, 1),
|
||||
error(FfiCode.SUBTYPE_OF_STRUCT_CLASS_IN_IMPLEMENTS, 76, 1,
|
||||
messageContains: ["class 'C'", "implement 'S'"]),
|
||||
]);
|
||||
}
|
||||
@@ -77,25 +77,26 @@ class C implements S {}
|
||||
test_implements_struct_prefixed() async {
|
||||
newFile('$testPackageLibPath/lib1.dart', '''
|
||||
import 'dart:ffi';
|
||||
class S extends Struct {}
|
||||
final class S extends Struct {}
|
||||
''');
|
||||
await assertErrorsInCode(r'''
|
||||
import 'lib1.dart' as lib1;
|
||||
class C implements lib1.S {}
|
||||
''', [
|
||||
error(FfiCode.SUBTYPE_OF_STRUCT_CLASS_IN_IMPLEMENTS, 47, 6,
|
||||
messageContains: ["class 'C'", "implement 'lib1.S'"]),
|
||||
error(CompileTimeErrorCode.FINAL_CLASS_IMPLEMENTED_OUTSIDE_OF_LIBRARY, 47,
|
||||
6),
|
||||
error(FfiCode.SUBTYPE_OF_STRUCT_CLASS_IN_IMPLEMENTS, 47, 6),
|
||||
]);
|
||||
}
|
||||
|
||||
test_implements_union() async {
|
||||
await assertErrorsInCode(r'''
|
||||
import 'dart:ffi';
|
||||
class S extends Union {}
|
||||
class C implements S {}
|
||||
final class S extends Union {}
|
||||
final class C implements S {}
|
||||
''', [
|
||||
error(FfiCode.EMPTY_STRUCT, 25, 1),
|
||||
error(FfiCode.SUBTYPE_OF_STRUCT_CLASS_IN_IMPLEMENTS, 63, 1),
|
||||
error(FfiCode.EMPTY_STRUCT, 31, 1),
|
||||
error(FfiCode.SUBTYPE_OF_STRUCT_CLASS_IN_IMPLEMENTS, 75, 1),
|
||||
]);
|
||||
}
|
||||
}
|
||||
@@ -105,12 +106,12 @@ class SubtypeOfStructClassInWithTest extends PubPackageResolutionTest {
|
||||
test_with_struct() async {
|
||||
await assertErrorsInCode(r'''
|
||||
import 'dart:ffi';
|
||||
class S extends Struct {}
|
||||
class C with S {}
|
||||
final class S extends Struct {}
|
||||
final class C with S {}
|
||||
''', [
|
||||
error(FfiCode.EMPTY_STRUCT, 25, 1),
|
||||
error(CompileTimeErrorCode.MIXIN_INHERITS_FROM_NOT_OBJECT, 58, 1),
|
||||
error(FfiCode.SUBTYPE_OF_STRUCT_CLASS_IN_WITH, 58, 1,
|
||||
error(FfiCode.EMPTY_STRUCT, 31, 1),
|
||||
error(CompileTimeErrorCode.MIXIN_INHERITS_FROM_NOT_OBJECT, 70, 1),
|
||||
error(FfiCode.SUBTYPE_OF_STRUCT_CLASS_IN_WITH, 70, 1,
|
||||
messageContains: ["class 'C'", "mix in 'S'"]),
|
||||
]);
|
||||
}
|
||||
@@ -118,7 +119,7 @@ class C with S {}
|
||||
test_with_struct_prefixed() async {
|
||||
newFile('$testPackageLibPath/lib1.dart', '''
|
||||
import 'dart:ffi';
|
||||
class S extends Struct {}
|
||||
final class S extends Struct {}
|
||||
''');
|
||||
await assertErrorsInCode(r'''
|
||||
import 'lib1.dart' as lib1;
|
||||
@@ -134,12 +135,12 @@ class C with lib1.S {}
|
||||
test_with_union() async {
|
||||
await assertErrorsInCode(r'''
|
||||
import 'dart:ffi';
|
||||
class S extends Union {}
|
||||
class C with S {}
|
||||
final class S extends Union {}
|
||||
final class C with S {}
|
||||
''', [
|
||||
error(FfiCode.EMPTY_STRUCT, 25, 1),
|
||||
error(CompileTimeErrorCode.MIXIN_INHERITS_FROM_NOT_OBJECT, 57, 1),
|
||||
error(FfiCode.SUBTYPE_OF_STRUCT_CLASS_IN_WITH, 57, 1),
|
||||
error(FfiCode.EMPTY_STRUCT, 31, 1),
|
||||
error(CompileTimeErrorCode.MIXIN_INHERITS_FROM_NOT_OBJECT, 69, 1),
|
||||
error(FfiCode.SUBTYPE_OF_STRUCT_CLASS_IN_WITH, 69, 1),
|
||||
]);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -91,6 +91,9 @@ class DocumentationValidator {
|
||||
'FfiCode.FIELD_INITIALIZER_IN_STRUCT',
|
||||
// This is not reported after 2.12, and the examples don't compile after 3.0.
|
||||
'FfiCode.FIELD_IN_STRUCT_WITH_INITIALIZER',
|
||||
// The examples has more than one error message in 3.0.
|
||||
// Also: CompileTimeErrorCode.FINAL_CLASS_EXTENDED_OUTSIDE_OF_LIBRARY.
|
||||
'FfiCode.SUBTYPE_OF_FFI_CLASS_IN_EXTENDS',
|
||||
|
||||
// This no longer works in 3.0.
|
||||
'HintCode.DEPRECATED_COLON_FOR_DEFAULT_VALUE',
|
||||
|
||||
@@ -321,7 +321,7 @@ define a const constructor:
|
||||
import 'dart:ffi';
|
||||
|
||||
@AbiSpecificIntegerMapping({Abi.macosX64 : Int8()})
|
||||
class [!C!] extends AbiSpecificInteger {
|
||||
final class [!C!] extends AbiSpecificInteger {
|
||||
}
|
||||
{% endprettify %}
|
||||
|
||||
@@ -332,7 +332,7 @@ a `const` constructor:
|
||||
import 'dart:ffi';
|
||||
|
||||
@AbiSpecificIntegerMapping({Abi.macosX64 : Int8()})
|
||||
class [!C!] extends AbiSpecificInteger {
|
||||
final class [!C!] extends AbiSpecificInteger {
|
||||
C();
|
||||
}
|
||||
{% endprettify %}
|
||||
@@ -344,7 +344,7 @@ multiple constructors:
|
||||
import 'dart:ffi';
|
||||
|
||||
@AbiSpecificIntegerMapping({Abi.macosX64 : Int8()})
|
||||
class [!C!] extends AbiSpecificInteger {
|
||||
final class [!C!] extends AbiSpecificInteger {
|
||||
const C.zero();
|
||||
const C.one();
|
||||
}
|
||||
@@ -357,7 +357,7 @@ a field:
|
||||
import 'dart:ffi';
|
||||
|
||||
@AbiSpecificIntegerMapping({Abi.macosX64 : Int8()})
|
||||
class [!C!] extends AbiSpecificInteger {
|
||||
final class [!C!] extends AbiSpecificInteger {
|
||||
final int i;
|
||||
|
||||
const C(this.i);
|
||||
@@ -371,7 +371,7 @@ type parameter:
|
||||
import 'dart:ffi';
|
||||
|
||||
@AbiSpecificIntegerMapping({Abi.macosX64 : Int8()})
|
||||
class [!C!]<T> extends AbiSpecificInteger { // type parameters
|
||||
final class [!C!]<T> extends AbiSpecificInteger { // type parameters
|
||||
const C();
|
||||
}
|
||||
{% endprettify %}
|
||||
@@ -385,7 +385,7 @@ parameters and a single member that is a `const` constructor:
|
||||
import 'dart:ffi';
|
||||
|
||||
@AbiSpecificIntegerMapping({Abi.macosX64 : Int8()})
|
||||
class C extends AbiSpecificInteger {
|
||||
final class C extends AbiSpecificInteger {
|
||||
const C();
|
||||
}
|
||||
{% endprettify %}
|
||||
@@ -411,7 +411,7 @@ import 'dart:ffi';
|
||||
|
||||
@AbiSpecificIntegerMapping({Abi.macosX64 : Int8()})
|
||||
@[!AbiSpecificIntegerMapping!]({Abi.linuxX64 : Uint16()})
|
||||
class C extends AbiSpecificInteger {
|
||||
final class C extends AbiSpecificInteger {
|
||||
const C();
|
||||
}
|
||||
{% endprettify %}
|
||||
@@ -425,7 +425,7 @@ appropriate:
|
||||
import 'dart:ffi';
|
||||
|
||||
@AbiSpecificIntegerMapping({Abi.macosX64 : Int8(), Abi.linuxX64 : Uint16()})
|
||||
class C extends AbiSpecificInteger {
|
||||
final class C extends AbiSpecificInteger {
|
||||
const C();
|
||||
}
|
||||
{% endprettify %}
|
||||
@@ -449,7 +449,7 @@ The following code produces this diagnostic because there's no
|
||||
{% prettify dart tag=pre+code %}
|
||||
import 'dart:ffi';
|
||||
|
||||
class [!C!] extends AbiSpecificInteger {
|
||||
final class [!C!] extends AbiSpecificInteger {
|
||||
const C();
|
||||
}
|
||||
{% endprettify %}
|
||||
@@ -462,7 +462,7 @@ Add an `AbiSpecificIntegerMapping` annotation to the class:
|
||||
import 'dart:ffi';
|
||||
|
||||
@AbiSpecificIntegerMapping({Abi.macosX64 : Int8()})
|
||||
class C extends AbiSpecificInteger {
|
||||
final class C extends AbiSpecificInteger {
|
||||
const C();
|
||||
}
|
||||
{% endprettify %}
|
||||
@@ -495,7 +495,7 @@ entry is `Array<Uint8>`, which isn't a valid integer type:
|
||||
import 'dart:ffi';
|
||||
|
||||
@AbiSpecificIntegerMapping({Abi.macosX64 : [!Array<Uint8>(4)!]})
|
||||
class C extends AbiSpecificInteger {
|
||||
final class C extends AbiSpecificInteger {
|
||||
const C();
|
||||
}
|
||||
{% endprettify %}
|
||||
@@ -508,7 +508,7 @@ Use one of the valid types as a value in the map:
|
||||
import 'dart:ffi';
|
||||
|
||||
@AbiSpecificIntegerMapping({Abi.macosX64 : Int8()})
|
||||
class C extends AbiSpecificInteger {
|
||||
final class C extends AbiSpecificInteger {
|
||||
const C();
|
||||
}
|
||||
{% endprettify %}
|
||||
@@ -914,7 +914,7 @@ annotation `@Double()`:
|
||||
{% prettify dart tag=pre+code %}
|
||||
import 'dart:ffi';
|
||||
|
||||
class C extends Struct {
|
||||
final class C extends Struct {
|
||||
[!@Double()!]
|
||||
external Pointer<Int8> p;
|
||||
}
|
||||
@@ -927,7 +927,7 @@ Remove the annotations from the field:
|
||||
{% prettify dart tag=pre+code %}
|
||||
import 'dart:ffi';
|
||||
|
||||
class C extends Struct {
|
||||
final class C extends Struct {
|
||||
external Pointer<Int8> p;
|
||||
}
|
||||
{% endprettify %}
|
||||
@@ -2353,7 +2353,7 @@ implements `Finalizable`:
|
||||
{% prettify dart tag=pre+code %}
|
||||
import 'dart:ffi';
|
||||
|
||||
class [!S!] extends Struct implements Finalizable {
|
||||
final class [!S!] extends Struct implements Finalizable {
|
||||
external Pointer notEmpty;
|
||||
}
|
||||
{% endprettify %}
|
||||
@@ -2365,7 +2365,7 @@ Try removing the implements clause from the class:
|
||||
{% prettify dart tag=pre+code %}
|
||||
import 'dart:ffi';
|
||||
|
||||
class S extends Struct {
|
||||
final class S extends Struct {
|
||||
external Pointer notEmpty;
|
||||
}
|
||||
{% endprettify %}
|
||||
@@ -3372,7 +3372,7 @@ instantiated using a generative constructor:
|
||||
{% prettify dart tag=pre+code %}
|
||||
import 'dart:ffi';
|
||||
|
||||
class C extends Struct {
|
||||
final class C extends Struct {
|
||||
@Int32()
|
||||
external int a;
|
||||
}
|
||||
@@ -3391,7 +3391,7 @@ If you need to allocate the structure described by the class, then use the
|
||||
import 'dart:ffi';
|
||||
import 'package:ffi/ffi.dart';
|
||||
|
||||
class C extends Struct {
|
||||
final class C extends Struct {
|
||||
@Int32()
|
||||
external int a;
|
||||
}
|
||||
@@ -4734,7 +4734,7 @@ extends `Struct`, doesn't declare any fields:
|
||||
{% prettify dart tag=pre+code %}
|
||||
import 'dart:ffi';
|
||||
|
||||
class [!C!] extends Struct {}
|
||||
final class [!C!] extends Struct {}
|
||||
{% endprettify %}
|
||||
|
||||
#### Common fixes
|
||||
@@ -4744,7 +4744,7 @@ If the class is intended to be a struct, then declare one or more fields:
|
||||
{% prettify dart tag=pre+code %}
|
||||
import 'dart:ffi';
|
||||
|
||||
class C extends Struct {
|
||||
final class C extends Struct {
|
||||
@Int32()
|
||||
external int x;
|
||||
}
|
||||
@@ -4756,7 +4756,7 @@ make it a subclass of `Opaque`:
|
||||
{% prettify dart tag=pre+code %}
|
||||
import 'dart:ffi';
|
||||
|
||||
class C extends Opaque {}
|
||||
final class C extends Opaque {}
|
||||
{% endprettify %}
|
||||
|
||||
If the class isn't intended to be a struct, then remove or change the
|
||||
@@ -5792,7 +5792,7 @@ annotations describing the native type of the field:
|
||||
{% prettify dart tag=pre+code %}
|
||||
import 'dart:ffi';
|
||||
|
||||
class C extends Struct {
|
||||
final class C extends Struct {
|
||||
@Int32()
|
||||
[!@Int16()!]
|
||||
external int x;
|
||||
@@ -5805,7 +5805,7 @@ Remove all but one of the annotations:
|
||||
|
||||
{% prettify dart tag=pre+code %}
|
||||
import 'dart:ffi';
|
||||
class C extends Struct {
|
||||
final class C extends Struct {
|
||||
@Int32()
|
||||
external int x;
|
||||
}
|
||||
@@ -5908,7 +5908,7 @@ annotations that specify the size of the native array:
|
||||
{% prettify dart tag=pre+code %}
|
||||
import 'dart:ffi';
|
||||
|
||||
class C extends Struct {
|
||||
final class C extends Struct {
|
||||
@Array(4)
|
||||
[!@Array(8)!]
|
||||
external Array<Uint8> a0;
|
||||
@@ -5922,7 +5922,7 @@ Remove all but one of the annotations:
|
||||
{% prettify dart tag=pre+code %}
|
||||
import 'dart:ffi';
|
||||
|
||||
class C extends Struct {
|
||||
final class C extends Struct {
|
||||
@Array(8)
|
||||
external Array<Uint8> a0;
|
||||
}
|
||||
@@ -6124,7 +6124,7 @@ constructor with an initializer for the field `f`:
|
||||
// @dart = 2.9
|
||||
import 'dart:ffi';
|
||||
|
||||
class C extends Struct {
|
||||
final class C extends Struct {
|
||||
@Int32()
|
||||
int f;
|
||||
|
||||
@@ -6140,7 +6140,7 @@ Remove the field initializer:
|
||||
// @dart = 2.9
|
||||
import 'dart:ffi';
|
||||
|
||||
class C extends Struct {
|
||||
final class C extends Struct {
|
||||
@Int32()
|
||||
int f;
|
||||
|
||||
@@ -6389,7 +6389,7 @@ initializer:
|
||||
// @dart = 2.9
|
||||
import 'dart:ffi';
|
||||
|
||||
class C extends Struct {
|
||||
final class C extends Struct {
|
||||
Pointer [!p!] = nullptr;
|
||||
}
|
||||
{% endprettify %}
|
||||
@@ -6402,7 +6402,7 @@ Remove the initializer:
|
||||
// @dart = 2.9
|
||||
import 'dart:ffi';
|
||||
|
||||
class C extends Struct {
|
||||
final class C extends Struct {
|
||||
Pointer p;
|
||||
}
|
||||
{% endprettify %}
|
||||
@@ -6426,7 +6426,7 @@ marked as being `external`:
|
||||
{% prettify dart tag=pre+code %}
|
||||
import 'dart:ffi';
|
||||
|
||||
class C extends Struct {
|
||||
final class C extends Struct {
|
||||
@Int16()
|
||||
int [!a!];
|
||||
}
|
||||
@@ -6439,7 +6439,7 @@ Add the required `external` modifier:
|
||||
{% prettify dart tag=pre+code %}
|
||||
import 'dart:ffi';
|
||||
|
||||
class C extends Struct {
|
||||
final class C extends Struct {
|
||||
@Int16()
|
||||
external int a;
|
||||
}
|
||||
@@ -6852,7 +6852,7 @@ the type parameter `T`:
|
||||
{% prettify dart tag=pre+code %}
|
||||
import 'dart:ffi';
|
||||
|
||||
class [!S!]<T> extends Struct {
|
||||
final class [!S!]<T> extends Struct {
|
||||
external Pointer notEmpty;
|
||||
}
|
||||
{% endprettify %}
|
||||
@@ -6864,7 +6864,7 @@ Remove the type parameters from the class:
|
||||
{% prettify dart tag=pre+code %}
|
||||
import 'dart:ffi';
|
||||
|
||||
class S extends Struct {
|
||||
final class S extends Struct {
|
||||
external Pointer notEmpty;
|
||||
}
|
||||
{% endprettify %}
|
||||
@@ -8769,7 +8769,7 @@ subclass of `Struct`:
|
||||
{% prettify dart tag=pre+code %}
|
||||
import 'dart:ffi';
|
||||
|
||||
class C extends Struct {
|
||||
final class C extends Struct {
|
||||
external [!String!] s;
|
||||
|
||||
@Int32()
|
||||
@@ -8785,7 +8785,7 @@ Use one of the allowed types for the field:
|
||||
import 'dart:ffi';
|
||||
import 'package:ffi/ffi.dart';
|
||||
|
||||
class C extends Struct {
|
||||
final class C extends Struct {
|
||||
external Pointer<Utf8> s;
|
||||
|
||||
@Int32()
|
||||
@@ -10793,7 +10793,7 @@ The following code produces this diagnostic because the annotation
|
||||
{% prettify dart tag=pre+code %}
|
||||
import 'dart:ffi';
|
||||
|
||||
class C extends Struct {
|
||||
final class C extends Struct {
|
||||
[!@Double()!]
|
||||
external int x;
|
||||
}
|
||||
@@ -10806,7 +10806,7 @@ If the type of the field is correct, then change the annotation to match:
|
||||
{% prettify dart tag=pre+code %}
|
||||
import 'dart:ffi';
|
||||
|
||||
class C extends Struct {
|
||||
final class C extends Struct {
|
||||
@Int32()
|
||||
external int x;
|
||||
}
|
||||
@@ -10817,7 +10817,7 @@ If the annotation is correct, then change the type of the field to match:
|
||||
{% prettify dart tag=pre+code %}
|
||||
import 'dart:ffi';
|
||||
|
||||
class C extends Struct {
|
||||
final class C extends Struct {
|
||||
@Double()
|
||||
external double x;
|
||||
}
|
||||
@@ -10846,7 +10846,7 @@ have an annotation indicating the underlying width of the integer value:
|
||||
{% prettify dart tag=pre+code %}
|
||||
import 'dart:ffi';
|
||||
|
||||
class C extends Struct {
|
||||
final class C extends Struct {
|
||||
external [!int!] x;
|
||||
}
|
||||
{% endprettify %}
|
||||
@@ -10858,7 +10858,7 @@ Add an appropriate annotation to the field:
|
||||
{% prettify dart tag=pre+code %}
|
||||
import 'dart:ffi';
|
||||
|
||||
class C extends Struct {
|
||||
final class C extends Struct {
|
||||
@Int64()
|
||||
external int x;
|
||||
}
|
||||
@@ -11061,7 +11061,7 @@ doesn't have a type annotation:
|
||||
{% prettify dart tag=pre+code %}
|
||||
import 'dart:ffi';
|
||||
|
||||
class C extends Struct {
|
||||
final class C extends Struct {
|
||||
external var [!str!];
|
||||
|
||||
@Int32()
|
||||
@@ -11077,7 +11077,7 @@ Explicitly specify the type of the field:
|
||||
import 'dart:ffi';
|
||||
import 'package:ffi/ffi.dart';
|
||||
|
||||
class C extends Struct {
|
||||
final class C extends Struct {
|
||||
external Pointer<Utf8> str;
|
||||
|
||||
@Int32()
|
||||
@@ -11296,7 +11296,7 @@ have an `Array` annotation:
|
||||
{% prettify dart tag=pre+code %}
|
||||
import 'dart:ffi';
|
||||
|
||||
class C extends Struct {
|
||||
final class C extends Struct {
|
||||
external [!Array<Uint8>!] a0;
|
||||
}
|
||||
{% endprettify %}
|
||||
@@ -11308,7 +11308,7 @@ Ensure that there's exactly one `Array` annotation on the field:
|
||||
{% prettify dart tag=pre+code %}
|
||||
import 'dart:ffi';
|
||||
|
||||
class C extends Struct {
|
||||
final class C extends Struct {
|
||||
@Array(8)
|
||||
external Array<Uint8> a0;
|
||||
}
|
||||
@@ -13202,7 +13202,7 @@ The following code produces this diagnostic because an array dimension of
|
||||
{% prettify dart tag=pre+code %}
|
||||
import 'dart:ffi';
|
||||
|
||||
class MyStruct extends Struct {
|
||||
final class MyStruct extends Struct {
|
||||
@Array([!-8!])
|
||||
external Array<Uint8> a0;
|
||||
}
|
||||
@@ -13215,7 +13215,7 @@ Change the dimension to be a positive integer:
|
||||
{% prettify dart tag=pre+code %}
|
||||
import 'dart:ffi';
|
||||
|
||||
class MyStruct extends Struct {
|
||||
final class MyStruct extends Struct {
|
||||
@Array(8)
|
||||
external Array<Uint8> a0;
|
||||
}
|
||||
@@ -13243,7 +13243,7 @@ The following code produces this diagnostic because the type argument to
|
||||
{% prettify dart tag=pre+code %}
|
||||
import 'dart:ffi';
|
||||
|
||||
class C extends Struct {
|
||||
final class C extends Struct {
|
||||
@Array(8)
|
||||
external Array<[!Void!]> a0;
|
||||
}
|
||||
@@ -13256,7 +13256,7 @@ Change the type argument to one of the valid types:
|
||||
{% prettify dart tag=pre+code %}
|
||||
import 'dart:ffi';
|
||||
|
||||
class C extends Struct {
|
||||
final class C extends Struct {
|
||||
@Array(8)
|
||||
external Array<Uint8> a0;
|
||||
}
|
||||
@@ -14414,7 +14414,7 @@ import 'dart:ffi';
|
||||
|
||||
@Packed(1)
|
||||
[!@Packed(1)!]
|
||||
class C extends Struct {
|
||||
final class C extends Struct {
|
||||
external Pointer<Uint8> notEmpty;
|
||||
}
|
||||
{% endprettify %}
|
||||
@@ -14427,7 +14427,7 @@ Remove all but one of the annotations:
|
||||
import 'dart:ffi';
|
||||
|
||||
@Packed(1)
|
||||
class C extends Struct {
|
||||
final class C extends Struct {
|
||||
external Pointer<Uint8> notEmpty;
|
||||
}
|
||||
{% endprettify %}
|
||||
@@ -14452,7 +14452,7 @@ The following code produces this diagnostic because the argument to the
|
||||
import 'dart:ffi';
|
||||
|
||||
@Packed([!3!])
|
||||
class C extends Struct {
|
||||
final class C extends Struct {
|
||||
external Pointer<Uint8> notEmpty;
|
||||
}
|
||||
{% endprettify %}
|
||||
@@ -14465,7 +14465,7 @@ Change the alignment to be one of the allowed values:
|
||||
import 'dart:ffi';
|
||||
|
||||
@Packed(4)
|
||||
class C extends Struct {
|
||||
final class C extends Struct {
|
||||
external Pointer<Uint8> notEmpty;
|
||||
}
|
||||
{% endprettify %}
|
||||
@@ -16676,7 +16676,7 @@ type with three nested arrays, but only two dimensions are given in the
|
||||
{% prettify dart tag=pre+code %}
|
||||
import 'dart:ffi';
|
||||
|
||||
class C extends Struct {
|
||||
final class C extends Struct {
|
||||
[!@Array(8, 8)!]
|
||||
external Array<Array<Array<Uint8>>> a0;
|
||||
}
|
||||
@@ -16690,7 +16690,7 @@ required number of dimensions:
|
||||
{% prettify dart tag=pre+code %}
|
||||
import 'dart:ffi';
|
||||
|
||||
class C extends Struct {
|
||||
final class C extends Struct {
|
||||
@Array(8, 8, 4)
|
||||
external Array<Array<Array<Uint8>>> a0;
|
||||
}
|
||||
@@ -16701,7 +16701,7 @@ If the type of the field is wrong, then fix the type of the field:
|
||||
{% prettify dart tag=pre+code %}
|
||||
import 'dart:ffi';
|
||||
|
||||
class C extends Struct {
|
||||
final class C extends Struct {
|
||||
@Array(8, 8)
|
||||
external Array<Array<Uint8>> a0;
|
||||
}
|
||||
@@ -16895,7 +16895,7 @@ The following code produces this diagnostic because the class `C` extends
|
||||
{% prettify dart tag=pre+code %}
|
||||
import 'dart:ffi';
|
||||
|
||||
class C extends [!Double!] {}
|
||||
final class C extends [!Double!] {}
|
||||
{% endprettify %}
|
||||
|
||||
#### Common fixes
|
||||
@@ -16906,7 +16906,7 @@ declaration of the class:
|
||||
{% prettify dart tag=pre+code %}
|
||||
import 'dart:ffi';
|
||||
|
||||
class C extends Struct {
|
||||
final class C extends Struct {
|
||||
@Int32()
|
||||
external int i;
|
||||
}
|
||||
@@ -16916,7 +16916,7 @@ If the class shouldn't extend either `Struct` or `Union`, then remove any
|
||||
references to FFI classes:
|
||||
|
||||
{% prettify dart tag=pre+code %}
|
||||
class C {}
|
||||
final class C {}
|
||||
{% endprettify %}
|
||||
|
||||
### subtype_of_sealed_class
|
||||
@@ -16997,11 +16997,11 @@ The following code produces this diagnostic because the class `C` extends
|
||||
{% prettify dart tag=pre+code %}
|
||||
import 'dart:ffi';
|
||||
|
||||
class S extends Struct {
|
||||
final class S extends Struct {
|
||||
external Pointer f;
|
||||
}
|
||||
|
||||
class C extends [!S!] {
|
||||
final class C extends [!S!] {
|
||||
external Pointer g;
|
||||
}
|
||||
{% endprettify %}
|
||||
@@ -17015,11 +17015,11 @@ directly and copy the shared fields:
|
||||
{% prettify dart tag=pre+code %}
|
||||
import 'dart:ffi';
|
||||
|
||||
class S extends Struct {
|
||||
final class S extends Struct {
|
||||
external Pointer f;
|
||||
}
|
||||
|
||||
class C extends Struct {
|
||||
final class C extends Struct {
|
||||
external Pointer f;
|
||||
|
||||
external Pointer g;
|
||||
|
||||
@@ -4,9 +4,9 @@
|
||||
|
||||
class Struct {}
|
||||
|
||||
class StructA extends Struct {}
|
||||
final class StructA extends Struct {}
|
||||
|
||||
class StructB extends Struct {}
|
||||
final class StructB extends Struct {}
|
||||
|
||||
class NonStruct {}
|
||||
|
||||
|
||||
@@ -85,12 +85,12 @@ class Struct extends core::Object {
|
||||
: super core::Object::•()
|
||||
;
|
||||
}
|
||||
class StructA extends self::Struct {
|
||||
final class StructA extends self::Struct {
|
||||
synthetic constructor •() → self::StructA
|
||||
: super self::Struct::•()
|
||||
;
|
||||
}
|
||||
class StructB extends self::Struct {
|
||||
final class StructB extends self::Struct {
|
||||
synthetic constructor •() → self::StructB
|
||||
: super self::Struct::•()
|
||||
;
|
||||
|
||||
+2
-2
@@ -85,12 +85,12 @@ class Struct extends core::Object {
|
||||
: super core::Object::•()
|
||||
;
|
||||
}
|
||||
class StructA extends self::Struct {
|
||||
final class StructA extends self::Struct {
|
||||
synthetic constructor •() → self::StructA
|
||||
: super self::Struct::•()
|
||||
;
|
||||
}
|
||||
class StructB extends self::Struct {
|
||||
final class StructB extends self::Struct {
|
||||
synthetic constructor •() → self::StructB
|
||||
: super self::Struct::•()
|
||||
;
|
||||
|
||||
+2
-2
@@ -1,8 +1,8 @@
|
||||
class Struct {}
|
||||
|
||||
class StructA extends Struct {}
|
||||
final class StructA extends Struct {}
|
||||
|
||||
class StructB extends Struct {}
|
||||
final class StructB extends Struct {}
|
||||
|
||||
class NonStruct {}
|
||||
|
||||
|
||||
+4
-4
@@ -2,10 +2,6 @@ class NonStruct {}
|
||||
|
||||
class Struct {}
|
||||
|
||||
class StructA extends Struct {}
|
||||
|
||||
class StructB extends Struct {}
|
||||
|
||||
errors() {}
|
||||
|
||||
extension Extension<T extends Struct?> on T {
|
||||
@@ -14,5 +10,9 @@ extension Extension<T extends Struct?> on T {
|
||||
void set property(T value) {}
|
||||
}
|
||||
|
||||
final class StructA extends Struct {}
|
||||
|
||||
final class StructB extends Struct {}
|
||||
|
||||
main() {}
|
||||
testNonStruct() {}
|
||||
|
||||
@@ -85,12 +85,12 @@ class Struct extends core::Object {
|
||||
: super core::Object::•()
|
||||
;
|
||||
}
|
||||
class StructA extends self::Struct {
|
||||
final class StructA extends self::Struct {
|
||||
synthetic constructor •() → self::StructA
|
||||
: super self::Struct::•()
|
||||
;
|
||||
}
|
||||
class StructB extends self::Struct {
|
||||
final class StructB extends self::Struct {
|
||||
synthetic constructor •() → self::StructB
|
||||
: super self::Struct::•()
|
||||
;
|
||||
|
||||
+2
-2
@@ -85,12 +85,12 @@ class Struct extends core::Object {
|
||||
: super core::Object::•()
|
||||
;
|
||||
}
|
||||
class StructA extends self::Struct {
|
||||
final class StructA extends self::Struct {
|
||||
synthetic constructor •() → self::StructA
|
||||
: super self::Struct::•()
|
||||
;
|
||||
}
|
||||
class StructB extends self::Struct {
|
||||
final class StructB extends self::Struct {
|
||||
synthetic constructor •() → self::StructB
|
||||
: super self::Struct::•()
|
||||
;
|
||||
|
||||
+2
-2
@@ -6,11 +6,11 @@ class Struct extends core::Object {
|
||||
synthetic constructor •() → self::Struct
|
||||
;
|
||||
}
|
||||
class StructA extends self::Struct {
|
||||
final class StructA extends self::Struct {
|
||||
synthetic constructor •() → self::StructA
|
||||
;
|
||||
}
|
||||
class StructB extends self::Struct {
|
||||
final class StructB extends self::Struct {
|
||||
synthetic constructor •() → self::StructB
|
||||
;
|
||||
}
|
||||
|
||||
+2
-2
@@ -85,12 +85,12 @@ class Struct extends core::Object {
|
||||
: super core::Object::•()
|
||||
;
|
||||
}
|
||||
class StructA extends self::Struct {
|
||||
final class StructA extends self::Struct {
|
||||
synthetic constructor •() → self::StructA
|
||||
: super self::Struct::•()
|
||||
;
|
||||
}
|
||||
class StructB extends self::Struct {
|
||||
final class StructB extends self::Struct {
|
||||
synthetic constructor •() → self::StructB
|
||||
: super self::Struct::•()
|
||||
;
|
||||
|
||||
@@ -11,12 +11,12 @@ worlds:
|
||||
main.dart: |
|
||||
import 'dart:ffi';
|
||||
import 'lib.dart';
|
||||
class X extends Struct {
|
||||
final class X extends Struct {
|
||||
external Y xx;
|
||||
}
|
||||
lib.dart: |
|
||||
import 'dart:ffi';
|
||||
class Y extends Struct {
|
||||
final class Y extends Struct {
|
||||
@Uint32()
|
||||
external int yy;
|
||||
}
|
||||
|
||||
@@ -4,7 +4,7 @@ library from "org-dartlang-test:///lib.dart" as lib {
|
||||
import "dart:ffi";
|
||||
|
||||
@#C6
|
||||
class Y extends dart.ffi::Struct {
|
||||
final class Y extends dart.ffi::Struct {
|
||||
synthetic constructor •() → lib::Y
|
||||
: super dart.ffi::Struct::•()
|
||||
;
|
||||
@@ -28,7 +28,7 @@ library from "org-dartlang-test:///main.dart" as main {
|
||||
import "org-dartlang-test:///lib.dart";
|
||||
|
||||
@#C17
|
||||
class X extends dart.ffi::Struct {
|
||||
final class X extends dart.ffi::Struct {
|
||||
synthetic constructor •() → main::X
|
||||
: super dart.ffi::Struct::•()
|
||||
;
|
||||
|
||||
@@ -4,7 +4,7 @@ library from "org-dartlang-test:///lib.dart" as lib {
|
||||
import "dart:ffi";
|
||||
|
||||
@#C6
|
||||
class Y extends dart.ffi::Struct {
|
||||
final class Y extends dart.ffi::Struct {
|
||||
synthetic constructor •() → lib::Y
|
||||
: super dart.ffi::Struct::•()
|
||||
;
|
||||
@@ -28,7 +28,7 @@ library from "org-dartlang-test:///main.dart" as main {
|
||||
import "org-dartlang-test:///lib.dart";
|
||||
|
||||
@#C17
|
||||
class X extends dart.ffi::Struct {
|
||||
final class X extends dart.ffi::Struct {
|
||||
synthetic constructor •() → main::X
|
||||
: super dart.ffi::Struct::•()
|
||||
;
|
||||
|
||||
@@ -11,10 +11,10 @@ worlds:
|
||||
sources:
|
||||
structs.dart: |
|
||||
import 'dart:ffi';
|
||||
class A extends Struct {
|
||||
final class A extends Struct {
|
||||
external Y yy;
|
||||
}
|
||||
class Y extends Struct {
|
||||
final class Y extends Struct {
|
||||
external Z zz;
|
||||
}
|
||||
expectedLibraryCount: 1
|
||||
|
||||
@@ -22,7 +22,7 @@ library from "org-dartlang-test:///structs.dart" as str {
|
||||
import "dart:ffi";
|
||||
|
||||
@#C6
|
||||
class A extends dart.ffi::Struct {
|
||||
final class A extends dart.ffi::Struct {
|
||||
synthetic constructor •() → str::A
|
||||
: super dart.ffi::Struct::•()
|
||||
;
|
||||
@@ -40,7 +40,7 @@ library from "org-dartlang-test:///structs.dart" as str {
|
||||
static get #sizeOf() → dart.core::int*
|
||||
return #C8.{dart.core::List::[]}(dart.ffi::_abi()){(dart.core::int) → dart.core::int*};
|
||||
}
|
||||
class Y extends dart.ffi::Struct {
|
||||
final class Y extends dart.ffi::Struct {
|
||||
synthetic constructor •() → str::Y
|
||||
: super dart.ffi::Struct::•()
|
||||
;
|
||||
|
||||
@@ -22,7 +22,7 @@ library from "org-dartlang-test:///structs.dart" as str {
|
||||
import "dart:ffi";
|
||||
|
||||
@#C6
|
||||
class A extends dart.ffi::Struct {
|
||||
final class A extends dart.ffi::Struct {
|
||||
synthetic constructor •() → str::A
|
||||
: super dart.ffi::Struct::•()
|
||||
;
|
||||
@@ -40,7 +40,7 @@ library from "org-dartlang-test:///structs.dart" as str {
|
||||
static get #sizeOf() → dart.core::int*
|
||||
return #C8.{dart.core::List::[]}(dart.ffi::_abi()){(dart.core::int) → dart.core::int*};
|
||||
}
|
||||
class Y extends dart.ffi::Struct {
|
||||
final class Y extends dart.ffi::Struct {
|
||||
synthetic constructor •() → str::Y
|
||||
: super dart.ffi::Struct::•()
|
||||
;
|
||||
|
||||
@@ -20,7 +20,7 @@ worlds:
|
||||
lib.dart: |
|
||||
import 'dart:ffi';
|
||||
|
||||
class Coordinate extends Struct {
|
||||
final class Coordinate extends Struct {
|
||||
@Double()
|
||||
external double x;
|
||||
|
||||
|
||||
@@ -4,7 +4,7 @@ library from "org-dartlang-test:///lib.dart" as lib {
|
||||
import "dart:ffi";
|
||||
|
||||
@#C7
|
||||
class Coordinate extends dart.ffi::Struct {
|
||||
final class Coordinate extends dart.ffi::Struct {
|
||||
constructor #fromTypedDataBase(synthesized dart.core::Object #typedDataBase) → lib::Coordinate
|
||||
: super dart.ffi::Struct::_fromTypedDataBase(#typedDataBase)
|
||||
;
|
||||
|
||||
@@ -4,7 +4,7 @@ library from "org-dartlang-test:///lib.dart" as lib {
|
||||
import "dart:ffi";
|
||||
|
||||
@#C7
|
||||
class Coordinate extends dart.ffi::Struct {
|
||||
final class Coordinate extends dart.ffi::Struct {
|
||||
constructor #fromTypedDataBase(synthesized dart.core::Object #typedDataBase) → lib::Coordinate
|
||||
: super dart.ffi::Struct::_fromTypedDataBase(#typedDataBase)
|
||||
;
|
||||
|
||||
@@ -23,7 +23,7 @@ worlds:
|
||||
lib.dart: |
|
||||
import 'dart:ffi';
|
||||
|
||||
class Coordinate extends Struct {
|
||||
final class Coordinate extends Struct {
|
||||
@Double()
|
||||
external double x;
|
||||
|
||||
|
||||
@@ -4,7 +4,7 @@ library from "org-dartlang-test:///lib.dart" as lib {
|
||||
import "dart:ffi";
|
||||
|
||||
@#C7
|
||||
class Coordinate extends dart.ffi::Struct {
|
||||
final class Coordinate extends dart.ffi::Struct {
|
||||
constructor #fromTypedDataBase(synthesized dart.core::Object #typedDataBase) → lib::Coordinate
|
||||
: super dart.ffi::Struct::_fromTypedDataBase(#typedDataBase)
|
||||
;
|
||||
|
||||
@@ -11,14 +11,14 @@ worlds:
|
||||
a.dart: |
|
||||
import 'dart:ffi';
|
||||
|
||||
class StructA extends Struct {
|
||||
final class StructA extends Struct {
|
||||
external Pointer<Void> a1;
|
||||
external Pointer<Void> a2;
|
||||
external Pointer<Void> a3;
|
||||
external NestedStruct blah;
|
||||
}
|
||||
|
||||
class NestedStruct extends Struct {
|
||||
final class NestedStruct extends Struct {
|
||||
external Pointer<Void> n1;
|
||||
external Pointer<Void> n2;
|
||||
external Pointer<Void> n3;
|
||||
@@ -30,7 +30,7 @@ worlds:
|
||||
|
||||
import 'a.dart';
|
||||
|
||||
class StructB extends Struct {
|
||||
final class StructB extends Struct {
|
||||
external StructA b1;
|
||||
}
|
||||
|
||||
|
||||
@@ -4,7 +4,7 @@ library from "org-dartlang-test:///a.dart" as a {
|
||||
import "dart:ffi";
|
||||
|
||||
@#C7
|
||||
class StructA extends dart.ffi::Struct {
|
||||
final class StructA extends dart.ffi::Struct {
|
||||
synthetic constructor •() → a::StructA
|
||||
: super dart.ffi::Struct::•()
|
||||
;
|
||||
@@ -35,7 +35,7 @@ library from "org-dartlang-test:///a.dart" as a {
|
||||
return #C21.{dart.core::List::[]}(dart.ffi::_abi()){(dart.core::int) → dart.core::int*};
|
||||
}
|
||||
@#C24
|
||||
class NestedStruct extends dart.ffi::Struct {
|
||||
final class NestedStruct extends dart.ffi::Struct {
|
||||
synthetic constructor •() → a::NestedStruct
|
||||
: super dart.ffi::Struct::•()
|
||||
;
|
||||
@@ -67,7 +67,7 @@ library from "org-dartlang-test:///b.dart" as b {
|
||||
import "org-dartlang-test:///a.dart";
|
||||
|
||||
@#C28
|
||||
class StructB extends dart.ffi::Struct {
|
||||
final class StructB extends dart.ffi::Struct {
|
||||
synthetic constructor •() → b::StructB
|
||||
: super dart.ffi::Struct::•()
|
||||
;
|
||||
|
||||
@@ -4,7 +4,7 @@ library from "org-dartlang-test:///a.dart" as a {
|
||||
import "dart:ffi";
|
||||
|
||||
@#C7
|
||||
class StructA extends dart.ffi::Struct {
|
||||
final class StructA extends dart.ffi::Struct {
|
||||
synthetic constructor •() → a::StructA
|
||||
: super dart.ffi::Struct::•()
|
||||
;
|
||||
@@ -35,7 +35,7 @@ library from "org-dartlang-test:///a.dart" as a {
|
||||
return #C21.{dart.core::List::[]}(dart.ffi::_abi()){(dart.core::int) → dart.core::int*};
|
||||
}
|
||||
@#C24
|
||||
class NestedStruct extends dart.ffi::Struct {
|
||||
final class NestedStruct extends dart.ffi::Struct {
|
||||
synthetic constructor •() → a::NestedStruct
|
||||
: super dart.ffi::Struct::•()
|
||||
;
|
||||
@@ -67,7 +67,7 @@ library from "org-dartlang-test:///b.dart" as b {
|
||||
import "org-dartlang-test:///a.dart";
|
||||
|
||||
@#C28
|
||||
class StructB extends dart.ffi::Struct {
|
||||
final class StructB extends dart.ffi::Struct {
|
||||
synthetic constructor •() → b::StructB
|
||||
: super dart.ffi::Struct::•()
|
||||
;
|
||||
|
||||
@@ -21,7 +21,7 @@ worlds:
|
||||
}
|
||||
lib.dart: |
|
||||
import 'dart:ffi';
|
||||
class Coordinate extends Struct {
|
||||
final class Coordinate extends Struct {
|
||||
@Double()
|
||||
external double x;
|
||||
|
||||
@@ -61,7 +61,7 @@ worlds:
|
||||
sources:
|
||||
lib.dart: |
|
||||
import 'dart:ffi';
|
||||
class Coordinate extends Struct {
|
||||
final class Coordinate extends Struct {
|
||||
@Double()
|
||||
external double x;
|
||||
|
||||
|
||||
@@ -4,7 +4,7 @@ library from "org-dartlang-test:///lib.dart" as lib {
|
||||
import "dart:ffi";
|
||||
|
||||
@#C7
|
||||
class Coordinate extends dart.ffi::Struct {
|
||||
final class Coordinate extends dart.ffi::Struct {
|
||||
constructor #fromTypedDataBase(synthesized dart.core::Object #typedDataBase) → lib::Coordinate
|
||||
: super dart.ffi::Struct::_fromTypedDataBase(#typedDataBase)
|
||||
;
|
||||
|
||||
@@ -4,7 +4,7 @@ library from "org-dartlang-test:///lib.dart" as lib {
|
||||
import "dart:ffi";
|
||||
|
||||
@#C7
|
||||
class Coordinate extends dart.ffi::Struct {
|
||||
final class Coordinate extends dart.ffi::Struct {
|
||||
constructor #fromTypedDataBase(synthesized dart.core::Object #typedDataBase) → lib::Coordinate
|
||||
: super dart.ffi::Struct::_fromTypedDataBase(#typedDataBase)
|
||||
;
|
||||
|
||||
@@ -4,7 +4,7 @@ library from "org-dartlang-test:///lib.dart" as lib {
|
||||
import "dart:ffi";
|
||||
|
||||
@#C7
|
||||
class Coordinate extends dart.ffi::Struct {
|
||||
final class Coordinate extends dart.ffi::Struct {
|
||||
constructor #fromTypedDataBase(synthesized dart.core::Object #typedDataBase) → lib::Coordinate
|
||||
: super dart.ffi::Struct::_fromTypedDataBase(#typedDataBase)
|
||||
;
|
||||
|
||||
@@ -12,7 +12,7 @@ worlds:
|
||||
main.dart: |
|
||||
import "dart:ffi";
|
||||
import 'lib.dart';
|
||||
class X extends Struct {
|
||||
final class X extends Struct {
|
||||
external Y x1;
|
||||
external Y x2;
|
||||
@Uint8()
|
||||
@@ -20,7 +20,7 @@ worlds:
|
||||
}
|
||||
lib.dart: |
|
||||
import 'dart:ffi';
|
||||
class Y extends Struct {
|
||||
final class Y extends Struct {
|
||||
@Uint8()
|
||||
external int y1;
|
||||
@Uint8()
|
||||
@@ -38,7 +38,7 @@ worlds:
|
||||
sources:
|
||||
lib.dart: |
|
||||
import 'dart:ffi';
|
||||
class Y extends Struct {
|
||||
final class Y extends Struct {
|
||||
@Uint8()
|
||||
external int y1;
|
||||
@Uint64()
|
||||
|
||||
@@ -4,7 +4,7 @@ library from "org-dartlang-test:///lib.dart" as lib {
|
||||
import "dart:ffi";
|
||||
|
||||
@#C7
|
||||
class Y extends dart.ffi::Struct {
|
||||
final class Y extends dart.ffi::Struct {
|
||||
synthetic constructor •() → lib::Y
|
||||
: super dart.ffi::Struct::•()
|
||||
;
|
||||
@@ -40,7 +40,7 @@ library from "org-dartlang-test:///main.dart" as main {
|
||||
import "org-dartlang-test:///lib.dart";
|
||||
|
||||
@#C25
|
||||
class X extends dart.ffi::Struct {
|
||||
final class X extends dart.ffi::Struct {
|
||||
synthetic constructor •() → main::X
|
||||
: super dart.ffi::Struct::•()
|
||||
;
|
||||
|
||||
@@ -4,7 +4,7 @@ library from "org-dartlang-test:///lib.dart" as lib {
|
||||
import "dart:ffi";
|
||||
|
||||
@#C7
|
||||
class Y extends dart.ffi::Struct {
|
||||
final class Y extends dart.ffi::Struct {
|
||||
synthetic constructor •() → lib::Y
|
||||
: super dart.ffi::Struct::•()
|
||||
;
|
||||
@@ -40,7 +40,7 @@ library from "org-dartlang-test:///main.dart" as main {
|
||||
import "org-dartlang-test:///lib.dart";
|
||||
|
||||
@#C25
|
||||
class X extends dart.ffi::Struct {
|
||||
final class X extends dart.ffi::Struct {
|
||||
synthetic constructor •() → main::X
|
||||
: super dart.ffi::Struct::•()
|
||||
;
|
||||
|
||||
@@ -13,7 +13,7 @@ worlds:
|
||||
main.dart: |
|
||||
import "dart:ffi";
|
||||
import 'lib.dart';
|
||||
class X extends Struct {
|
||||
final class X extends Struct {
|
||||
external Y x1;
|
||||
external Y x2;
|
||||
@Uint8()
|
||||
@@ -21,7 +21,7 @@ worlds:
|
||||
}
|
||||
lib.dart: |
|
||||
import 'dart:ffi';
|
||||
class Y extends Struct {
|
||||
final class Y extends Struct {
|
||||
@Uint8()
|
||||
external int y1;
|
||||
@Uint8()
|
||||
@@ -39,7 +39,7 @@ worlds:
|
||||
main.dart: |
|
||||
import "dart:ffi";
|
||||
import 'lib.dart';
|
||||
class X extends Struct {
|
||||
final class X extends Struct {
|
||||
external Y x1;
|
||||
external Y x2;
|
||||
@Uint8()
|
||||
@@ -47,7 +47,7 @@ worlds:
|
||||
}
|
||||
lib.dart: |
|
||||
import 'dart:ffi';
|
||||
class Y extends Struct {
|
||||
final class Y extends Struct {
|
||||
@Uint8()
|
||||
external int y1;
|
||||
@Uint64()
|
||||
|
||||
@@ -4,7 +4,7 @@ library from "org-dartlang-test:///lib.dart" as lib {
|
||||
import "dart:ffi";
|
||||
|
||||
@#C7
|
||||
class Y extends dart.ffi::Struct {
|
||||
final class Y extends dart.ffi::Struct {
|
||||
synthetic constructor •() → lib::Y
|
||||
: super dart.ffi::Struct::•()
|
||||
;
|
||||
@@ -40,7 +40,7 @@ library from "org-dartlang-test:///main.dart" as main {
|
||||
import "org-dartlang-test:///lib.dart";
|
||||
|
||||
@#C25
|
||||
class X extends dart.ffi::Struct {
|
||||
final class X extends dart.ffi::Struct {
|
||||
synthetic constructor •() → main::X
|
||||
: super dart.ffi::Struct::•()
|
||||
;
|
||||
|
||||
@@ -4,7 +4,7 @@ library from "org-dartlang-test:///lib.dart" as lib {
|
||||
import "dart:ffi";
|
||||
|
||||
@#C7
|
||||
class Y extends dart.ffi::Struct {
|
||||
final class Y extends dart.ffi::Struct {
|
||||
synthetic constructor •() → lib::Y
|
||||
: super dart.ffi::Struct::•()
|
||||
;
|
||||
@@ -40,7 +40,7 @@ library from "org-dartlang-test:///main.dart" as main {
|
||||
import "org-dartlang-test:///lib.dart";
|
||||
|
||||
@#C25
|
||||
class X extends dart.ffi::Struct {
|
||||
final class X extends dart.ffi::Struct {
|
||||
synthetic constructor •() → main::X
|
||||
: super dart.ffi::Struct::•()
|
||||
;
|
||||
|
||||
@@ -12,7 +12,7 @@ worlds:
|
||||
main.dart: |
|
||||
import "dart:ffi";
|
||||
import 'lib.dart';
|
||||
class X extends Struct {
|
||||
final class X extends Struct {
|
||||
external Y x1;
|
||||
external Y x2;
|
||||
@Uint8()
|
||||
@@ -20,7 +20,7 @@ worlds:
|
||||
}
|
||||
lib.dart: |
|
||||
import 'lib2.dart';
|
||||
class Y extends Struct {
|
||||
final class Y extends Struct {
|
||||
@Uint8()
|
||||
external int y1;
|
||||
@Uint8()
|
||||
@@ -42,7 +42,7 @@ worlds:
|
||||
sources:
|
||||
lib.dart: |
|
||||
import 'lib2.dart';
|
||||
class Y extends Struct {
|
||||
final class Y extends Struct {
|
||||
@Uint8()
|
||||
external int y1;
|
||||
@Uint64()
|
||||
|
||||
@@ -4,7 +4,7 @@ library from "org-dartlang-test:///lib.dart" as lib {
|
||||
import "org-dartlang-test:///lib2.dart";
|
||||
|
||||
@#C7
|
||||
class Y extends dart.ffi::Struct {
|
||||
final class Y extends dart.ffi::Struct {
|
||||
synthetic constructor •() → lib::Y
|
||||
: super dart.ffi::Struct::•()
|
||||
;
|
||||
@@ -232,7 +232,7 @@ library from "org-dartlang-test:///main.dart" as main {
|
||||
import "org-dartlang-test:///lib.dart";
|
||||
|
||||
@#C25
|
||||
class X extends dart.ffi::Struct {
|
||||
final class X extends dart.ffi::Struct {
|
||||
synthetic constructor •() → main::X
|
||||
: super dart.ffi::Struct::•()
|
||||
;
|
||||
|
||||
@@ -4,7 +4,7 @@ library from "org-dartlang-test:///lib.dart" as lib {
|
||||
import "org-dartlang-test:///lib2.dart";
|
||||
|
||||
@#C7
|
||||
class Y extends dart.ffi::Struct {
|
||||
final class Y extends dart.ffi::Struct {
|
||||
synthetic constructor •() → lib::Y
|
||||
: super dart.ffi::Struct::•()
|
||||
;
|
||||
@@ -232,7 +232,7 @@ library from "org-dartlang-test:///main.dart" as main {
|
||||
import "org-dartlang-test:///lib.dart";
|
||||
|
||||
@#C25
|
||||
class X extends dart.ffi::Struct {
|
||||
final class X extends dart.ffi::Struct {
|
||||
synthetic constructor •() → main::X
|
||||
: super dart.ffi::Struct::•()
|
||||
;
|
||||
|
||||
@@ -9,13 +9,13 @@ worlds:
|
||||
main.dart: |
|
||||
import 'dart:ffi';
|
||||
import 'lib.dart';
|
||||
class X extends Struct {
|
||||
final class X extends Struct {
|
||||
external COMObject xx;
|
||||
}
|
||||
lib.dart: |
|
||||
import 'dart:ffi';
|
||||
|
||||
class COMObject extends Struct {
|
||||
final class COMObject extends Struct {
|
||||
external Pointer<IntPtr> lpVtbl;
|
||||
|
||||
// This should not be interpreted as a native field.
|
||||
|
||||
@@ -4,7 +4,7 @@ library from "org-dartlang-test:///lib.dart" as lib {
|
||||
import "dart:ffi";
|
||||
|
||||
@#C6
|
||||
class COMObject extends dart.ffi::Struct {
|
||||
final class COMObject extends dart.ffi::Struct {
|
||||
synthetic constructor •() → lib::COMObject
|
||||
: super dart.ffi::Struct::•()
|
||||
;
|
||||
@@ -28,7 +28,7 @@ library from "org-dartlang-test:///main.dart" as main {
|
||||
import "org-dartlang-test:///lib.dart";
|
||||
|
||||
@#C17
|
||||
class X extends dart.ffi::Struct {
|
||||
final class X extends dart.ffi::Struct {
|
||||
synthetic constructor •() → main::X
|
||||
: super dart.ffi::Struct::•()
|
||||
;
|
||||
|
||||
@@ -4,7 +4,7 @@ library from "org-dartlang-test:///lib.dart" as lib {
|
||||
import "dart:ffi";
|
||||
|
||||
@#C6
|
||||
class COMObject extends dart.ffi::Struct {
|
||||
final class COMObject extends dart.ffi::Struct {
|
||||
synthetic constructor •() → lib::COMObject
|
||||
: super dart.ffi::Struct::•()
|
||||
;
|
||||
@@ -28,7 +28,7 @@ library from "org-dartlang-test:///main.dart" as main {
|
||||
import "org-dartlang-test:///lib.dart";
|
||||
|
||||
@#C17
|
||||
class X extends dart.ffi::Struct {
|
||||
final class X extends dart.ffi::Struct {
|
||||
synthetic constructor •() → main::X
|
||||
: super dart.ffi::Struct::•()
|
||||
;
|
||||
|
||||
@@ -9,7 +9,7 @@ import 'dart:ffi';
|
||||
import "package:ffi/ffi.dart";
|
||||
|
||||
/// Sample struct for dart:ffi library.
|
||||
class Coordinate extends Struct {
|
||||
final class Coordinate extends Struct {
|
||||
@Double()
|
||||
external double x;
|
||||
|
||||
|
||||
@@ -6,7 +6,7 @@ import "dart:core" as core;
|
||||
import "dart:ffi";
|
||||
import "package:ffi/ffi.dart";
|
||||
|
||||
class Coordinate extends ffi::Struct {
|
||||
final class Coordinate extends ffi::Struct {
|
||||
@#C1
|
||||
external get x() → core::double;
|
||||
@#C1
|
||||
|
||||
@@ -7,7 +7,7 @@ import "dart:ffi";
|
||||
import "package:ffi/ffi.dart";
|
||||
|
||||
@#C7
|
||||
class Coordinate extends ffi::Struct {
|
||||
final class Coordinate extends ffi::Struct {
|
||||
constructor #fromTypedDataBase(synthesized core::Object #typedDataBase) → self::Coordinate
|
||||
: super ffi::Struct::_fromTypedDataBase(#typedDataBase)
|
||||
;
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
import 'dart:ffi';
|
||||
import "package:ffi/ffi.dart";
|
||||
|
||||
class Coordinate extends Struct {
|
||||
final class Coordinate extends Struct {
|
||||
@Double()
|
||||
external double x;
|
||||
@Double()
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
import "package:ffi/ffi.dart";
|
||||
import 'dart:ffi';
|
||||
|
||||
class Coordinate extends Struct {
|
||||
final class Coordinate extends Struct {
|
||||
external Pointer<Coordinate> next;
|
||||
@Double()
|
||||
external double x;
|
||||
|
||||
@@ -6,7 +6,7 @@ import "dart:core" as core;
|
||||
import "dart:ffi";
|
||||
import "package:ffi/ffi.dart";
|
||||
|
||||
class Coordinate extends ffi::Struct {
|
||||
final class Coordinate extends ffi::Struct {
|
||||
@#C1
|
||||
external get x() → core::double;
|
||||
@#C1
|
||||
|
||||
@@ -6,7 +6,7 @@ import "dart:core" as core;
|
||||
import "dart:ffi";
|
||||
import "package:ffi/ffi.dart";
|
||||
|
||||
class Coordinate extends ffi::Struct {
|
||||
final class Coordinate extends ffi::Struct {
|
||||
@#C1
|
||||
external get x() → core::double;
|
||||
@#C1
|
||||
|
||||
@@ -6,7 +6,7 @@ import "dart:core" as core;
|
||||
import "dart:ffi";
|
||||
import "package:ffi/ffi.dart";
|
||||
|
||||
class Coordinate extends ffi::Struct {
|
||||
final class Coordinate extends ffi::Struct {
|
||||
@ffi::Double::•()
|
||||
external get x() → core::double;
|
||||
@ffi::Double::•()
|
||||
|
||||
@@ -7,7 +7,7 @@ import "dart:ffi";
|
||||
import "package:ffi/ffi.dart";
|
||||
|
||||
@#C7
|
||||
class Coordinate extends ffi::Struct {
|
||||
final class Coordinate extends ffi::Struct {
|
||||
constructor #fromTypedDataBase(synthesized core::Object #typedDataBase) → self::Coordinate
|
||||
: super ffi::Struct::_fromTypedDataBase(#typedDataBase)
|
||||
;
|
||||
|
||||
@@ -6,7 +6,7 @@ import 'dart:ffi';
|
||||
|
||||
import "package:ffi/ffi.dart";
|
||||
|
||||
class StructInlineArray extends Struct {
|
||||
final class StructInlineArray extends Struct {
|
||||
@Array(8)
|
||||
external Array<Uint8> a0;
|
||||
}
|
||||
|
||||
@@ -5,7 +5,7 @@ import "dart:ffi" as ffi;
|
||||
import "dart:ffi";
|
||||
import "package:ffi/ffi.dart";
|
||||
|
||||
class StructInlineArray extends ffi::Struct {
|
||||
final class StructInlineArray extends ffi::Struct {
|
||||
synthetic constructor •() → self::StructInlineArray
|
||||
: super ffi::Struct::•()
|
||||
;
|
||||
|
||||
@@ -9,7 +9,7 @@ import "dart:ffi";
|
||||
import "package:ffi/ffi.dart";
|
||||
|
||||
@#C8
|
||||
class StructInlineArray extends ffi::Struct {
|
||||
final class StructInlineArray extends ffi::Struct {
|
||||
synthetic constructor •() → self::StructInlineArray
|
||||
: super ffi::Struct::•()
|
||||
;
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
import 'dart:ffi';
|
||||
import "package:ffi/ffi.dart";
|
||||
|
||||
class StructInlineArray extends Struct {
|
||||
final class StructInlineArray extends Struct {
|
||||
@Array(8)
|
||||
external Array<Uint8> a0;
|
||||
}
|
||||
|
||||
+1
-1
@@ -1,7 +1,7 @@
|
||||
import "package:ffi/ffi.dart";
|
||||
import 'dart:ffi';
|
||||
|
||||
class StructInlineArray extends Struct {
|
||||
final class StructInlineArray extends Struct {
|
||||
@Array(8)
|
||||
external Array<Uint8> a0;
|
||||
}
|
||||
|
||||
@@ -5,7 +5,7 @@ import "dart:ffi" as ffi;
|
||||
import "dart:ffi";
|
||||
import "package:ffi/ffi.dart";
|
||||
|
||||
class StructInlineArray extends ffi::Struct {
|
||||
final class StructInlineArray extends ffi::Struct {
|
||||
synthetic constructor •() → self::StructInlineArray
|
||||
: super ffi::Struct::•()
|
||||
;
|
||||
|
||||
@@ -5,7 +5,7 @@ import "dart:ffi" as ffi;
|
||||
import "dart:ffi";
|
||||
import "package:ffi/ffi.dart";
|
||||
|
||||
class StructInlineArray extends ffi::Struct {
|
||||
final class StructInlineArray extends ffi::Struct {
|
||||
synthetic constructor •() → self::StructInlineArray
|
||||
: super ffi::Struct::•()
|
||||
;
|
||||
|
||||
@@ -5,7 +5,7 @@ import "dart:ffi" as ffi;
|
||||
import "dart:ffi";
|
||||
import "package:ffi/ffi.dart";
|
||||
|
||||
class StructInlineArray extends ffi::Struct {
|
||||
final class StructInlineArray extends ffi::Struct {
|
||||
synthetic constructor •() → self::StructInlineArray
|
||||
;
|
||||
@ffi::_ArraySize::•<ffi::NativeType>(8)
|
||||
|
||||
@@ -9,7 +9,7 @@ import "dart:ffi";
|
||||
import "package:ffi/ffi.dart";
|
||||
|
||||
@#C8
|
||||
class StructInlineArray extends ffi::Struct {
|
||||
final class StructInlineArray extends ffi::Struct {
|
||||
synthetic constructor •() → self::StructInlineArray
|
||||
: super ffi::Struct::•()
|
||||
;
|
||||
|
||||
@@ -6,7 +6,7 @@ import 'dart:ffi';
|
||||
|
||||
import "package:ffi/ffi.dart";
|
||||
|
||||
class StructInlineArrayMultiDimensional extends Struct {
|
||||
final class StructInlineArrayMultiDimensional extends Struct {
|
||||
@Array(2, 2, 2)
|
||||
external Array<Array<Array<Uint8>>> a0;
|
||||
}
|
||||
|
||||
+1
-1
@@ -5,7 +5,7 @@ import "dart:ffi" as ffi;
|
||||
import "dart:ffi";
|
||||
import "package:ffi/ffi.dart";
|
||||
|
||||
class StructInlineArrayMultiDimensional extends ffi::Struct {
|
||||
final class StructInlineArrayMultiDimensional extends ffi::Struct {
|
||||
synthetic constructor •() → self::StructInlineArrayMultiDimensional
|
||||
: super ffi::Struct::•()
|
||||
;
|
||||
|
||||
+1
-1
@@ -9,7 +9,7 @@ import "dart:ffi";
|
||||
import "package:ffi/ffi.dart";
|
||||
|
||||
@#C8
|
||||
class StructInlineArrayMultiDimensional extends ffi::Struct {
|
||||
final class StructInlineArrayMultiDimensional extends ffi::Struct {
|
||||
synthetic constructor •() → self::StructInlineArrayMultiDimensional
|
||||
: super ffi::Struct::•()
|
||||
;
|
||||
|
||||
+1
-1
@@ -1,7 +1,7 @@
|
||||
import 'dart:ffi';
|
||||
import "package:ffi/ffi.dart";
|
||||
|
||||
class StructInlineArrayMultiDimensional extends Struct {
|
||||
final class StructInlineArrayMultiDimensional extends Struct {
|
||||
@Array(2, 2, 2)
|
||||
external Array<Array<Array<Uint8>>> a0;
|
||||
}
|
||||
|
||||
+1
-1
@@ -1,7 +1,7 @@
|
||||
import "package:ffi/ffi.dart";
|
||||
import 'dart:ffi';
|
||||
|
||||
class StructInlineArrayMultiDimensional extends Struct {
|
||||
final class StructInlineArrayMultiDimensional extends Struct {
|
||||
@Array(2, 2, 2)
|
||||
external Array<Array<Array<Uint8>>> a0;
|
||||
}
|
||||
|
||||
+1
-1
@@ -5,7 +5,7 @@ import "dart:ffi" as ffi;
|
||||
import "dart:ffi";
|
||||
import "package:ffi/ffi.dart";
|
||||
|
||||
class StructInlineArrayMultiDimensional extends ffi::Struct {
|
||||
final class StructInlineArrayMultiDimensional extends ffi::Struct {
|
||||
synthetic constructor •() → self::StructInlineArrayMultiDimensional
|
||||
: super ffi::Struct::•()
|
||||
;
|
||||
|
||||
+1
-1
@@ -5,7 +5,7 @@ import "dart:ffi" as ffi;
|
||||
import "dart:ffi";
|
||||
import "package:ffi/ffi.dart";
|
||||
|
||||
class StructInlineArrayMultiDimensional extends ffi::Struct {
|
||||
final class StructInlineArrayMultiDimensional extends ffi::Struct {
|
||||
synthetic constructor •() → self::StructInlineArrayMultiDimensional
|
||||
: super ffi::Struct::•()
|
||||
;
|
||||
|
||||
+1
-1
@@ -5,7 +5,7 @@ import "dart:ffi" as ffi;
|
||||
import "dart:ffi";
|
||||
import "package:ffi/ffi.dart";
|
||||
|
||||
class StructInlineArrayMultiDimensional extends ffi::Struct {
|
||||
final class StructInlineArrayMultiDimensional extends ffi::Struct {
|
||||
synthetic constructor •() → self::StructInlineArrayMultiDimensional
|
||||
;
|
||||
@ffi::_ArraySize::•<ffi::NativeType>(2, 2, 2)
|
||||
|
||||
+1
-1
@@ -9,7 +9,7 @@ import "dart:ffi";
|
||||
import "package:ffi/ffi.dart";
|
||||
|
||||
@#C8
|
||||
class StructInlineArrayMultiDimensional extends ffi::Struct {
|
||||
final class StructInlineArrayMultiDimensional extends ffi::Struct {
|
||||
synthetic constructor •() → self::StructInlineArrayMultiDimensional
|
||||
: super ffi::Struct::•()
|
||||
;
|
||||
|
||||
@@ -38,7 +38,7 @@ import 'native_type_cfe.dart';
|
||||
/// Checks and elaborates the dart:ffi compounds and their fields.
|
||||
///
|
||||
/// Input:
|
||||
/// class Coord extends Struct {
|
||||
/// final class Coord extends Struct {
|
||||
/// @Double()
|
||||
/// double x;
|
||||
///
|
||||
@@ -49,7 +49,7 @@ import 'native_type_cfe.dart';
|
||||
/// }
|
||||
///
|
||||
/// Output:
|
||||
/// class Coord extends Struct {
|
||||
/// final class Coord extends Struct {
|
||||
/// Coord.#fromTypedDataBase(Pointer<Coord> coord) : super._(coord);
|
||||
///
|
||||
/// set x(double v) => ...;
|
||||
|
||||
@@ -30,7 +30,7 @@ runTestCaseJit(Uri source) async {
|
||||
final target = VmTarget(TargetFlags());
|
||||
|
||||
Component component = await compileTestCaseToKernelProgram(source,
|
||||
target: target, experimentalFlags: ['generic-metadata']);
|
||||
target: target, experimentalFlags: ['class-modifiers']);
|
||||
|
||||
final coreTypes = CoreTypes(component);
|
||||
|
||||
@@ -53,7 +53,7 @@ runTestCaseAot(Uri source) async {
|
||||
final target = VmTarget(TargetFlags(supportMirrors: false));
|
||||
|
||||
Component component = await compileTestCaseToKernelProgram(source,
|
||||
target: target, experimentalFlags: ['generic-metadata']);
|
||||
target: target, experimentalFlags: ['class-modifiers']);
|
||||
|
||||
const bool useGlobalTypeFlowAnalysis = true;
|
||||
const bool enableAsserts = false;
|
||||
@@ -84,7 +84,7 @@ void main(List<String> args) {
|
||||
}
|
||||
|
||||
group('ffi-transformations', () {
|
||||
final testCasesDir = Directory(pkgVmDir + '/testcases/transformations/ffi');
|
||||
final testCasesDir = Directory(pkgVmDir + 'testcases/transformations/ffi');
|
||||
|
||||
for (var entry in testCasesDir
|
||||
.listSync(recursive: true, followLinks: false)
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user