void (UsageInfo @NotNull [] usages) { final PsiClassType superType = getSuperType(myClass); LOG.assertTrue(superType != null); List<PsiElement> elementsToDelete = new ArrayList<>(); List<PsiNewExpression> newExpressions = new ArrayList<>(); for(UsageInfo info: usages) { final PsiElement element = info.getElement(); if (element instanceof PsiNewExpression) { newExpressions.add((PsiNewExpression)element); } else if (element != null && element.getParent() instanceof PsiNewExpression) { newExpressions.add((PsiNewExpression) element.getParent()); } else if (element instanceof PsiJavaCodeReferenceElement && element.getParent() instanceof PsiReferenceList refList) { PsiClass parentClass = tryCast(refList.getParent(), PsiClass.class); if (parentClass != null && refList == parentClass.getPermitsList()) { SealedUtils.removeFromPermitsList(parentClass, myClass); } } else { PsiImportStatement statement = PsiTreeUtil.getParentOfType(element, PsiImportStatement.class); if (statement != null && !myInlineThisOnly) { elementsToDelete.add(statement); } else { PsiTypeElement typeElement = PsiTreeUtil.getParentOfType(element, PsiTypeElement.class); if (typeElement != null) { replaceWithSuperType(typeElement, superType); } } } } newExpressions.sort(PsiUtil.BY_POSITION); for(PsiNewExpression newExpression: newExpressions) { replaceNewOrType(newExpression, superType); } for(PsiElement element: elementsToDelete) { try { if (element.isValid()) { element.delete(); } } catch (IncorrectOperationException e) { LOG.error(e); } } if (!myInlineThisOnly && myClass.getOriginalElement().isWritable()) { try { myClass.delete(); } catch(IncorrectOperationException e) { LOG.error(e); } } }