SeleniumHQ / selenium

A browser automation framework and ecosystem.
https://selenium.dev
Apache License 2.0
30.84k stars 8.22k forks source link

[šŸš€ Feature]: JSpecify Nullness annotations for Java #14291

Open mk868 opened 4 months ago

mk868 commented 4 months ago

Feature and motivation

I suggest adding JSpecify Nullness annotations to the Selenium framework code. These annotations allow you to specify which parameters and return values can be null. I'm aware that information about potential null values are already placed in the JavaDoc, but using annotations will be transparent to IDEs and static code analyzers. This will give developers better exposure of potential problems with their code in order to avoid NullPointerExceptions.

Using annotations will also improve interoperability with Kotlin.

Links:

Usage example

The annotated method would look like this:

// ...

import org.jspecify.annotations.Nullable;

public interface WebElement extends SearchContext, TakesScreenshot {
// ...

@Nullable String getAttribute(String name);

// ...
}

Then the IDE/static code analyzer will display a warning about unsafe code:

var element = webDriver.findElement(By.tagName("img"));
var cssClasses = element.getAttribute("class").split(" "); // warning here, possible NullPointerException
github-actions[bot] commented 4 months ago

@mk868, thank you for creating this issue. We will troubleshoot it as soon as we can.


Info for maintainers

Triage this issue by using labels.

If information is missing, add a helpful comment and then I-issue-template label.

If the issue is a question, add the I-question label.

If the issue is valid but there is no time to troubleshoot it, consider adding the help wanted label.

If the issue requires changes or fixes from an external project (e.g., ChromeDriver, GeckoDriver, MSEdgeDriver, W3C), add the applicable G-* label, and it will provide the correct link and auto-close the issue.

After troubleshooting the issue, please add the R-awaiting answer label.

Thank you!

github-actions[bot] commented 4 months ago

This issue is looking for contributors.

Please comment below or reach out to us through our IRC/Slack/Matrix channels if you are interested.

mk868 commented 4 months ago

I can contribute to add these annotations. Can I just create a Pull Request with changes? Or Is additional analysis/confirmation needed for this feature by the Selenium team?

diemol commented 4 months ago

@mk868, yes, please. Focus on small PRs so they can be quickly reviewed and merged. It does not matter if you send many PRs. A PR with 2-3 files changed will be merged rather quickly, but a PR with 20 files changed will take several days.