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())); }
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)); } }); }
public bool CreateRequestToUnity([NotNull] IUnityYamlReference yamlReference, bool focusUnity) { var declaredElement = yamlReference.Resolve().DeclaredElement; if (declaredElement == null) { return(false); } return(CreateRequestToUnity(declaredElement, yamlReference, focusUnity)); }
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); }
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); }
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); }
public UnityEditorOccurrence([NotNull] IUnityYamlReference unityEventTargetReference, IDeclaredElement element, OccurrenceType occurrenceType) : base(unityEventTargetReference, element, occurrenceType) { myUnityEventTargetReference = unityEventTargetReference; }