package org.skywalking.apm.agent.core.plugin; import java.util.HashMap; import java.util.LinkedList; import java.util.List; import java.util.Map; /** * The PluginFinder represents a finder , which assist to find the one * from the given {@link AbstractClassEnhancePluginDefine} list, by name match. * * @author wusheng */ public class PluginFinder { private final Map> pluginDefineMap = new HashMap>(); public PluginFinder(List plugins) { for (AbstractClassEnhancePluginDefine plugin : plugins) { String enhanceClassName = plugin.enhanceClassName(); if (enhanceClassName == null) { continue; } LinkedList pluginDefinesWithSameTarget = pluginDefineMap.get(enhanceClassName); if (pluginDefinesWithSameTarget == null) { pluginDefinesWithSameTarget = new LinkedList(); pluginDefineMap.put(enhanceClassName, pluginDefinesWithSameTarget); } pluginDefinesWithSameTarget.add(plugin); } } public List find(String enhanceClassName) { if (pluginDefineMap.containsKey(enhanceClassName)) { return pluginDefineMap.get(enhanceClassName); } throw new PluginException("Can not find plugin:" + enhanceClassName); } public boolean exist(String enhanceClassName) { return pluginDefineMap.containsKey(enhanceClassName); } }