wip
diff --git a/pkgs/objective_c/ffigen_objc.yaml b/pkgs/objective_c/ffigen_objc.yaml index 7179dfe..8048c96 100644 --- a/pkgs/objective_c/ffigen_objc.yaml +++ b/pkgs/objective_c/ffigen_objc.yaml
@@ -200,4 +200,3 @@ // ignore_for_file: unused_element // ignore_for_file: unused_field // coverage:ignore-file - import 'dart:collection';
diff --git a/pkgs/objective_c/lib/src/converter.dart b/pkgs/objective_c/lib/src/converter.dart index 6923e53..dbcddb5 100644 --- a/pkgs/objective_c/lib/src/converter.dart +++ b/pkgs/objective_c/lib/src/converter.dart
@@ -3,12 +3,14 @@ // BSD-style license that can be found in the LICENSE file. import 'internal.dart'; +import 'ns_array.dart'; import 'ns_date.dart'; +import 'ns_dictionary.dart'; import 'ns_number.dart'; +import 'ns_set.dart'; import 'ns_string.dart'; import 'objective_c_bindings_generated.dart'; -/* ObjCObjectBase _defaultObjCConverter(Object o) => throw UnimplementedError('No conversion for $o'); @@ -116,22 +118,39 @@ } extension NSArrayToDartList on NSArray { + /// Deep converts this [NSArray] to a Dart [List]. + /// + /// This creates a new [List], converts all the [NSArray] elements, and adds + /// them to the [List]. If you only need iteration and element access, + /// [toDart] is much more efficient. List<Object> toDartList({ Object Function(ObjCObjectBase) convertOther = _defaultDartConverter, - }) => map((o) => toDartObject(o, convertOther: convertOther)).toList(); + }) => + toDart().map((o) => toDartObject(o, convertOther: convertOther)).toList(); } extension NSSetToDartSet on NSSet { + /// Deep converts this [NSSet] to a Dart [Set]. + /// + /// This creates a new [Set], converts all the [NSSet] elements, and adds + /// them to the [Set]. If you only need iteration and element access, + /// [toDart] is much more efficient. Set<Object> toDartSet({ Object Function(ObjCObjectBase) convertOther = _defaultDartConverter, - }) => map((o) => toDartObject(o, convertOther: convertOther)).toSet(); + }) => + toDart().map((o) => toDartObject(o, convertOther: convertOther)).toSet(); } extension NSDictionaryToDartMap on NSDictionary { + /// Deep converts this [NSDictionary] to a Dart [Map]. + /// + /// This creates a new [Map], converts all the [NSDictionary] elements, and + /// adds them to the [Map]. If you only need iteration and element access, + /// [toDart] is much more efficient. Map<Object, Object> toDartMap({ Object Function(ObjCObjectBase) convertOther = _defaultDartConverter, }) => Map.fromEntries( - entries.map( + toDart().entries.map( (kv) => MapEntry( toDartObject(kv.key, convertOther: convertOther), toDartObject(kv.value, convertOther: convertOther), @@ -139,4 +158,3 @@ ), ); } -*/
diff --git a/pkgs/objective_c/lib/src/ns_array.dart b/pkgs/objective_c/lib/src/ns_array.dart index 0f2f731..fc69a6d 100644 --- a/pkgs/objective_c/lib/src/ns_array.dart +++ b/pkgs/objective_c/lib/src/ns_array.dart
@@ -4,58 +4,87 @@ import 'dart:collection'; -import 'package:ffi/ffi.dart'; - +import 'converter.dart'; import 'internal.dart'; import 'objective_c_bindings_generated.dart'; -class NSArrayAdapter with Iterable<ObjCObjectBase> { - final NSArray array; +class _NSArrayAdapter with ListBase<ObjCObjectBase> { + final NSArray _array; - NSArrayAdapter(this.array); + _NSArrayAdapter(this._array); @override - int get length => array.count; + int get length => _array.count; @override - ObjCObjectBase elementAt(int index) => array.objectAtIndex(index); + ObjCObjectBase elementAt(int index) => _array.objectAtIndex(index); @override Iterator<ObjCObjectBase> get iterator => _NSArrayIterator(this); - ObjCObjectBase operator [](int index) => array.objectAtIndex(index); -} - -class NSMutableArrayAdapter with ListBase<ObjCObjectBase> { - final NSMutableArray array; - - NSMutableArrayAdapter(this.array); + @override + ObjCObjectBase operator [](int index) => _array.objectAtIndex(index); @override - int get length => array.count; + set length(int newLength) => throw UnsupportedError('Cannot modify NSArray'); + + @override + void operator []=(int index, ObjCObjectBase value) => + throw UnsupportedError('Cannot modify NSArray'); + + @override + void add(ObjCObjectBase value) => + throw UnsupportedError('Cannot modify NSArray'); +} + +extension NSArrayToAdapter on NSArray { + /// Wraps this [NSArray] in an adapter that implements an immutable [List]. + /// + /// This is not a conversion, doesn't create a new list, or change the + /// elements. For deep conversion, use [toDartList]. + List<ObjCObjectBase> toDart() => _NSArrayAdapter(this); +} + +class _NSMutableArrayAdapter with ListBase<ObjCObjectBase> { + final NSMutableArray _array; + + _NSMutableArrayAdapter(this._array); + + @override + int get length => _array.count; @override set length(int newLength) { var len = length; RangeError.checkValueInInterval(newLength, 0, len); - for (; len > newLength; --len) array.removeLastObject(); + for (; len > newLength; --len) { + _array.removeLastObject(); + } } @override - ObjCObjectBase elementAt(int index) => array.objectAtIndex(index); + ObjCObjectBase elementAt(int index) => _array.objectAtIndex(index); @override Iterator<ObjCObjectBase> get iterator => _NSArrayIterator(this); @override - ObjCObjectBase operator [](int index) => array.objectAtIndex(index); + ObjCObjectBase operator [](int index) => _array.objectAtIndex(index); @override void operator []=(int index, ObjCObjectBase value) => - array.replaceObjectAtIndex(index, withObject: value); + _array.replaceObjectAtIndex(index, withObject: value); @override - void add(ObjCObjectBase value) => array.addObject(value); + void add(ObjCObjectBase value) => _array.addObject(value); +} + +extension NSMutableArrayToAdapter on NSMutableArray { + /// Wraps this [NSMutableArray] in an adapter that implements [List]. + /// + /// This is not a conversion, doesn't create a new list, or change the + /// elements. For deep conversion, use [toDartList]. + List<ObjCObjectBase> toDart() => _NSMutableArrayAdapter(this); } class _NSArrayIterator implements Iterator<ObjCObjectBase> {
diff --git a/pkgs/objective_c/lib/src/ns_dictionary.dart b/pkgs/objective_c/lib/src/ns_dictionary.dart index a52106d..f929078 100644 --- a/pkgs/objective_c/lib/src/ns_dictionary.dart +++ b/pkgs/objective_c/lib/src/ns_dictionary.dart
@@ -4,8 +4,7 @@ import 'dart:collection'; -import 'package:ffi/ffi.dart'; - +import 'converter.dart'; import 'internal.dart'; import 'ns_enumerator.dart'; import 'objective_c_bindings_generated.dart'; @@ -13,17 +12,17 @@ // Ideally we'd mixin UnmodifiableMapBase, but it's an ordinary class. So // instead we mixin MapBase and then throw in all the modifying methods (which // is essentially what UnmodifiableMapBase does anyway). -class NSDictionaryAdapter with MapBase<NSCopying, ObjCObjectBase> { - final NSDictionary dictionary; +class _NSDictionaryAdapter with MapBase<NSCopying, ObjCObjectBase> { + final NSDictionary _dictionary; - NSDictionaryAdapter(this.dictionary); + _NSDictionaryAdapter(this._dictionary); @override - int get length => dictionary.count; + int get length => _dictionary.count; @override ObjCObjectBase? operator [](Object? key) => - key is NSCopying ? dictionary.objectForKey(key) : null; + key is NSCopying ? _dictionary.objectForKey(key) : null; @override Iterable<NSCopying> get keys => _NSDictionaryKeyIterable(this); @@ -36,69 +35,87 @@ @override void operator []=(NSCopying key, ObjCObjectBase value) => - throw UnsupportedError("Cannot modify NSDictionary"); + throw UnsupportedError('Cannot modify NSDictionary'); @override - void clear() => throw UnsupportedError("Cannot modify NSDictionary"); + void clear() => throw UnsupportedError('Cannot modify NSDictionary'); @override ObjCObjectBase? remove(Object? key) => - throw UnsupportedError("Cannot modify NSDictionary"); + throw UnsupportedError('Cannot modify NSDictionary'); } -class NSMutableDictionaryAdapter with MapBase<NSCopying, ObjCObjectBase> { - final NSMutableDictionary dictionary; +extension NSDictionaryToAdapter on NSDictionary { + /// Wraps this [NSDictionary] in an adapter that implements an immutable + /// [Map]. + /// + /// This is not a conversion, doesn't create a new map, or change the + /// elements. For deep conversion, use [toDartMap]. + Map<NSCopying, ObjCObjectBase> toDart() => _NSDictionaryAdapter(this); +} - NSMutableDictionaryAdapter(this.dictionary); +class _NSMutableDictionaryAdapter with MapBase<NSCopying, ObjCObjectBase> { + final NSMutableDictionary _dictionary; + + _NSMutableDictionaryAdapter(this._dictionary); @override - int get length => dictionary.count; + int get length => _dictionary.count; @override ObjCObjectBase? operator [](Object? key) => - key is NSCopying ? dictionary.objectForKey(key) : null; + key is NSCopying ? _dictionary.objectForKey(key) : null; @override void operator []=(NSCopying key, ObjCObjectBase value) => NSMutableDictionary$Methods( - dictionary, + _dictionary, ).setObject(value, forKey: NSCopying.castFrom(key)); @override - Iterable<NSCopying> get keys => NSDictionaryAdapter(dictionary).keys; + Iterable<NSCopying> get keys => _NSDictionaryAdapter(_dictionary).keys; @override - Iterable<ObjCObjectBase> get values => NSDictionaryAdapter(dictionary).values; + Iterable<ObjCObjectBase> get values => + _NSDictionaryAdapter(_dictionary).values; @override bool containsKey(Object? key) => this[key] != null; @override - void clear() => dictionary.removeAllObjects(); + void clear() => _dictionary.removeAllObjects(); @override ObjCObjectBase? remove(Object? key) { if (key is! NSCopying) return null; final old = this[key]; - dictionary.removeObjectForKey(key); + _dictionary.removeObjectForKey(key); return old; } } -class _NSDictionaryKeyIterable with Iterable<NSCopying> { - NSDictionaryAdapter _dictionary; +extension NSMutableDictionaryToAdapter on NSMutableDictionary { + /// Wraps this [NSMutableDictionary] in an adapter that implements [Map]. + /// + /// This is not a conversion, doesn't create a new map, or change the + /// elements. For deep conversion, use [toDartMap]. + Map<NSCopying, ObjCObjectBase> toDart() => _NSMutableDictionaryAdapter(this); +} - _NSDictionaryKeyIterable(this._dictionary); +class _NSDictionaryKeyIterable with Iterable<NSCopying> { + final _NSDictionaryAdapter _adapter; + + _NSDictionaryKeyIterable(this._adapter); @override - int get length => _dictionary.length; + int get length => _adapter.length; @override Iterator<NSCopying> get iterator => - _NSDictionaryKeyIterator(_dictionary.dictionary.keyEnumerator().toDart()); + _NSDictionaryKeyIterator(_adapter._dictionary.keyEnumerator().toDart()); @override - bool contains(Object? key) => _dictionary.containsKey(key); + bool contains(Object? key) => _adapter.containsKey(key); } class _NSDictionaryKeyIterator implements Iterator<NSCopying> { @@ -115,14 +132,14 @@ } class _NSDictionaryValueIterable with Iterable<ObjCObjectBase> { - NSDictionaryAdapter _dictionary; + final _NSDictionaryAdapter _adapter; - _NSDictionaryValueIterable(this._dictionary); + _NSDictionaryValueIterable(this._adapter); @override - int get length => _dictionary.length; + int get length => _adapter.length; @override Iterator<ObjCObjectBase> get iterator => - _dictionary.dictionary.objectEnumerator().toDart(); + _adapter._dictionary.objectEnumerator().toDart(); }
diff --git a/pkgs/objective_c/lib/src/ns_enumerator.dart b/pkgs/objective_c/lib/src/ns_enumerator.dart index 7eb031b..29567d4 100644 --- a/pkgs/objective_c/lib/src/ns_enumerator.dart +++ b/pkgs/objective_c/lib/src/ns_enumerator.dart
@@ -2,16 +2,14 @@ // for details. All rights reserved. Use of this source code is governed by a // BSD-style license that can be found in the LICENSE file. -import 'package:ffi/ffi.dart'; - import 'internal.dart'; import 'objective_c_bindings_generated.dart'; -class NSEnumeratorAdapter implements Iterator<ObjCObjectBase> { +class _NSEnumeratorAdapter implements Iterator<ObjCObjectBase> { final NSEnumerator enumerator; ObjCObjectBase? _current; - NSEnumeratorAdapter(this.enumerator); + _NSEnumeratorAdapter(this.enumerator); @override ObjCObjectBase get current => _current!; @@ -23,3 +21,8 @@ return _current != null; } } + +extension NSEnumeratorToAdapter on NSEnumerator { + /// Wraps this [NSEnumerator] in an adapter that implements [Iterator]. + Iterator<ObjCObjectBase> toDart() => _NSEnumeratorAdapter(this); +}
diff --git a/pkgs/objective_c/lib/src/ns_set.dart b/pkgs/objective_c/lib/src/ns_set.dart index 4908837..7c62a37 100644 --- a/pkgs/objective_c/lib/src/ns_set.dart +++ b/pkgs/objective_c/lib/src/ns_set.dart
@@ -4,63 +4,70 @@ import 'dart:collection'; -import 'package:ffi/ffi.dart'; - +import 'converter.dart'; import 'internal.dart'; import 'ns_enumerator.dart'; import 'objective_c_bindings_generated.dart'; -class NSSetAdapter with SetBase<ObjCObjectBase> { - NSSet set; +class _NSSetAdapter with SetBase<ObjCObjectBase> { + final NSSet _set; - NSSetAdapter(this.set); + _NSSetAdapter(this._set); @override - int get length => set.count; + int get length => _set.count; @override bool contains(Object? element) => - element is ObjCObjectBase ? set.containsObject(element) : false; + element is ObjCObjectBase ? _set.containsObject(element) : false; @override ObjCObjectBase? lookup(Object? element) => - element is ObjCObjectBase ? set.member(element) : null; + element is ObjCObjectBase ? _set.member(element) : null; @override - Iterator<ObjCObjectBase> get iterator => set.objectEnumerator().toDart(); + Iterator<ObjCObjectBase> get iterator => _set.objectEnumerator().toDart(); @override Set<ObjCObjectBase> toSet() => {...this}; @override bool add(ObjCObjectBase value) => - throw UnsupportedError("Cannot modify NSSet"); + throw UnsupportedError('Cannot modify NSSet'); @override - bool remove(Object? value) => throw UnsupportedError("Cannot modify NSSet"); + bool remove(Object? value) => throw UnsupportedError('Cannot modify NSSet'); @override - void clear() => throw UnsupportedError("Cannot modify NSSet"); + void clear() => throw UnsupportedError('Cannot modify NSSet'); } -class NSMutableSetAdapter with SetBase<ObjCObjectBase> { - NSMutableSet set; +extension NSSetToAdapter on NSSet { + /// Wraps this [NSSet] in an adapter that implements an immutable [Set]. + /// + /// This is not a conversion, doesn't create a new set, or change the + /// elements. For deep conversion, use [toDartSet]. + Set<ObjCObjectBase> toDart() => _NSSetAdapter(this); +} - NSMutableSetAdapter(this.set); +class _NSMutableSetAdapter with SetBase<ObjCObjectBase> { + final NSMutableSet _set; + + _NSMutableSetAdapter(this._set); @override - int get length => set.count; + int get length => _set.count; @override bool contains(Object? element) => - element is ObjCObjectBase ? set.containsObject(element) : false; + element is ObjCObjectBase ? _set.containsObject(element) : false; @override ObjCObjectBase? lookup(Object? element) => - element is ObjCObjectBase ? set.member(element) : null; + element is ObjCObjectBase ? _set.member(element) : null; @override - Iterator<ObjCObjectBase> get iterator => set.objectEnumerator().toDart(); + Iterator<ObjCObjectBase> get iterator => _set.objectEnumerator().toDart(); @override Set<ObjCObjectBase> toSet() => {...this}; @@ -68,7 +75,7 @@ @override bool add(ObjCObjectBase value) { final alreadyContains = contains(value); - set.addObject(value); + _set.addObject(value); return !alreadyContains; } @@ -76,10 +83,18 @@ bool remove(Object? value) { if (value is! ObjCObjectBase) return false; final alreadyContains = contains(value); - set.removeObject(value); + _set.removeObject(value); return alreadyContains; } @override - void clear() => set.removeAllObjects(); + void clear() => _set.removeAllObjects(); +} + +extension NSMutableSetToAdapter on NSMutableSet { + /// Wraps this [NSMutableSet] in an adapter that implements [Set]. + /// + /// This is not a conversion, doesn't create a new set, or change the + /// elements. For deep conversion, use [toDartSet]. + Set<ObjCObjectBase> toDart() => _NSMutableSetAdapter(this); }
diff --git a/pkgs/objective_c/lib/src/objective_c_bindings_generated.dart b/pkgs/objective_c/lib/src/objective_c_bindings_generated.dart index 4bcc911..863d286 100644 --- a/pkgs/objective_c/lib/src/objective_c_bindings_generated.dart +++ b/pkgs/objective_c/lib/src/objective_c_bindings_generated.dart
@@ -12,7 +12,6 @@ // ignore_for_file: unused_element // ignore_for_file: unused_field // coverage:ignore-file -import 'dart:collection'; // AUTO GENERATED FILE, DO NOT EDIT. // @@ -1519,9 +1518,6 @@ static NSArray of(Iterable<objc.ObjCObjectBase> elements) => NSMutableArray.of(elements); - /// Wraps this [NSArray] in an adapter that implements [Iterable]. - objc.NSArrayAdapter toDart() => objc.NSArrayAdapter(this); - /// Constructs a [NSArray] that wraps the given raw object pointer. NSArray.castFromPointer( ffi.Pointer<objc.ObjCObject> other, { @@ -4892,9 +4888,6 @@ Iterable<MapEntry<NSCopying, objc.ObjCObjectBase>> entries, ) => NSMutableDictionary.fromEntries(entries); - /// Wraps this [NSDictionary] in an adapter that implements [Map]. - objc.NSDictionaryAdapter toDart() => objc.NSDictionaryAdapter(this); - /// Constructs a [NSDictionary] that wraps the given raw object pointer. NSDictionary.castFromPointer( ffi.Pointer<objc.ObjCObject> other, { @@ -5172,9 +5165,6 @@ /// NSEnumerator extension type NSEnumerator.castFrom(objc.ObjCObjectBase _$) implements objc.ObjCObjectBase, NSObject, NSFastEnumeration { - /// Wraps this [NSEnumerator] in an adapter that implements [Iterator]. - objc.NSEnumeratorAdapter toDart() => objc.NSEnumeratorAdapter(this); - /// Constructs a [NSEnumerator] that wraps the given raw object pointer. NSEnumerator.castFromPointer( ffi.Pointer<objc.ObjCObject> other, { @@ -10394,9 +10384,6 @@ return a; } - /// Wraps this [NSMutableArray] in an adapter that implements [List]. - objc.NSMutableArrayAdapter toDart() => objc.NSMutableArrayAdapter(this); - /// Constructs a [NSMutableArray] that wraps the given raw object pointer. NSMutableArray.castFromPointer( ffi.Pointer<objc.ObjCObject> other, { @@ -11243,10 +11230,6 @@ return dict; } - /// Wraps this [NSMutableDictionary] in an adapter that implements [Map]. - objc.NSMutableDictionaryAdapter toDart() => - objc.NSMutableDictionaryAdapter(this); - /// Constructs a [NSMutableDictionary] that wraps the given raw object pointer. NSMutableDictionary.castFromPointer( ffi.Pointer<objc.ObjCObject> other, { @@ -12433,9 +12416,6 @@ return set; } - /// Wraps this [NSMutableSet] in an adapter that implements [Set]. - objc.NSMutableSetAdapter toDart() => objc.NSMutableSetAdapter(this); - /// Constructs a [NSMutableSet] that wraps the given raw object pointer. NSMutableSet.castFromPointer( ffi.Pointer<objc.ObjCObject> other, { @@ -18698,9 +18678,6 @@ static NSSet of(Iterable<objc.ObjCObjectBase> elements) => NSMutableSet.of(elements); - /// Wraps this [NSSet] in an adapter that implements [Set]. - objc.NSSetAdapter toDart() => objc.NSSetAdapter(this); - /// Constructs a [NSSet] that wraps the given raw object pointer. NSSet.castFromPointer( ffi.Pointer<objc.ObjCObject> other, {
diff --git a/pkgs/objective_c/test/converter_test.dart b/pkgs/objective_c/test/converter_test.dart index 32cb6f9..7bc5d7b 100644 --- a/pkgs/objective_c/test/converter_test.dart +++ b/pkgs/objective_c/test/converter_test.dart
@@ -53,12 +53,12 @@ final dartList = [123, 'abc', obj]; expect(toObjCObject(dartList), isA<NSArray>()); - final objCList = toObjCObject(dartList) as NSArray; - expect(objCList.length, 3); + final objCList = NSArray.castFrom(toObjCObject(dartList)); + expect(objCList.toDart().length, 3); - expect(toDartObject(objCList[0]), 123); - expect(toDartObject(objCList[1]), 'abc'); - expect(toDartObject(objCList[2]), obj); + expect(toDartObject(objCList.toDart()[0]), 123); + expect(toDartObject(objCList.toDart()[1]), 'abc'); + expect(toDartObject(objCList.toDart()[2]), obj); expect(toDartObject(objCList), dartList); @@ -79,12 +79,12 @@ final dartSet = {123, 'abc', obj}; expect(toObjCObject(dartSet), isA<NSSet>()); - final objCSet = toObjCObject(dartSet) as NSSet; - expect(objCSet.length, 3); + final objCSet = NSSet.castFrom(toObjCObject(dartSet)); + expect(objCSet.toDart().length, 3); - expect(objCSet.contains(toObjCObject(123)), isTrue); - expect(objCSet.contains(toObjCObject('abc')), isTrue); - expect(objCSet.contains(toObjCObject(obj)), isTrue); + expect(objCSet.toDart().contains(toObjCObject(123)), isTrue); + expect(objCSet.toDart().contains(toObjCObject('abc')), isTrue); + expect(objCSet.toDart().contains(toObjCObject(obj)), isTrue); expect(toDartObject(objCSet), dartSet); @@ -105,12 +105,12 @@ final dartMap = {123: 'abc', 'def': 456, 789: obj}; expect(toObjCObject(dartMap), isA<NSDictionary>()); - final objCMap = toObjCObject(dartMap) as NSDictionary; - expect(objCMap.length, 3); + final objCMap = NSDictionary.castFrom(toObjCObject(dartMap)); + expect(objCMap.toDart().length, 3); - expect(toDartObject(objCMap[toObjCObject(123)]!), 'abc'); - expect(toDartObject(objCMap[toObjCObject('def')]!), 456); - expect(toDartObject(objCMap[toObjCObject(789)]!), obj); + expect(toDartObject(objCMap.toDart()[toObjCObject(123)]!), 'abc'); + expect(toDartObject(objCMap.toDart()[toObjCObject('def')]!), 456); + expect(toDartObject(objCMap.toDart()[toObjCObject(789)]!), obj); expect(toDartObject(objCMap), dartMap);
diff --git a/pkgs/objective_c/test/observer_test.dart b/pkgs/objective_c/test/observer_test.dart index 03116dd..cd74c5e 100644 --- a/pkgs/objective_c/test/observer_test.dart +++ b/pkgs/objective_c/test/observer_test.dart
@@ -39,7 +39,9 @@ expect(keyPath.toDartString(), 'totalUnitCount'); expect(object, observed); expect(context.address, 0x1234); - values.add(toDartObject(change[NSKeyValueChangeNewKey]!)); + values.add( + toDartObject(change.toDart()[NSKeyValueChangeNewKey]!), + ); }, ); final observation = observed.addObserver( @@ -77,7 +79,9 @@ NSDictionary change, Pointer<Void> context, ) { - values.add(toDartObject(change[NSKeyValueChangeNewKey]!)); + values.add( + toDartObject(change.toDart()[NSKeyValueChangeNewKey]!), + ); }, ); @@ -116,7 +120,9 @@ NSDictionary change, Pointer<Void> context, ) { - values.add(toDartObject(change[NSKeyValueChangeNewKey]!)); + values.add( + toDartObject(change.toDart()[NSKeyValueChangeNewKey]!), + ); // This is testing that a captured reference from the observer // to the observed object does not cause leak.
diff --git a/pkgs/objective_c/test/setup.dart b/pkgs/objective_c/test/setup.dart index 2dc7afb..a7ae84d 100644 --- a/pkgs/objective_c/test/setup.dart +++ b/pkgs/objective_c/test/setup.dart
@@ -95,9 +95,9 @@ lib.lookup('_ObjectiveCBindings_wrapListenerBlock_ovsamd'); // Sanity check that the executable can find FFI symbols. - // _linkMain([...objFiles, cMain], '$cMain.exe'); - // final result = Process.runSync('$cMain.exe', []); - // if (result.exitCode != 0) { - // throw Exception('Missing symbols from executable:\n${result.stderr}'); - // } + _linkMain([...objFiles, cMain], '$cMain.exe'); + final result = Process.runSync('$cMain.exe', []); + if (result.exitCode != 0) { + throw Exception('Missing symbols from executable:\n${result.stderr}'); + } }
diff --git a/pkgs/objective_c/tool/data/extra_methods.dart.in b/pkgs/objective_c/tool/data/extra_methods.dart.in index 2d0c158..1ed9658 100644 --- a/pkgs/objective_c/tool/data/extra_methods.dart.in +++ b/pkgs/objective_c/tool/data/extra_methods.dart.in
@@ -32,9 +32,6 @@ /// Creates a [NSArray] from [elements]. static NSArray of(Iterable<objc.ObjCObjectBase> elements) => NSMutableArray.of(elements); - - /// Wraps this [NSArray] in an adapter that implements [Iterable]. - objc.NSArrayAdapter toDart() => objc.NSArrayAdapter(this); } extension type NSMutableArray.castFrom(objc.ObjCObjectBase _$) { @@ -54,9 +51,6 @@ for (final e in elements) a.addObject(e); return a; } - - /// Wraps this [NSMutableArray] in an adapter that implements [List]. - objc.NSMutableArrayAdapter toDart() => objc.NSMutableArrayAdapter(this); } extension type NSDictionary.castFrom(objc.ObjCObjectBase _$) { @@ -68,9 +62,6 @@ static NSDictionary fromEntries( Iterable<MapEntry<NSCopying, objc.ObjCObjectBase>> entries, ) => NSMutableDictionary.fromEntries(entries); - - /// Wraps this [NSDictionary] in an adapter that implements [Map]. - objc.NSDictionaryAdapter toDart() => objc.NSDictionaryAdapter(this); } extension type NSMutableDictionary.castFrom(objc.ObjCObjectBase _$) { @@ -91,24 +82,12 @@ } return dict; } - - /// Wraps this [NSMutableDictionary] in an adapter that implements [Map]. - objc.NSMutableDictionaryAdapter toDart() => - objc.NSMutableDictionaryAdapter(this); -} - -extension type NSEnumerator.castFrom(objc.ObjCObjectBase _$) { - /// Wraps this [NSEnumerator] in an adapter that implements [Iterator]. - objc.NSEnumeratorAdapter toDart() => objc.NSEnumeratorAdapter(this); } extension type NSSet.castFrom(objc.ObjCObjectBase _$) { /// Creates a [NSSet] from [elements]. static NSSet of(Iterable<objc.ObjCObjectBase> elements) => NSMutableSet.of(elements); - - /// Wraps this [NSSet] in an adapter that implements [Set]. - objc.NSSetAdapter toDart() => objc.NSSetAdapter(this); } extension type NSMutableSet.castFrom(objc.ObjCObjectBase _$) { @@ -118,7 +97,4 @@ for (final e in elements) set.addObject(e); return set; } - - /// Wraps this [NSMutableSet] in an adapter that implements [Set]. - objc.NSMutableSetAdapter toDart() => objc.NSMutableSetAdapter(this); }
diff --git a/pkgs/objective_c/tool/generate_code.dart b/pkgs/objective_c/tool/generate_code.dart index e6de8b4..78e7bb4 100644 --- a/pkgs/objective_c/tool/generate_code.dart +++ b/pkgs/objective_c/tool/generate_code.dart
@@ -82,7 +82,7 @@ extraMethods.remove(cls); } } - assert(extraMethods.length == 0); + assert(extraMethods.isEmpty); File(filename).writeAsStringSync(out.toString()); }