private String deriveFieldName() {
        String methodName = this.getDeclaredName();
        // remove the "get"/"is" prefix from non-overridden method names
        Optional<String> possibleFieldName = Stream.of("get", "is")
                .filter(methodName::startsWith)
                .map(prefix -> methodName.substring(prefix.length()))
                .filter(name -> !name.isEmpty())
                .findFirst();
        if (!possibleFieldName.isPresent()) {
            return methodName + "()";
        }
        String methodNameWithoutPrefix = possibleFieldName.get();
        if (Character.isUpperCase(methodNameWithoutPrefix.charAt(1))) {
            // since 4.33.0 according to the Java Beans specification, if the second character is uppercase the first should remain as-is
            // e.g., getxIndex() corresponds to "xIndex" and isURL() to "URL"
            return methodNameWithoutPrefix;
        }
        return Character.toLowerCase(methodNameWithoutPrefix.charAt(0)) + methodNameWithoutPrefix.substring(1);
    }
Returns the name to be used to reference this method in its parent's "properties".

@return the (potentially overridden) name of the method followed by its argument types in parentheses
@see #getName()
@see TypeContext#getMethodPropertyArgumentTypeDescription(ResolvedType)
jsonschema-generator/src/main/java/com/github/victools/jsonschema/generator/MethodScope.java