package blue.stack.serializableParcelablegenerator; import com.intellij.ide.util.DefaultPsiElementCellRenderer; import com.intellij.openapi.ui.DialogWrapper; import com.intellij.openapi.ui.LabeledComponent; import com.intellij.psi.PsiClass; import com.intellij.psi.PsiField; import com.intellij.psi.PsiModifier; import com.intellij.ui.CollectionListModel; import com.intellij.ui.ToolbarDecorator; import com.intellij.ui.components.JBList; import org.jetbrains.annotations.Nullable; import javax.swing.*; import java.util.Arrays; import java.util.List; public class GenerateDialog extends DialogWrapper { private final LabeledComponent<JPanel> myComponent; private CollectionListModel<PsiField> myFields; protected GenerateDialog(PsiClass psiClass) { super(psiClass.getProject()); setTitle("Select fields for SerializableParcelable generation"); PsiField[] allFields = psiClass.getAllFields(); PsiField[] fields = new PsiField[allFields.length]; int i = 0; for (PsiField field : allFields) { // Exclude static fields if (!field.hasModifierProperty(PsiModifier.STATIC)) { fields[i++] = field; } } // i is post-incremented, so no need to add 1 for the count fields = Arrays.copyOfRange(fields, 0, i); myFields = new CollectionListModel<PsiField>(fields); JBList fieldList = new JBList(myFields); fieldList.setCellRenderer(new DefaultPsiElementCellRenderer()); ToolbarDecorator decorator = ToolbarDecorator.createDecorator(fieldList); decorator.disableAddAction(); JPanel panel = decorator.createPanel(); myComponent = LabeledComponent.create(panel, "Fields to include in Parcelable"); init(); } @Nullable @Override protected JComponent createCenterPanel() { return myComponent; } public List<PsiField> getSelectedFields() { return myFields.getItems(); } }