package org.robobinding.customviewbinding; import java.lang.reflect.InvocationTargetException; import java.text.MessageFormat; import org.robobinding.Bug; import org.robobinding.util.ConstructorUtils; import org.robobinding.viewbinding.ViewBinding; /** * @since 1.0 * @author Cheng Wei * */ public class ViewBindingLoader { public static final String CLASS_SUFFIX = "$$VB"; public static String getViewBindingClassName(String binaryName) { return binaryName.replace('$', '_') + CLASS_SUFFIX; } @SuppressWarnings("unchecked") public <ViewType> ViewBinding<ViewType> load(CustomViewBinding<ViewType> customViewBinding) { String viewBindingClassName = getViewBindingClassName(customViewBinding.getClass().getName()); Class<?> viewBindingType; try { viewBindingType = Class.forName(viewBindingClassName); } catch (ClassNotFoundException e) { throw new RuntimeException(MessageFormat.format( "The source code for ''{0}'' is not generated. Is Java annotation processing(source code generation) correctly configured?", viewBindingClassName)); } try { return (ViewBinding<ViewType>)ConstructorUtils.invokeConstructor(viewBindingType, customViewBinding); }catch (NoSuchMethodException e) { throw new Bug("This is a bug of constructor code generation", e); } catch (IllegalAccessException e) { throw new Bug("This is a bug of constructor code generation", e); } catch (InvocationTargetException e) { throw new Bug("This is a bug of constructor code generation", e); } catch (InstantiationException e) { throw new Bug("This is a bug of constructor code generation", e); } } }