Skip to content

Commit 2efe354

Browse files
authored
Merge pull request #18 from innogames/stackoverflowexception-fix
Fixed possible StackOverflowException in GetAllReachableNodes function
2 parents 6674b50 + edf605c commit 2efe354

File tree

4 files changed

+17
-12
lines changed

4 files changed

+17
-12
lines changed

AssetRelationsViewer/Editor/AssetRelationsViewerWindow.cs

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1139,8 +1139,8 @@ private void ReloadContext(ResolverUsageDefinitionList resolverUsageDefinitionLi
11391139
LoadDependencyCache(resolverUsageDefinitionList, _updateCache, partialUpdate);
11401140
ChangeSelection(_selectedNodeId, _selectedNodeType);
11411141
}
1142-
1143-
private void GetAllReachableNodes(Node node, HashSet<Node> reachedNodes, HashSet<Node> newNodes)
1142+
1143+
private void GetAllReachableNodes(Node node, HashSet<Node> reachedNodes, HashSet<Node> newNodes, RelationType relationType)
11441144
{
11451145
if (reachedNodes.Contains(node))
11461146
{
@@ -1150,15 +1150,9 @@ private void GetAllReachableNodes(Node node, HashSet<Node> reachedNodes, HashSet
11501150
reachedNodes.Add(node);
11511151
newNodes.Add(node);
11521152

1153-
GetAllReachableNodes(node, reachedNodes, newNodes, RelationType.DEPENDENCY);
1154-
GetAllReachableNodes(node, reachedNodes, newNodes, RelationType.REFERENCER);
1155-
}
1156-
1157-
private void GetAllReachableNodes(Node node, HashSet<Node> reachedNodes, HashSet<Node> newNodes, RelationType relationType)
1158-
{
11591153
foreach (Connection connection in node.GetRelations(relationType))
11601154
{
1161-
GetAllReachableNodes(connection.Node, reachedNodes, newNodes);
1155+
GetAllReachableNodes(connection.Node, reachedNodes, newNodes, relationType);
11621156
}
11631157
}
11641158

@@ -1170,7 +1164,14 @@ private void CalculateAllNodeSizes(Node rootNode)
11701164
}
11711165

11721166
HashSet<Node> newNodes = new HashSet<Node>();
1173-
GetAllReachableNodes(rootNode, _nodeSizesReachedNodes, newNodes);
1167+
HashSet<Node> referencerNodes = new HashSet<Node>();
1168+
1169+
GetAllReachableNodes(rootNode, referencerNodes, referencerNodes, RelationType.REFERENCER);
1170+
1171+
foreach (Node referencerNode in referencerNodes)
1172+
{
1173+
GetAllReachableNodes(referencerNode, _nodeSizesReachedNodes, newNodes, RelationType.DEPENDENCY);
1174+
}
11741175

11751176
List<Node> allNodes = newNodes.ToList();
11761177

NodeDependencyLookup/Editor/Caches/AssetToFileDependencyCache/AssetToFileDependencyCache.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ public class AssetToFileDependency
1515
// Cache to find get mapping of assets to the file the asset is included in
1616
public class AssetToFileDependencyCache : IDependencyCache
1717
{
18-
private const string Version = "1.4.5";
18+
private const string Version = "1.5.1";
1919
private const string FileName = "AssetToFileDependencyCacheData_" + Version + ".cache";
2020

2121
private Dictionary<string, GenericDependencyMappingNode> _fileNodesDict = new Dictionary<string, GenericDependencyMappingNode>();

changelog.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,7 @@
1+
**1.5.1**
2+
- Increase serialize version of AssetToFileDependencyCache because of dependency order change
3+
- Fixed possible StackOverflowException with very huge dependency trees and ShowAdditionalInformation option being enabled
4+
15
**1.5.0**
26
- AssetDependencyCache update is now a lot faster due to improved reflection code
37
- "Calculating all node sizes" step is now faster since it now only calculates reachable nodes

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
"name": "com.innogames.asset-relations-viewer",
33
"displayName": "Asset Relations Viewer",
44
"description": "Editor UI for displaying dependencies between assets in a tree based view",
5-
"version": "1.5.0",
5+
"version": "1.5.1",
66
"unity": "2018.4",
77
"license": "MIT",
88
"repository": {

0 commit comments

Comments
 (0)