rspec/rules/S2112/java/rule.adoc

35 lines
1.2 KiB
Plaintext
Raw Normal View History

2021-04-28 16:49:39 +02:00
The ``++equals++`` and ``++hashCode++`` methods of ``++java.net.URL++`` both may trigger a name service (usually DNS) lookup to resolve the host name or IP address. Depending on the configuration, and network status, that can take a long time. ``++URI++`` on the other hand makes no such calls and should be used instead unless the specific ``++URL++`` functionality is required.
In general it is better to use the ``++URI++`` class until access to the resource is actually needed, at which point you can just convert the ``++URI++`` to a ``++URL++`` using ``++URI.toURL()++``.
This rule checks for uses of ``++URL++`` 's in ``++Map++`` and ``++Set++`` , and for explicit calls to the ``++equals++`` and ``++hashCode++`` methods.
== Noncompliant Code Example
----
public void checkUrl(URL url) {
Set<URL> sites = new HashSet<URL>(); // Noncompliant
URL homepage = new URL("http://sonarsource.com"); // Compliant
if (homepage.equals(url)) { // Noncompliant
// ...
}
}
----
== Compliant Solution
----
public void checkUrl(URL url) {
Set<URI> sites = new HashSet<URI>(); // Compliant
URI homepage = new URI("http://sonarsource.com"); // Compliant
URI uri = url.toURI();
if (homepage.equals(uri)) { // Compliant
// ...
}
}
----