diff --git a/java/src/org/openqa/selenium/grid/sessionmap/AddToSessionMap.java b/java/src/org/openqa/selenium/grid/sessionmap/AddToSessionMap.java index b3a9989f6a759..ee7e0243ce539 100644 --- a/java/src/org/openqa/selenium/grid/sessionmap/AddToSessionMap.java +++ b/java/src/org/openqa/selenium/grid/sessionmap/AddToSessionMap.java @@ -24,7 +24,7 @@ import static org.openqa.selenium.remote.tracing.HttpTracing.newSpanAsChildOf; import static org.openqa.selenium.remote.tracing.Tags.HTTP_REQUEST; -import com.google.common.collect.ImmutableMap; +import java.util.Map; import java.util.Objects; import org.openqa.selenium.grid.data.Session; import org.openqa.selenium.internal.Require; @@ -61,7 +61,7 @@ public HttpResponse execute(HttpRequest req) { sessions.add(session); - return new HttpResponse().setContent(asJson(ImmutableMap.of("value", true))); + return new HttpResponse().setContent(asJson(Map.of("value", true))); } } } diff --git a/java/src/org/openqa/selenium/grid/sessionmap/GetFromSessionMap.java b/java/src/org/openqa/selenium/grid/sessionmap/GetFromSessionMap.java index 44928d516edf5..6210794391212 100644 --- a/java/src/org/openqa/selenium/grid/sessionmap/GetFromSessionMap.java +++ b/java/src/org/openqa/selenium/grid/sessionmap/GetFromSessionMap.java @@ -23,7 +23,7 @@ import static org.openqa.selenium.remote.tracing.HttpTracing.newSpanAsChildOf; import static org.openqa.selenium.remote.tracing.Tags.HTTP_REQUEST; -import com.google.common.collect.ImmutableMap; +import java.util.Map; import org.openqa.selenium.grid.data.Session; import org.openqa.selenium.internal.Require; import org.openqa.selenium.remote.SessionId; @@ -56,7 +56,7 @@ public HttpResponse execute(HttpRequest req) { CAPABILITIES.accept(span, session.getCapabilities()); span.setAttribute("session.uri", session.getUri().toString()); - return new HttpResponse().setContent(asJson(ImmutableMap.of("value", session))); + return new HttpResponse().setContent(asJson(Map.of("value", session))); } } } diff --git a/java/src/org/openqa/selenium/grid/sessionmap/httpd/DefaultSessionMapConfig.java b/java/src/org/openqa/selenium/grid/sessionmap/httpd/DefaultSessionMapConfig.java index bf530dec0d3b7..9b5fece2fd98b 100644 --- a/java/src/org/openqa/selenium/grid/sessionmap/httpd/DefaultSessionMapConfig.java +++ b/java/src/org/openqa/selenium/grid/sessionmap/httpd/DefaultSessionMapConfig.java @@ -17,21 +17,21 @@ package org.openqa.selenium.grid.sessionmap.httpd; -import com.google.common.collect.ImmutableMap; +import java.util.Map; import org.openqa.selenium.grid.config.MapConfig; class DefaultSessionMapConfig extends MapConfig { public DefaultSessionMapConfig() { super( - ImmutableMap.of( + Map.of( "events", - ImmutableMap.of( + Map.of( "publish", "tcp://*:4442", "subscribe", "tcp://*:4443"), "sessions", - ImmutableMap.of( + Map.of( "implementation", "org.openqa.selenium.grid.sessionmap.local.LocalSessionMap"), - "server", ImmutableMap.of("port", 5556))); + "server", Map.of("port", 5556))); } } diff --git a/java/src/org/openqa/selenium/grid/sessionmap/httpd/SessionMapServer.java b/java/src/org/openqa/selenium/grid/sessionmap/httpd/SessionMapServer.java index 64b07b11abbbf..91689f57f9ef2 100644 --- a/java/src/org/openqa/selenium/grid/sessionmap/httpd/SessionMapServer.java +++ b/java/src/org/openqa/selenium/grid/sessionmap/httpd/SessionMapServer.java @@ -26,12 +26,11 @@ import static org.openqa.selenium.remote.http.Route.get; import com.google.auto.service.AutoService; -import com.google.common.collect.ImmutableMap; -import com.google.common.collect.ImmutableSet; import java.io.Closeable; import java.io.IOException; import java.io.UncheckedIOException; import java.util.Collections; +import java.util.Map; import java.util.Set; import java.util.logging.Level; import java.util.logging.Logger; @@ -64,7 +63,7 @@ public String getDescription() { @Override public Set getConfigurableRoles() { - return ImmutableSet.of(EVENT_BUS_ROLE, HTTPD_ROLE, SESSION_MAP_ROLE); + return Set.of(EVENT_BUS_ROLE, HTTPD_ROLE, SESSION_MAP_ROLE); } @Override @@ -100,9 +99,9 @@ protected Handlers createHandlers(Config config) { .addHeader("Content-Type", JSON_UTF_8) .setContent( asJson( - ImmutableMap.of( + Map.of( "value", - ImmutableMap.of( + Map.of( "ready", true, "message", diff --git a/java/src/org/openqa/selenium/grid/sessionmap/redis/RedisBackedSessionMap.java b/java/src/org/openqa/selenium/grid/sessionmap/redis/RedisBackedSessionMap.java index 62b1220edb21a..3c0cfc37da93f 100644 --- a/java/src/org/openqa/selenium/grid/sessionmap/redis/RedisBackedSessionMap.java +++ b/java/src/org/openqa/selenium/grid/sessionmap/redis/RedisBackedSessionMap.java @@ -23,12 +23,12 @@ import static org.openqa.selenium.remote.RemoteTags.SESSION_ID_EVENT; import static org.openqa.selenium.remote.tracing.Tags.EXCEPTION; -import com.google.common.collect.ImmutableMap; import io.lettuce.core.KeyValue; import java.net.URI; import java.net.URISyntaxException; import java.time.Instant; import java.util.List; +import java.util.Map; import java.util.logging.Logger; import org.openqa.selenium.Capabilities; import org.openqa.selenium.ImmutableCapabilities; @@ -139,7 +139,7 @@ public boolean add(Session session) { span.addEvent("Inserted into the database", attributeMap); connection.mset( - ImmutableMap.of( + Map.of( uriKey, uriValue, stereotypeKey, stereotypeJson, capabilitiesKey, capabilitiesJson, diff --git a/java/src/org/openqa/selenium/grid/sessionqueue/ClearSessionQueue.java b/java/src/org/openqa/selenium/grid/sessionqueue/ClearSessionQueue.java index 5f1cabc65a0d7..917201172e7de 100644 --- a/java/src/org/openqa/selenium/grid/sessionqueue/ClearSessionQueue.java +++ b/java/src/org/openqa/selenium/grid/sessionqueue/ClearSessionQueue.java @@ -23,7 +23,7 @@ import static org.openqa.selenium.remote.tracing.Tags.HTTP_REQUEST; import static org.openqa.selenium.remote.tracing.Tags.HTTP_RESPONSE; -import com.google.common.collect.ImmutableMap; +import java.util.Map; import org.openqa.selenium.internal.Require; import org.openqa.selenium.remote.http.HttpHandler; import org.openqa.selenium.remote.http.HttpRequest; @@ -56,14 +56,14 @@ public HttpResponse execute(HttpRequest req) { if (value != 0) { response.setContent( asJson( - ImmutableMap.of( + Map.of( "value", value, "message", "Cleared the new session request queue", "cleared_requests", value))); } else { response.setContent( asJson( - ImmutableMap.of( + Map.of( "value", value, "message", @@ -81,7 +81,7 @@ public HttpResponse execute(HttpRequest req) { .setStatus((HTTP_INTERNAL_ERROR)) .setContent( asJson( - ImmutableMap.of( + Map.of( "value", 0, "message", diff --git a/java/src/org/openqa/selenium/grid/sessionqueue/httpd/DefaultNewSessionQueueConfig.java b/java/src/org/openqa/selenium/grid/sessionqueue/httpd/DefaultNewSessionQueueConfig.java index 4b8fccaa867b8..aeb939a0ac9e9 100644 --- a/java/src/org/openqa/selenium/grid/sessionqueue/httpd/DefaultNewSessionQueueConfig.java +++ b/java/src/org/openqa/selenium/grid/sessionqueue/httpd/DefaultNewSessionQueueConfig.java @@ -17,12 +17,12 @@ package org.openqa.selenium.grid.sessionqueue.httpd; -import com.google.common.collect.ImmutableMap; +import java.util.Map; import org.openqa.selenium.grid.config.MapConfig; class DefaultNewSessionQueueConfig extends MapConfig { DefaultNewSessionQueueConfig() { - super(ImmutableMap.of("server", ImmutableMap.of("port", 5559))); + super(Map.of("server", Map.of("port", 5559))); } } diff --git a/java/src/org/openqa/selenium/grid/sessionqueue/httpd/NewSessionQueueServer.java b/java/src/org/openqa/selenium/grid/sessionqueue/httpd/NewSessionQueueServer.java index e02eeeb2aa29e..8b0ac89044350 100644 --- a/java/src/org/openqa/selenium/grid/sessionqueue/httpd/NewSessionQueueServer.java +++ b/java/src/org/openqa/selenium/grid/sessionqueue/httpd/NewSessionQueueServer.java @@ -25,12 +25,11 @@ import static org.openqa.selenium.remote.http.Route.get; import com.google.auto.service.AutoService; -import com.google.common.collect.ImmutableMap; -import com.google.common.collect.ImmutableSet; import java.io.Closeable; import java.io.IOException; import java.io.UncheckedIOException; import java.util.Collections; +import java.util.Map; import java.util.Set; import java.util.logging.Level; import java.util.logging.Logger; @@ -65,7 +64,7 @@ public String getDescription() { @Override public Set getConfigurableRoles() { - return ImmutableSet.of(HTTPD_ROLE, SESSION_QUEUE_ROLE); + return Set.of(HTTPD_ROLE, SESSION_QUEUE_ROLE); } @Override @@ -100,9 +99,9 @@ protected Handlers createHandlers(Config config) { .addHeader("Content-Type", JSON_UTF_8) .setContent( asJson( - ImmutableMap.of( + Map.of( "value", - ImmutableMap.of( + Map.of( "ready", true, "message", diff --git a/java/src/org/openqa/selenium/grid/sessionqueue/local/LocalNewSessionQueue.java b/java/src/org/openqa/selenium/grid/sessionqueue/local/LocalNewSessionQueue.java index 66be16397885e..f9b506236948d 100644 --- a/java/src/org/openqa/selenium/grid/sessionqueue/local/LocalNewSessionQueue.java +++ b/java/src/org/openqa/selenium/grid/sessionqueue/local/LocalNewSessionQueue.java @@ -22,13 +22,13 @@ import static org.openqa.selenium.concurrent.ExecutorServices.shutdownGracefully; import com.google.common.annotations.VisibleForTesting; -import com.google.common.collect.ImmutableMap; -import com.google.common.collect.ImmutableSet; import java.io.Closeable; import java.time.Duration; import java.time.Instant; +import java.util.Collections; import java.util.Deque; import java.util.Iterator; +import java.util.LinkedHashSet; import java.util.List; import java.util.Map; import java.util.Optional; @@ -180,7 +180,10 @@ private void timeoutSessions() { sessionRequest.getRequestId().equals(entry.getKey()))) .filter(entry -> isTimedOut(now, entry.getValue())) .map(Map.Entry::getKey) - .collect(ImmutableSet.toImmutableSet()); + .collect( + Collectors.collectingAndThen( + Collectors.toCollection(LinkedHashSet::new), + set -> Collections.unmodifiableSet(new LinkedHashSet<>(set)))); } finally { readLock.unlock(); } @@ -258,9 +261,9 @@ public HttpResponse addToQueue(SessionRequest request) { res.setStatus(HTTP_INTERNAL_ERROR) .setContent( Contents.asJson( - ImmutableMap.of( + Map.of( "value", - ImmutableMap.of( + Map.of( "error", "session not created", "message", result.left().getMessage(), "stacktrace", result.left().getStackTrace())))); diff --git a/java/src/org/openqa/selenium/grid/web/CheckContentTypeHeader.java b/java/src/org/openqa/selenium/grid/web/CheckContentTypeHeader.java index 347b477a311ae..1621b8a3a64c2 100644 --- a/java/src/org/openqa/selenium/grid/web/CheckContentTypeHeader.java +++ b/java/src/org/openqa/selenium/grid/web/CheckContentTypeHeader.java @@ -19,9 +19,8 @@ import static java.net.HttpURLConnection.HTTP_INTERNAL_ERROR; -import com.google.common.collect.ImmutableMap; -import com.google.common.collect.ImmutableSet; import com.google.common.net.MediaType; +import java.util.Map; import java.util.Set; import org.openqa.selenium.internal.Require; import org.openqa.selenium.remote.http.Contents; @@ -36,9 +35,9 @@ public class CheckContentTypeHeader implements Filter { .setStatus(HTTP_INTERNAL_ERROR) .setContent( Contents.asJson( - ImmutableMap.of( + Map.of( "value", - ImmutableMap.of( + Map.of( "error", "unknown error", "message", "Content-Type header is missing", "stacktrace", "")))); @@ -46,8 +45,7 @@ public class CheckContentTypeHeader implements Filter { private final Set skipChecksOn; public CheckContentTypeHeader(Set skipChecksOn) { - this.skipChecksOn = - ImmutableSet.copyOf(Require.nonNull("URLs where checks are skipped", skipChecksOn)); + this.skipChecksOn = Set.copyOf(Require.nonNull("URLs where checks are skipped", skipChecksOn)); } @Override @@ -81,9 +79,9 @@ private HttpResponse badType(String type) { .setStatus(HTTP_INTERNAL_ERROR) .setContent( Contents.asJson( - ImmutableMap.of( + Map.of( "value", - ImmutableMap.of( + Map.of( "error", "unknown error", "message", "Content-Type header does not indicate utf-8 encoded json: " + type, diff --git a/java/src/org/openqa/selenium/grid/web/CheckOriginHeader.java b/java/src/org/openqa/selenium/grid/web/CheckOriginHeader.java index de36bf546769a..238c6f5c4b016 100644 --- a/java/src/org/openqa/selenium/grid/web/CheckOriginHeader.java +++ b/java/src/org/openqa/selenium/grid/web/CheckOriginHeader.java @@ -20,9 +20,8 @@ import static java.net.HttpURLConnection.HTTP_INTERNAL_ERROR; import static org.openqa.selenium.json.Json.JSON_UTF_8; -import com.google.common.collect.ImmutableMap; -import com.google.common.collect.ImmutableSet; import java.util.Collection; +import java.util.Map; import java.util.Set; import org.openqa.selenium.internal.Require; import org.openqa.selenium.remote.http.Contents; @@ -37,9 +36,8 @@ public class CheckOriginHeader implements Filter { public CheckOriginHeader(Collection allowedOriginHosts, Set skipChecksOn) { Require.nonNull("Allowed origins list", allowedOriginHosts); - allowedHosts = ImmutableSet.copyOf(allowedOriginHosts); - this.skipChecksOn = - ImmutableSet.copyOf(Require.nonNull("URLs where checks are skipped", skipChecksOn)); + allowedHosts = Set.copyOf(allowedOriginHosts); + this.skipChecksOn = Set.copyOf(Require.nonNull("URLs where checks are skipped", skipChecksOn)); } @Override @@ -58,9 +56,9 @@ public HttpHandler apply(HttpHandler httpHandler) { .addHeader("Content-Type", JSON_UTF_8) .setContent( Contents.asJson( - ImmutableMap.of( + Map.of( "value", - ImmutableMap.of( + Map.of( "error", "unknown error", "message", "Origin not allowed: " + origin, "stacktrace", "")))); diff --git a/java/src/org/openqa/selenium/grid/web/JarFileResource.java b/java/src/org/openqa/selenium/grid/web/JarFileResource.java index bee53ef725e55..29642bea52dbc 100644 --- a/java/src/org/openqa/selenium/grid/web/JarFileResource.java +++ b/java/src/org/openqa/selenium/grid/web/JarFileResource.java @@ -17,14 +17,16 @@ package org.openqa.selenium.grid.web; -import com.google.common.collect.ImmutableSet; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.UncheckedIOException; +import java.util.Collections; +import java.util.LinkedHashSet; import java.util.Optional; import java.util.Set; import java.util.jar.JarFile; +import java.util.stream.Collectors; import java.util.zip.ZipEntry; import org.openqa.selenium.internal.Require; @@ -88,7 +90,7 @@ public boolean isDirectory() { @Override public Set list() { if (!isDirectory()) { - return ImmutableSet.of(); + return Set.of(); } String prefix = entryName.endsWith("/") ? entryName : entryName + "/"; @@ -100,7 +102,10 @@ public Set list() { .filter(e -> !e.getName().equals(prefix)) .filter(e -> e.getName().split("/").length == count) .map(e -> new JarFileResource(jarFile, e.getName(), prefix)) - .collect(ImmutableSet.toImmutableSet()); + .collect( + Collectors.collectingAndThen( + Collectors.toCollection(LinkedHashSet::new), + set -> Collections.unmodifiableSet(new LinkedHashSet<>(set)))); } @Override diff --git a/java/src/org/openqa/selenium/grid/web/MergedResource.java b/java/src/org/openqa/selenium/grid/web/MergedResource.java index 6cae14aa04a73..0a79342bc0b83 100644 --- a/java/src/org/openqa/selenium/grid/web/MergedResource.java +++ b/java/src/org/openqa/selenium/grid/web/MergedResource.java @@ -17,7 +17,8 @@ package org.openqa.selenium.grid.web; -import com.google.common.collect.ImmutableSet; +import java.util.Collections; +import java.util.LinkedHashSet; import java.util.Optional; import java.util.Set; import org.openqa.selenium.internal.Require; @@ -66,10 +67,9 @@ public boolean isDirectory() { @Override public Set list() { - ImmutableSet.Builder resources = ImmutableSet.builder(); - resources.addAll(base.list()); + Set resources = new LinkedHashSet<>(base.list()); next.ifPresent(res -> resources.addAll(res.list())); - return resources.build(); + return Collections.unmodifiableSet(new LinkedHashSet<>(resources)); } @Override diff --git a/java/src/org/openqa/selenium/grid/web/NoHandler.java b/java/src/org/openqa/selenium/grid/web/NoHandler.java index 744884606bd4a..f8e18fa6fa881 100644 --- a/java/src/org/openqa/selenium/grid/web/NoHandler.java +++ b/java/src/org/openqa/selenium/grid/web/NoHandler.java @@ -22,7 +22,6 @@ import static java.nio.charset.StandardCharsets.UTF_8; import static org.openqa.selenium.remote.http.Contents.bytes; -import com.google.common.collect.ImmutableMap; import java.io.UncheckedIOException; import java.util.Collections; import java.util.HashMap; @@ -48,7 +47,7 @@ public HttpResponse execute(HttpRequest req) throws UncheckedIOException { responseMap.put("sessionId", null); responseMap.put( "value", - ImmutableMap.of( + Map.of( "error", "unknown command", "message", String.format( diff --git a/java/src/org/openqa/selenium/grid/web/PathResource.java b/java/src/org/openqa/selenium/grid/web/PathResource.java index 9172c91244c33..ba1e507a1612d 100644 --- a/java/src/org/openqa/selenium/grid/web/PathResource.java +++ b/java/src/org/openqa/selenium/grid/web/PathResource.java @@ -17,16 +17,17 @@ package org.openqa.selenium.grid.web; -import static com.google.common.collect.ImmutableSet.toImmutableSet; - import java.io.IOException; import java.io.UncheckedIOException; import java.nio.file.Files; import java.nio.file.Path; import java.util.Arrays; +import java.util.Collections; +import java.util.LinkedHashSet; import java.util.Optional; import java.util.Set; import java.util.function.Predicate; +import java.util.stream.Collectors; import java.util.stream.Stream; import org.openqa.selenium.internal.Require; @@ -86,7 +87,13 @@ public boolean isDirectory() { @Override public Set list() { try (Stream files = Files.list(base)) { - return files.filter(allowedSubpaths).map(PathResource::new).collect(toImmutableSet()); + return files + .filter(allowedSubpaths) + .map(PathResource::new) + .collect( + Collectors.collectingAndThen( + Collectors.toCollection(LinkedHashSet::new), + set -> Collections.unmodifiableSet(new LinkedHashSet<>(set)))); } catch (IOException e) { throw new UncheckedIOException(e); } diff --git a/java/src/org/openqa/selenium/grid/web/ReverseProxyHandler.java b/java/src/org/openqa/selenium/grid/web/ReverseProxyHandler.java index 8fb0b91eb3bd8..edf7d574f38a3 100644 --- a/java/src/org/openqa/selenium/grid/web/ReverseProxyHandler.java +++ b/java/src/org/openqa/selenium/grid/web/ReverseProxyHandler.java @@ -21,9 +21,9 @@ import static org.openqa.selenium.remote.tracing.Tags.HTTP_REQUEST; import static org.openqa.selenium.remote.tracing.Tags.HTTP_RESPONSE; -import com.google.common.collect.ImmutableSet; import java.io.UncheckedIOException; import java.util.Locale; +import java.util.Set; import java.util.logging.Logger; import org.openqa.selenium.internal.Require; import org.openqa.selenium.remote.http.HttpClient; @@ -37,19 +37,18 @@ public class ReverseProxyHandler implements HttpHandler, AutoCloseable { private static final Logger LOG = Logger.getLogger(ReverseProxyHandler.class.getName()); - private static final ImmutableSet IGNORED_REQ_HEADERS = - ImmutableSet.builder() - .add("connection") - .add("http2-settings") - .add("keep-alive") - .add("proxy-authorization") - .add("proxy-authenticate") - .add("proxy-connection") - .add("te") - .add("trailer") - .add("transfer-encoding") - .add("upgrade") - .build(); + private static final Set IGNORED_REQ_HEADERS = + Set.of( + "connection", + "http2-settings", + "keep-alive", + "proxy-authorization", + "proxy-authenticate", + "proxy-connection", + "te", + "trailer", + "transfer-encoding", + "upgrade"); private final Tracer tracer; private final HttpClient upstream; diff --git a/java/src/org/openqa/selenium/grid/web/RoutableHttpClientFactory.java b/java/src/org/openqa/selenium/grid/web/RoutableHttpClientFactory.java index d3576bd9f922e..e65ee82dccc35 100644 --- a/java/src/org/openqa/selenium/grid/web/RoutableHttpClientFactory.java +++ b/java/src/org/openqa/selenium/grid/web/RoutableHttpClientFactory.java @@ -19,10 +19,10 @@ import static org.openqa.selenium.remote.http.Contents.asJson; -import com.google.common.collect.ImmutableMap; import java.io.UncheckedIOException; import java.net.URI; import java.net.URL; +import java.util.Map; import org.openqa.selenium.UnsupportedCommandException; import org.openqa.selenium.internal.Require; import org.openqa.selenium.remote.http.ClientConfig; @@ -61,7 +61,7 @@ public HttpResponse execute(HttpRequest request) throws UncheckedIOException { response.setStatus(404); response.setContent( asJson( - ImmutableMap.of( + Map.of( "value", request.getUri(), "message", "Unable to route " + request, "error", UnsupportedCommandException.class.getName())));