public static T LoadAssetAtPath <T>(string path) where T : ScriptableObject
        {
#if UNITY_EDITOR
            return((T)AssetDatabase.LoadAssetAtPath(path, typeof(T)));
#else
            string _resourcePath    = "Assets/Resources/";
            string _pathInResources = IOExtensions.MakeRelativePath(_fromPath: Path.GetFullPath(_resourcePath),
                                                                    _toPath: Path.GetFullPath(path));

            // remove file extension
            _pathInResources = Path.ChangeExtension(_pathInResources, null);
            return(Resources.Load <T>(_pathInResources));
#endif
        }
Example #2
0
        public override bool Execute()
        {
            _resultFolders.Clear();
            try
            {
                Log.LogMessage(MessageImportance.Normal, "Searching Nuget package folder...");

                if (string.IsNullOrEmpty(PackageID))
                {
                    throw new InvalidDataException("Nuget PackageID is not set");
                }

                var targetFolders = (TargetFolders ?? Enumerable.Empty <ITaskItem>()).Select(f => f.ItemSpec).ToList();
                if (!targetFolders.Any())
                {
                    targetFolders.Add(Environment.CurrentDirectory);
                    targetFolders.Add(Environment.CurrentDirectory + "\\..\\");
                }

                var packageFolders = NugetExtensions.FindPackageLattestVersionFolders(PackageID, targetFolders.ToArray());

                if (!packageFolders.Any())
                {
                    Log.LogMessage(MessageImportance.Normal, "  * There is no packages found");
                    return(true);
                }

                foreach (var packageFolder in packageFolders)
                {
                    var path = Path.GetFullPath(packageFolder.Path);
                    if (!string.IsNullOrEmpty(RelativeToPath))
                    {
                        path = IOExtensions.MakeRelativePath(RelativeToPath, path);
                    }
                    Log.LogMessage(MessageImportance.Normal, "  * Found package: {0}", path);
                    _resultFolders.Add(new TaskItem(path));
                }
            }
            catch (Exception e)
            {
                Log.LogError(e.ToString());
                return(false);
            }

            return(true);
        }
Example #3
0
        public override bool Execute()
        {
            Log.LogMessage(MessageImportance.Normal, "Analyzing project files for NSwag clients...");
            _nswagClients.Clear();
            _cachedItems.Clear();

            var projectDir = Path.GetDirectoryName(BuildEngine.ProjectFileOfTaskNode) ?? string.Empty;

            projectDir = projectDir.TrimEnd('\\') + "\\";

            var dynamicIncludeTarget = XDocumentExtensions.CreateDynamicIncludeTarget();

            using (var cache = new CacheManager(IntermediateOutputPath, Log))
            {
                _cachedItems.Add(new TaskItem(cache.GetCachePath()));

                var compileItemsToAddGenerator    = new List <ITaskItem>();
                var compileItemsToRemoveGenerator = new List <ITaskItem>();

                foreach (var item in Compile)
                {
                    Log.LogMessage(MessageImportance.Normal, $"Analyzing '{item.ItemSpec}' compiled item");

                    var clients = cache.GetCached(item);

                    if (clients == null)
                    {
                        clients = GetClients(item);
                        if (clients.Any() && string.IsNullOrEmpty(item.GetMetadata("Generator")))
                        {
                            compileItemsToAddGenerator.Add(item);
                        }
                        cache.Cache(item, clients);
                        Log.LogMessage(MessageImportance.Normal, "  - Source code analyzed. Results cached.");
                    }
                    else
                    {
                        Log.LogMessage(MessageImportance.Normal, "  - Results restored from cache");
                    }

                    if (!clients.Any())
                    {
                        if (Equals(item.GetMetadata("Generator"), "MSBuild:UpdateSwaggerClients"))
                        {
                            compileItemsToRemoveGenerator.Add(item);
                        }

                        Log.LogMessage(MessageImportance.Normal, "  - There is no NSwag declarations. Skipping.");
                        continue;
                    }

                    foreach (var client in clients)
                    {
                        Log.LogMessage(MessageImportance.Normal, $"  - Detected: {client.Namespace}.{client.ClassName} NSwag declaration");

                        var sourceItemSpec         = client.SourceItemSpec;
                        var relativeSourceItemSpec = sourceItemSpec.IsAbsolutePath()
                            ? IOExtensions.MakeRelativePath(projectDir, sourceItemSpec)
                            : sourceItemSpec;

                        var generatedFilePathRelative = Path.Combine(Path.GetDirectoryName(relativeSourceItemSpec),
                                                                     string.Join(".",
                                                                                 Path.GetFileNameWithoutExtension(relativeSourceItemSpec),
                                                                                 client.ClassName,
                                                                                 "cs"));

                        var generatedFilePath = Path.Combine(IntermediateOutputPath, generatedFilePathRelative);

                        Log.LogMessage(MessageImportance.Normal, $"  - Shadow source code will be stored in '{generatedFilePath}'");

                        Path.GetDirectoryName(generatedFilePath).EnsureDirectoryExist();

                        var taskItem = new TaskItem(generatedFilePath);

                        var relativeGeneratedFilePath = generatedFilePath.IsAbsolutePath()
                            ? IOExtensions.MakeRelativePath(projectDir, generatedFilePath)
                            : generatedFilePath;

                        dynamicIncludeTarget.AddCompileItem(sourceItemSpec, relativeGeneratedFilePath);

                        client.Save(taskItem);
                        taskItem.SetMetadata("Source", item.GetMetadata("FullPath"));
                        _nswagClients.Add(taskItem);
                    }
                }

                var dynamicIncludeTargetPath = Path.Combine(IntermediateOutputPath, DynamicIncludeTarget);
                Path.GetDirectoryName(dynamicIncludeTargetPath).EnsureDirectoryExist();

                //Disabled for now
                //dynamicIncludeTarget.Save(dynamicIncludeTargetPath);

                _cachedItems.Add(new TaskItem(dynamicIncludeTargetPath));

                if (compileItemsToAddGenerator.Any() || compileItemsToRemoveGenerator.Any())
                {
                    foreach (var item in compileItemsToAddGenerator)
                    {
                        Log.LogWarning($"  - Compile item {item.ItemSpec} contains NSwag client declaration " +
                                       "but has no <Generator>MSBuild:UpdateSwaggerClients</Generator> attribute declaration");
                    }

                    foreach (var item in compileItemsToRemoveGenerator)
                    {
                        Log.LogWarning($"  - Compile item {item.ItemSpec} does not contain NSwag client declaration " +
                                       "but has <Generator>MSBuild:UpdateSwaggerClients</Generator> attribute declaration");
                    }
                }
            }

            return(true);
        }