package jetbrains.mps.ide.java.platform.refactorings; /*Generated by MPS */ import jetbrains.mps.baseLanguage.util.plugin.refactorings.AbstractIntroduceFieldRefactoring; import com.intellij.openapi.project.Project; import jetbrains.mps.openapi.editor.EditorContext; import jetbrains.mps.baseLanguage.util.plugin.refactorings.IntroduceVariableRefactoring; import org.jetbrains.annotations.Nullable; import javax.swing.JComponent; import javax.swing.JPanel; import java.awt.GridBagLayout; import javax.swing.border.TitledBorder; import javax.swing.ButtonGroup; import javax.swing.JRadioButton; import jetbrains.mps.baseLanguage.util.plugin.refactorings.FieldInitializationPlace; import jetbrains.mps.smodel.ModelAccessHelper; import jetbrains.mps.util.Computable; import java.awt.GridBagConstraints; import javax.swing.event.ChangeListener; import javax.swing.event.ChangeEvent; import java.awt.Insets; public class IntroduceFieldDialog extends IntroduceVariableDialog { private AbstractIntroduceFieldRefactoring myRefactoring; private final boolean isStatic; public IntroduceFieldDialog(Project project, AbstractIntroduceFieldRefactoring refactoring, EditorContext editorContext, boolean isStatic) { super(project, "Introduce Field", editorContext); this.myRefactoring = refactoring; this.isStatic = isStatic; init(); } @Override public IntroduceVariableRefactoring getRefactoring() { return this.myRefactoring; } @Nullable @Override protected String getHelpId() { return "refactoring.introduceField"; } private JComponent createInitDestinationPanel() { JPanel result = new JPanel(new GridBagLayout()); result.setBorder(new TitledBorder("Initialize in")); ButtonGroup group = new ButtonGroup(); JRadioButton method = this.createButton(0, FieldInitializationPlace.METHOD, result, group); JRadioButton field = this.createButton(1, FieldInitializationPlace.FIELD, result, group); JRadioButton initializer = this.createButton(2, (isStatic ? FieldInitializationPlace.STATICINIT : FieldInitializationPlace.CONSTRUCTOR), result, group); boolean isInitializeInFieldAvailable = new ModelAccessHelper(myEditorContext.getRepository()).runReadAction(new Computable<Boolean>() { public Boolean compute() { return myRefactoring.isInitializeInFieldAvailable(); } }); if (isInitializeInFieldAvailable) { field.setSelected(true); } else { field.setEnabled(false); initializer.setEnabled(false); } method.setSelected(true); return result; } private JRadioButton createButton(int y, final FieldInitializationPlace place, JPanel result, ButtonGroup group) { final JRadioButton button = new JRadioButton(place.getName()); GridBagConstraints c = new GridBagConstraints(); c.anchor = GridBagConstraints.LINE_START; c.gridy = y; c.weightx = 1.0; result.add(button, c); group.add(button); button.addChangeListener(new ChangeListener() { @Override public void stateChanged(ChangeEvent p0) { if (button.isSelected()) { IntroduceFieldDialog.this.myRefactoring.setFieldInitializationPlace(place); } } }); return button; } @Nullable @Override protected JComponent createCenterPanel() { initPanel(); int gridy = 1; GridBagConstraints c; c = new GridBagConstraints(); c.fill = GridBagConstraints.HORIZONTAL; c.gridx = 1; c.gridy = 0; addIsFinal(c); c = new GridBagConstraints(); c.fill = GridBagConstraints.BOTH; c.insets = new Insets(3, 3, 3, 3); c.gridx = 0; c.gridy = gridy; c.weightx = 1; c.weighty = 0; myPanel.add(createInitDestinationPanel(), c); c = new GridBagConstraints(); c.fill = GridBagConstraints.BOTH; c.gridx = 1; c.gridy = gridy++; addVisibilityPanel(c); if (getRefactoring().hasDuplicates()) { addReplacingAll(gridy++); } c = new GridBagConstraints(); c.gridy = gridy; c.weighty = 1; myPanel.add(new JPanel(), c); return myPanel; } }