@Nullable public InstanceFactory findInstanceFactory(@Nonnull Type mockedType) { InstanceFactory instanceFactory = mockedTypesAndInstances.get(mockedType); if (instanceFactory != null) { return instanceFactory; } Class<?> mockedClass = getClassType(mockedType); //noinspection ReuseOfLocalVariable instanceFactory = mockedTypesAndInstances.get(mockedClass); if (instanceFactory != null) { return instanceFactory; } boolean abstractType = mockedClass.isInterface() || isAbstract(mockedClass.getModifiers()); for (Entry<Type, InstanceFactory> entry : mockedTypesAndInstances.entrySet()) { Type registeredMockedType = entry.getKey(); Class<?> registeredMockedClass = getClassType(registeredMockedType); if (abstractType) { registeredMockedClass = getMockedClassOrInterfaceType(registeredMockedClass); } if (mockedClass.isAssignableFrom(registeredMockedClass)) { instanceFactory = entry.getValue(); break; } } return instanceFactory; }
private boolean instanceMapHasMocksInSeparateEntries( @Nonnull Object mock1, @Nonnull Object mock2) { boolean found1 = false; boolean found2 = false; for (Entry<Object, Object> entry : instanceMap.entrySet()) { if (!found1 && isInMapEntry(entry, mock1)) { found1 = true; } if (!found2 && isInMapEntry(entry, mock2)) { found2 = true; } if (found1 && found2) { return true; } } return false; }