public static Class<?> getComponentClass(ComponentDef componentDef, Object component) { final Class<?> clazz = componentDef.getConcreteClass(); return clazz != null ? clazz : component.getClass(); // before enhanced } }
protected Constructor<?> getSuitableConstructor() { final Constructor<?>[] constructors = getComponentDef().getConcreteClass().getConstructors(); Constructor<?> constructor = null; int argSize = -1; for (int i = 0; i < constructors.length; ++i) { final int tempArgSize = constructors[i].getParameterTypes().length; if (tempArgSize == 0) { return null; } if (tempArgSize > argSize && BindingUtil.isPropertyAutoBindable(constructors[i].getParameterTypes())) { constructor = constructors[i]; argSize = tempArgSize; } } return constructor; } }
protected Object newInstance(LaContainerPreparer preparer, ComponentDef componentDef) { final Class<? extends LaContainerPreparer> preparerType = preparer.getClass(); final String componentName = componentDef.getComponentName(); final String methodprefixNew = ClassS2ContainerBuilder.METHODPREFIX_NEW; final Method method = ClassBuilderUtils.findMethod(preparerType, componentName, methodprefixNew); if (method != null) { try { if (method.getParameterTypes().length == 0) { return method.invoke(preparer, new Object[0]); } else { // needs to create from concrete class when aspect component // then the method that can accept concrete class is used return method.invoke(preparer, new Object[] { componentDef.getConcreteClass() }); } } catch (IllegalArgumentException e) { throw new RuntimeException("Can't invoke method for instanciating component: " + method.getName(), e); } catch (IllegalAccessException e) { throw new RuntimeException("Can't invoke method for instanciating component: " + method.getName(), e); } catch (InvocationTargetException e) { throw new RuntimeException("Can't invoke method for instanciating component: " + method.getName(), e); } } else { return null; } } }
protected Object assembleDefault() { final Constructor<?> constructor = LdiClassUtil.getConstructor(getComponentDef().getConcreteClass(), null); return LdiConstructorUtil.newInstance(constructor, null); } }
protected Object assembleManual() { final Object[] args = new Object[getComponentDef().getArgDefSize()]; for (int i = 0; i < args.length; ++i) { try { args[i] = getComponentDef().getArgDef(i).getValue(Object.class); } catch (ComponentNotFoundException cause) { throw new IllegalConstructorRuntimeException(getComponentDef().getComponentClass(), cause); } } final BeanDesc beanDesc = BeanDescFactory.getBeanDesc(getComponentDef().getConcreteClass()); return beanDesc.newInstance(args); }