use of com.intellij.openapi.progress.util.ProgressIndicatorBase in project intellij-community by JetBrains.
the class ApplicationImplTest method testCheckCanceledReadAction.
public void testCheckCanceledReadAction() throws Exception {
Semaphore mayStartReadAction = new Semaphore();
mayStartReadAction.down();
ProgressIndicatorBase progress = new ProgressIndicatorBase();
Future<?> future = ApplicationManager.getApplication().executeOnPooledThread(() -> ProgressManager.getInstance().runProcess(() -> {
mayStartReadAction.waitFor();
ReadAction.run(() -> fail("should be canceled before entering read action"));
}, progress));
WriteAction.run(() -> {
mayStartReadAction.up();
progress.cancel();
future.get(1, TimeUnit.SECONDS);
});
}
use of com.intellij.openapi.progress.util.ProgressIndicatorBase in project intellij-community by JetBrains.
the class JavadocQuarantineStatusCleaner method cleanQuarantineStatusInBackground.
private static void cleanQuarantineStatusInBackground(@NotNull String folderPath) {
ProgressIndicatorBase progressIndicator = new ProgressIndicatorBase();
String message = ApplicationBundle.message("quarantine.clean.progress", folderPath);
ProgressManager.getInstance().runProcessWithProgressAsynchronously(new Task.Backgroundable(null, message) {
@Override
public void run(@NotNull ProgressIndicator indicator) {
try (Stream<Path> s = Files.walk(Paths.get(folderPath))) {
s.forEach(p -> {
ProgressManager.checkCanceled();
XAttrUtil.removeXAttr(p.toFile().getAbsolutePath(), QUARANTINE_ATTRIBUTE);
});
} catch (IOException e) {
throw new RuntimeException(e);
}
}
@Override
public void onThrowable(@NotNull Throwable error) {
LOG.warn(error);
new Notification(ApplicationBundle.message("quarantine.error.group"), ApplicationBundle.message("quarantine.error.title"), ApplicationBundle.message("quarantine.error.message"), NotificationType.WARNING).notify(null);
}
}, progressIndicator);
}
use of com.intellij.openapi.progress.util.ProgressIndicatorBase in project intellij-community by JetBrains.
the class FindDialog method findSettingsChanged.
private void findSettingsChanged() {
if (haveResultsPreview()) {
final ModalityState state = ModalityState.current();
// skip initial changes
if (state == ModalityState.NON_MODAL)
return;
finishPreviousPreviewSearch();
mySearchRescheduleOnCancellationsAlarm.cancelAllRequests();
final FindModel findModel = myHelper.getModel().clone();
applyTo(findModel, false);
ValidationInfo result = getValidationInfo(findModel);
final ProgressIndicatorBase progressIndicatorWhenSearchStarted = new ProgressIndicatorBase();
myResultsPreviewSearchProgress = progressIndicatorWhenSearchStarted;
final DefaultTableModel model = new DefaultTableModel() {
@Override
public boolean isCellEditable(int row, int column) {
return false;
}
};
// Use previously shown usage files as hint for faster search and better usage preview performance if pattern length increased
final LinkedHashSet<VirtualFile> filesToScanInitially = new LinkedHashSet<>();
if (myHelper.myPreviousModel != null && myHelper.myPreviousModel.getStringToFind().length() < findModel.getStringToFind().length()) {
final DefaultTableModel previousModel = (DefaultTableModel) myResultsPreviewTable.getModel();
for (int i = 0, len = previousModel.getRowCount(); i < len; ++i) {
final UsageInfo2UsageAdapter usage = (UsageInfo2UsageAdapter) previousModel.getValueAt(i, 0);
final VirtualFile file = usage.getFile();
if (file != null)
filesToScanInitially.add(file);
}
}
myHelper.myPreviousModel = findModel;
model.addColumn("Usages");
myResultsPreviewTable.setModel(model);
if (result != null) {
myResultsPreviewTable.getEmptyText().setText(UIBundle.message("message.nothingToShow"));
myContent.setTitleAt(RESULTS_PREVIEW_TAB_INDEX, PREVIEW_TITLE);
return;
}
myResultsPreviewTable.getColumnModel().getColumn(0).setCellRenderer(new UsageTableCellRenderer(false, true));
myResultsPreviewTable.getEmptyText().setText("Searching...");
myContent.setTitleAt(RESULTS_PREVIEW_TAB_INDEX, PREVIEW_TITLE);
final Component component = myInputComboBox.getEditor().getEditorComponent();
// (UsagePreviewPanel.highlight)
if (component instanceof EditorTextField) {
final Document document = ((EditorTextField) component).getDocument();
if (document != null) {
PsiDocumentManager.getInstance(myProject).commitDocument(document);
}
}
final AtomicInteger resultsCount = new AtomicInteger();
final AtomicInteger resultsFilesCount = new AtomicInteger();
ProgressIndicatorUtils.scheduleWithWriteActionPriority(myResultsPreviewSearchProgress, new ReadTask() {
@Nullable
@Override
public Continuation performInReadAction(@NotNull ProgressIndicator indicator) throws ProcessCanceledException {
final UsageViewPresentation presentation = FindInProjectUtil.setupViewPresentation(FindSettings.getInstance().isShowResultsInSeparateView(), findModel);
final boolean showPanelIfOnlyOneUsage = !FindSettings.getInstance().isSkipResultsWithOneUsage();
final FindUsagesProcessPresentation processPresentation = FindInProjectUtil.setupProcessPresentation(myProject, showPanelIfOnlyOneUsage, presentation);
Ref<VirtualFile> lastUsageFileRef = new Ref<>();
FindInProjectUtil.findUsages(findModel, myProject, info -> {
final Usage usage = UsageInfo2UsageAdapter.CONVERTER.fun(info);
usage.getPresentation().getIcon();
VirtualFile file = lastUsageFileRef.get();
VirtualFile usageFile = info.getVirtualFile();
if (file == null || !file.equals(usageFile)) {
resultsFilesCount.incrementAndGet();
lastUsageFileRef.set(usageFile);
}
ApplicationManager.getApplication().invokeLater(() -> {
model.addRow(new Object[] { usage });
}, state);
return resultsCount.incrementAndGet() < ShowUsagesAction.USAGES_PAGE_SIZE;
}, processPresentation, filesToScanInitially);
boolean succeeded = !progressIndicatorWhenSearchStarted.isCanceled();
if (succeeded) {
return new Continuation(() -> {
if (progressIndicatorWhenSearchStarted == myResultsPreviewSearchProgress && !myResultsPreviewSearchProgress.isCanceled()) {
int occurrences = resultsCount.get();
int filesWithOccurrences = resultsFilesCount.get();
if (occurrences == 0)
myResultsPreviewTable.getEmptyText().setText(UIBundle.message("message.nothingToShow"));
boolean foundAllUsages = occurrences < ShowUsagesAction.USAGES_PAGE_SIZE;
myContent.setTitleAt(RESULTS_PREVIEW_TAB_INDEX, PREVIEW_TITLE + " (" + (foundAllUsages ? Integer.valueOf(occurrences) : occurrences + "+") + UIBundle.message("message.matches", occurrences) + " in " + (foundAllUsages ? Integer.valueOf(filesWithOccurrences) : filesWithOccurrences + "+") + UIBundle.message("message.files", filesWithOccurrences) + ")");
}
}, state);
}
return null;
}
@Override
public void onCanceled(@NotNull ProgressIndicator indicator) {
if (isShowing() && progressIndicatorWhenSearchStarted == myResultsPreviewSearchProgress) {
scheduleResultsUpdate();
}
}
});
}
}
use of com.intellij.openapi.progress.util.ProgressIndicatorBase in project intellij-community by JetBrains.
the class FindUsagesManager method startProcessUsages.
@NotNull
public static ProgressIndicator startProcessUsages(@NotNull final FindUsagesHandler handler, @NotNull final PsiElement[] primaryElements, @NotNull final PsiElement[] secondaryElements, @NotNull final Processor<Usage> processor, @NotNull final FindUsagesOptions findUsagesOptions, @NotNull final Runnable onComplete) {
ApplicationManager.getApplication().assertIsDispatchThread();
final ProgressIndicatorBase indicator = new ProgressIndicatorBase();
Task.Backgroundable task = new Task.Backgroundable(handler.getProject(), "Finding Usages") {
@Override
public void run(@NotNull ProgressIndicator indicator) {
UsageSearcher usageSearcher = ReadAction.compute(() -> {
PsiElement2UsageTargetAdapter[] primaryTargets = PsiElement2UsageTargetAdapter.convert(primaryElements);
PsiElement2UsageTargetAdapter[] secondaryTargets = PsiElement2UsageTargetAdapter.convert(secondaryElements);
return createUsageSearcher(primaryTargets, secondaryTargets, handler, findUsagesOptions, null);
});
usageSearcher.generate(processor);
}
};
((ProgressManagerImpl) ProgressManager.getInstance()).runProcessWithProgressAsynchronously(task, indicator, onComplete);
return indicator;
}
use of com.intellij.openapi.progress.util.ProgressIndicatorBase in project intellij-community by JetBrains.
the class HighlightSuppressedWarningsHandler method computeUsages.
@Override
public void computeUsages(List<PsiLiteralExpression> targets) {
final Project project = myTarget.getProject();
final PsiElement parent = myTarget.getParent().getParent();
final LocalInspectionsPass pass = new LocalInspectionsPass(myFile, myFile.getViewProvider().getDocument(), parent.getTextRange().getStartOffset(), parent.getTextRange().getEndOffset(), myPriorityRange, false, HighlightInfoProcessor.getEmpty());
InspectionProfileImpl inspectionProfile = InspectionProjectProfileManager.getInstance(project).getCurrentProfile();
for (PsiLiteralExpression target : targets) {
final Object value = target.getValue();
if (!(value instanceof String)) {
continue;
}
List<InspectionToolWrapper> tools = inspectionProfile.findToolsById((String) value, target);
if (tools == null) {
continue;
}
final List<LocalInspectionToolWrapper> toolsCopy = new ArrayList<>(tools.size());
for (InspectionToolWrapper tool : tools) {
if (tool instanceof LocalInspectionToolWrapper) {
toolsCopy.add((LocalInspectionToolWrapper) tool.createCopy());
}
}
if (toolsCopy.isEmpty()) {
continue;
}
final InspectionManagerEx managerEx = (InspectionManagerEx) InspectionManager.getInstance(project);
final GlobalInspectionContextImpl context = managerEx.createNewGlobalContext(false);
for (InspectionToolWrapper toolWrapper : toolsCopy) {
toolWrapper.initialize(context);
}
((RefManagerImpl) context.getRefManager()).inspectionReadActionStarted();
ProgressIndicator indicator = ProgressManager.getInstance().getProgressIndicator();
Runnable inspect = () -> pass.doInspectInBatch(context, managerEx, toolsCopy);
if (indicator == null) {
ProgressManager.getInstance().executeProcessUnderProgress(inspect, new ProgressIndicatorBase());
} else {
inspect.run();
}
for (HighlightInfo info : pass.getInfos()) {
final PsiElement element = CollectHighlightsUtil.findCommonParent(myFile, info.startOffset, info.endOffset);
if (element != null) {
addOccurrence(element);
}
}
}
}
Aggregations