/** * Selects then next or previous editor. */ public boolean selectFile(int count, @NotNull DataContext context) { final Project project = PlatformDataKeys.PROJECT.getData(context); if (project == null) return false; FileEditorManager fem = FileEditorManager.getInstance(project); // API change - don't merge VirtualFile[] editors = fem.getOpenFiles(); if (count == 99) { count = editors.length - 1; } if (count < 0 || count >= editors.length) { return false; } fem.openFile(editors[count], true); return true; }
/** * Selects then next or previous editor. */ public void selectNextFile(int count, @NotNull DataContext context) { Project project = PlatformDataKeys.PROJECT.getData(context); if (project == null) return; FileEditorManager fem = FileEditorManager.getInstance(project); // API change - don't merge VirtualFile[] editors = fem.getOpenFiles(); VirtualFile current = fem.getSelectedFiles()[0]; for (int i = 0; i < editors.length; i++) { if (editors[i].equals(current)) { int pos = (i + (count % editors.length) + editors.length) % editors.length; fem.openFile(editors[pos], true); } } }
void refreshAllFiles() { VirtualFile[] openFiles = fileEditorManager.getOpenFiles(); Arrays.stream(openFiles) .map(this::getPsi) .filter(Objects::nonNull) .forEach(codeAnalyzer::restart); }
void refreshFiles(Collection<VirtualFile> changedFiles) { VirtualFile[] openFiles = fileEditorManager.getOpenFiles(); Arrays.stream(openFiles) .filter(changedFiles::contains) .map(this::getPsi) .filter(Objects::nonNull) .forEach(codeAnalyzer::restart); }
public boolean isOpenFile(Project project, VirtualFile file) { VirtualFile[] openFiles = FileEditorManager.getInstance(project).getOpenFiles(); return Arrays.asList(openFiles).contains(file); }
/** * Searches for an open editor who's {@link VirtualFile} matches the bucket that was opened. This * prevents the same editor window being opened multiple times for the same bucket. */ private Optional<GcsBucketVirtualFile> findOpenGcsVirtualFile(@NotNull Bucket bucket) { FileEditorManager editorManager = FileEditorManager.getInstance(project); return Arrays.stream(editorManager.getOpenFiles()) .filter(openFile -> openFile instanceof GcsBucketVirtualFile) .map(openGcsFile -> (GcsBucketVirtualFile) openGcsFile) .filter(openGcsFile -> openGcsFile.getBucket().equals(bucket)) .findFirst(); }
public void submitOpenFilesAuto(TriggerType trigger) { if (!globalSettings.isAutoTrigger()) { return; } VirtualFile[] openFiles = editorManager.getOpenFiles(); submitFiles(Arrays.asList(openFiles), trigger, true); }
@Test public void should_not_restart_invalid() { VirtualFile vFile1 = mock(VirtualFile.class); when(vFile1.isValid()).thenReturn(false); when(fileEditorManager.getOpenFiles()).thenReturn(new VirtualFile[] {vFile1}); analyzerRestarter.refreshAllFiles(); verifyZeroInteractions(codeAnalyzer); verifyZeroInteractions(psiManager); }
@NotNull public List<Editor> getPreviewEditors(@NotNull Project project) { FileEditorManager fileEditorManager = FileEditorManager.getInstance(project); VirtualFile[] files = fileEditorManager.getOpenFiles(); if (files.length == 0) return Collections.emptyList(); List<Editor> result = ContainerUtil.newArrayList(); PsiManager psiManager = PsiManager.getInstance(project); for (VirtualFile file : files) { PsiFile psiFile = psiManager.findFile(file); Language language = psiFile == null ? null : psiFile.getLanguage(); if (language == this) { for (FileEditor editor : fileEditorManager.getAllEditors(file)) { if (editor instanceof TextEditor) result.add(((TextEditor)editor).getEditor()); } } } return result; }
@Test public void testClearWithInvalidFiles() { VirtualFile openFile = mock(VirtualFile.class); when(editorManager.getOpenFiles()).thenReturn(new VirtualFile[] {openFile}); when(openFile.isValid()).thenReturn(false); clearIssues.actionPerformed(event); verifyZeroInteractions(psiManager); verifyZeroInteractions(codeAnalyzer); verify(issueManager).clear(); }
private void afterStartup() { myProject.getMessageBus().connect(myProject).subscribe(FileEditorManagerListener.FILE_EDITOR_MANAGER, this); if (globalSettings.isAutoTrigger()) { VirtualFile[] openFiles = FileEditorManager.getInstance(myProject).getOpenFiles(); if (openFiles.length > 0) { submitter.submitFiles(Arrays.asList(openFiles), TriggerType.EDITOR_OPEN, true); } } }
@Test public void should_submit_open_files() { VirtualFile f1 = mock(VirtualFile.class); when(utils.findModuleForFile(f1, project)).thenReturn(module); when(exclusions.checkExclusions(f1, module)).thenReturn(LocalFileExclusions.Result.notExcluded()); when(fileEditorManager.getOpenFiles()).thenReturn(new VirtualFile[] {f1}); submitter.submitOpenFilesAuto(TriggerType.BINDING_CHANGE); verify(sonarLintJobManager).submitBackground(eq(Collections.singletonMap(module, Collections.singleton(f1))), eq(TriggerType.BINDING_CHANGE), eq(null)); }
public void run() { VirtualFile[] openFiles = FileEditorManager.getInstance(project).getOpenFiles(); UndoManager.getInstance(project).undoableActionPerformed(new GlobalUndoableAction(openFiles) { @Override public void undo() throws UnexpectedUndoException { doRegistryAction(!register); } @Override public void redo() throws UnexpectedUndoException { doRegistryAction(register); } }); doRegistryAction(register); } }
@Test public void testClear() { VirtualFile openFile = mock(VirtualFile.class); PsiFile psiFile = mock(PsiFile.class); when(editorManager.getOpenFiles()).thenReturn(new VirtualFile[] {openFile}); when(openFile.isValid()).thenReturn(true); when(psiManager.findFile(openFile)).thenReturn(psiFile); clearIssues.actionPerformed(event); verify(codeAnalyzer).restart(psiFile); verify(issueManager).clear(); }
@Test public void should_not_submit_if_fail_checks() { VirtualFile f1 = mock(VirtualFile.class); when(utils.findModuleForFile(f1, project)).thenReturn(module); when(exclusions.checkExclusions(f1, module)).thenReturn(LocalFileExclusions.Result.excluded("")); when(fileEditorManager.getOpenFiles()).thenReturn(new VirtualFile[] {f1}); submitter.submitOpenFilesAuto(TriggerType.BINDING_CHANGE); verifyZeroInteractions(sonarLintJobManager); }
@Test public void should_not_submit_if_no_module() { when(exclusions.checkExclusions(any(VirtualFile.class), any(Module.class))).thenReturn(LocalFileExclusions.Result.notExcluded()); VirtualFile f1 = mock(VirtualFile.class); when(utils.findModuleForFile(f1, project)).thenReturn(null); when(fileEditorManager.getOpenFiles()).thenReturn(new VirtualFile[] {f1}); when(exclusions.checkExclusions(f1, null)).thenReturn(LocalFileExclusions.Result.excluded("")); submitter.submitOpenFilesAuto(TriggerType.BINDING_CHANGE); verifyZeroInteractions(sonarLintJobManager); }
@Test public void should_restart_files() { VirtualFile vFile1 = mock(VirtualFile.class); when(vFile1.isValid()).thenReturn(true); PsiFile psiFile1 = mock(PsiFile.class); VirtualFile vFile2 = mock(VirtualFile.class); when(vFile2.isValid()).thenReturn(true); PsiFile psiFile2 = mock(PsiFile.class); when(psiManager.findFile(vFile1)).thenReturn(psiFile1); when(psiManager.findFile(vFile2)).thenReturn(psiFile2); when(fileEditorManager.getOpenFiles()).thenReturn(new VirtualFile[] {vFile1}); analyzerRestarter.refreshFiles(Arrays.asList(vFile1, vFile2)); verify(codeAnalyzer).restart(psiFile1); verifyNoMoreInteractions(codeAnalyzer); } }
@Test public void should_restart_all_open() { VirtualFile vFile1 = mock(VirtualFile.class); when(vFile1.isValid()).thenReturn(true); PsiFile psiFile1 = mock(PsiFile.class); VirtualFile vFile2 = mock(VirtualFile.class); when(vFile2.isValid()).thenReturn(true); PsiFile psiFile2 = mock(PsiFile.class); when(psiManager.findFile(vFile1)).thenReturn(psiFile1); when(psiManager.findFile(vFile2)).thenReturn(psiFile2); when(fileEditorManager.getOpenFiles()).thenReturn(new VirtualFile[] {vFile1, vFile2}); analyzerRestarter.refreshAllFiles(); verify(codeAnalyzer).restart(psiFile1); verify(codeAnalyzer).restart(psiFile2); verifyNoMoreInteractions(codeAnalyzer); }
private static void reparseAllLivePreviews(@NotNull Project project) { if (!project.isOpen()) return; PsiDocumentManager.getInstance(project).commitAllDocuments(); Collection<VirtualFile> files = ContainerUtil.newLinkedHashSet(); FileEditorManager fileEditorManager = FileEditorManager.getInstance(project); PsiManager psiManager = PsiManager.getInstance(project); for (VirtualFile file : fileEditorManager.getOpenFiles()) { PsiFile psiFile = psiManager.findFile(file); Language language = psiFile == null? null : psiFile.getLanguage(); if (!(language instanceof LivePreviewLanguage)) continue; files.add(file); } FileContentUtil.reparseFiles(project, files, false); }
@Override public void actionPerformed(AnActionEvent e) { Project project = e.getProject(); ApplicationManager.getApplication().assertReadAccessAllowed(); if (project != null) { IssueManager issueManager = SonarLintUtils.get(project, IssueManager.class); DaemonCodeAnalyzer codeAnalyzer = SonarLintUtils.get(project, DaemonCodeAnalyzer.class); ReadAction.run(() -> { issueManager.clear(); // run annotator to remove highlighting of issues FileEditorManager editorManager = FileEditorManager.getInstance(project); VirtualFile[] openFiles = editorManager.getOpenFiles(); Collection<PsiFile> psiFiles = findFiles(project, openFiles); psiFiles.forEach(codeAnalyzer::restart); }); } }