private void CreateSubTree(FindUsagePathElement element, IEnumerable <AbstractUsageElement> data, int startId) { var fileNames = new Dictionary <string, FindUsagePathElement>(); var curFileNameId = 0; foreach (var usageElement in data) { FindUsagePathElement current = element; var filePath = usageElement.FilePath; var dataFileName = filePath.Split('/').Last(); if (!fileNames.ContainsKey(filePath)) { current = current.CreateChild(new FindUsagePathElement(curFileNameId++) { id = startId++, displayName = dataFileName, icon = (Texture2D)EditorGUIUtility.IconContent(usageElement.StartNodeImage).image }); fileNames.Add(filePath, current); } else { current = fileNames[filePath]; } var pathLength = usageElement.Path.Length; for (int i = 0; i < pathLength; i++) { var name = usageElement.Path[i]; if (i + 1 == pathLength) { var id = startId++; findResultItems[id] = new FindUsagesTreeViewItem(usageElement.RootIndices[i], usageElement) { id = id, displayName = name, icon = (Texture2D)EditorGUIUtility.IconContent(usageElement.TerminalNodeImage).image }; current.AddChild(findResultItems[id]); } else { var rootIndex = usageElement.RootIndices[i]; if (!current.HasChild(rootIndex)) { current = current.CreateChild(new FindUsagePathElement(rootIndex) { id = startId++, displayName = name, icon = (Texture2D)EditorGUIUtility.IconContent(usageElement.NodeImage).image }); } else { current = current.GetChild(rootIndex); } } } } }