[go: nahoru, domu]

Use type-safe events for PersistenceImpl

Bug: 1228674
Change-Id: Ie4f5eaaac49e5925f5babfe6ef705df8d308d8dd
Reviewed-on: https://chromium-review.googlesource.com/c/devtools/devtools-frontend/+/3122340
Reviewed-by: Simon Zünd <szuend@chromium.org>
Commit-Queue: Kateryna Prokopenko <kprokopenko@google.com>
diff --git a/front_end/models/persistence/PersistenceImpl.ts b/front_end/models/persistence/PersistenceImpl.ts
index 0296938..9056a84 100644
--- a/front_end/models/persistence/PersistenceImpl.ts
+++ b/front_end/models/persistence/PersistenceImpl.ts
@@ -15,7 +15,7 @@
 
 let persistenceInstance: PersistenceImpl;
 
-export class PersistenceImpl extends Common.ObjectWrapper.ObjectWrapper {
+export class PersistenceImpl extends Common.ObjectWrapper.ObjectWrapper<EventTypes> {
   private readonly workspace: Workspace.Workspace.WorkspaceImpl;
   private readonly breakpointManager: Bindings.BreakpointManager.BreakpointManager;
   private readonly filePathPrefixesToBindingCount: Map<string, number>;
@@ -348,9 +348,16 @@
 export const NodeSuffix = '\n});';
 export const NodeShebang = '#!/usr/bin/env node';
 
-export const Events = {
-  BindingCreated: Symbol('BindingCreated'),
-  BindingRemoved: Symbol('BindingRemoved'),
+// TODO(crbug.com/1167717): Make this a const enum again
+// eslint-disable-next-line rulesdir/const_enum
+export enum Events {
+  BindingCreated = 'BindingCreated',
+  BindingRemoved = 'BindingRemoved',
+}
+
+export type EventTypes = {
+  [Events.BindingCreated]: PersistenceBinding,
+  [Events.BindingRemoved]: PersistenceBinding,
 };
 
 export class PathEncoder {
diff --git a/front_end/models/persistence/PersistenceUtils.ts b/front_end/models/persistence/PersistenceUtils.ts
index 4ae74e9..13be6a1 100644
--- a/front_end/models/persistence/PersistenceUtils.ts
+++ b/front_end/models/persistence/PersistenceUtils.ts
@@ -77,8 +77,8 @@
     persistence.addEventListener(Events.BindingRemoved, this.bindingChanged, this);
   }
 
-  private bindingChanged(event: Common.EventTarget.EventTargetEvent): void {
-    const binding = event.data as PersistenceBinding;
+  private bindingChanged(event: Common.EventTarget.EventTargetEvent<PersistenceBinding>): void {
+    const binding = event.data;
     this.dispatchEventToListeners(Components.Linkifier.LinkDecorator.Events.LinkIconChanged, binding.network);
   }
 
diff --git a/front_end/panels/sources/NavigatorView.ts b/front_end/panels/sources/NavigatorView.ts
index f6f562e..a9a585d 100644
--- a/front_end/panels/sources/NavigatorView.ts
+++ b/front_end/panels/sources/NavigatorView.ts
@@ -270,8 +270,9 @@
     }
   }
 
-  private onBindingChanged(event: Common.EventTarget.EventTargetEvent): void {
-    const binding = (event.data as Persistence.Persistence.PersistenceBinding);
+  private onBindingChanged(event: Common.EventTarget.EventTargetEvent<Persistence.Persistence.PersistenceBinding>):
+      void {
+    const binding = event.data;
 
     // Update UISourceCode titles.
     const networkNodes = this.uiSourceCodeNodes.get(binding.network);
diff --git a/front_end/panels/sources/TabbedEditorContainer.ts b/front_end/panels/sources/TabbedEditorContainer.ts
index 544188b..7f0bd59 100644
--- a/front_end/panels/sources/TabbedEditorContainer.ts
+++ b/front_end/panels/sources/TabbedEditorContainer.ts
@@ -108,8 +108,9 @@
     this.uriToUISourceCode = new Map();
   }
 
-  private onBindingCreated(event: Common.EventTarget.EventTargetEvent): void {
-    const binding = (event.data as Persistence.Persistence.PersistenceBinding);
+  private onBindingCreated(event: Common.EventTarget.EventTargetEvent<Persistence.Persistence.PersistenceBinding>):
+      void {
+    const binding = event.data;
     this.updateFileTitle(binding.fileSystem);
 
     const networkTabId = this.tabIds.get(binding.network);
@@ -145,8 +146,9 @@
     this.updateHistory();
   }
 
-  private onBindingRemoved(event: Common.EventTarget.EventTargetEvent): void {
-    const binding = (event.data as Persistence.Persistence.PersistenceBinding);
+  private onBindingRemoved(event: Common.EventTarget.EventTargetEvent<Persistence.Persistence.PersistenceBinding>):
+      void {
+    const binding = event.data;
     this.updateFileTitle(binding.fileSystem);
   }