void (@NotNull List<? super FixableUsageInfo> usages) { if (myClassDescriptor.isUseExistingClass()) { myClassDescriptor.setExistingClassCompatibleConstructor(myClassDescriptor.findCompatibleConstructorInExistingClass(myMethod)); } List<PsiNamedElement> methodHierarchy = new ArrayList<>(); methodHierarchy.add(myMethod); for (UsageInfo info : ChangeSignatureProcessorBase.findUsages(myChangeInfo)) { if (info instanceof OverriderMethodUsageInfo) { methodHierarchy.add(((OverriderMethodUsageInfo<?>)info).getOverridingMethod()); } usages.add(new ChangeSignatureUsageWrapper(info)); } final P[] paramsToMerge = myClassDescriptor.getParamsToMerge(); for (PsiNamedElement element : methodHierarchy) { final var delegate = IntroduceParameterObjectDelegate.findDelegate(element); if (delegate != null) { for (int i = 0; i < paramsToMerge.length; i++) { ReadWriteAccessDetector.Access access = delegate.collectInternalUsages(usages, element, myClassDescriptor, paramsToMerge[i], myMergedParameterInfo.getName()); if (myAccessors[i] == null || access == ReadWriteAccessDetector.Access.Write) { myAccessors[i] = access; } } } } myDelegate.collectUsagesToGenerateMissedFieldAccessors(usages, myMethod, myClassDescriptor, myAccessors); myDelegate.collectAdditionalFixes(usages, myMethod, myClassDescriptor); }