protected Dictionary <string, List <PluginImporter> > GetCompatiblePlugins(string buildTargetName, string[] defines)
        {
            var pluginImporters = PluginImporter.GetImporters(buildTargetName);
            var plugins         = pluginImporters
                                  .Where(pluginImporter => IsPluginDefinesCompatible(pluginImporter, buildTargetName, defines));

            plugins = PluginImporter.FilterAssembliesByAssemblyVersion(plugins);

            var matchingPlugins = new Dictionary <string, List <PluginImporter> >();

            foreach (var plugin in plugins)
            {
                string finalPluginPath = CalculateFinalPluginPath(buildTargetName, plugin);
                if (string.IsNullOrEmpty(finalPluginPath))
                {
                    continue;
                }

                if (!matchingPlugins.TryGetValue(finalPluginPath, out var pluginsList))
                {
                    pluginsList = new List <PluginImporter>();
                    matchingPlugins[finalPluginPath] = pluginsList;
                }
                pluginsList.Add(plugin);
            }

            return(matchingPlugins);
        }