@SuppressWarnings({"unused", "squid:S00107"})
    @RuntimeType
    public static Object interceptSetter(@This Object proxy, @Origin Method method, @SuperCall Callable<?> callable,
                                         @FieldValue(PlcEntityManager.PLC_ADDRESS_FIELD_NAME) String address,
                                         @FieldValue(PlcEntityManager.CONNECTION_MANAGER_FIELD_NAME) PlcConnectionManager connectionManager,
                                         @FieldValue(PlcEntityManager.ALIAS_REGISTRY) AliasRegistry registry,
                                         @FieldValue(PlcEntityManager.LAST_FETCHED) Map<String, Instant> lastFetched,
                                         @Argument(0) Object argument) throws OPMException {
        LOGGER.trace("Invoked method {} on connected PlcEntity {}", method.getName(), method.getDeclaringClass().getName());

        // If "detached" (i.e. _driverManager is null) simply forward the call
        if (connectionManager == null) {
            LOGGER.trace("Entity not connected, simply fowarding call");
            try {
                return callable.call();
            } catch (Exception e) {
                throw new OPMException("Exception during forwarding call", e);
            }
        }

        if (method.getName().startsWith("set")) {
            if (method.getParameterCount() != 1) {
                throw new OPMException("Only setter with one arguments are supported");
            }
            // Set single value
            LOGGER.trace("Invoked method {} is setter, trying to find annotated tag and return requested value",
                method.getName());

            return setValueForSetter(proxy, method, callable, connectionManager, address, registry, lastFetched, argument);
        }

        // Fetch all values then invoke method
        try {
            LOGGER.trace("Invoked method is no getter, refetch all tags and invoke method {} then", method.getName());
            readAllFields(proxy, connectionManager, address, registry, lastFetched);
            return callable.call();
        } catch (Exception e) {
            throw new OPMException("Unable to forward invocation " + method.getName() + " on connected PlcEntity", e);
        }
    }
Basic Interceptor for all methods on the proxy object.
It checks if the invoked method is a getter and if so, only retrieves the requested tag, forwarding to
the {@link #fetchAndSetValueForGetter(Object, Method, PlcConnectionManager, String, AliasRegistry, Map)} method.
<p>
If the tag is no getter, then all tags are refreshed by calling {@link #readAllFields(Object, PlcConnectionManager, String, AliasRegistry, Map)}
and then, the method is invoked.

@param proxy             Object to intercept
@param method            Method that was intercepted
@param callable          Callable to call the method after fetching the values
@param address           Address of the plc (injected from private tag)
@param connectionManager PlcConnectionManager instance to use (injected from private tag)
@return possible result of the original methods invocation
@throws OPMException Problems with plc / proxying
plc4j/tools/opm/src/main/java/org/apache/plc4x/java/opm/PlcEntityInterceptor.java