package org.etk.model.apt; import java.lang.reflect.Field; import org.etk.model.plugins.instrument.Instrumentor; import org.etk.model.plugins.instrument.MethodHandler; import org.etk.model.plugins.instrument.ProxyType; public class InstrumentorImpl implements Instrumentor { public <O> ProxyType<O> getProxyClass(Class<O> clazz) { return new ProxyTypeImpl<O>(clazz); } public MethodHandler getInvoker(Object proxy) { if (proxy instanceof Instrumented) { try { Field field = proxy.getClass().getField("handler"); return (MethodHandler)field.get(proxy); } catch (NoSuchFieldException e) { throw new AssertionError(e); } catch (IllegalAccessException e) { throw new AssertionError(e); } } else { return null; } } }