boolean (final Project project, @NotNull final PsiExpression selectedExpr, final Editor editor) { final PsiElement element = getPhysicalElement(selectedExpr); final PsiFile file = element.getContainingFile(); LOG.assertTrue(file != null, "expr.getContainingFile() == null"); if (LOG.isDebugEnabled()) { LOG.debug("expression:" + selectedExpr); } final PsiType tempType = getTypeByExpression(selectedExpr); if (tempType == null || LambdaUtil.notInferredType(tempType)) { String message = RefactoringBundle.getCannotRefactorMessage(JavaRefactoringBundle.message("unknown.expression.type")); CommonRefactoringUtil.showErrorHint(project, editor, message, getRefactoringName(), getHelpID()); return false; } if (PsiTypes.voidType().equals(tempType)) { String message = RefactoringBundle.getCannotRefactorMessage(JavaRefactoringBundle.message("selected.expression.has.void.type")); CommonRefactoringUtil.showErrorHint(project, editor, message, getRefactoringName(), getHelpID()); return false; } String switchLabelError = RefactoringUtil.checkEnumConstantInSwitchLabel(selectedExpr); if (switchLabelError != null) { CommonRefactoringUtil.showErrorHint(project, editor, switchLabelError, getRefactoringName(), getHelpID()); return false; } myParentClass = getParentClass(selectedExpr); final List<PsiClass> classes = new ArrayList<>(); PsiClass aClass = myParentClass; while (aClass != null) { classes.add(aClass); final PsiField psiField = ConvertToFieldRunnable.checkForwardRefs(selectedExpr, aClass); if (psiField != null && psiField.getParent() == aClass) break; aClass = PsiTreeUtil.getParentOfType(aClass, PsiClass.class, true); } final AbstractInplaceIntroducer activeIntroducer = AbstractInplaceIntroducer.getActiveIntroducer(editor); final boolean shouldSuggestDialog = activeIntroducer instanceof InplaceIntroduceConstantPopup && activeIntroducer.startsOnTheSameElement(selectedExpr, null); if (classes.size() == 1 || editor == null || IntentionPreviewUtils.isPreviewElement(myParentClass) || ApplicationManager.getApplication().isUnitTestMode() || shouldSuggestDialog) { return !convertExpressionToField(selectedExpr, editor, file, project, tempType); } else if (!classes.isEmpty()){ PsiClass selection = AnonymousTargetClassPreselectionUtil.getPreselection(classes, myParentClass); final @Nls String title; if (myIsConstant) { title = JavaRefactoringBundle.message("popup.title.choose.class.to.introduce.constant"); } else { title = JavaRefactoringBundle.message("popup.title.choose.class.to.introduce.field"); } new PsiTargetNavigator<>(classes.toArray(PsiClass.EMPTY_ARRAY)).selection(selection).createPopup(project, title, new PsiElementProcessor<>() { @Override public boolean execute(@NotNull PsiClass aClass) { AnonymousTargetClassPreselectionUtil.rememberSelection(aClass, myParentClass); myParentClass = aClass; convertExpressionToField(selectedExpr, editor, file, project, tempType); return false; } }).showInBestPositionFor(editor); } return true; }