| /* |
| * Copyright (c) 2016 Mockito contributors |
| * This program is made available under the terms of the MIT License. |
| */ |
| package org.mockito.internal.creation.bytebuddy.inject; |
| |
| import java.lang.reflect.Method; |
| import java.util.concurrent.Callable; |
| import java.util.concurrent.ConcurrentHashMap; |
| import java.util.concurrent.ConcurrentMap; |
| |
| public abstract class MockMethodDispatcher { |
| |
| private static final ConcurrentMap<String, MockMethodDispatcher> INSTANCE = new ConcurrentHashMap<String, MockMethodDispatcher>(); |
| |
| public static MockMethodDispatcher get(String identifier, Object mock) { |
| if (mock == INSTANCE) { // Avoid endless loop if ConcurrentHashMap was redefined to check for being a mock. |
| return null; |
| } else { |
| return INSTANCE.get(identifier); |
| } |
| } |
| |
| public static void set(String identifier, MockMethodDispatcher dispatcher) { |
| INSTANCE.putIfAbsent(identifier, dispatcher); |
| } |
| |
| public abstract Callable<?> handle(Object instance, Method origin, Object[] arguments) throws Throwable; |
| |
| public abstract boolean isMock(Object instance); |
| |
| public abstract boolean isMocked(Object instance); |
| |
| public abstract boolean isOverridden(Object instance, Method origin); |
| } |