4 using System.Collections.Generic;
7 using SiliconStudio.Assets.Diagnostics;
8 using SiliconStudio.Core.Diagnostics;
9 using SiliconStudio.Core.IO;
10 using SiliconStudio.Core.Serialization;
12 namespace SiliconStudio.Assets.Analysis
21 if (items == null)
throw new ArgumentNullException(
"items");
22 if (parameters == null)
throw new ArgumentNullException(
"parameters");
25 Run(items, result, parameters);
31 if (items == null)
throw new ArgumentNullException(
"items");
32 if (log == null)
throw new ArgumentNullException(
"log");
33 if (parameters == null)
throw new ArgumentNullException(
"parameters");
35 foreach (var assetItem
in items)
37 Run(assetItem, log, parameters);
43 var parameters =
new AssetAnalysisParameters() { IsProcessingAssetReferences =
true, IsLoggingAssetNotFoundAsError =
true};
45 Run(items, result, parameters);
51 if (assetItem == null)
throw new ArgumentNullException(
"assetItem");
52 if (log == null)
throw new ArgumentNullException(
"log");
53 if (parameters == null)
throw new ArgumentNullException(
"parameters");
57 throw new InvalidOperationException(
"AssetItem must belong to an existing package");
60 var
package = assetItem.Package;
63 if (package.Session != null)
65 var packages = package.FindDependencies();
67 foreach (var otherPackage
in packages)
69 var existingAsset = otherPackage.Assets.Find(assetItem.Id);
71 if (existingAsset != null)
73 log.Error(
"Assets [{0}] with id [{1}] from Package [{2}] is already loaded from package [{3}]", existingAsset.FullPath, existingAsset.Id, package.FullPath, existingAsset.Package.FullPath);
77 existingAsset = otherPackage.Assets.Find(assetItem.Location);
78 if (existingAsset != null)
80 log.Error(
"Assets [{0}] with location [{1}] from Package [{2}] is already loaded from package [{3}]", existingAsset.FullPath, existingAsset.Location, package.FullPath, existingAsset.Package.FullPath);
86 var assetReferences = AssetReferenceAnalysis.Visit(assetItem.Asset);
90 UpdateAssetReferences(assetItem, assetReferences, log, parameters);
97 CommonAnalysis.UpdatePaths(assetItem, assetReferences.Where(link => link.Reference is
UPath), parameters);
103 var
package = assetItem.Package;
104 var session = package.Session;
107 foreach (var assetReferenceLink
in assetReferences.Where(link => link.Reference is
IContentReference))
109 var contentReference = (IContentReference)assetReferenceLink.Reference;
111 if ((contentReference is
AssetBase) && ((AssetBase)contentReference).IsRootImport)
117 var
id = contentReference.Id;
118 var newItemReference = session.FindAsset(id);
121 if (newItemReference == null)
123 newItemReference = session.FindAsset(contentReference.Location);
124 if (newItemReference != null)
127 log.Warning(package, contentReference, AssetMessageCode.AssetReferenceChanged, contentReference, newItemReference.Id);
132 if (newItemReference == null)
136 log.Error(package, contentReference, AssetMessageCode.AssetNotFound, contentReference);
140 log.Warning(package, contentReference, AssetMessageCode.AssetNotFound, contentReference);
146 var newLocationWithoutExtension = newItemReference.Location;
147 if (newLocationWithoutExtension != contentReference.Location || newItemReference.Id != contentReference.Id)
149 assetReferenceLink.UpdateReference(newItemReference.Id, newLocationWithoutExtension);
150 assetItem.IsDirty =
true;
Parameters for asset analysis.
static LoggerResult Run(IEnumerable< AssetItem > items, AssetAnalysisParameters parameters)
SiliconStudio.Core.Diagnostics.LoggerResult LoggerResult
A logger that stores messages locally useful for internal log scenarios.
An asset item part of a Package accessible through Package.Assets.
An asset item part of a Package accessible through SiliconStudio.Assets.Package.Assets.
Package Package
Gets the package where this asset is stored.
bool IsProcessingAssetReferences
static void Run(IEnumerable< AssetItem > items, ILogger log, AssetAnalysisParameters parameters)
static LoggerResult FixAssetReferences(IEnumerable< AssetItem > items)
Base class that describes a uniform path and provides method to manipulate them. Concrete class are U...
static void Run(AssetItem assetItem, ILogger log, AssetAnalysisParameters parameters)
An interface that provides a reference to an asset.
bool IsLoggingAssetNotFoundAsError