void (UsageInfo[] usages) { try { if (myInlineThisOnly) { if (JavaLanguage.INSTANCE != myReference.getElement().getLanguage()) { GenericInlineHandler.inlineReference(new UsageInfo(myReference.getElement()), myMethod, myInliners); } else if (myMethod.isConstructor() && InlineUtil.isChainingConstructor(myMethod)) { if (myReference instanceof PsiMethodReferenceExpression) { inlineMethodReference((PsiMethodReferenceExpression)myReference); } else { PsiCall constructorCall = RefactoringUtil.getEnclosingConstructorCall((PsiJavaCodeReferenceElement)myReference); if (constructorCall != null) { inlineConstructorCall(constructorCall); } } } else { myReference = surroundWithCodeBlock(new PsiReferenceExpression[]{(PsiReferenceExpression)myReference})[0]; if (myReference instanceof PsiMethodReferenceExpression) { inlineMethodReference((PsiMethodReferenceExpression)myReference); } else { inlineMethodCall((PsiReferenceExpression)myReference); } } } else { CommonRefactoringUtil.sortDepthFirstRightLeftOrder(usages); if (myMethod.isConstructor()) { for (UsageInfo usage : usages) { PsiElement element = usage.getElement(); if (element instanceof PsiMethodReferenceExpression) { inlineMethodReference((PsiMethodReferenceExpression)element); } else if (element instanceof PsiJavaCodeReferenceElement) { PsiCall constructorCall = RefactoringUtil.getEnclosingConstructorCall((PsiJavaCodeReferenceElement)element); if (constructorCall != null) { inlineConstructorCall(constructorCall); } } else if (element instanceof PsiEnumConstant) { inlineConstructorCall((PsiEnumConstant) element); } else if (!(element instanceof PsiDocMethodOrFieldRef)) { GenericInlineHandler.inlineReference(usage, myMethod, myInliners); } } } else { List<PsiReferenceExpression> refExprList = new ArrayList<>(); final List<PsiElement> imports2Delete = new ArrayList<>(); for (final UsageInfo usage : usages) { final PsiElement element = usage.getElement(); if (element == null) continue; if (usage instanceof OverrideAttributeUsageInfo) { for (OverrideMethodsProcessor processor : OverrideMethodsProcessor.EP_NAME.getExtensionList()) { if (processor.removeOverrideAttribute(element)) { break; } } continue; } if (element instanceof PsiReferenceExpression) { refExprList.add((PsiReferenceExpression)element); } else if (element instanceof PsiImportStaticReferenceElement) { final JavaResolveResult[] resolveResults = ((PsiImportStaticReferenceElement)element).multiResolve(false); if (resolveResults.length < 2) { //no overloads available: ensure broken import are deleted and //unused overloaded imports are deleted by optimize imports helper imports2Delete.add(PsiTreeUtil.getParentOfType(element, PsiImportStaticStatement.class)); } } else if (JavaLanguage.INSTANCE != element.getLanguage()) { GenericInlineHandler.inlineReference(usage, myMethod, myInliners); } } PsiReferenceExpression[] refs = refExprList.toArray(new PsiReferenceExpression[0]); refs = surroundWithCodeBlock(refs); for (PsiReferenceExpression ref : refs) { if (ref instanceof PsiMethodReferenceExpression) { inlineMethodReference((PsiMethodReferenceExpression)ref); } else { inlineMethodCall(ref); } } for (PsiElement psiElement : imports2Delete) { if (psiElement != null && psiElement.isValid()) { psiElement.delete(); } } } if (myMethod.isValid() && myMethod.isWritable() && myDeleteTheDeclaration) { CommentTracker tracker = new CommentTracker(); tracker.markUnchanged(myMethod.getBody()); tracker.markUnchanged(myMethod.getDocComment()); tracker.deleteAndRestoreComments(myMethod); } } if (mySurroundResults != null) { for (CodeBlockSurrounder.SurroundResult result : mySurroundResults) { result.collapse(); } } } catch (IncorrectOperationException e) { LOG.error(e); } }