boolean (final Editor editor) { final SmartPsiElementPointer<PsiDeclarationStatement> pointer = editor.getUserData(DECLARATION_KEY); final PsiDeclarationStatement declaration = pointer != null ? pointer.getElement() : null; final PsiType type = getVariableType(declaration); if (type != null) { VariablesProcessor proc = findVariablesOfType(declaration, type); if (proc.size() > 0) { List<PsiVariable> vars = new ArrayList<>(); for (int i = 0; i < proc.size(); i++) { final PsiVariable variable = proc.getResult(i); PsiElement outerCodeBlock = PsiUtil.getVariableCodeBlock(variable, null); if (outerCodeBlock == null) continue; if (ReferencesSearch.search(variable, new LocalSearchScope(outerCodeBlock)) .allMatch(reference -> HighlightControlFlowUtil.getElementVariableReferencedFrom(variable, reference.getElement()) == null)) { vars.add(variable); } } if (vars.isEmpty()) { return true; } if (vars.size() == 1) { replaceWithAssignment(declaration, proc.getResult(0), editor); return true; } JBPopup popup = JBPopupFactory.getInstance() .createPopupChooserBuilder(vars) .setTitle(JavaRefactoringBundle.message("introduce.local.variable.to.reassign.title")) .setRequestFocus(true) .setRenderer(SimpleListCellRenderer.create((label, value, index) -> { if (value != null) { label.setText(value.getName()); label.setIcon(value.getIcon(0)); } })) .setItemChosenCallback((selectedValue) -> replaceWithAssignment(declaration, selectedValue, editor)) .createPopup(); if (ApplicationManager.getApplication().isHeadlessEnvironment()) { popup.showInBestPositionFor(editor); } else { final VisualPosition visualPosition = editor.getCaretModel().getVisualPosition(); final Point point = editor.visualPositionToXY(new VisualPosition(visualPosition.line + 1, visualPosition.column)); popup.show(new RelativePoint(editor.getContentComponent(), point)); } } return true; } return false; }