Beispiel #1
0
            private bool OnItemRenamed(ProjectItemChange change)
            {
                myLogger.Trace("*** resharper-unity: Item renamed {0} -> {1}", change.OldLocation, change.ProjectItem.Location);

                var oldMetaFile = change.OldParentFolder.Location.Combine(change.OldLocation.Name + ".meta");
                var newMetaFile = GetMetaFile(change.ProjectItem.Location);

                if (oldMetaFile.ExistsFile)
                {
                    RenameMetaFile(oldMetaFile, newMetaFile, string.Empty);
                }
                else
                {
                    CreateMetaFile(newMetaFile);
                }

                // Don't recurse for folder renames - the child contents will be "renamed", but
                // the old location will no longer be there, and the meta files don't need moving
                return(!(change.ProjectItem is IProjectFolder));
            }
            private void OnItemRemoved(ProjectItemChange change)
            {
                myLogger.Trace("*** resharper-unity: Item removed {0}", change.OldLocation);

                var metaFile = GetMetaFile(change.OldLocation);
                if (!metaFile.ExistsFile)
                    return;

                if (IsMoveToFolderRefactoring(change))
                {
                    var newMetaFile = GetMetaFile(myMetaFileTracker.myLastAddedItem.Location);
                    RenameMetaFile(metaFile, newMetaFile, " via add/remove");
                }
                else
                {
                    DeleteMetaFile(metaFile);
                }

                myMetaFileTracker.myLastAddedItem = null;
            }
Beispiel #3
0
            private void VisitFileOrFolderDelta(ProjectItemChange fileOrFolderChange)
            {
                var shouldVisitChildren = true;

                if (IsRenamedAsset(fileOrFolderChange))
                {
                    shouldVisitChildren = OnItemRenamed(fileOrFolderChange);
                }
                else if (IsAddedAsset(fileOrFolderChange))
                {
                    OnItemAdded(fileOrFolderChange);
                }
                else if (IsRemovedAsset(fileOrFolderChange))
                {
                    OnItemRemoved(fileOrFolderChange);
                }

                if (shouldVisitChildren)
                {
                    base.VisitItemDelta(fileOrFolderChange);
                }
            }
            private void VisitProjectDelta(ProjectItemChange projectChange, IProject project)
            {
                // When a project is reloaded, we get a removal notification for it and all of its
                // files, followed by a load of addition notifications. If we don't handle this
                // properly, we'll delete a load of .meta files and create new ones, causing big problems.
                // So ignore any project removal messages. We can safely ignore them, as a) Unity will
                // never do this, and b) you can't delete a project from Visual Studio/Rider, only remove it
                if (projectChange.IsRemoved)
                {
                    return;
                }

                // Don't recurse if this project isn't a Unity project. Note that we don't do this
                // for the IsRemoved case above, as the project doesn't have a solution at that point,
                // and IsUnityProject will throw
                if (!project.IsUnityProject())
                {
                    return;
                }

                base.VisitItemDelta(projectChange);
            }
Beispiel #5
0
        private void FWithItemDelta(ProjectItemChange obj)
        {
            var item = obj.ProjectItem;

            var file = item as IProjectFile;

            if (file != null && item.ParentFolder != null && file.LanguageType.Is <XXLanguageXXFileType>())
            {
                if (obj.IsRemoved || obj.IsMovedOut)
                {
                    var project = GetProject(obj.OldParentFolder.GetProject());
                    project.TryRemoveFile(file);
                }
                else if (obj.IsAdded || obj.IsMovedIn)
                {
                    var project    = GetProject(file.GetProject());
                    var sourceFile = file.ToSourceFile();
                    if (sourceFile == null)
                    {
                        return;
                    }

                    var nitraFile = project.TryAddFile(file);

                    if (IsOpened)
                    {
                        project.UpdateProperties();
                    }

                    Action <File> oldHandler;
                    if (_fileOpenNotifyRequest.TryGetValue(nitraFile.FullName, out oldHandler))
                    {
                        oldHandler(nitraFile);
                    }
                }
            }
        }
Beispiel #6
0
            private static bool IsAssetOrPackage(ProjectItemChange change)
            {
                var rootFolder = GetRootFolder(change.OldParentFolder);
                var solution   = change.GetSolution();

                if (solution == null)
                {
                    return(false);
                }
                if (rootFolder == null)
                {
                    return(false);
                }
                if (rootFolder.Location.Equals(solution.SolutionDirectory.Combine(ProjectExtensions.AssetsFolder)))
                {
                    return(true);
                }
                if (rootFolder.Location.Equals(solution.SolutionDirectory.Combine(ProjectExtensions.PackagesFolder)) &&
                    !change.OldParentFolder.Location.Equals(solution.SolutionDirectory.Combine(ProjectExtensions.PackagesFolder)))       // exclude direct children of PackagesFolder
                {
                    return(true);
                }
                return(change.OldParentFolder.IsLinked); // support local package linked by relative path
            }
 private static bool IsItemMetaFile(ProjectItemChange change)
 {
     return(change.ProjectItem.Location.ExtensionWithDot.Equals(".meta", StringComparison.OrdinalIgnoreCase));
 }
            private static bool IsAsset(ProjectItemChange change)
            {
                var rootFolder = GetRootFolder(change.OldParentFolder);

                return(rootFolder != null && string.Compare(rootFolder.Name, "Assets", StringComparison.OrdinalIgnoreCase) == 0);
            }
 private static bool ShouldHandleChange(ProjectItemChange change)
 {
     return(!(change.ProjectItem is IProject) && change.GetOldProject().IsUnityProject() && IsAsset(change) && !IsItemMetaFile(change));
 }
 private static bool IsRemovedAsset(ProjectItemChange change)
 {
     return(change.IsRemoved && ShouldHandleChange(change));
 }
Beispiel #11
0
 private static bool ShouldHandleChange(ProjectItemChange change)
 {
     // String comparisons, treat as expensive if we're doing this very frequently
     return(IsAsset(change) && !IsItemMetaFile(change));
 }
 private static bool IsItemMetaFile(ProjectItemChange change)
 {
     return(change.ProjectItem.Name.EndsWith(".meta", StringComparison.OrdinalIgnoreCase));
 }
Beispiel #13
0
    private void FWithItemDelta(ProjectItemChange obj)
    {
      var item = obj.ProjectItem;

      var file = item as IProjectFile;
      if (file != null && item.ParentFolder != null && file.LanguageType.Is<XXLanguageXXFileType>())
      {
        if (obj.IsRemoved || obj.IsMovedOut)
        {
          var project = GetProject(obj.OldParentFolder.GetProject());
          project.TryRemoveFile(file);
        }
        else if (obj.IsAdded || obj.IsMovedIn)
        {
          var project = GetProject(file.GetProject());
          var sourceFile = file.ToSourceFile();
          if (sourceFile == null)
            return;

          var nitraFile = project.TryAddFile(file);

          if (IsOpened)
            project.UpdateProperties();

          Action<File> oldHandler;
          if (_fileOpenNotifyRequest.TryGetValue(nitraFile.FullName, out oldHandler))
            oldHandler(nitraFile);
        }
      }
    }
 private static bool IsRenamedAsset(ProjectItemChange change)
 {
     return change.IsMovedOut && ShouldHandleChange(change);
 }
Beispiel #15
0
 public override void VisitItemDelta(ProjectItemChange change)
 {
     base.VisitItemDelta(change);
     var projectFile = change.ProjectItem as IProjectFile;
     if (projectFile != null && change.ContainsChangeType(ProjectModelChangeType.PROPERTIES)) {
     }
 }