public <S1, S2> BiInstantiatorKey(InstantiatorDefinition instantiatorDefinition, Map<Parameter, BiFunction<? super S1, ? super S2, ?>> injections, Class<?> s1, Class<?> s2) { this(getConstructor(instantiatorDefinition), paramAndBuilderFactoryClass(injections), s1, s2); }
private String generateClassNameForBiInstantiator(final BiInstantiatorKey key) { StringBuilder sb = new StringBuilder(); sb.append( "org.simpleflatmapper.reflect.generated.") .append(getPackageName(key.getDeclaringClass())) .append(".AsmBiInstantiator").append(key.getDeclaringClass().getSimpleName()); sb.append("From"); sb.append(replaceArray(key.getS1().getSimpleName())); sb.append("And"); sb.append(replaceArray(key.getS2().getSimpleName())); String[] injectedParams = key.getInjectedParams(); if (injectedParams != null && injectedParams.length > 0) { sb.append("Into"); int e = Math.min(16, injectedParams.length); for(int i = 0; i < e; i++) { if (i!=0) { sb.append("And"); } sb.append(injectedParams[i]); } int l = injectedParams.length - e; if (l >0) { sb.append("And").append(Integer.toString(l)).append("More"); } } sb.append("_I").append(Long.toHexString(classNumber.getAndIncrement())); return sb.toString(); }
@Test public void testNotEqualsOnDiffSourceAndSameTargetValues() throws NoSuchMethodException { BiInstantiatorKey k1 = new BiInstantiatorKey(DbObject.class, Date.class, String.class); BiInstantiatorKey k2 = new BiInstantiatorKey(DbObject.class, InputStream.class, String.class); BiInstantiatorKey k3 = new BiInstantiatorKey(DbObject.class, null, String.class); BiInstantiatorKey k4 = new BiInstantiatorKey(DbObject.class, Date.class, Object.class); assertFalse(k1.equals(k2)); assertFalse(k1.equals(k3)); assertFalse(k3.equals(k1)); assertFalse(k4.equals(k1)); }
@SuppressWarnings("unchecked") public <S1, S2, T> BiInstantiator<S1, S2, T> createBiInstantiator(final Class<?> s1, final Class<?> s2, final InstantiatorDefinition instantiatorDefinition, final Map<Parameter, BiFunction<? super S1, ? super S2, ?>> injections, boolean builderIgnoresNullValues) throws Exception { BiInstantiatorKey instantiatorKey = new BiInstantiatorKey(instantiatorDefinition, injections, s1, s2); Class<? extends BiInstantiator<?, ?, ?>> instantiator = biInstantiatorCache.get(instantiatorKey); Instantiator builderInstantiator = null; (BuilderInstantiatorDefinition)instantiatorDefinition, injections, builderIgnoresNullValues); instantiator = (Class<? extends BiInstantiator<?, ?, ?>>) createClass(className, bytes, instantiatorKey.getDeclaringClass().getClassLoader()); biInstantiatorCache.put(instantiatorKey, instantiator);
@Test public void testEqualsOnSameSourceAndTargetValues() throws NoSuchMethodException { BiInstantiatorKey k1 = new BiInstantiatorKey(DbObject.class, String.class, Date.class); BiInstantiatorKey k2 = new BiInstantiatorKey(DbObject.class, String.class, Date.class); assertTrue(k1.equals(k2)); }
@SuppressWarnings("unchecked") public <S1, S2, T> BiInstantiator<S1, S2, T> createBiInstantiator(final Class<?> s1, final Class<?> s2, final InstantiatorDefinition instantiatorDefinition, final Map<Parameter, BiFunction<? super S1, ? super S2, ?>> injections, boolean builderIgnoresNullValues) throws Exception { BiInstantiatorKey instantiatorKey = new BiInstantiatorKey(instantiatorDefinition, injections, s1, s2); Class<? extends BiInstantiator<?, ?, ?>> instantiator = biInstantiatorCache.get(instantiatorKey); Instantiator builderInstantiator = null; (BuilderInstantiatorDefinition)instantiatorDefinition, injections, builderIgnoresNullValues); instantiator = (Class<? extends BiInstantiator<?, ?, ?>>) createClass(className, bytes, instantiatorKey.getDeclaringClass().getClassLoader()); biInstantiatorCache.put(instantiatorKey, instantiator);
@Test public void testEqualsOnSameSourceAndTargetAndInjectParamValues() throws NoSuchMethodException { final InjectedParam[] injectedParameters = createInjectedParameters("param", Getter.class); BiInstantiatorKey k1 = new BiInstantiatorKey(DbObject.class.getConstructor(), injectedParameters, Date.class, String.class); BiInstantiatorKey k2 = new BiInstantiatorKey(DbObject.class.getConstructor(), injectedParameters, Date.class, String.class); assertTrue(k1.equals(k2)); } private InjectedParam[] createInjectedParameters(String param) {
private String generateClassNameForBiInstantiator(final BiInstantiatorKey key) { StringBuilder sb = new StringBuilder(); sb.append( "org.simpleflatmapper.reflect.generated.") .append(getPackageName(key.getDeclaringClass())) .append(".AsmBiInstantiator").append(key.getDeclaringClass().getSimpleName()); sb.append("From"); sb.append(replaceArray(key.getS1().getSimpleName())); sb.append("And"); sb.append(replaceArray(key.getS2().getSimpleName())); String[] injectedParams = key.getInjectedParams(); if (injectedParams != null && injectedParams.length > 0) { sb.append("Into"); int e = Math.min(16, injectedParams.length); for(int i = 0; i < e; i++) { if (i!=0) { sb.append("And"); } sb.append(injectedParams[i]); } int l = injectedParams.length - e; if (l >0) { sb.append("And").append(Integer.toString(l)).append("More"); } } sb.append("_I").append(Long.toHexString(classNumber.getAndIncrement())); return sb.toString(); }
public <S1, S2> BiInstantiatorKey(InstantiatorDefinition instantiatorDefinition, Map<Parameter, BiFunction<? super S1, ? super S2, ?>> injections, Class<?> s1, Class<?> s2) { this(getConstructor(instantiatorDefinition), paramAndBuilderFactoryClass(injections), s1, s2); }
@Test public void testNotEqualsOnSameSourceAndTargetAndDiffInjectParamValues() throws NoSuchMethodException { BiInstantiatorKey k1 = new BiInstantiatorKey(DbObject.class.getConstructor(), createInjectedParameters("param"), Date.class, String.class); BiInstantiatorKey k2 = new BiInstantiatorKey(DbObject.class.getConstructor(), createInjectedParameters("param2"), Date.class, String.class); BiInstantiatorKey k3 = new BiInstantiatorKey(DbObject.class.getConstructor(), null, Date.class, String.class); BiInstantiatorKey k4 = new BiInstantiatorKey(DbObject.class.getConstructor(), createInjectedParameters("param", IntGetter.class), Date.class, String.class); assertFalse(k1.equals(k2)); assertFalse(k1.equals(k3)); assertFalse(k3.equals(k1)); assertFalse(k4.equals(k1)); }
@Test public void testNotEqualsOnDiffClass() throws NoSuchMethodException { BiInstantiatorKey k1 = new BiInstantiatorKey(DbObject.class, Date.class, String.class); assertFalse(k1.equals(new Object())); }
@Test public void testEqualsOnSameKey() throws NoSuchMethodException { BiInstantiatorKey k = new BiInstantiatorKey(DbObject.class, String.class, Date.class); assertTrue(k.equals(k)); }
@Test public void testNotEqualsOnNull() throws NoSuchMethodException { BiInstantiatorKey k1 = new BiInstantiatorKey(DbObject.class, Date.class, String.class); assertFalse(k1.equals(null)); }
@Test public void testNotEqualsDiffConstructor() throws NoSuchMethodException { BiInstantiatorKey k1 = new BiInstantiatorKey(DbObject.class.getConstructor(), createInjectedParameters("param"), Date.class, String.class); BiInstantiatorKey k2 = new BiInstantiatorKey(DbFinalObject.class.getDeclaredConstructors()[0], createInjectedParameters("param"), Date.class, String.class); BiInstantiatorKey k3 = new BiInstantiatorKey(null, createInjectedParameters( "param"), Date.class, String.class); assertFalse(k1.equals(k2)); assertFalse(k1.equals(k3)); assertFalse(k3.equals(k1)); }