From 1cf054bf9e085d9ff2ec71b4ab0ba75d8e72b122 Mon Sep 17 00:00:00 2001 From: Liam Appelbe Date: Fri, 15 Nov 2024 12:33:43 +1100 Subject: [PATCH 1/3] Fix CI failure --- .../lib/src/code_generator/objc_methods.dart | 5 +-- .../lib/src/code_generator/objc_protocol.dart | 3 +- .../src/visitor/fix_overridden_methods.dart | 3 +- .../large_objc_test.dart | 36 ++++++++++--------- 4 files changed, 27 insertions(+), 20 deletions(-) diff --git a/pkgs/ffigen/lib/src/code_generator/objc_methods.dart b/pkgs/ffigen/lib/src/code_generator/objc_methods.dart index ef00c87549..686626b159 100644 --- a/pkgs/ffigen/lib/src/code_generator/objc_methods.dart +++ b/pkgs/ffigen/lib/src/code_generator/objc_methods.dart @@ -259,8 +259,9 @@ class ObjCMethod extends AstNode { ); } - String getDartMethodName(UniqueNamer uniqueNamer) { - if (property != null) { + String getDartMethodName(UniqueNamer uniqueNamer, + {bool usePropertyNaming = true}) { + if (property != null && usePropertyNaming) { // A getter and a setter are allowed to have the same name, so we can't // just run the name through uniqueNamer. Instead they need to share // the dartName, which is run through uniqueNamer. diff --git a/pkgs/ffigen/lib/src/code_generator/objc_protocol.dart b/pkgs/ffigen/lib/src/code_generator/objc_protocol.dart index 89b3112019..cca7da841a 100644 --- a/pkgs/ffigen/lib/src/code_generator/objc_protocol.dart +++ b/pkgs/ffigen/lib/src/code_generator/objc_protocol.dart @@ -55,7 +55,8 @@ class ObjCProtocol extends NoLookUpBinding with ObjCMethods { var anyListeners = false; for (final method in methods) { - final methodName = method.getDartMethodName(methodNamer); + final methodName = + method.getDartMethodName(methodNamer, usePropertyNaming: false); final fieldName = methodName; final argName = methodName; final block = method.protocolBlock!; diff --git a/pkgs/ffigen/lib/src/visitor/fix_overridden_methods.dart b/pkgs/ffigen/lib/src/visitor/fix_overridden_methods.dart index 8e989559da..62ca29a8fc 100644 --- a/pkgs/ffigen/lib/src/visitor/fix_overridden_methods.dart +++ b/pkgs/ffigen/lib/src/visitor/fix_overridden_methods.dart @@ -128,7 +128,8 @@ class FixOverriddenMethodsVisitation extends Visitation { for (final method in node.methods) { if (method.isClassMethod) continue; final (root, rootMethod) = _findRootWithMethod(node, method); - if (method.isProperty == rootMethod.isProperty) continue; + if ((method.kind == ObjCMethodKind.propertyGetter) == + (rootMethod.kind == ObjCMethodKind.propertyGetter)) continue; _convertAllSubtreeMethodsToProperties(root, rootMethod); } } diff --git a/pkgs/ffigen/test/large_integration_tests/large_objc_test.dart b/pkgs/ffigen/test/large_integration_tests/large_objc_test.dart index 5d003f351d..a0449b8ea2 100644 --- a/pkgs/ffigen/test/large_integration_tests/large_objc_test.dart +++ b/pkgs/ffigen/test/large_integration_tests/large_objc_test.dart @@ -14,6 +14,7 @@ import 'dart:io'; import 'dart:math'; import 'package:ffigen/ffigen.dart'; +import 'package:ffigen/src/code_generator/utils.dart'; import 'package:ffigen/src/config_provider/config.dart'; import 'package:ffigen/src/config_provider/config_types.dart'; import 'package:logging/logging.dart'; @@ -32,12 +33,15 @@ void main() { // reasonable amount of time. // TODO(https://github.com/dart-lang/sdk/issues/56247): Remove this. const inclusionRatio = 0.1; - final rand = Random(1234); - bool randInclude([_, __]) => rand.nextDouble() < inclusionRatio; - final randomFilter = DeclarationFilters( - shouldInclude: randInclude, - shouldIncludeMember: randInclude, - ); + const seed = 1234; + bool randInclude(String kind, Declaration clazz, [String? method]) => + fnvHash32('$seed.$kind.${clazz.usr}.$method') < + ((1 << 32) * inclusionRatio); + DeclarationFilters randomFilter(String kind) => DeclarationFilters( + shouldInclude: (Declaration clazz) => randInclude(kind, clazz), + shouldIncludeMember: (Declaration clazz, String method) => + randInclude('$kind.memb', clazz, method), + ); const outFile = 'test/large_integration_tests/large_objc_bindings.dart'; const outObjCFile = 'test/large_integration_tests/large_objc_bindings.m'; @@ -51,16 +55,16 @@ void main() { includeTransitiveObjCInterfaces: false, includeTransitiveObjCProtocols: false, includeTransitiveObjCCategories: false, - functionDecl: randomFilter, - structDecl: randomFilter, - unionDecl: randomFilter, - enumClassDecl: randomFilter, - unnamedEnumConstants: randomFilter, - globals: randomFilter, - typedefs: randomFilter, - objcInterfaces: randomFilter, - objcProtocols: randomFilter, - objcCategories: randomFilter, + functionDecl: randomFilter('functionDecl'), + structDecl: randomFilter('structDecl'), + unionDecl: randomFilter('unionDecl'), + enumClassDecl: randomFilter('enumClassDecl'), + unnamedEnumConstants: randomFilter('unnamedEnumConstants'), + globals: randomFilter('globals'), + typedefs: randomFilter('typedefs'), + objcInterfaces: randomFilter('objcInterfaces'), + objcProtocols: randomFilter('objcProtocols'), + objcCategories: randomFilter('objcCategories'), externalVersions: ExternalVersions( ios: Versions(min: Version(12, 0, 0)), macos: Versions(min: Version(10, 14, 0)), From 7bcb2d7459ab786c88ac6b79d758daa94224eb74 Mon Sep 17 00:00:00 2001 From: Liam Appelbe Date: Fri, 15 Nov 2024 12:53:54 +1100 Subject: [PATCH 2/3] fix analysis --- pkgs/ffigen/test/large_integration_tests/large_objc_test.dart | 1 - 1 file changed, 1 deletion(-) diff --git a/pkgs/ffigen/test/large_integration_tests/large_objc_test.dart b/pkgs/ffigen/test/large_integration_tests/large_objc_test.dart index a0449b8ea2..212f997df2 100644 --- a/pkgs/ffigen/test/large_integration_tests/large_objc_test.dart +++ b/pkgs/ffigen/test/large_integration_tests/large_objc_test.dart @@ -11,7 +11,6 @@ library; import 'dart:async'; import 'dart:io'; -import 'dart:math'; import 'package:ffigen/ffigen.dart'; import 'package:ffigen/src/code_generator/utils.dart'; From f8c2349bb54bb2ba07499bc9154e97e0c3ad66b3 Mon Sep 17 00:00:00 2001 From: Liam Appelbe Date: Fri, 15 Nov 2024 13:17:08 +1100 Subject: [PATCH 3/3] Add comment --- pkgs/ffigen/lib/src/visitor/fix_overridden_methods.dart | 1 + 1 file changed, 1 insertion(+) diff --git a/pkgs/ffigen/lib/src/visitor/fix_overridden_methods.dart b/pkgs/ffigen/lib/src/visitor/fix_overridden_methods.dart index 62ca29a8fc..d06c7db1a2 100644 --- a/pkgs/ffigen/lib/src/visitor/fix_overridden_methods.dart +++ b/pkgs/ffigen/lib/src/visitor/fix_overridden_methods.dart @@ -128,6 +128,7 @@ class FixOverriddenMethodsVisitation extends Visitation { for (final method in node.methods) { if (method.isClassMethod) continue; final (root, rootMethod) = _findRootWithMethod(node, method); + // If method and rootMethod are the same kind, then there's nothing to do. if ((method.kind == ObjCMethodKind.propertyGetter) == (rootMethod.kind == ObjCMethodKind.propertyGetter)) continue; _convertAllSubtreeMethodsToProperties(root, rootMethod);