Exemplo n.º 1
0
        private static void InitRoots(YamlyProjectAssemblies assemblies)
        {
            if (_roots != null)
            {
                return;
            }

            var gen = new ProxyCodeGenerator
            {
                TargetAssemblies = assemblies.All.Except(assemblies.IgnoreAssemblies).ToArray()
            };

            _roots = new List <RootDefinition>();
            foreach (var r in gen.GetRootDefinitions().ToList())
            {
                if (r.Assembly == assemblies.MainRuntimeAssembly ||
                    r.Assembly == assemblies.MainEditorAssembly)
                {
                    Debug.LogWarning($"Config root {r.Root.FullName} is defined in assembly {r.Assembly.FullName}. This is not supported - please put it into separate assembly with AssemblyDefinition or manually.");
                    continue;
                }

                _roots.Add(r);
            }

            var groups = _roots.SelectMany(r => r.Attributes)
                         .Select(a => a.Group)
                         .ToList();

            foreach (var group in groups.Distinct())
            {
                if (groups.Count(g => g == group) > 1)
                {
                    var roots = _roots.Where(r => r.Contains(group));

                    var log = new StringBuilder();
                    log.AppendFormat("Group name \"{0}\" is declared multiple times. This is not supported.", group).AppendLine();
                    log.AppendLine("Declarations found in these types:");
                    foreach (var root in roots)
                    {
                        log.AppendFormat("{0} ({1})", root.Root.Name, root.Root.AssemblyQualifiedName).AppendLine();
                    }

                    log.AppendLine("These group will be ignored until duplication is fixed.");

                    Debug.LogError(log);
                }
            }
        }
Exemplo n.º 2
0
        private static YamlyProjectContext GetContext()
        {
            var assemblies    = GetProjectAssemblies();
            var proxyAssembly = GetProxyAssembly(assemblies);

            if (proxyAssembly == null)
            {
                return(null);
            }

            var mainRuntimeAssembly = assemblies.FirstOrDefault(a => "Assembly-CSharp".Equals(a.GetName().Name));
            var mainEditorAssembly  = assemblies.FirstOrDefault(a => "Assembly-CSharp-Editor".Equals(a.GetName().Name));

            var gen = new ProxyCodeGenerator {
                TargetAssemblies = assemblies
            };
            var roots = new List <RootDefinition>();

            foreach (var r in gen.GetRootDefinitions().ToList())
            {
                if (r.Assembly == mainEditorAssembly ||
                    r.Assembly == mainRuntimeAssembly)
                {
                    Debug.LogWarning($"Config root {r.Root.FullName} is defined in assembly {r.Assembly.FullName}. This is not supported - please put it into separate assembly with AssemblyDefinition or manually.");
                    continue;
                }

                roots.Add(r);
            }

            var groups = roots.SelectMany(r => r.Attributes)
                         .Select(a => a.Group)
                         .Where(CodeGenerationUtility.IsValidGroupName)
                         .ToList();

            foreach (var group in groups.Distinct())
            {
                if (groups.Count(g => g == group) > 1)
                {
                    var duplicateRoots = roots.Where(r => r.Contains(group));

                    var log = new StringBuilder();
                    log.AppendFormat("Group name \"{0}\" is declared multiple times. This is not supported.", group).AppendLine();
                    log.AppendLine("Declarations found in these types:");
                    foreach (var root in duplicateRoots)
                    {
                        log.AppendFormat("{0} ({1})", root.Root.Name, root.Root.AssemblyQualifiedName).AppendLine();
                    }

                    log.AppendLine("These group will be ignored until duplication is fixed.");

                    Debug.LogError(log);
                }
            }

            var sourceDefinitions = AssetUtility.LoadAll <FolderSource>()
                                    .Cast <SourceBase>()
                                    .Concat(AssetUtility.LoadAll <SingleSource>())
                                    .ToList();

            var storageDefinitions = AssetUtility.LoadAll <Storage>().ToList();

            return(new YamlyProjectContext
            {
                ProxyAssembly = proxyAssembly,
                Roots = roots,
                Sources = sourceDefinitions,
                Storages = storageDefinitions
            });
        }