in resharper/resharper-unity/src/Unity/Yaml/Psi/DeferredCaches/AssetInspectorValues/AssetInspectorValuesContainer.cs [74:131]
public object Build(IPsiSourceFile currentAssetSourceFile, AssetDocument assetDocument)
{
var modifications = ProcessPrefabModifications(currentAssetSourceFile, assetDocument);
if (AssetUtils.IsMonoBehaviourDocument(assetDocument.Buffer))
{
var anchor = AssetUtils.GetAnchorFromBuffer(assetDocument.Buffer);
if (!anchor.HasValue)
return new InspectorValuesBuildResult(new LocalList<InspectorVariableUsage>(), modifications);
var dictionary = new Dictionary<string, IAssetValue>();
var entries = assetDocument.Document.GetUnityObjectProperties()?.Entries;
if (entries == null)
return new InspectorValuesBuildResult(new LocalList<InspectorVariableUsage>(), modifications);
foreach (var entry in entries)
{
var key = entry.Key.GetScalarText();
if (key == null || ourIgnoredMonoBehaviourEntries.Contains(key))
continue;
foreach (var deserializer in myDeserializers)
{
try
{
if (deserializer.TryGetInspectorValue(currentAssetSourceFile, entry.Content, out var resultValue))
{
dictionary[key] = resultValue;
break;
}
}
catch (Exception e)
{
myLogger.Error(e, "An error occurred while deserializing value {0}", deserializer.GetType().Name);
}
}
}
if (dictionary.TryGetValue(UnityYamlConstants.ScriptProperty, out var scriptValue) && scriptValue is AssetReferenceValue referenceValue
&& referenceValue.Reference is ExternalReference script)
{
var location = new LocalReference(currentAssetSourceFile.PsiStorage.PersistentIndex.NotNull("owningPsiPersistentIndex != null"), anchor.Value);
var result = new LocalList<InspectorVariableUsage>();
foreach (var (key, value) in dictionary)
{
if (key.Equals(UnityYamlConstants.ScriptProperty) || key.Equals(UnityYamlConstants.GameObjectProperty))
continue;
result.Add(new InspectorVariableUsage(location, script, key, value));
}
return new InspectorValuesBuildResult(result, modifications);
}
}
return new InspectorValuesBuildResult(new LocalList<InspectorVariableUsage>(), modifications);
}