private boolean isSpecialMethod(ExecutableElement method) {
        if (!isMethodFromProtobufGeneratedClass(method)) {
            return false;
        }
        String methodName = method.getSimpleName().toString();

        for (String checkMethod : INTERNAL_SPECIAL_METHOD_ENDINGS) {
            if (methodName.endsWith(checkMethod)) {
                String propertyMethod = methodName.substring(0, methodName.length() - checkMethod.length());
                boolean propertyMethodExists = method.getEnclosingElement()
                        .getEnclosedElements()
                        .stream()
                        .anyMatch(e -> e.getSimpleName().toString().equals(propertyMethod));
                if (propertyMethodExists) {
                    return true;
                }
            }
        }

        for (String checkMethod : INTERNAL_SPECIAL_METHOD_BEGINNINGS) {
            if (methodName.startsWith(checkMethod)) {
                String propertyMethod = "get" + methodName.substring(checkMethod.length());

                boolean propertyMethodExists = method.getEnclosingElement()
                        .getEnclosedElements()
                        .stream()
                        .anyMatch(e -> (e).getSimpleName().toString().equals(propertyMethod));
                if (propertyMethodExists) {
                    return true;
                }
            }
        }

        if (isOneOfCaseSelector(method)) {
            return true;
        }

        return false;
    }
refer <a href="https://github.com/entur/mapstruct-spi-protobuf">mapstruct-spi-protobuf</a>
@author Arne Seime
commons-mapstruct-spi/src/main/java/com/navercorp/pinpoint/mapstruct/spi/ProtobufAccessorNamingStrategy.java