Debugger: Synchronize "Add field breakpoint" dialog with the platform code

This commit is contained in:
Yan Zhulanow
2019-11-15 17:44:25 +09:00
parent 75b366fc5e
commit cf620cc60d
@@ -24,11 +24,12 @@ import com.intellij.openapi.application.TransactionGuard;
import com.intellij.openapi.project.Project; import com.intellij.openapi.project.Project;
import com.intellij.openapi.ui.DialogWrapper; import com.intellij.openapi.ui.DialogWrapper;
import com.intellij.openapi.ui.TextFieldWithBrowseButton; import com.intellij.openapi.ui.TextFieldWithBrowseButton;
import com.intellij.openapi.util.text.StringUtil;
import com.intellij.psi.*; import com.intellij.psi.*;
import com.intellij.psi.search.GlobalSearchScope; import com.intellij.psi.search.GlobalSearchScope;
import kotlin.Unit; import com.intellij.ui.DocumentAdapter;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.kotlin.idea.core.util.DescriptorMemberChooserObject; import org.jetbrains.kotlin.idea.core.util.DescriptorMemberChooserObject;
import org.jetbrains.kotlin.idea.core.util.UiUtilsKt;
import org.jetbrains.kotlin.psi.KtProperty; import org.jetbrains.kotlin.psi.KtProperty;
import javax.swing.*; import javax.swing.*;
@@ -50,13 +51,12 @@ public abstract class AddFieldBreakpointDialog extends DialogWrapper {
@Override @Override
protected JComponent createCenterPanel() { protected JComponent createCenterPanel() {
UiUtilsKt.onTextChange( myClassChooser.getTextField().getDocument().addDocumentListener(new DocumentAdapter() {
myClassChooser.getTextField(), @Override
(DocumentEvent e) -> { public void textChanged(@NotNull DocumentEvent event) {
updateUI(); updateUI();
return Unit.INSTANCE; }
} });
);
myClassChooser.addActionListener(e -> { myClassChooser.addActionListener(e -> {
PsiClass currentClass = getSelectedClass(); PsiClass currentClass = getSelectedClass();
@@ -80,19 +80,17 @@ public abstract class AddFieldBreakpointDialog extends DialogWrapper {
myFieldChooser.addActionListener(e -> { myFieldChooser.addActionListener(e -> {
PsiClass selectedClass = getSelectedClass(); PsiClass selectedClass = getSelectedClass();
if (selectedClass == null) { if (selectedClass != null) {
return; DescriptorMemberChooserObject[] properties = FieldBreakpointDialogUtilKt.collectProperties(selectedClass);
} MemberChooser<DescriptorMemberChooserObject> chooser = new MemberChooser<>(properties, false, false, myProject);
chooser.setTitle(DebuggerBundle.message("add.field.breakpoint.dialog.field.chooser.title", properties.length));
DescriptorMemberChooserObject[] properties = FieldBreakpointDialogUtilKt.collectProperties(selectedClass); chooser.setCopyJavadocVisible(false);
MemberChooser<DescriptorMemberChooserObject> chooser = new MemberChooser<>(properties, false, false, myProject); TransactionGuard.getInstance().submitTransactionAndWait(chooser::show);
chooser.setTitle(DebuggerBundle.message("add.field.breakpoint.dialog.field.chooser.title", properties.length)); List<DescriptorMemberChooserObject> selectedElements = chooser.getSelectedElements();
chooser.setCopyJavadocVisible(false); if (selectedElements != null && selectedElements.size() == 1) {
TransactionGuard.getInstance().submitTransactionAndWait(chooser::show); KtProperty field = (KtProperty) selectedElements.get(0).getElement();
List<DescriptorMemberChooserObject> selectedElements = chooser.getSelectedElements(); myFieldChooser.setText(field.getName());
if (selectedElements != null && selectedElements.size() == 1) { }
KtProperty field = (KtProperty) selectedElements.get(0).getElement();
myFieldChooser.setText(field.getName());
} }
}); });
myFieldChooser.setEnabled(false); myFieldChooser.setEnabled(false);
@@ -105,9 +103,9 @@ public abstract class AddFieldBreakpointDialog extends DialogWrapper {
} }
private PsiClass getSelectedClass() { private PsiClass getSelectedClass() {
PsiManager psiManager = PsiManager.getInstance(myProject); PsiManager psiManager = PsiManager.getInstance(myProject);
String classQName = myClassChooser.getText(); String classQName = myClassChooser.getText();
if (classQName.isEmpty()) { if (StringUtil.isEmpty(classQName)) {
return null; return null;
} }
return JavaPsiFacade.getInstance(psiManager.getProject()).findClass(classQName, GlobalSearchScope.allScope(myProject)); return JavaPsiFacade.getInstance(psiManager.getProject()).findClass(classQName, GlobalSearchScope.allScope(myProject));