Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 5 additions & 2 deletions java/src/org/openqa/selenium/Capabilities.java
Original file line number Diff line number Diff line change
Expand Up @@ -24,15 +24,18 @@
import java.util.Optional;
import java.util.Set;
import java.util.stream.Stream;
import org.jspecify.annotations.NullMarked;
import org.jspecify.annotations.Nullable;

/** Describes a series of key/value pairs that encapsulate aspects of a browser. */
@NullMarked
public interface Capabilities extends Serializable {

default String getBrowserName() {
return String.valueOf(Optional.ofNullable(getCapability("browserName")).orElse(""));
}

default Platform getPlatformName() {
default @Nullable Platform getPlatformName() {
return Stream.of("platformName")
.map(this::getCapability)
.filter(Objects::nonNull)
Expand Down Expand Up @@ -67,7 +70,7 @@ default String getBrowserVersion() {
* @return The value, or null if not set.
* @see org.openqa.selenium.remote.CapabilityType
*/
Object getCapability(String capabilityName);
@Nullable Object getCapability(String capabilityName);

/**
* @param capabilityName The capability to check.
Expand Down
3 changes: 3 additions & 0 deletions java/src/org/openqa/selenium/HasCapabilities.java
Original file line number Diff line number Diff line change
Expand Up @@ -17,10 +17,13 @@

package org.openqa.selenium;

import org.jspecify.annotations.NullMarked;

/**
* Used by classes to indicate that they can describe the {@link org.openqa.selenium.Capabilities}
* they possess. This can be used for run-time detection of features.
*/
@NullMarked
public interface HasCapabilities {
/**
* @return The capabilities of the current driver.
Expand Down
10 changes: 6 additions & 4 deletions java/src/org/openqa/selenium/ImmutableCapabilities.java
Original file line number Diff line number Diff line change
Expand Up @@ -22,8 +22,11 @@
import java.util.Collections;
import java.util.Map;
import java.util.TreeMap;
import org.jspecify.annotations.NullMarked;
import org.jspecify.annotations.Nullable;
import org.openqa.selenium.internal.Require;

@NullMarked
public class ImmutableCapabilities implements Capabilities {

private final Map<String, Object> delegate;
Expand Down Expand Up @@ -145,18 +148,17 @@ public ImmutableCapabilities(Map<?, ?> capabilities) {
capabilities.forEach(
(key, value) -> {
Require.argument("Capability key", key).instanceOf(String.class);
Object v = capabilities.get(key);
Require.nonNull("Capability value", value);

setCapability(delegate, (String) key, v);
setCapability(delegate, (String) key, value);
});

this.delegate = Collections.unmodifiableMap(delegate);
this.hashCode = SharedCapabilitiesMethods.hashCode(this);
}

@Override
public Object getCapability(String capabilityName) {
public @Nullable Object getCapability(String capabilityName) {
Require.nonNull("Capability name", capabilityName);
return delegate.get(capabilityName);
}
Expand All @@ -172,7 +174,7 @@ public int hashCode() {
}

@Override
public boolean equals(Object o) {
public boolean equals(@Nullable Object o) {
if (!(o instanceof Capabilities)) {
return false;
}
Expand Down
9 changes: 6 additions & 3 deletions java/src/org/openqa/selenium/MutableCapabilities.java
Original file line number Diff line number Diff line change
Expand Up @@ -22,8 +22,11 @@
import java.util.Map;
import java.util.Set;
import java.util.TreeMap;
import org.jspecify.annotations.NullMarked;
import org.jspecify.annotations.Nullable;
import org.openqa.selenium.internal.Require;

@NullMarked
public class MutableCapabilities implements Capabilities {

private static final Set<String> OPTION_KEYS;
Expand Down Expand Up @@ -81,7 +84,7 @@ public void setCapability(String capabilityName, Platform value) {
setCapability(capabilityName, (Object) value);
}

public void setCapability(String key, Object value) {
public void setCapability(String key, @Nullable Object value) {
Require.nonNull("Capability name", key);

// We have to special-case some keys and values because of the popular idiom of calling
Expand All @@ -107,7 +110,7 @@ public Map<String, Object> asMap() {
}

@Override
public Object getCapability(String capabilityName) {
public @Nullable Object getCapability(String capabilityName) {
return caps.get(capabilityName);
}

Expand All @@ -126,7 +129,7 @@ public int hashCode() {
}

@Override
public boolean equals(Object o) {
public boolean equals(@Nullable Object o) {
if (!(o instanceof Capabilities)) {
return false;
}
Expand Down
7 changes: 5 additions & 2 deletions java/src/org/openqa/selenium/PersistentCapabilities.java
Original file line number Diff line number Diff line change
Expand Up @@ -22,8 +22,11 @@
import java.util.function.Function;
import java.util.stream.Collectors;
import java.util.stream.Stream;
import org.jspecify.annotations.NullMarked;
import org.jspecify.annotations.Nullable;
import org.openqa.selenium.internal.Require;

@NullMarked
public class PersistentCapabilities implements Capabilities {

private final ImmutableCapabilities caps;
Expand Down Expand Up @@ -60,7 +63,7 @@ public Map<String, Object> asMap() {
}

@Override
public Object getCapability(String capabilityName) {
public @Nullable Object getCapability(String capabilityName) {
Require.nonNull("Capability name", capabilityName);
Object capability = overrides.getCapability(capabilityName);
if (capability != null) {
Expand Down Expand Up @@ -93,7 +96,7 @@ public int hashCode() {
}

@Override
public boolean equals(Object o) {
public boolean equals(@Nullable Object o) {
if (!(o instanceof Capabilities)) {
return false;
}
Expand Down