Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
 package com.oneeyedmen.tdb.internal;
 
 
 
 public class FieldAccess implements Invokable {
    private final Object object;
    private final Invokable next;
    public FieldAccess(Object objectInvokable next) {
        this. = object;
        this. = next;
    }
    @Override
    public Object invoke(Invocation invocationthrows Throwable {
        Method method = invocation.getInvokedMethod();
        try {
            if (method.getParameterTypes().length == 0) {
                Field field = .getClass().getDeclaredField(fieldNameForAccessor(method));
                field.setAccessible(true);
                return field.get();
            } else {
                Field field = .getClass().getDeclaredField(fieldNameForMutator(method));
                field.setAccessible(true);
                field.set(invocation.getParametersAsArray()[0]);
                return null;
            }
        } catch (NoSuchFieldException e) {
            return .invoke(invocation);
        }
    }
    private String fieldNameForMutator(Method method) {
        String methodName = method.getName();
        if (methodName.startsWith("set"))
            return Character.toLowerCase(methodName.charAt(3)) + methodName.substring(4);
        else
            return methodName;
    }
    static String fieldNameForAccessor(Method method) {
        String methodName = method.getName();
        if (methodName.startsWith("get")) {
            return removePrefixAnduncapitalise(methodName, 3);
        }
        else if (methodName.startsWith("is"))
            return removePrefixAnduncapitalise(methodName, 2);
        else
            return methodName;
    }
    private static String removePrefixAnduncapitalise(String methodNameint index) {
        return Character.toLowerCase(methodName.charAt(index)) + methodName.substring(index + 1);
    }
New to GrepCode? Check out our FAQ X