static UInt64 GetFileIDForCorrespondingObjectFromSourceAtPath(GameObject gameObject, string prefabAssetPath)
        {
            if (gameObject == null)
            {
                return(0);
            }

            if (EditorUtility.IsPersistent(gameObject))
            {
                return(0);
            }

            if (!PrefabUtility.IsPartOfNonAssetPrefabInstance(gameObject))
            {
                return(0);
            }

            GameObject assetGameObject = PrefabUtility.GetCorrespondingObjectFromSourceAtPath(gameObject, prefabAssetPath);

            if (assetGameObject == null)
            {
                return(0);
            }

            return(Unsupported.GetOrGenerateFileIDHint(assetGameObject));
        }
        internal static GameObject FindFirstGameObjectThatMatchesFileID(Transform searchRoot, UInt64 fileID, bool generate)
        {
            GameObject result           = null;
            var        transformVisitor = new TransformVisitor();

            transformVisitor.VisitAndAllowEarlyOut(searchRoot,
                                                   (transform, userdata) =>
            {
                UInt64 id = generate ?
                            Unsupported.GetOrGenerateFileIDHint(transform.gameObject) :
                            GetPrefabOrVariantFileID(transform.gameObject);
                if (id == fileID)
                {
                    result = transform.gameObject;
                    return(false); // stop searching
                }
                return(true);      // continue searching
            }
                                                   , null);

            return(result);
        }