1b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato/*
2b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato * ProGuard -- shrinking, optimization, obfuscation, and preverification
3b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato *             of Java bytecode.
4b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato *
52270795fbe0b277bfd49f40950ecaa78583175ccBrian Carlstrom * Copyright (c) 2002-2014 Eric Lafortune (eric@graphics.cornell.edu)
6b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato *
7b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato * This program is free software; you can redistribute it and/or modify it
8b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato * under the terms of the GNU General Public License as published by the Free
9b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato * Software Foundation; either version 2 of the License, or (at your option)
10b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato * any later version.
11b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato *
12b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato * This program is distributed in the hope that it will be useful, but WITHOUT
13b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
14b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
15b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato * more details.
16b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato *
17b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato * You should have received a copy of the GNU General Public License along
18b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato * with this program; if not, write to the Free Software Foundation, Inc.,
19b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
20b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato */
21b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onoratopackage proguard.gui;
22b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato
23b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onoratoimport proguard.MemberSpecification;
242270795fbe0b277bfd49f40950ecaa78583175ccBrian Carlstromimport proguard.classfile.*;
25b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onoratoimport proguard.classfile.util.ClassUtil;
26b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onoratoimport proguard.util.ListUtil;
27b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato
28b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onoratoimport javax.swing.*;
29b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onoratoimport javax.swing.border.*;
30b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onoratoimport java.awt.*;
31b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onoratoimport java.awt.event.*;
32b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato
33b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato/**
34b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato * This <code>JDialog</code> allows the user to enter a String.
35b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato *
36b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato * @author Eric Lafortune
37b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato */
38b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onoratofinal class MemberSpecificationDialog extends JDialog
39b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato{
40b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    /**
41b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato     * Return value if the dialog is canceled (with the Cancel button or by
42b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato     * closing the dialog window).
43b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato     */
44b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    public static final int CANCEL_OPTION = 1;
45b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato
46b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    /**
47b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato     * Return value if the dialog is approved (with the Ok button).
48b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato     */
49b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    public static final int APPROVE_OPTION = 0;
50b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato
51b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato
52b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    private final boolean isField;
53b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato
54b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    private final JRadioButton[] publicRadioButtons;
55b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    private final JRadioButton[] privateRadioButtons;
56b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    private final JRadioButton[] protectedRadioButtons;
57b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    private final JRadioButton[] staticRadioButtons;
58b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    private final JRadioButton[] finalRadioButtons;
59b9cc48a43ed984587c939d02fba5316bf5c0df6eYing Wang    private final JRadioButton[] syntheticRadioButtons;
60b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato
61b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    private JRadioButton[] volatileRadioButtons;
62b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    private JRadioButton[] transientRadioButtons;
63b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato
64b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    private JRadioButton[] synchronizedRadioButtons;
65b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    private JRadioButton[] nativeRadioButtons;
66b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    private JRadioButton[] abstractRadioButtons;
67b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    private JRadioButton[] strictRadioButtons;
68b9cc48a43ed984587c939d02fba5316bf5c0df6eYing Wang    private JRadioButton[] bridgeRadioButtons;
69b9cc48a43ed984587c939d02fba5316bf5c0df6eYing Wang    private JRadioButton[] varargsRadioButtons;
70b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato
71b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    private final JTextField annotationTypeTextField = new JTextField(20);
72b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    private final JTextField nameTextField           = new JTextField(20);
73b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    private final JTextField typeTextField           = new JTextField(20);
74b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    private final JTextField argumentTypesTextField  = new JTextField(20);
75b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato
76b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    private int returnValue;
77b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato
78b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato
79b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    public MemberSpecificationDialog(JDialog owner, boolean isField)
80b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    {
81b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato        super(owner, msg(isField ? "specifyFields" : "specifyMethods"), true);
82b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato        setResizable(true);
83b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato
84b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato        // Create some constraints that can be reused.
85b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato        GridBagConstraints constraints = new GridBagConstraints();
86b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato        constraints.anchor = GridBagConstraints.WEST;
87b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato        constraints.insets = new Insets(1, 2, 1, 2);
88b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato
89b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato        GridBagConstraints constraintsStretch = new GridBagConstraints();
90b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato        constraintsStretch.fill    = GridBagConstraints.HORIZONTAL;
91b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato        constraintsStretch.weightx = 1.0;
92b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato        constraintsStretch.anchor  = GridBagConstraints.WEST;
93b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato        constraintsStretch.insets  = constraints.insets;
94b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato
95b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato        GridBagConstraints constraintsLast = new GridBagConstraints();
96b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato        constraintsLast.gridwidth = GridBagConstraints.REMAINDER;
97b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato        constraintsLast.anchor    = GridBagConstraints.WEST;
98b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato        constraintsLast.insets    = constraints.insets;
99b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato
100b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato        GridBagConstraints constraintsLastStretch = new GridBagConstraints();
101b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato        constraintsLastStretch.gridwidth = GridBagConstraints.REMAINDER;
102b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato        constraintsLastStretch.fill      = GridBagConstraints.HORIZONTAL;
103b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato        constraintsLastStretch.weightx   = 1.0;
104b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato        constraintsLastStretch.anchor    = GridBagConstraints.WEST;
105b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato        constraintsLastStretch.insets    = constraints.insets;
106b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato
107b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato        GridBagConstraints panelConstraints = new GridBagConstraints();
108b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato        panelConstraints.gridwidth = GridBagConstraints.REMAINDER;
109b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato        panelConstraints.fill      = GridBagConstraints.HORIZONTAL;
110b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato        panelConstraints.weightx   = 1.0;
111b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato        panelConstraints.weighty   = 0.0;
112b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato        panelConstraints.anchor    = GridBagConstraints.NORTHWEST;
113b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato        panelConstraints.insets    = constraints.insets;
114b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato
115b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato        GridBagConstraints stretchPanelConstraints = new GridBagConstraints();
116b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato        stretchPanelConstraints.gridwidth = GridBagConstraints.REMAINDER;
117b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato        stretchPanelConstraints.fill      = GridBagConstraints.BOTH;
118b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato        stretchPanelConstraints.weightx   = 1.0;
119b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato        stretchPanelConstraints.weighty   = 1.0;
120b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato        stretchPanelConstraints.anchor    = GridBagConstraints.NORTHWEST;
121b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato        stretchPanelConstraints.insets    = constraints.insets;
122b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato
123b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato        GridBagConstraints labelConstraints = new GridBagConstraints();
124b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato        labelConstraints.anchor = GridBagConstraints.CENTER;
125b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato        labelConstraints.insets = new Insets(2, 10, 2, 10);
126b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato
127b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato        GridBagConstraints lastLabelConstraints = new GridBagConstraints();
128b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato        lastLabelConstraints.gridwidth = GridBagConstraints.REMAINDER;
129b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato        lastLabelConstraints.anchor    = GridBagConstraints.CENTER;
130b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato        lastLabelConstraints.insets    = labelConstraints.insets;
131b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato
132b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato        GridBagConstraints advancedButtonConstraints = new GridBagConstraints();
133b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato        advancedButtonConstraints.weightx = 1.0;
134b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato        advancedButtonConstraints.weighty = 1.0;
135b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato        advancedButtonConstraints.anchor  = GridBagConstraints.SOUTHWEST;
136b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato        advancedButtonConstraints.insets  = new Insets(4, 4, 8, 4);
137b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato
138b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato        GridBagConstraints okButtonConstraints = new GridBagConstraints();
139b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato        okButtonConstraints.weightx = 1.0;
140b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato        okButtonConstraints.weighty = 1.0;
141b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato        okButtonConstraints.anchor  = GridBagConstraints.SOUTHEAST;
142b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato        okButtonConstraints.insets  = advancedButtonConstraints.insets;
143b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato
144b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato        GridBagConstraints cancelButtonConstraints = new GridBagConstraints();
145b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato        cancelButtonConstraints.gridwidth = GridBagConstraints.REMAINDER;
146b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato        cancelButtonConstraints.weighty   = 1.0;
147b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato        cancelButtonConstraints.anchor    = GridBagConstraints.SOUTHEAST;
148b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato        cancelButtonConstraints.insets    = okButtonConstraints.insets;
149b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato
150b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato        GridBagLayout layout = new GridBagLayout();
151b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato
152b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato        Border etchedBorder = BorderFactory.createEtchedBorder(EtchedBorder.RAISED);
153b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato
154b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato        this.isField = isField;
155b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato
156b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato        // Create the access panel.
157b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato        JPanel accessPanel = new JPanel(layout);
158b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato        accessPanel.setBorder(BorderFactory.createTitledBorder(etchedBorder,
159b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato                                                               msg("access")));
160b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato
161b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato        accessPanel.add(Box.createGlue(),                                labelConstraints);
162b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato        accessPanel.add(tip(new JLabel(msg("required")), "requiredTip"), labelConstraints);
163b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato        accessPanel.add(tip(new JLabel(msg("not")),      "notTip"),      labelConstraints);
164b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato        accessPanel.add(tip(new JLabel(msg("dontCare")), "dontCareTip"), labelConstraints);
165b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato        accessPanel.add(Box.createGlue(),                                constraintsLastStretch);
166b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato
167b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato        publicRadioButtons    = addRadioButtonTriplet("Public",    accessPanel);
168b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato        privateRadioButtons   = addRadioButtonTriplet("Private",   accessPanel);
169b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato        protectedRadioButtons = addRadioButtonTriplet("Protected", accessPanel);
170b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato        staticRadioButtons    = addRadioButtonTriplet("Static",    accessPanel);
171b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato        finalRadioButtons     = addRadioButtonTriplet("Final",     accessPanel);
172b9cc48a43ed984587c939d02fba5316bf5c0df6eYing Wang        syntheticRadioButtons = addRadioButtonTriplet("Synthetic", accessPanel);
173b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato
174b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato        if (isField)
175b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato        {
176b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato            volatileRadioButtons  = addRadioButtonTriplet("Volatile",  accessPanel);
177b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato            transientRadioButtons = addRadioButtonTriplet("Transient", accessPanel);
178b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato        }
179b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato        else
180b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato        {
181b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato            synchronizedRadioButtons = addRadioButtonTriplet("Synchronized", accessPanel);
182b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato            nativeRadioButtons       = addRadioButtonTriplet("Native",       accessPanel);
183b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato            abstractRadioButtons     = addRadioButtonTriplet("Abstract",     accessPanel);
184b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato            strictRadioButtons       = addRadioButtonTriplet("Strict",       accessPanel);
185b9cc48a43ed984587c939d02fba5316bf5c0df6eYing Wang            bridgeRadioButtons       = addRadioButtonTriplet("Bridge",       accessPanel);
186b9cc48a43ed984587c939d02fba5316bf5c0df6eYing Wang            varargsRadioButtons      = addRadioButtonTriplet("Varargs",      accessPanel);
187b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato        }
188b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato
189b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato        // Create the type panel.
190b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato        JPanel typePanel = new JPanel(layout);
191b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato        typePanel.setBorder(BorderFactory.createTitledBorder(etchedBorder,
192b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato                                                             msg(isField ? "fieldType" :
193b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato                                                                           "returnType")));
194b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato
195b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato        typePanel.add(tip(typeTextField, "typeTip"), constraintsLastStretch);
196b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato
197b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato        // Create the annotation type panel.
198b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato        final JPanel annotationTypePanel = new JPanel(layout);
199b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato        annotationTypePanel.setBorder(BorderFactory.createTitledBorder(etchedBorder,
200b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato                                                                       msg("annotation")));
201b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato
202b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato        annotationTypePanel.add(tip(annotationTypeTextField, "classNameTip"), constraintsLastStretch);
203b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato
204b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato        // Create the name panel.
205b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato        JPanel namePanel = new JPanel(layout);
206b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato        namePanel.setBorder(BorderFactory.createTitledBorder(etchedBorder,
207b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato                                                             msg("name")));
208b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato
209b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato        namePanel.add(tip(nameTextField, isField ? "fieldNameTip" :
210b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato                                                   "methodNameTip"), constraintsLastStretch);
211b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato
212b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato        // Create the arguments panel.
213b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato        JPanel argumentsPanel = new JPanel(layout);
214b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato        argumentsPanel.setBorder(BorderFactory.createTitledBorder(etchedBorder,
215b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato                                                                  msg("argumentTypes")));
216b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato
217b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato        argumentsPanel.add(tip(argumentTypesTextField, "argumentTypes2Tip"), constraintsLastStretch);
218b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato
219b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato        // Create the Advanced button.
220b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato        final JButton advancedButton = new JButton(msg("basic"));
221b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato        advancedButton.addActionListener(new ActionListener()
222b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato        {
223b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato            public void actionPerformed(ActionEvent e)
224b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato            {
225b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato                boolean visible = !annotationTypePanel.isVisible();
226b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato
227b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato                annotationTypePanel.setVisible(visible);
228b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato
229b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato                advancedButton.setText(msg(visible ? "basic" : "advanced"));
230b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato
231b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato                pack();
232b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato            }
233b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato        });
234b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato        advancedButton.doClick();
235b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato
236b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato        // Create the Ok button.
237b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato        JButton okButton = new JButton(msg("ok"));
238b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato        okButton.addActionListener(new ActionListener()
239b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato        {
240b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato            public void actionPerformed(ActionEvent e)
241b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato            {
242b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato                returnValue = APPROVE_OPTION;
243b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato                hide();
244b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato            }
245b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato        });
246b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato
247b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato        // Create the Cancel button.
248b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato        JButton cancelButton = new JButton(msg("cancel"));
249b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato        cancelButton.addActionListener(new ActionListener()
250b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato        {
251b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato            public void actionPerformed(ActionEvent e)
252b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato            {
253b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato                hide();
254b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato            }
255b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato        });
256b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato
257b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato        // Add all panels to the main panel.
258b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato        JPanel mainPanel = new JPanel(layout);
259b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato        mainPanel.add(tip(accessPanel,         "accessTip"),       panelConstraints);
260b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato        mainPanel.add(tip(annotationTypePanel, "annotationTip"),   panelConstraints);
261b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato        mainPanel.add(tip(typePanel, isField ? "fieldTypeTip" :
262b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato                                               "returnTypeTip"),   panelConstraints);
263b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato        mainPanel.add(tip(namePanel,           "nameTip"),         panelConstraints);
264b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato
265b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato        if (!isField)
266b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato        {
267b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato            mainPanel.add(tip(argumentsPanel, "argumentTypesTip"), panelConstraints);
268b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato        }
269b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato
270b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato        mainPanel.add(tip(advancedButton, "advancedTip"), advancedButtonConstraints);
271b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato        mainPanel.add(okButton,                           okButtonConstraints);
272b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato        mainPanel.add(cancelButton,                       cancelButtonConstraints);
273b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato
274b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato        getContentPane().add(new JScrollPane(mainPanel));
275b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    }
276b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato
277b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato
278b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    /**
279b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato     * Adds a JLabel and three JRadioButton instances in a ButtonGroup to the
280b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato     * given panel with a GridBagLayout, and returns the buttons in an array.
281b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato     */
282b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    private JRadioButton[] addRadioButtonTriplet(String labelText,
283b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato                                                 JPanel panel)
284b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    {
285b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato        GridBagConstraints labelConstraints = new GridBagConstraints();
286b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato        labelConstraints.anchor = GridBagConstraints.WEST;
287b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato        labelConstraints.insets = new Insets(2, 10, 2, 10);
288b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato
289b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato        GridBagConstraints buttonConstraints = new GridBagConstraints();
290b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato        buttonConstraints.insets = labelConstraints.insets;
291b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato
292b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato        GridBagConstraints lastGlueConstraints = new GridBagConstraints();
293b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato        lastGlueConstraints.gridwidth = GridBagConstraints.REMAINDER;
294b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato        lastGlueConstraints.weightx   = 1.0;
295b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato
296b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato        // Create the radio buttons.
297b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato        JRadioButton radioButton0 = new JRadioButton();
298b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato        JRadioButton radioButton1 = new JRadioButton();
299b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato        JRadioButton radioButton2 = new JRadioButton();
300b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato
301b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato        // Put them in a button group.
302b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato        ButtonGroup buttonGroup = new ButtonGroup();
303b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato        buttonGroup.add(radioButton0);
304b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato        buttonGroup.add(radioButton1);
305b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato        buttonGroup.add(radioButton2);
306b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato
307b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato        // Add the label and the buttons to the panel.
308b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato        panel.add(new JLabel(labelText), labelConstraints);
309b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato        panel.add(radioButton0,          buttonConstraints);
310b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato        panel.add(radioButton1,          buttonConstraints);
311b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato        panel.add(radioButton2,          buttonConstraints);
312b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato        panel.add(Box.createGlue(),      lastGlueConstraints);
313b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato
314b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato        return new JRadioButton[]
315b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato        {
316b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato             radioButton0,
317b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato             radioButton1,
318b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato             radioButton2
319b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato        };
320b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    }
321b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato
322b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato
323b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    /**
324b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato     * Sets the MemberSpecification to be represented in this dialog.
325b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato     */
326b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    public void setMemberSpecification(MemberSpecification memberSpecification)
327b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    {
328b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato        String annotationType = memberSpecification.annotationType;
329b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato        String name           = memberSpecification.name;
330b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato        String descriptor     = memberSpecification.descriptor;
331b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato
332b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato        // Set the class name text fields.
333b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato        annotationTypeTextField.setText(annotationType == null ? "" : ClassUtil.externalType(annotationType));
334b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato
335b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato        // Set the access radio buttons.
3362270795fbe0b277bfd49f40950ecaa78583175ccBrian Carlstrom        setMemberSpecificationRadioButtons(memberSpecification, ClassConstants.ACC_PUBLIC,       publicRadioButtons);
3372270795fbe0b277bfd49f40950ecaa78583175ccBrian Carlstrom        setMemberSpecificationRadioButtons(memberSpecification, ClassConstants.ACC_PRIVATE,      privateRadioButtons);
3382270795fbe0b277bfd49f40950ecaa78583175ccBrian Carlstrom        setMemberSpecificationRadioButtons(memberSpecification, ClassConstants.ACC_PROTECTED,    protectedRadioButtons);
3392270795fbe0b277bfd49f40950ecaa78583175ccBrian Carlstrom        setMemberSpecificationRadioButtons(memberSpecification, ClassConstants.ACC_STATIC,       staticRadioButtons);
3402270795fbe0b277bfd49f40950ecaa78583175ccBrian Carlstrom        setMemberSpecificationRadioButtons(memberSpecification, ClassConstants.ACC_FINAL,        finalRadioButtons);
3412270795fbe0b277bfd49f40950ecaa78583175ccBrian Carlstrom        setMemberSpecificationRadioButtons(memberSpecification, ClassConstants.ACC_SYNTHETIC,    syntheticRadioButtons);
3422270795fbe0b277bfd49f40950ecaa78583175ccBrian Carlstrom        setMemberSpecificationRadioButtons(memberSpecification, ClassConstants.ACC_VOLATILE,     volatileRadioButtons);
3432270795fbe0b277bfd49f40950ecaa78583175ccBrian Carlstrom        setMemberSpecificationRadioButtons(memberSpecification, ClassConstants.ACC_TRANSIENT,    transientRadioButtons);
3442270795fbe0b277bfd49f40950ecaa78583175ccBrian Carlstrom        setMemberSpecificationRadioButtons(memberSpecification, ClassConstants.ACC_SYNCHRONIZED, synchronizedRadioButtons);
3452270795fbe0b277bfd49f40950ecaa78583175ccBrian Carlstrom        setMemberSpecificationRadioButtons(memberSpecification, ClassConstants.ACC_NATIVE,       nativeRadioButtons);
3462270795fbe0b277bfd49f40950ecaa78583175ccBrian Carlstrom        setMemberSpecificationRadioButtons(memberSpecification, ClassConstants.ACC_ABSTRACT,     abstractRadioButtons);
3472270795fbe0b277bfd49f40950ecaa78583175ccBrian Carlstrom        setMemberSpecificationRadioButtons(memberSpecification, ClassConstants.ACC_STRICT,       strictRadioButtons);
3482270795fbe0b277bfd49f40950ecaa78583175ccBrian Carlstrom        setMemberSpecificationRadioButtons(memberSpecification, ClassConstants.ACC_BRIDGE,       bridgeRadioButtons);
3492270795fbe0b277bfd49f40950ecaa78583175ccBrian Carlstrom        setMemberSpecificationRadioButtons(memberSpecification, ClassConstants.ACC_VARARGS,      varargsRadioButtons);
350b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato
351b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato        // Set the class name text fields.
352b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato        nameTextField.setText(name == null ? "*" : name);
353b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato
354b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato        if (isField)
355b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato        {
356b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato            typeTextField         .setText(descriptor == null ? "***" : ClassUtil.externalType(descriptor));
357b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato        }
358b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato        else
359b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato        {
360b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato            typeTextField         .setText(descriptor == null ? "***" : ClassUtil.externalMethodReturnType(descriptor));
361b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato            argumentTypesTextField.setText(descriptor == null ? "..." : ClassUtil.externalMethodArguments(descriptor));
362b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato        }
363b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    }
364b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato
365b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato
366b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    /**
367b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato     * Returns the MemberSpecification currently represented in this dialog.
368b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato     */
369b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    public MemberSpecification getMemberSpecification()
370b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    {
371b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato        String annotationType = annotationTypeTextField.getText();
372b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato        String name           = nameTextField.getText();
373b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato        String type           = typeTextField.getText();
374b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato        String arguments      = argumentTypesTextField.getText();
375b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato
376b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato        // Convert all class member specifications into the internal format.
377b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato        annotationType =
378b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato            annotationType.equals("") ||
379b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato            annotationType.equals("***") ? null : ClassUtil.internalType(annotationType);
380b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato
381b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato        if (name.equals("") ||
382b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato            name.equals("*"))
383b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato        {
384b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato            name = null;
385b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato        }
386b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato
387b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato        if (isField)
388b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato        {
389b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato            type =
390b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato                type.equals("") ||
391b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato                type.equals("***") ? null : ClassUtil.internalType(type);
392b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato        }
393b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato        else
394b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato        {
395b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato            if (type.equals(""))
396b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato            {
3972270795fbe0b277bfd49f40950ecaa78583175ccBrian Carlstrom                type = JavaConstants.TYPE_VOID;
398b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato            }
399b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato
400b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato            type =
401b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato                type     .equals("***") &&
402b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato                arguments.equals("...") ? null :
403b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato                    ClassUtil.internalMethodDescriptor(type, ListUtil.commaSeparatedList(arguments));
404b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato        }
405b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato
406b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato        MemberSpecification memberSpecification =
407b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato            new MemberSpecification(0, 0, annotationType, name, type);
408b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato
409b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato        // Also get the access radio button settings.
4102270795fbe0b277bfd49f40950ecaa78583175ccBrian Carlstrom        getMemberSpecificationRadioButtons(memberSpecification, ClassConstants.ACC_PUBLIC,       publicRadioButtons);
4112270795fbe0b277bfd49f40950ecaa78583175ccBrian Carlstrom        getMemberSpecificationRadioButtons(memberSpecification, ClassConstants.ACC_PRIVATE,      privateRadioButtons);
4122270795fbe0b277bfd49f40950ecaa78583175ccBrian Carlstrom        getMemberSpecificationRadioButtons(memberSpecification, ClassConstants.ACC_PROTECTED,    protectedRadioButtons);
4132270795fbe0b277bfd49f40950ecaa78583175ccBrian Carlstrom        getMemberSpecificationRadioButtons(memberSpecification, ClassConstants.ACC_STATIC,       staticRadioButtons);
4142270795fbe0b277bfd49f40950ecaa78583175ccBrian Carlstrom        getMemberSpecificationRadioButtons(memberSpecification, ClassConstants.ACC_FINAL,        finalRadioButtons);
4152270795fbe0b277bfd49f40950ecaa78583175ccBrian Carlstrom        getMemberSpecificationRadioButtons(memberSpecification, ClassConstants.ACC_SYNTHETIC,    syntheticRadioButtons);
4162270795fbe0b277bfd49f40950ecaa78583175ccBrian Carlstrom        getMemberSpecificationRadioButtons(memberSpecification, ClassConstants.ACC_VOLATILE,     volatileRadioButtons);
4172270795fbe0b277bfd49f40950ecaa78583175ccBrian Carlstrom        getMemberSpecificationRadioButtons(memberSpecification, ClassConstants.ACC_TRANSIENT,    transientRadioButtons);
4182270795fbe0b277bfd49f40950ecaa78583175ccBrian Carlstrom        getMemberSpecificationRadioButtons(memberSpecification, ClassConstants.ACC_SYNCHRONIZED, synchronizedRadioButtons);
4192270795fbe0b277bfd49f40950ecaa78583175ccBrian Carlstrom        getMemberSpecificationRadioButtons(memberSpecification, ClassConstants.ACC_NATIVE,       nativeRadioButtons);
4202270795fbe0b277bfd49f40950ecaa78583175ccBrian Carlstrom        getMemberSpecificationRadioButtons(memberSpecification, ClassConstants.ACC_ABSTRACT,     abstractRadioButtons);
4212270795fbe0b277bfd49f40950ecaa78583175ccBrian Carlstrom        getMemberSpecificationRadioButtons(memberSpecification, ClassConstants.ACC_STRICT,       strictRadioButtons);
4222270795fbe0b277bfd49f40950ecaa78583175ccBrian Carlstrom        getMemberSpecificationRadioButtons(memberSpecification, ClassConstants.ACC_BRIDGE,       bridgeRadioButtons);
4232270795fbe0b277bfd49f40950ecaa78583175ccBrian Carlstrom        getMemberSpecificationRadioButtons(memberSpecification, ClassConstants.ACC_VARARGS,      varargsRadioButtons);
424b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato
425b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato        return memberSpecification;
426b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    }
427b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato
428b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato
429b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    /**
430b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato     * Shows this dialog. This method only returns when the dialog is closed.
431b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato     *
432b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato     * @return <code>CANCEL_OPTION</code> or <code>APPROVE_OPTION</code>,
433b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato     *         depending on the choice of the user.
434b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato     */
435b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    public int showDialog()
436b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    {
437b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato        returnValue = CANCEL_OPTION;
438b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato
439b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato        // Open the dialog in the right place, then wait for it to be closed,
440b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato        // one way or another.
441b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato        pack();
442b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato        setLocationRelativeTo(getOwner());
443b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato        show();
444b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato
445b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato        return returnValue;
446b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    }
447b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato
448b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato
449b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    /**
450b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato     * Sets the appropriate radio button of a given triplet, based on the access
451b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato     * flags of the given keep option.
452b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato     */
453b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    private void setMemberSpecificationRadioButtons(MemberSpecification memberSpecification,
454b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato                                                    int                 flag,
455b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato                                                    JRadioButton[]      radioButtons)
456b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    {
457b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato        if (radioButtons != null)
458b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato        {
459b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato            int index = (memberSpecification.requiredSetAccessFlags   & flag) != 0 ? 0 :
460b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato                        (memberSpecification.requiredUnsetAccessFlags & flag) != 0 ? 1 :
461b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato                                                                                       2;
462b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato            radioButtons[index].setSelected(true);
463b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato        }
464b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    }
465b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato
466b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato
467b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    /**
468b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato     * Updates the access flag of the given keep option, based on the given radio
469b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato     * button triplet.
470b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato     */
471b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    private void getMemberSpecificationRadioButtons(MemberSpecification memberSpecification,
472b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato                                                    int                 flag,
473b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato                                                    JRadioButton[]      radioButtons)
474b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    {
475b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato        if (radioButtons != null)
476b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato        {
477b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato            if      (radioButtons[0].isSelected())
478b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato            {
479b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato                memberSpecification.requiredSetAccessFlags   |= flag;
480b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato            }
481b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato            else if (radioButtons[1].isSelected())
482b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato            {
483b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato                memberSpecification.requiredUnsetAccessFlags |= flag;
484b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato            }
485b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato        }
486b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    }
487b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato
488b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato
489b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    /**
490b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato     * Attaches the tool tip from the GUI resources that corresponds to the
491b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato     * given key, to the given component.
492b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato     */
493b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    private static JComponent tip(JComponent component, String messageKey)
494b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    {
495b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato        component.setToolTipText(msg(messageKey));
496b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato
497b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato        return component;
498b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    }
499b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato
500b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato
501b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    /**
502b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato     * Returns the message from the GUI resources that corresponds to the given
503b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato     * key.
504b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato     */
505b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    private static String msg(String messageKey)
506b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    {
507b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato         return GUIResources.getMessage(messageKey);
508b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    }
509b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato}
510