
com.googlecode.gwt.test.uibinder.UiBinderInstanciator Maven / Gradle / Ivy
The newest version!
package com.googlecode.gwt.test.uibinder;
import com.google.gwt.core.client.GWT;
import com.google.gwt.uibinder.client.UiConstructor;
import com.google.gwt.uibinder.client.UiFactory;
import com.google.gwt.uibinder.client.UiField;
import com.google.gwt.user.client.ui.IsWidget;
import com.google.gwt.user.client.ui.UIObject;
import com.googlecode.gwt.test.exceptions.GwtTestUiBinderException;
import com.googlecode.gwt.test.internal.GwtParanamer;
import com.googlecode.gwt.test.utils.GwtReflectionUtils;
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* Class responsible for Object instantiations. It handles provided {@link UiField},
* {@link UiFactory} fields and {@link UiConstructor} fields.
*
* @author Gael Lazzari
*/
@SuppressWarnings("unchecked")
class UiBinderInstanciator {
public final static Map, Class>> primitiveMap = new HashMap<>();
static {
primitiveMap.put(boolean.class, Boolean.class);
primitiveMap.put(byte.class, Byte.class);
primitiveMap.put(short.class, Short.class);
primitiveMap.put(char.class, Character.class);
primitiveMap.put(int.class, Integer.class);
primitiveMap.put(long.class, Long.class);
primitiveMap.put(float.class, Float.class);
primitiveMap.put(double.class, Double.class);
}
static U getInstance(Class clazz, Map attributes, Object owner) {
String uiFieldValue = (String) attributes.get("ui:field");
U instance = getProvidedUiField(clazz, owner, uiFieldValue);
if (instance == null) {
instance = getObjectFromUiFactory(clazz, owner);
}
if (instance == null) {
instance = getObjectFromUiConstructor(clazz, attributes);
}
if (instance == null && !UIObject.class.isAssignableFrom(clazz)
&& !IsWidget.class.isAssignableFrom(clazz)) {
instance = GWT.create(clazz);
}
return instance;
}
private static boolean allArgsAreDeclaredInUiFile(String[] argNames,
Map attributes) {
for (String argName : argNames) {
if (!attributes.containsKey(argName)) {
return false;
}
}
return true;
}
private static Object convertArgs(Class> paramType, Object object)
throws IllegalArgumentException, IllegalAccessException, InvocationTargetException {
if (paramType == String.class) {
return object;
}
if (paramType.isPrimitive()) {
paramType = primitiveMap.get(paramType);
}
Method valueOfMethod = null;
try {
valueOfMethod = paramType.getDeclaredMethod("valueOf", String.class);
if (valueOfMethod.getReturnType() != paramType) {
// This is not valueOf() I want.
return object;
}
} catch (Exception e) {
// No valueOf() method
return object;
}
return valueOfMethod.invoke(null, object);
}
private static List
© 2015 - 2025 Weber Informatics LLC | Privacy Policy