Ejemplo n.º 1
0
        private FindUsageResultElement CreateRequest([NotNull] IUnityYamlReference currentReference, [CanBeNull] IUnityYamlReference selectedReference)
        {
            var monoScriptDocument = currentReference.ComponentDocument;

            var sourceFile = monoScriptDocument?.GetSourceFile();

            if (sourceFile == null)
            {
                return(null);
            }

            var pathElements = UnityObjectPsiUtil.GetGameObjectPathFromComponent(mySceneProcessor, currentReference.ComponentDocument).RemoveEnd("\\").Split("\\");

            // Constructing path of child indices
            var consumer = new UnityChildPathSceneConsumer();

            mySceneProcessor.ProcessSceneHierarchyFromComponentToRoot(monoScriptDocument, consumer);


            if (!GetPathFromAssetFolder(sourceFile, out var pathFromAsset, out var fileName, out var extension))
            {
                return(null);
            }
            bool needExpand = currentReference == selectedReference;
            bool isPrefab   = extension.Equals(UnityYamlConstants.Prefab, StringComparison.OrdinalIgnoreCase);

            return(new FindUsageResultElement(isPrefab, needExpand, pathFromAsset, fileName, pathElements, consumer.RootIndices.ToArray().Reverse().ToArray()));
        }
Ejemplo n.º 2
0
        public bool CreateRequestToUnity([NotNull] IDeclaredElement declaredElement, [CanBeNull] IUnityYamlReference selectedReference, bool focusUnity)
        {
            var finder     = mySolution.GetPsiServices().Finder;
            var references = finder.FindAllReferences(declaredElement).OfType <IUnityYamlReference>();

            var result = new List <FindUsageResultElement>();

            foreach (var reference in references)
            {
                var request = CreateRequest(reference, selectedReference);
                if (request != null)
                {
                    result.Add(request);
                }
            }

            if (result.Count == 0)
            {
                return(false);
            }

            if (focusUnity)
            {
                UnityFocusUtil.FocusUnity(myUnityHost.GetValue(t => t.UnityProcessId.Value));
            }

            if (selectedReference != null)
            {
                myUnityHost.PerformModelAction(t => t.ShowGameObjectOnScene.Fire(CreateRequest(selectedReference, null)));
            }
            myUnityHost.PerformModelAction(t => t.FindUsageResults.Fire(new FindUsageResult(declaredElement.ShortName, result.ToArray())));
            return(true);
        }
        public void CreateRequestToUnity([NotNull] IDeclaredElement declaredElement, [CanBeNull] IUnityYamlReference selectedReference, bool focusUnity)
        {
            var finder   = mySolution.GetPsiServices().AsyncFinder;
            var consumer = new UnityUsagesFinderConsumer(mySceneProcessor, mySolutionDirectoryPath, selectedReference);

            var selectRequest = selectedReference == null
                ? null
                : CreateRequest(mySolutionDirectoryPath, mySceneProcessor, selectedReference, null);

            var lifetimeDef = myLifetime.CreateNested();
            var pi          = new ProgressIndicator(myLifetime);

            if (myBackgroundTaskHost != null)
            {
                var task = RiderBackgroundTaskBuilder.Create()
                           .WithTitle("Finding usages in Unity for: " + declaredElement.ShortName)
                           .AsIndeterminate()
                           .AsCancelable(() => { pi.Cancel(); })
                           .Build();

                myBackgroundTaskHost.AddNewTask(lifetimeDef.Lifetime, task);
            }

            myLocks.Tasks.StartNew(myLifetime, Scheduling.MainGuard, () =>
            {
                using (ReadLockCookie.Create())
                {
                    finder.FindAsync(new[] { declaredElement }, myYamlSearchDomain,
                                     consumer, SearchPattern.FIND_USAGES, pi,
                                     FinderSearchRoot.Empty, new UnityUsagesAsyncFinderCallback(lifetimeDef, consumer, myUnityHost, myLocks,
                                                                                                declaredElement.ShortName, selectRequest, focusUnity));
                }
            });
        }
Ejemplo n.º 4
0
        public bool CreateRequestToUnity([NotNull] IUnityYamlReference yamlReference, bool focusUnity)
        {
            var declaredElement = yamlReference.Resolve().DeclaredElement;

            if (declaredElement == null)
            {
                return(false);
            }

            return(CreateRequestToUnity(declaredElement, yamlReference, focusUnity));
        }
Ejemplo n.º 5
0
        public void CreateRequestToUnity([NotNull] IUnityYamlReference yamlReference, bool focusUnity)
        {
            var declaredElement = yamlReference.Resolve().DeclaredElement;

            if (declaredElement == null)
            {
                return;
            }

            var sourceFile = yamlReference.ComponentDocument.GetSourceFile();

            if (sourceFile == null)
            {
                return;
            }

            var anchor = UnitySceneDataUtil.GetAnchorFromBuffer(yamlReference.ComponentDocument.GetTextAsBuffer());

            CreateRequestToUnity(declaredElement, sourceFile, anchor, focusUnity);
        }
Ejemplo n.º 6
0
        public IOccurrence MakeOccurrence(FindResult findResult)
        {
            if (findResult is IFindResultReference findResultReference)
            {
                IUnityYamlReference reference = null;
                if (findResultReference.Reference is UnityEventTargetReference unityEventTargetReference)
                {
                    reference = unityEventTargetReference;
                }

                if (findResultReference.Reference is MonoScriptReference monoScriptReference)
                {
                    reference = monoScriptReference;
                }

                if (reference != null)
                {
                    return(new UnityEditorOccurrence(reference, findResultReference.DeclaredElement, OccurrenceType.TextualOccurrence));
                }
            }

            return(null);
        }
Ejemplo n.º 7
0
        public IOccurrence MakeOccurrence(FindResult findResult)
        {
            if (findResult is IFindResultReference findResultReference)
            {
                IUnityYamlReference reference = null;
                if (findResultReference.Reference is UnityEventTargetReference unityEventTargetReference)
                {
                    reference = unityEventTargetReference;
                }

                if (findResultReference.Reference is MonoScriptReference monoScriptReference)
                {
                    reference = monoScriptReference;
                }

                if (reference != null)
                {
                    var cache = reference.ComponentDocument.GetSolution().GetComponent <UnitySceneDataCache>();
                    return(new UnityEditorOccurrence(reference, findResultReference.DeclaredElement, OccurrenceType.TextualOccurrence));
                }
            }

            return(null);
        }
Ejemplo n.º 8
0
 public UnityEditorOccurrence([NotNull] IUnityYamlReference unityEventTargetReference, IDeclaredElement element,
                              OccurrenceType occurrenceType)
     : base(unityEventTargetReference, element, occurrenceType)
 {
     myUnityEventTargetReference = unityEventTargetReference;
 }