public <S> void addDefaultValueFlag(Map<Parameter, Getter<? super S, ?>> injections) { int nbParams = original.getParameters().length; int nbDefaulting = defaulted.getParameters().length - nbParams - 1; for(int i = 0; i < nbDefaulting; i++) { int startingParam = i * Integer.SIZE; int endParam = Math.min(startingParam + Integer.SIZE, nbParams); int flag = 0; for(int j = startingParam; j < endParam; j++) { if (!injections.containsKey(original.getParameters()[j])) { flag |= 1 << (j - startingParam); } } injections.put(defaulted.getParameters()[nbParams + i], new ConstantIntGetter<Object>(flag)); } }
@Test public void testInteger() { int value = 13; Assert.assertEquals(value, new ConstantIntGetter<Object>(value).getInt(null)); assertEquals(value, new ConstantIntGetter<Object>(value).get(null).intValue()); } @Test
public <S> void addDefaultValueFlag(Map<Parameter, Getter<? super S, ?>> injections) { int nbParams = original.getParameters().length; int nbDefaulting = defaulted.getParameters().length - nbParams - 1; for(int i = 0; i < nbDefaulting; i++) { int startingParam = i * Integer.SIZE; int endParam = Math.min(startingParam + Integer.SIZE, nbParams); int flag = 0; for(int j = startingParam; j < endParam; j++) { if (!injections.containsKey(original.getParameters()[j])) { flag |= 1 << (j - startingParam); } } injections.put(defaulted.getParameters()[nbParams + i], new ConstantIntGetter<Object>(flag)); } }
@Test public void testMapInt() throws Exception { newFieldMapperAndMapToPS(new ConstantIntGetter<Object>(2), int.class); newFieldMapperAndMapToPS(new ConstantGetter<Object, Integer>(3), Integer.class); newFieldMapperAndMapToPS(NullGetter.<Object, Integer>getter(), Integer.class); verify(ps).setInt(1, 2); verify(ps).setInt(2, 3); verify(ps).setNull(3, Types.INTEGER); }
@Test public void testBuilderFromMethodNoAsm() throws Exception { final List<InstantiatorDefinition> instantiatorDefinitions = BuilderInstantiatorDefinitionFactory.extractDefinitions(ClassBuilderWithMethod.class); assertEquals(1, instantiatorDefinitions.size()); BuilderInstantiatorDefinition b = (BuilderInstantiatorDefinition) instantiatorDefinitions.get(0); final Parameter[] parameters = b.getParameters(); Arrays.sort(parameters, new Comparator<Parameter>() { @Override public int compare(Parameter o1, Parameter o2) { return o1.getName().compareTo(o2.getName()); } }); Map<Parameter, Getter<? super Void, ?>> params = new HashMap<Parameter, Getter<? super Void, ?>>(); params.put(parameters[1], new ConstantGetter<Void, Object>("myname")); params.put(parameters[0], new ConstantIntGetter<Void>(3)); final InstantiatorFactory instantiatorFactory = new InstantiatorFactory(null); final Instantiator<Void, ClassBuilderWithMethod> instantiator = instantiatorFactory .<Void, ClassBuilderWithMethod>getInstantiator(b, Void.class, params, true, true); final ClassBuilderWithMethod o = instantiator .newInstance(null); assertEquals("myname", o.getName()); assertEquals(3, o.getId()); }
params.put(parameters[0], new ConstantIntGetter<Void>(3));
@Test public void testCreateInstantiatorFinalDbObjectNameAndType() throws Exception { HashMap<Parameter, Getter<? super Object, ?>> injections = new HashMap<Parameter, Getter<? super Object, ?>>(); ConstantIntGetter<Object> getter = new ConstantIntGetter<Object>(1); injections.put(new Parameter(4, "typeOrdinal", Type.class), new OrdinalEnumGetter<Object, Type>(getter, Type.class)); injections.put(new Parameter(1, "name", String.class), new ConstantGetter<Object, String>("fdo")); List<InstantiatorDefinition> instantiatorDefinitions = AsmInstantiatorDefinitionFactory.extractDefinitions(DbFinalObject.class); Instantiator<Object, DbFinalObject> instantiator = asmFactory.createInstantiator(Object.class, (ExecutableInstantiatorDefinition) instantiatorDefinitions.get(0), injections, true); DbFinalObject fdo = instantiator.newInstance(new Object()); assertNotNull(fdo); assertNull(fdo.getEmail()); assertNull(fdo.getCreationTime()); assertNull(fdo.getTypeName()); assertEquals(0, fdo.getId()); assertEquals("fdo", fdo.getName()); assertEquals(Type.type2, fdo.getTypeOrdinal()); }
createFieldMapper(DbPrimitiveObjectWithSetter.class, "pInt", new ConstantIntGetter<Object>(16));