package org.skywalking.apm.agent.core.plugin.interceptor; import org.skywalking.apm.agent.core.plugin.AbstractClassEnhancePluginDefine; import org.skywalking.apm.agent.core.plugin.interceptor.enhance.ClassEnhancePluginDefine; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; /** * Enhanced instance field type. * <p> * Any plugins({@link AbstractClassEnhancePluginDefine}'s subclass) override * {@link ClassEnhancePluginDefine#getConstructorsInterceptPoints} * or * {@link ClassEnhancePluginDefine#getInstanceMethodsInterceptPoints} * will add a field with this type. * * @author wusheng */ public class EnhancedClassInstanceContext { /** * extend field, can store any instance as you want. */ private Map<Object, Object> context = new ConcurrentHashMap<Object, Object>(); /** * store a new instance or override it. * * @param key * @param value */ public void set(Object key, Object value) { context.put(key, value); } /** * get an stored instance, if it is existed. * * @param key * @return null or stored instance. */ public Object get(Object key) { return context.get(key); } /** * judge whether stores by the key. * * @param key * @return true, if stored a instance by the key. */ public boolean isContain(Object key) { return context.containsKey(key); } /** * get an stored instance, if it is existed. * * @param key * @param type * @param <T> expected stored instance's type * @return null or stored instance. */ public <T> T get(Object key, Class<T> type) { return (T) this.get(key); } }