mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
[java] RefactoringConflictsUtil: move conflicts to the last position, cleanup
GitOrigin-RevId: 3c7a7bae07c4e3b850bda7261cc049b4a298b27c
This commit is contained in:
committed by
intellij-monorepo-bot
parent
fdec2644ae
commit
90682006a6
+1
-1
@@ -154,7 +154,7 @@ public class ConvertToRecordProcessor extends BaseRefactoringProcessor {
|
||||
}
|
||||
}
|
||||
RefactoringConflictsUtil.getInstance()
|
||||
.analyzeAccessibilityConflictsAfterMemberMove(conflictingFields, myRecordCandidate.getPsiClass(), conflicts, PRIVATE);
|
||||
.analyzeAccessibilityConflictsAfterMemberMove(myRecordCandidate.getPsiClass(), conflicts, PRIVATE, conflictingFields);
|
||||
|
||||
if (!conflicts.isEmpty() && ApplicationManager.getApplication().isUnitTestMode()) {
|
||||
if (!ConflictsInTestsException.isTestIgnore()) {
|
||||
|
||||
+1
-1
@@ -172,7 +172,7 @@ public final class ConvertToInstanceMethodProcessor extends BaseRefactoringProce
|
||||
MultiMap<PsiElement, String> conflicts = new MultiMap<>();
|
||||
final Set<PsiMember> methods = Collections.singleton(myMethod);
|
||||
//check that method to call would be still accessible from the call places
|
||||
RefactoringConflictsUtil.getInstance().analyzeAccessibilityConflictsAfterMemberMove(methods, myTargetClass, conflicts, myNewVisibility);
|
||||
RefactoringConflictsUtil.getInstance().analyzeAccessibilityConflictsAfterMemberMove(myTargetClass, conflicts, myNewVisibility, methods);
|
||||
//additionally check that body of method contains only accessible in the inheritors references
|
||||
if (myTargetClass.isInterface() && !PsiUtil.isLanguageLevel8OrHigher(myTargetClass)) {
|
||||
for (final UsageInfo usage : usagesIn) {
|
||||
|
||||
+3
-2
@@ -260,8 +260,9 @@ public class InlineSuperClassRefactoringProcessor extends FixableUsagesRefactori
|
||||
Set<PsiMember> movedMembers = new HashSet<>(pushDownConflicts.getMovedMembers());
|
||||
movedMembers.addAll(Arrays.asList(mySuperClass.getConstructors()));
|
||||
RefactoringConflictsUtil.getInstance()
|
||||
.analyzeAccessibilityConflictsAfterMemberMove(movedMembers, targetClass, conflicts, null, targetClass, pushDownConflicts.getAbstractMembers(),
|
||||
Conditions.alwaysTrue());
|
||||
.analyzeAccessibilityConflictsAfterMemberMove(movedMembers, targetClass, null, targetClass,
|
||||
pushDownConflicts.getAbstractMembers(), Conditions.alwaysTrue(), conflicts
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+3
-2
@@ -111,8 +111,9 @@ public final class PullUpConflictsUtil {
|
||||
}
|
||||
}
|
||||
RefactoringConflictsUtil.getInstance()
|
||||
.analyzeAccessibilityConflictsAfterMemberMove(movedMembers, superClass, conflicts, VisibilityUtil.ESCALATE_VISIBILITY, targetRepresentativeElement,
|
||||
abstrMethods, Conditions.alwaysTrue());
|
||||
.analyzeAccessibilityConflictsAfterMemberMove(movedMembers, superClass, VisibilityUtil.ESCALATE_VISIBILITY,
|
||||
targetRepresentativeElement, abstrMethods, Conditions.alwaysTrue(), conflicts
|
||||
);
|
||||
if (superClass != null) {
|
||||
if (movedMembers2Super) {
|
||||
checkSuperclassMembers(superClass, infos, conflicts);
|
||||
|
||||
+5
-2
@@ -181,8 +181,11 @@ public class PushDownConflicts {
|
||||
}
|
||||
}
|
||||
}
|
||||
RefactoringConflictsUtil.getInstance().analyzeAccessibilityConflictsAfterMemberMove(myMovedMembers, targetClass, myConflicts, null, context, myAbstractMembers,
|
||||
ref -> !InheritanceUtil.hasEnclosingInstanceInScope(myClass, ref.getElement(), true, false));
|
||||
RefactoringConflictsUtil.getInstance().analyzeAccessibilityConflictsAfterMemberMove(myMovedMembers, targetClass, null, context,
|
||||
myAbstractMembers,
|
||||
ref -> !InheritanceUtil.hasEnclosingInstanceInScope(myClass, ref.getElement(), true, false),
|
||||
myConflicts
|
||||
);
|
||||
|
||||
}
|
||||
|
||||
|
||||
+3
-2
@@ -97,13 +97,14 @@ public class MoveInstanceMethodProcessor extends BaseRefactoringProcessor{
|
||||
members.add(myMethod);
|
||||
if (myTargetVariable instanceof PsiField) members.add((PsiMember)myTargetVariable);
|
||||
if (!myTargetClass.isInterface()) {
|
||||
RefactoringConflictsUtil.getInstance().analyzeAccessibilityConflictsAfterMemberMove(members, myTargetClass, conflicts, myNewVisibility);
|
||||
RefactoringConflictsUtil.getInstance().analyzeAccessibilityConflictsAfterMemberMove(myTargetClass, conflicts, myNewVisibility,
|
||||
members);
|
||||
}
|
||||
else {
|
||||
for (final UsageInfo usage : usages) {
|
||||
if (usage instanceof InheritorUsageInfo) {
|
||||
RefactoringConflictsUtil.getInstance().analyzeAccessibilityConflictsAfterMemberMove(
|
||||
members, ((InheritorUsageInfo)usage).getInheritor(), conflicts, myNewVisibility);
|
||||
((InheritorUsageInfo)usage).getInheritor(), conflicts, myNewVisibility, members);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+16
-14
@@ -44,27 +44,27 @@ public final class RefactoringConflictsUtilImpl implements RefactoringConflictsU
|
||||
|
||||
@Override
|
||||
public void analyzeHierarchyConflictsAfterMethodModifierChange(@NotNull PsiMethod method,
|
||||
@NotNull MultiMap<PsiElement, @Nls String> conflicts,
|
||||
@NotNull @PsiModifier.ModifierConstant String modifier) {
|
||||
@NotNull @PsiModifier.ModifierConstant String modifier,
|
||||
@NotNull MultiMap<PsiElement, @Nls String> conflicts) {
|
||||
JavaChangeSignatureUsageProcessor.ConflictSearcher.searchForHierarchyConflicts(method, conflicts, modifier);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void analyzeAccessibilityConflictsAfterMemberMove(@NotNull Set<? extends PsiMember> membersToMove,
|
||||
@NotNull PsiClass targetClass,
|
||||
public void analyzeAccessibilityConflictsAfterMemberMove(@NotNull PsiClass targetClass,
|
||||
@NotNull MultiMap<PsiElement, String> conflicts,
|
||||
@Nullable String newVisibility) {
|
||||
analyzeAccessibilityConflictsAfterMemberMove(membersToMove, targetClass, conflicts, newVisibility, targetClass, null, Conditions.alwaysTrue());
|
||||
@Nullable String newVisibility, @NotNull Set<? extends PsiMember> membersToMove) {
|
||||
analyzeAccessibilityConflictsAfterMemberMove(membersToMove, targetClass, newVisibility, targetClass, null, Conditions.alwaysTrue(),
|
||||
conflicts);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void analyzeAccessibilityConflictsAfterMemberMove(@NotNull Set<? extends PsiMember> membersToMove,
|
||||
@Nullable PsiClass targetClass,
|
||||
@NotNull MultiMap<PsiElement, String> conflicts,
|
||||
@Nullable String newVisibility,
|
||||
@NotNull PsiElement context,
|
||||
@Nullable Set<? extends PsiMethod> abstractMethods,
|
||||
@NotNull Condition<? super PsiReference> ignorePredicate) {
|
||||
@NotNull Condition<? super PsiReference> ignorePredicate,
|
||||
@NotNull MultiMap<PsiElement, String> conflicts) {
|
||||
if (VisibilityUtil.ESCALATE_VISIBILITY.equals(newVisibility)) { //Still need to check for access object
|
||||
newVisibility = PsiModifier.PUBLIC;
|
||||
}
|
||||
@@ -243,11 +243,11 @@ public final class RefactoringConflictsUtilImpl implements RefactoringConflictsU
|
||||
}
|
||||
|
||||
@Override
|
||||
public void analyzeModuleConflicts(final Project project,
|
||||
final Collection<? extends PsiElement> scopes,
|
||||
final UsageInfo[] usages,
|
||||
final VirtualFile vFile,
|
||||
final MultiMap<PsiElement, String> conflicts) {
|
||||
public void analyzeModuleConflicts(@NotNull Project project,
|
||||
@Nullable Collection<? extends PsiElement> scopes,
|
||||
UsageInfo[] usages,
|
||||
@NotNull VirtualFile vFile,
|
||||
@NotNull MultiMap<PsiElement, @Nls String> conflicts) {
|
||||
if (scopes == null) return;
|
||||
for (final PsiElement scope : scopes) {
|
||||
if (scope instanceof PsiPackage) return;
|
||||
@@ -395,7 +395,9 @@ public final class RefactoringConflictsUtilImpl implements RefactoringConflictsU
|
||||
}
|
||||
|
||||
@Override
|
||||
public void analyzeMethodConflictsAfterParameterDelete(MultiMap<PsiElement, String> conflicts, PsiMethod method, PsiParameter parameter) {
|
||||
public void analyzeMethodConflictsAfterParameterDelete(@NotNull PsiMethod method,
|
||||
@NotNull PsiParameter parameter,
|
||||
@NotNull MultiMap<PsiElement, @Nls String> conflicts) {
|
||||
JavaSafeDeleteProcessor.collectMethodConflicts(conflicts, method, parameter);
|
||||
}
|
||||
}
|
||||
|
||||
+1
-1
@@ -319,7 +319,7 @@ public class SameParameterValueInspection extends GlobalJavaBatchInspectionTool
|
||||
Map<PsiParameter, Collection<PsiReference>> paramsToInline = new HashMap<>();
|
||||
for (PsiMethod psiMethod : methods) {
|
||||
PsiParameter psiParameter = psiMethod.getParameterList().getParameters()[parameterIndex];
|
||||
RefactoringConflictsUtil.getInstance().analyzeMethodConflictsAfterParameterDelete(conflicts, psiMethod, psiParameter);
|
||||
RefactoringConflictsUtil.getInstance().analyzeMethodConflictsAfterParameterDelete(psiMethod, psiParameter, conflicts);
|
||||
final Collection<PsiReference> refsToInline = ReferencesSearch.search(psiParameter).findAll();
|
||||
for (PsiReference reference : refsToInline) {
|
||||
PsiElement referenceElement = reference.getElement();
|
||||
|
||||
@@ -25,16 +25,16 @@ public interface RefactoringConflictsUtil {
|
||||
* Analyzes accessibility after members move to other place (for example class) and contributes to the conflicts map if needed.
|
||||
* Ensures that all references to members will be able to resolve after move.
|
||||
*
|
||||
* @param membersToMove set of members to be moved
|
||||
* @param targetClass class to which all members will be moved
|
||||
* @param conflicts map of conflicts to which this method will contribute
|
||||
* @param newVisibility visibility of all members after move
|
||||
* @param membersToMove set of members to be moved
|
||||
*/
|
||||
@Contract(mutates = "param3")
|
||||
void analyzeAccessibilityConflictsAfterMemberMove(@NotNull Set<? extends PsiMember> membersToMove,
|
||||
@NotNull PsiClass targetClass,
|
||||
@Contract(mutates = "param4")
|
||||
void analyzeAccessibilityConflictsAfterMemberMove(@NotNull PsiClass targetClass,
|
||||
@NotNull MultiMap<PsiElement, String> conflicts,
|
||||
@Nullable @PsiModifier.ModifierConstant String newVisibility);
|
||||
@Nullable @PsiModifier.ModifierConstant String newVisibility,
|
||||
@NotNull Set<? extends PsiMember> membersToMove);
|
||||
|
||||
/**
|
||||
* Analyzes accessibility after members move to other place (for example class) and contributes to the conflicts map if needed.
|
||||
@@ -42,33 +42,33 @@ public interface RefactoringConflictsUtil {
|
||||
*
|
||||
* @param membersToMove set of members to be moved
|
||||
* @param targetClass class to which all members will be moved
|
||||
* @param conflicts map of conflicts to which this method will contribute
|
||||
* @param newVisibility visibility of all members after move
|
||||
* @param context place where members are expected to be moved (maybe useful if targetClass is null)
|
||||
* @param abstractMethods methods to keep abstract in new place
|
||||
* @param ignorePredicate whether we need to check accessibility of a particular reference to a member
|
||||
* @param conflicts map of conflicts to which this method will contribute
|
||||
*/
|
||||
@Contract(mutates = "param3")
|
||||
@Contract(mutates = "param7")
|
||||
void analyzeAccessibilityConflictsAfterMemberMove(@NotNull Set<? extends PsiMember> membersToMove,
|
||||
@Nullable PsiClass targetClass,
|
||||
@NotNull MultiMap<PsiElement, String> conflicts,
|
||||
@Nullable String newVisibility,
|
||||
@NotNull @PsiModifier.ModifierConstant PsiElement context,
|
||||
@Nullable Set<? extends PsiMethod> abstractMethods,
|
||||
@NotNull Condition<? super PsiReference> ignorePredicate);
|
||||
@NotNull Condition<? super PsiReference> ignorePredicate,
|
||||
@NotNull MultiMap<PsiElement, String> conflicts);
|
||||
|
||||
/**
|
||||
* Ensures that inheritor overloads will be able to access this method after change of visibility modifier as well as super methods will
|
||||
* be compatible with new modifier. Conflicts will be written to the conflict map.
|
||||
*
|
||||
* @param method method which changes its visibility modifier
|
||||
* @param conflicts map of conflicts to which this method will contribute
|
||||
* @param modifier new visibility modifier of the method
|
||||
* @param conflicts map of conflicts to which this method will contribute
|
||||
*/
|
||||
@Contract(mutates = "param2")
|
||||
@Contract(mutates = "param3")
|
||||
void analyzeHierarchyConflictsAfterMethodModifierChange(@NotNull PsiMethod method,
|
||||
@NotNull MultiMap<PsiElement, @Nls String> conflicts,
|
||||
@NotNull @PsiModifier.ModifierConstant String modifier);
|
||||
@NotNull @PsiModifier.ModifierConstant String modifier,
|
||||
@NotNull MultiMap<PsiElement, @Nls String> conflicts);
|
||||
|
||||
/**
|
||||
* Searches for conflicts appearing because of move of elements from one module to another.
|
||||
@@ -79,18 +79,21 @@ public interface RefactoringConflictsUtil {
|
||||
* @param conflicts map of conflicts to which this method will contribute
|
||||
*/
|
||||
@Contract(mutates = "param5")
|
||||
void analyzeModuleConflicts(Project project,
|
||||
Collection<? extends PsiElement> scopes,
|
||||
void analyzeModuleConflicts(@NotNull Project project,
|
||||
@Nullable Collection<? extends PsiElement> scopes,
|
||||
UsageInfo[] usages,
|
||||
VirtualFile vFile,
|
||||
MultiMap<PsiElement, String> conflicts);
|
||||
@NotNull VirtualFile vFile,
|
||||
@NotNull MultiMap<PsiElement, @Nls String> conflicts);
|
||||
|
||||
/**
|
||||
* Analyses conflicts appearing after deletion of a given parameter (for example, method will have the same erasure as existing one).
|
||||
*
|
||||
* @param conflicts map of conflicts to which this method will contribute
|
||||
* @param method method in which parameter will be deleted
|
||||
* @param parameter parameter to delete
|
||||
* @param conflicts map of conflicts to which this method will contribute
|
||||
*/
|
||||
void analyzeMethodConflictsAfterParameterDelete(MultiMap<PsiElement, String> conflicts, PsiMethod method, PsiParameter parameter);
|
||||
@Contract(mutates = "param3")
|
||||
void analyzeMethodConflictsAfterParameterDelete(@NotNull PsiMethod method,
|
||||
@NotNull PsiParameter parameter,
|
||||
@NotNull MultiMap<PsiElement, @Nls String> conflicts);
|
||||
}
|
||||
|
||||
@@ -414,7 +414,8 @@ public class ChangeModifierIntention extends BaseElementAtCaretIntentionAction {
|
||||
copy.setModifierProperty(modifier.toPsiModifier(), true);
|
||||
|
||||
if (member instanceof PsiMethod) {
|
||||
RefactoringConflictsUtil.getInstance().analyzeHierarchyConflictsAfterMethodModifierChange((PsiMethod)member, conflicts, modifier.toPsiModifier());
|
||||
RefactoringConflictsUtil.getInstance().analyzeHierarchyConflictsAfterMethodModifierChange((PsiMethod)member,
|
||||
modifier.toPsiModifier(), conflicts);
|
||||
}
|
||||
|
||||
final Query<PsiReference> search = ReferencesSearch.search(member, useScope);
|
||||
|
||||
Reference in New Issue
Block a user