Skip to content

Commit 454b155

Browse files
authored
chore: delete Listener interface from implementation (#226)
1 parent 808f666 commit 454b155

File tree

9 files changed

+68
-201
lines changed

9 files changed

+68
-201
lines changed

playwright/src/main/java/com/microsoft/playwright/impl/BrowserContextImpl.java

Lines changed: 4 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -81,8 +81,7 @@ public void offPage(Consumer<Page> handler) {
8181

8282
private <T> T waitForEventWithTimeout(EventType eventType, Runnable code, Double timeout) {
8383
List<Waitable<T>> waitables = new ArrayList<>();
84-
waitables.add(new WaitableEvent<>(listeners, eventType)
85-
.apply(event -> (T) event.data()));
84+
waitables.add(new WaitableEvent<>(listeners, eventType));
8685
waitables.add(new WaitableContextClose<>());
8786
waitables.add(timeoutSettings.createWaitable(timeout));
8887
return runUntil(code, new WaitableRace<>(waitables));
@@ -349,36 +348,14 @@ public void unroute(Predicate<String> url, Consumer<Route> handler) {
349348
unroute(new UrlMatcher(url), handler);
350349
}
351350

352-
private class WaitableContextClose<R> implements Waitable<R>, Listener<EventType> {
353-
private String errorMessage;
354-
351+
private class WaitableContextClose<R> extends WaitableEvent<EventType, R> {
355352
WaitableContextClose() {
356-
listeners.add(EventType.CLOSE, this);
357-
}
358-
359-
@Override
360-
public void handle(Event<EventType> event) {
361-
if (EventType.CLOSE == event.type()) {
362-
errorMessage = "Context closed";
363-
} else {
364-
return;
365-
}
366-
dispose();
367-
}
368-
369-
@Override
370-
public boolean isDone() {
371-
return errorMessage != null;
353+
super(BrowserContextImpl.this.listeners, EventType.CLOSE);
372354
}
373355

374356
@Override
375357
public R get() {
376-
throw new PlaywrightException(errorMessage);
377-
}
378-
379-
@Override
380-
public void dispose() {
381-
listeners.remove(EventType.CLOSE, this);
358+
throw new PlaywrightException("Context closed");
382359
}
383360
}
384361

playwright/src/main/java/com/microsoft/playwright/impl/FrameImpl.java

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
import java.nio.file.Files;
2727
import java.nio.file.Path;
2828
import java.util.*;
29+
import java.util.function.Consumer;
2930

3031
import static com.microsoft.playwright.Frame.LoadState.*;
3132
import static com.microsoft.playwright.impl.Serialization.*;
@@ -766,7 +767,7 @@ void waitForLoadStateImpl(LoadState state, WaitForLoadStateOptions options) {
766767
runUntil(() -> {}, new WaitableRace<>(waitables));
767768
}
768769

769-
private class WaitForLoadStateHelper implements Waitable<Void>, Listener<InternalEventType> {
770+
private class WaitForLoadStateHelper implements Waitable<Void>, Consumer<LoadState> {
770771
private final LoadState expectedState;
771772
private boolean isDone;
772773

@@ -779,9 +780,8 @@ private class WaitForLoadStateHelper implements Waitable<Void>, Listener<Interna
779780
}
780781

781782
@Override
782-
public void handle(Event<InternalEventType> event) {
783-
assert event.type() == InternalEventType.LOADSTATE;
784-
if (expectedState.equals(event.data())) {
783+
public void accept(LoadState state) {
784+
if (expectedState.equals(state)) {
785785
isDone = true;
786786
dispose();
787787
}
@@ -801,7 +801,7 @@ public Void get() {
801801
}
802802
}
803803

804-
private class WaitForNavigationHelper implements Waitable<Response>, Listener<InternalEventType> {
804+
private class WaitForNavigationHelper implements Waitable<Response>, Consumer<JsonObject> {
805805
private final UrlMatcher matcher;
806806
private final LoadState expectedLoadState;
807807
private WaitForLoadStateHelper loadStateHelper;
@@ -816,9 +816,7 @@ private class WaitForNavigationHelper implements Waitable<Response>, Listener<In
816816
}
817817

818818
@Override
819-
public void handle(Event<InternalEventType> event) {
820-
assert InternalEventType.NAVIGATED == event.type();
821-
JsonObject params = (JsonObject) event.data();
819+
public void accept(JsonObject params) {
822820
if (!matcher.test(params.get("url").getAsString())) {
823821
return;
824822
}

playwright/src/main/java/com/microsoft/playwright/impl/Listener.java

Lines changed: 0 additions & 23 deletions
This file was deleted.

playwright/src/main/java/com/microsoft/playwright/impl/ListenerCollection.java

Lines changed: 13 additions & 56 deletions
Original file line numberDiff line numberDiff line change
@@ -16,80 +16,37 @@
1616

1717
package com.microsoft.playwright.impl;
1818

19-
import com.microsoft.playwright.Event;
20-
21-
import java.util.*;
19+
import java.util.ArrayList;
20+
import java.util.Collections;
21+
import java.util.HashMap;
22+
import java.util.List;
2223
import java.util.function.Consumer;
2324

2425
class ListenerCollection <EventType> {
25-
private final HashMap<EventType, List<Listener<EventType>>> listeners = new HashMap<>();
26+
private final HashMap<EventType, List<Consumer<?>>> listeners = new HashMap<>();
2627

27-
void notify(EventType eventType, Object param) {
28-
List<Listener<EventType>> list = listeners.get(eventType);
28+
<T> void notify(EventType eventType, T param) {
29+
List<Consumer<?>> list = listeners.get(eventType);
2930
if (list == null) {
3031
return;
3132
}
3233

33-
Event<EventType> event = new Event<EventType>() {
34-
@Override
35-
public EventType type() {
36-
return eventType;
37-
}
38-
39-
@Override
40-
public Object data() {
41-
return param;
42-
}
43-
};
44-
45-
for (Listener<EventType> listener: new ArrayList<>(list)) {
46-
listener.handle(event);
47-
}
48-
}
49-
50-
private static class ConsumerWrapper<EventType> implements Listener<EventType> {
51-
final Consumer<?> callback;
52-
53-
private ConsumerWrapper(Consumer<?> callback) {
54-
this.callback = callback;
34+
for (Consumer<?> listener: new ArrayList<>(list)) {
35+
((Consumer<T>) listener).accept(param);
5536
}
56-
57-
@Override
58-
public void handle(Event<EventType> event) {
59-
((Consumer<Object>) callback).accept(event.data());
60-
}
61-
@Override
62-
public boolean equals(Object o) {
63-
if (this == o) return true;
64-
if (o == null || getClass() != o.getClass()) return false;
65-
ConsumerWrapper<?> that = (ConsumerWrapper<?>) o;
66-
return Objects.equals(callback, that.callback);
67-
}
68-
69-
@Override
70-
public int hashCode() {
71-
return Objects.hash(callback);
72-
}
73-
}
74-
75-
void add(EventType type, Consumer listener) {
76-
add(type, new ConsumerWrapper<>(listener));
77-
}
78-
void remove(EventType type, Consumer listener) {
79-
remove(type, new ConsumerWrapper<>(listener));
8037
}
8138

82-
void add(EventType type, Listener<EventType> listener) {
83-
List<Listener<EventType>> list = listeners.get(type);
39+
void add(EventType type, Consumer<?> listener) {
40+
List<Consumer<?>> list = listeners.get(type);
8441
if (list == null) {
8542
list = new ArrayList<>();
8643
listeners.put(type, list);
8744
}
8845
list.add(listener);
8946
}
9047

91-
void remove(EventType type, Listener<EventType> listener) {
92-
List<Listener<EventType>> list = listeners.get(type);
48+
void remove(EventType type, Consumer<?> listener) {
49+
List<Consumer<?>> list = listeners.get(type);
9350
if (list == null) {
9451
return;
9552
}

playwright/src/main/java/com/microsoft/playwright/impl/PageImpl.java

Lines changed: 20 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@
2929
import static com.microsoft.playwright.impl.Serialization.gson;
3030
import static com.microsoft.playwright.impl.Utils.convertViaJson;
3131
import static com.microsoft.playwright.impl.Utils.isSafeCloseError;
32+
import static java.util.Arrays.asList;
3233

3334

3435
public class PageImpl extends ChannelOwner implements Page {
@@ -43,15 +44,15 @@ public class PageImpl extends ChannelOwner implements Page {
4344
private final Set<FrameImpl> frames = new LinkedHashSet<>();
4445
private final ListenerCollection<EventType> listeners = new ListenerCollection<EventType>() {
4546
@Override
46-
void add(EventType eventType, Listener<EventType> listener) {
47+
void add(EventType eventType, Consumer<?> listener) {
4748
if (eventType == EventType.FILECHOOSER) {
4849
willAddFileChooserListener();
4950
}
5051
super.add(eventType, listener);
5152
}
5253

5354
@Override
54-
void remove(EventType eventType, Listener<EventType> listener) {
55+
void remove(EventType eventType, Consumer<?> listener) {
5556
super.remove(eventType, listener);
5657
if (eventType == EventType.FILECHOOSER) {
5758
didRemoveFileChooserListener();
@@ -444,8 +445,7 @@ public ConsoleMessage waitForConsole(Runnable code, WaitForConsoleOptions option
444445

445446
private <T> T waitForEventWithTimeout(EventType eventType, Runnable code, Double timeout) {
446447
List<Waitable<T>> waitables = new ArrayList<>();
447-
waitables.add(new WaitableEvent<>(listeners, eventType)
448-
.apply(event -> (T) event.data()));
448+
waitables.add(new WaitableEvent<>(listeners, eventType));
449449
waitables.add(createWaitForCloseHelper());
450450
waitables.add(createWaitableTimeout(timeout));
451451
return runUntil(code, new WaitableRace<>(waitables));
@@ -1219,13 +1219,13 @@ public String stack() {
12191219
}
12201220
}
12211221

1222-
private class WaitableFrameDetach extends WaitableEvent<EventType> {
1222+
private class WaitableFrameDetach extends WaitableEvent<EventType, Frame> {
12231223
WaitableFrameDetach(Frame frameArg) {
1224-
super(PageImpl.this.listeners, EventType.FRAMEDETACHED, event -> frameArg.equals(event.data()));
1224+
super(PageImpl.this.listeners, EventType.FRAMEDETACHED, detachedFrame -> frameArg.equals(detachedFrame));
12251225
}
12261226

12271227
@Override
1228-
public Event<EventType> get() {
1228+
public Frame get() {
12291229
throw new PlaywrightException("Navigating frame was detached");
12301230
}
12311231
}
@@ -1237,47 +1237,28 @@ <T> Waitable<T> createWaitableFrameDetach(Frame frame) {
12371237
}
12381238

12391239
<T> Waitable<T> createWaitForCloseHelper() {
1240-
return new WaitablePageClose<T>();
1240+
return new WaitableRace<T>(asList(new WaitablePageClose(), new WaitablePageCrash()));
12411241
}
12421242

1243-
private class WaitablePageClose<R> implements Waitable<R>, Listener<EventType> {
1244-
private final List<EventType> subscribedEvents;
1245-
private String errorMessage;
1246-
1243+
private class WaitablePageClose<T> extends WaitableEvent<EventType, T> {
12471244
WaitablePageClose() {
1248-
subscribedEvents = Arrays.asList(EventType.CLOSE, EventType.CRASH);
1249-
for (EventType e : subscribedEvents) {
1250-
listeners.add(e, this);
1251-
}
1245+
super(PageImpl.this.listeners, EventType.CLOSE);
12521246
}
12531247

12541248
@Override
1255-
public void handle(Event<EventType> event) {
1256-
if (EventType.CLOSE == event.type()) {
1257-
errorMessage = "Page closed";
1258-
} else if (EventType.CRASH == event.type()) {
1259-
errorMessage = "Page crashed";
1260-
} else {
1261-
return;
1262-
}
1263-
dispose();
1264-
}
1265-
1266-
@Override
1267-
public boolean isDone() {
1268-
return errorMessage != null;
1249+
public T get() {
1250+
throw new PlaywrightException("Page closed");
12691251
}
1252+
}
12701253

1271-
@Override
1272-
public R get() {
1273-
throw new PlaywrightException(errorMessage);
1254+
private class WaitablePageCrash<T> extends WaitableEvent<EventType, T> {
1255+
WaitablePageCrash() {
1256+
super(PageImpl.this.listeners, EventType.CRASH);
12741257
}
12751258

12761259
@Override
1277-
public void dispose() {
1278-
for (EventType e : subscribedEvents) {
1279-
listeners.remove(e, this);
1280-
}
1260+
public T get() {
1261+
throw new PlaywrightException("Page crashed");
12811262
}
12821263
}
12831264

@@ -1306,8 +1287,7 @@ private Request waitForRequestImpl(Runnable code, Predicate<Request> predicate,
13061287
}
13071288
List<Waitable<Request>> waitables = new ArrayList<>();
13081289
waitables.add(new WaitableEvent<>(listeners, EventType.REQUEST,
1309-
e -> predicate == null || predicate.test(((Request) e.data())))
1310-
.apply(event -> (Request) event.data()));
1290+
request -> predicate == null || predicate.test(request)));
13111291
waitables.add(createWaitForCloseHelper());
13121292
waitables.add(createWaitableTimeout(options.timeout));
13131293
return runUntil(code, new WaitableRace<>(waitables));
@@ -1338,8 +1318,7 @@ private Response waitForResponseImpl(Runnable code, Predicate<Response> predicat
13381318
}
13391319
List<Waitable<Response>> waitables = new ArrayList<>();
13401320
waitables.add(new WaitableEvent<>(listeners, EventType.RESPONSE,
1341-
e -> predicate == null || predicate.test(((Response) e.data())))
1342-
.apply(event -> (Response) event.data()));
1321+
response -> predicate == null || predicate.test(response)));
13431322
waitables.add(createWaitForCloseHelper());
13441323
waitables.add(createWaitableTimeout(options.timeout));
13451324
return runUntil(code, new WaitableRace<>(waitables));

0 commit comments

Comments
 (0)