package org.itsnat.droid.impl.xmlinflater.shared.attr; import org.itsnat.droid.impl.xmlinflater.AttrContext; import org.itsnat.droid.impl.xmlinflater.FieldContainer; import org.itsnat.droid.impl.xmlinflater.MethodContainer; import org.itsnat.droid.impl.xmlinflater.shared.classtree.ClassDesc; /** * Created by jmarranz on 30/04/14. */ public abstract class AttrDescReflecFieldFieldMethod<TclassDesc extends ClassDesc,TattrTarget,TattrContext extends AttrContext> extends AttrDesc<TclassDesc,TattrTarget,TattrContext> { protected FieldContainer<Object> field1; protected FieldContainer<Object> field2; protected MethodContainer<Void> method; public AttrDescReflecFieldFieldMethod(TclassDesc parent, String name, String fieldName1, String fieldName2, String methodName, Class<?> field2Class, Class<?> methodClass, Class<?> classParam) { super(parent,name); this.field1 = new FieldContainer<Object>(parent.getDeclaredClass(),fieldName1); this.field2 = new FieldContainer<Object>(field2Class,fieldName2); this.method = new MethodContainer<Void>(methodClass,methodName,classParam != null ? new Class[]{classParam} : null); } protected void callFieldFieldMethod(TattrTarget target,Object convertedValue) { Object fieldValue1 = field1.get(target); Object fieldValue2 = field2.get(fieldValue1); method.invoke(fieldValue2, convertedValue); } }