java:S3655 Call "Optional#isPresent()" before accessing the value

This is not a false positive. Your code is as follow:

if (obj.getOptional().isPresent()) {
    obj.getOptional().get() // issue
}

There is no guarantee that the first getOptional() method execution returns the same object as the second getOptional() method execution. You have to store the value locally:

Optional<String> value = obj.getOptional()
if (value.isPresent()) {
    value.get() // no issue
}