From 6e8bc5e4c12e2b4e9927b015ae13eb9709579e33 Mon Sep 17 00:00:00 2001 From: Anna Kozlova Date: Mon, 18 Sep 2017 21:21:38 +0300 Subject: [PATCH] modifier fix: add progress as common names could be checked slowly --- .../ipp/modifiers/ModifierIntention.java | 49 +++++++++++-------- 1 file changed, 29 insertions(+), 20 deletions(-) diff --git a/plugins/IntentionPowerPak/src/com/siyeh/ipp/modifiers/ModifierIntention.java b/plugins/IntentionPowerPak/src/com/siyeh/ipp/modifiers/ModifierIntention.java index cdde9d8be406..14e0716559ed 100644 --- a/plugins/IntentionPowerPak/src/com/siyeh/ipp/modifiers/ModifierIntention.java +++ b/plugins/IntentionPowerPak/src/com/siyeh/ipp/modifiers/ModifierIntention.java @@ -17,6 +17,7 @@ package com.siyeh.ipp.modifiers; import com.intellij.codeInsight.intention.LowPriorityAction; import com.intellij.openapi.application.WriteAction; +import com.intellij.openapi.progress.ProgressManager; import com.intellij.openapi.project.Project; import com.intellij.openapi.util.io.FileUtil; import com.intellij.psi.*; @@ -71,6 +72,10 @@ abstract class ModifierIntention extends Intention implements LowPriorityAction return; } final MultiMap conflicts = checkForConflicts(member); + if (conflicts == null) { + //canceled by user + return; + } final Project project = member.getProject(); final boolean conflictsDialogOK; if (conflicts.isEmpty()) { @@ -142,27 +147,31 @@ abstract class ModifierIntention extends Intention implements LowPriorityAction return MultiMap.emptyInstance(); } final MultiMap conflicts = new MultiMap<>(); - if (member instanceof PsiMethod) { - JavaChangeSignatureUsageProcessor.ConflictSearcher.searchForHierarchyConflicts((PsiMethod)member, conflicts, getModifier()); + if (!ProgressManager.getInstance().runProcessWithProgressSynchronously(() -> { + if (member instanceof PsiMethod) { + JavaChangeSignatureUsageProcessor.ConflictSearcher.searchForHierarchyConflicts((PsiMethod)member, conflicts, getModifier()); + } + final PsiModifierList modifierListCopy = (PsiModifierList)modifierList.copy(); + modifierListCopy.setModifierProperty(getModifier(), true); + final Query search = ReferencesSearch.search(member, member.getUseScope()); + search.forEach(reference -> { + final PsiElement element = reference.getElement(); + if (JavaResolveUtil.isAccessible(member, member.getContainingClass(), modifierListCopy, element, null, null)) { + return true; + } + final PsiElement context = PsiTreeUtil.getParentOfType(element, PsiMethod.class, PsiField.class, PsiClass.class, PsiFile.class); + if (context == null) { + return true; + } + conflicts.putValue(element, RefactoringBundle.message("0.with.1.visibility.is.not.accessible.from.2", + RefactoringUIUtil.getDescription(member, false), + PsiBundle.visibilityPresentation(getModifier()), + RefactoringUIUtil.getDescription(context, true))); + return true; + }); + }, RefactoringBundle.message("detecting.possible.conflicts"), true, member.getProject())) { + return null; } - final PsiModifierList modifierListCopy = (PsiModifierList)modifierList.copy(); - modifierListCopy.setModifierProperty(getModifier(), true); - final Query search = ReferencesSearch.search(member, member.getUseScope()); - search.forEach(reference -> { - final PsiElement element = reference.getElement(); - if (JavaResolveUtil.isAccessible(member, member.getContainingClass(), modifierListCopy, element, null, null)) { - return true; - } - final PsiElement context = PsiTreeUtil.getParentOfType(element, PsiMethod.class, PsiField.class, PsiClass.class, PsiFile.class); - if (context == null) { - return true; - } - conflicts.putValue(element, RefactoringBundle.message("0.with.1.visibility.is.not.accessible.from.2", - RefactoringUIUtil.getDescription(member, false), - PsiBundle.visibilityPresentation(getModifier()), - RefactoringUIUtil.getDescription(context, true))); - return true; - }); return conflicts; }