internal static void RevertPrefabInstanceWithUndo(GameObject target)
{
string text = "Revert Prefab Instance";
PrefabType prefabType = PrefabUtility.GetPrefabType(target);
bool flag = prefabType == PrefabType.DisconnectedModelPrefabInstance || prefabType == PrefabType.DisconnectedPrefabInstance;
GameObject gameObject;
if (flag)
{
gameObject = PrefabUtility.FindRootGameObjectWithSameParentPrefab(target);
}
else
{
gameObject = PrefabUtility.FindValidUploadPrefabInstanceRoot(target);
}
List <UnityEngine.Object> hierarchy = new List <UnityEngine.Object>();
PrefabUtility.GetObjectListFromHierarchy(hierarchy, gameObject);
Undo.RegisterFullObjectHierarchyUndo(gameObject, text);
if (flag)
{
PrefabUtility.ReconnectToLastPrefab(gameObject);
Undo.RegisterCreatedObjectUndo(PrefabUtility.GetPrefabObject(gameObject), text);
}
PrefabUtility.RevertPrefabInstance(gameObject);
List <UnityEngine.Object> list = new List <UnityEngine.Object>();
PrefabUtility.GetObjectListFromHierarchy(list, PrefabUtility.FindPrefabRoot(gameObject));
PrefabUtility.RegisterNewObjects(list, hierarchy, text);
}