void PopulateGroup(AssetGroup AssetGroup, Rect position)
    {
        Object mainObject = AssetDatabase.LoadMainAssetAtPath(AssetGroup.assetPath);

        if (mainObject == null)
        {
            Debug.Log("Object doesn't exist anymore");
            return;
        }

        string[] dependencies = AssetDatabase.GetDependencies(AssetGroup.assetPath, false);

        AssetGroup.mainNode          = CreateNode(AssetGroup, mainObject, AssetGroup.assetPath, true, dependencies.Length);
        AssetGroup.mainNode.userData = 0;

        AssetGroup.mainNode.SetPosition(position);

        if (!m_GraphView.Contains(AssetGroup.groupNode))
        {
            m_GraphView.AddElement(AssetGroup.groupNode);
        }

        m_GraphView.AddElement(AssetGroup.mainNode);

        AssetGroup.groupNode.AddElement(AssetGroup.mainNode);

        CreateDependencyNodes(AssetGroup, dependencies, AssetGroup.mainNode, AssetGroup.groupNode, 1);

        AssetGroup.m_AssetNodes.Add(AssetGroup.mainNode);
        //AssetGroup.m_AssetNodes.Add(AssetGroup.groupNode);
        AssetGroup.groupNode.capabilities &= ~Capabilities.Deletable;

        AssetGroup.groupNode.Focus();

        AssetGroup.mainNode.RegisterCallback <GeometryChangedEvent, AssetGroup>(
            UpdateGroupDependencyNodePlacement, AssetGroup
            );
    }
    private void CreateDependencyNodes(string[] dependencies, Node parentNode, Group groupNode, int depth)
    {
        foreach (string dependencyString in dependencies)
        {
            Object   dependencyAsset    = AssetDatabase.LoadMainAssetAtPath(dependencyString);
            string[] deeperDependencies = AssetDatabase.GetDependencies(dependencyString, false);

            Node dependencyNode = CreateNode(dependencyAsset, AssetDatabase.GetAssetPath(dependencyAsset),
                                             false, deeperDependencies.Length > 0);

            if (!m_AssetElements.Contains(dependencyNode))
            {
                dependencyNode.userData = depth;
            }

            CreateDependencyNodes(deeperDependencies, dependencyNode, groupNode, depth + 1);

            if (!m_GraphView.Contains(dependencyNode))
            {
                m_GraphView.AddElement(dependencyNode);
            }

            Edge edge = new Edge
            {
                input  = dependencyNode.inputContainer[0] as Port,
                output = parentNode.outputContainer[0] as Port,
            };
            edge.input?.Connect(edge);
            edge.output?.Connect(edge);

            dependencyNode.RefreshPorts();
            m_GraphView.AddElement(edge);

            if (!m_AssetElements.Contains(dependencyNode))
            {
                groupNode.AddElement(dependencyNode);
            }

            edge.capabilities &= ~Capabilities.Deletable;
            m_AssetElements.Add(edge);
            m_AssetElements.Add(dependencyNode);

            if (!m_DependenciesForPlacement.Contains(dependencyNode))
            {
                m_DependenciesForPlacement.Add(dependencyNode);
            }
        }
    }