Skip to content

🐛 [firebase_core] FirebasePluginPlatform should not extend PlatformInterface, verifyExtends is never called #8945

Open
@collinjackson

Description

@collinjackson

Bug report

FirebasePluginPlatform contains dead code. It should be renamed to FirebasePlugin and should not extend PlatformInterface.

Reasoning:
FirebasePluginPlatform.verifyExtends is not ever called. There is no reason for FirebasePluginPlatform to be a PlatformInterface. Having it extend PlatformInterface is fragile because if a method were ever added to FirebasePluginPlatform or PlatformInterface, it could break compatibility with libraries that are using these classes with implements.

Steps to reproduce

class CustomFirebaseAppCheck implements FirebaseAppCheck {
  CustomFirebaseAppCheck() { ... }
  @override
  final FirebaseApp app;
  @override
  Future<void> activate({String? webRecaptchaSiteKey}) { ... }
  @override
  Future<String?> getToken([bool? forceRefresh]) { ... }
  @override
  Future<void> setTokenAutoRefreshEnabled(bool isTokenAutoRefreshEnabled) { ... }
  @override
  Stream<String?> get onTokenChange { ... }
}

Everything would work initially, but minor updates such as new methods added to FirebasePluginPlatform would cause the plugin to fail to compile.

Expected behavior

  • Remove FirebasePluginPlatform.verifyExtends, which is dead code.
  • FirebasePluginPlatform should not extend PlatformInterface. Subclasses of PlatformInterface are not part of the app-facing plugin interface.
  • Rename FirebasePluginPlatform to FirebasePlugin. (Optionally, provide a soft-deprecated compatibility shim FirebasePluginPlatform that extends FirebasePlugin so that this isn't a breaking change.) Update every plugin's app-facing class to extend this new FirebasePlugin class. This is to make it clear that the class is exposed to apps, unlike platform classes.

Additional context

Related issues:
#8095
#8096

Metadata

Metadata

Assignees

Labels

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions