Ejemplo n.º 1
0
        // Called from native code when preparing assets for a build
        public static List <Type> ExtractTypesFromVisualTreeAsset(VisualTreeAsset asset)
        {
            if (s_PrecompiledUnityAssemblies == null)
            {
                // Ignore all precompiled Unity assemblies, but include those from users
                CompilationPipeline.PrecompiledAssemblySources sources = CompilationPipeline.PrecompiledAssemblySources.All;
                sources &= ~CompilationPipeline.PrecompiledAssemblySources.UserAssembly;
                s_PrecompiledUnityAssemblies = new HashSet <string>(CompilationPipeline.GetPrecompiledAssemblyPaths(sources));
            }

            s_FactoryTypesUsedInAsset.Clear();
            s_UsedTypesInsideAsset.Clear();

            asset.ExtractUsedUxmlQualifiedNames(s_UsedTypesInsideAsset);

            foreach (var qualifiedName in s_UsedTypesInsideAsset)
            {
                if (VisualElementFactoryRegistry.TryGetValue(qualifiedName, out List <IUxmlFactory> factoryList))
                {
                    foreach (var factory in factoryList)
                    {
                        var type = factory.GetType();

                        if (s_PrecompiledUnityAssemblies.Contains(type.Assembly.Location))
                        {
                            continue;
                        }

                        s_FactoryTypesUsedInAsset.Add(type);
                    }
                }
            }

            return(s_FactoryTypesUsedInAsset);
        }