Java does not support natively some types to distinguish mutable and immutable objects. There are some methods like Collections.unmodifiableList(list) to convert a list to an immutable list, but the "List<T>" result is not typed immutable.
So rules like S2384 and S2386 can assume that an object is immutable when there's a call to "Collections.unmodifiableList", but the rule implementation is not able to know when the effective runtime type of an object coming from any method is for example "java.util.Collections.UnmodifiableList".
Being able to dig into any method calls and track which object is immutable is not yet supported by the java analyzer. But to reduce false-positives, the rule S2384 and S2386 could at least consider any method calls containing "unmodifiable" or "immutable" as returning immutable objects.