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 232270795fbe0b277bfd49f40950ecaa78583175ccBrian Carlstromimport proguard.MemberSpecification; 24b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onoratoimport proguard.classfile.ClassConstants; 25b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onoratoimport proguard.classfile.util.ClassUtil; 26b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 27b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onoratoimport javax.swing.*; 28b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onoratoimport java.awt.*; 29b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onoratoimport java.awt.event.*; 30b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onoratoimport java.util.*; 31b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onoratoimport java.util.List; 32b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 33b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 34b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato/** 35b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato * This <code>ListPanel</code> allows the user to add, edit, move, and remove 36b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato * MemberSpecification entries in a list. 37b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato * 38b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato * @author Eric Lafortune 39b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato */ 40b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onoratofinal class MemberSpecificationsPanel extends ListPanel 41b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato{ 42b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato private final MemberSpecificationDialog fieldSpecificationDialog; 43b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato private final MemberSpecificationDialog methodSpecificationDialog; 44b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 45b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 46b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato public MemberSpecificationsPanel(JDialog owner, boolean fullKeepOptions) 47b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato { 48b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato super(); 49b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 50b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato super.firstSelectionButton = fullKeepOptions ? 3 : 2; 51b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 52b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato list.setCellRenderer(new MyListCellRenderer()); 53b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 54b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato fieldSpecificationDialog = new MemberSpecificationDialog(owner, true); 55b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato methodSpecificationDialog = new MemberSpecificationDialog(owner, false); 56b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 57b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato if (fullKeepOptions) 58b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato { 59b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato addAddFieldButton(); 60b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato } 61b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato addAddMethodButton(); 62b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato addEditButton(); 63b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato addRemoveButton(); 64b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato addUpButton(); 65b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato addDownButton(); 66b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 67b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato enableSelectionButtons(); 68b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato } 69b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 70b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 71b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato protected void addAddFieldButton() 72b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato { 73b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato JButton addFieldButton = new JButton(msg("addField")); 74b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato addFieldButton.addActionListener(new ActionListener() 75b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato { 76b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato public void actionPerformed(ActionEvent e) 77b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato { 78b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato fieldSpecificationDialog.setMemberSpecification(new MemberSpecification()); 79b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato int returnValue = fieldSpecificationDialog.showDialog(); 80b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato if (returnValue == MemberSpecificationDialog.APPROVE_OPTION) 81b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato { 82b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato // Add the new element. 83b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato addElement(new MyMemberSpecificationWrapper(fieldSpecificationDialog.getMemberSpecification(), 84b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato true)); 85b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato } 86b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato } 87b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato }); 88b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 89b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato addButton(tip(addFieldButton, "addFieldTip")); 90b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato } 91b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 92b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 93b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato protected void addAddMethodButton() 94b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato { 95b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato JButton addMethodButton = new JButton(msg("addMethod")); 96b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato addMethodButton.addActionListener(new ActionListener() 97b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato { 98b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato public void actionPerformed(ActionEvent e) 99b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato { 100b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato methodSpecificationDialog.setMemberSpecification(new MemberSpecification()); 101b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato int returnValue = methodSpecificationDialog.showDialog(); 102b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato if (returnValue == MemberSpecificationDialog.APPROVE_OPTION) 103b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato { 104b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato // Add the new element. 105b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato addElement(new MyMemberSpecificationWrapper(methodSpecificationDialog.getMemberSpecification(), 106b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato false)); 107b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato } 108b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato } 109b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato }); 110b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 111b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato addButton(tip(addMethodButton, "addMethodTip")); 112b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato } 113b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 114b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 115b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato protected void addEditButton() 116b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato { 117b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato JButton editButton = new JButton(msg("edit")); 118b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato editButton.addActionListener(new ActionListener() 119b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato { 120b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato public void actionPerformed(ActionEvent e) 121b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato { 122b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato MyMemberSpecificationWrapper wrapper = 123b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato (MyMemberSpecificationWrapper)list.getSelectedValue(); 124b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 125b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato MemberSpecificationDialog memberSpecificationDialog = 126b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato wrapper.isField ? 127b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato fieldSpecificationDialog : 128b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato methodSpecificationDialog; 129b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 130b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato memberSpecificationDialog.setMemberSpecification(wrapper.memberSpecification); 131b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato int returnValue = memberSpecificationDialog.showDialog(); 132b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato if (returnValue == MemberSpecificationDialog.APPROVE_OPTION) 133b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato { 134b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato // Replace the old element. 135b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato wrapper.memberSpecification = memberSpecificationDialog.getMemberSpecification(); 136b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato setElementAt(wrapper, 137b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato list.getSelectedIndex()); 138b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato } 139b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato } 140b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato }); 141b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 142b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato addButton(tip(editButton, "editTip")); 143b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato } 144b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 145b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 146b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato /** 147b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato * Sets the MemberSpecification instances to be represented in this panel. 148b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato */ 149b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato public void setMemberSpecifications(List fieldSpecifications, 150b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato List methodSpecifications) 151b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato { 152b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato listModel.clear(); 153b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 154b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato if (fieldSpecifications != null) 155b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato { 156b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato for (int index = 0; index < fieldSpecifications.size(); index++) 157b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato { 158b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato listModel.addElement( 159b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato new MyMemberSpecificationWrapper((MemberSpecification)fieldSpecifications.get(index), 160b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato true)); 161b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato } 162b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato } 163b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 164b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato if (methodSpecifications != null) 165b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato { 166b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato for (int index = 0; index < methodSpecifications.size(); index++) 167b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato { 168b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato listModel.addElement( 169b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato new MyMemberSpecificationWrapper((MemberSpecification)methodSpecifications.get(index), 170b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato false)); 171b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato } 172b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato } 173b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 174b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato // Make sure the selection buttons are properly enabled, 175b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato // since the clear method doesn't seem to notify the listener. 176b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato enableSelectionButtons(); 177b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato } 178b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 179b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 180b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato /** 181b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato * Returns the MemberSpecification instances currently represented in 182b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato * this panel, referring to fields or to methods. 183b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato * 184b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato * @param isField specifies whether specifications referring to fields or 185b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato * specifications referring to methods should be returned. 186b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato */ 187b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato public List getMemberSpecifications(boolean isField) 188b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato { 189b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato int size = listModel.size(); 190b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato if (size == 0) 191b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato { 192b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato return null; 193b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato } 194b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 195b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato List memberSpecifications = new ArrayList(size); 196b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato for (int index = 0; index < size; index++) 197b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato { 198b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato MyMemberSpecificationWrapper wrapper = 199b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato (MyMemberSpecificationWrapper)listModel.get(index); 200b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 201b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato if (wrapper.isField == isField) 202b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato { 203b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato memberSpecifications.add(wrapper.memberSpecification); 204b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato } 205b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato } 206b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 207b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato return memberSpecifications; 208b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato } 209b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 210b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 211b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato /** 212b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato * This ListCellRenderer renders MemberSpecification objects. 213b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato */ 214b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato private static class MyListCellRenderer implements ListCellRenderer 215b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato { 216b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato private final JLabel label = new JLabel(); 217b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 218b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 219b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato // Implementations for ListCellRenderer. 220b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 221b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato public Component getListCellRendererComponent(JList list, 222b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato Object value, 223b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato int index, 224b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato boolean isSelected, 225b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato boolean cellHasFocus) 226b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato { 227b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato MyMemberSpecificationWrapper wrapper = (MyMemberSpecificationWrapper)value; 228b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 229b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato MemberSpecification option = wrapper.memberSpecification; 230b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato String name = option.name; 231b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato String descriptor = option.descriptor; 232b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 233b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato label.setText(wrapper.isField ? 234b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato (descriptor == null ? name == null ? 235b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato "<fields>" : 236b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato "***" + ' ' + name : 237b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato ClassUtil.externalFullFieldDescription(0, 238b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato name == null ? "*" : name, 239b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato descriptor)) : 240b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato (descriptor == null ? name == null ? 241b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato "<methods>" : 242b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato "***" + ' ' + name + "(...)" : 2432270795fbe0b277bfd49f40950ecaa78583175ccBrian Carlstrom ClassUtil.externalFullMethodDescription(ClassConstants.METHOD_NAME_INIT, 244b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 0, 245b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato name == null ? "*" : name, 246b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato descriptor))); 247b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 248b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato if (isSelected) 249b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato { 250b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato label.setBackground(list.getSelectionBackground()); 251b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato label.setForeground(list.getSelectionForeground()); 252b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato } 253b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato else 254b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato { 255b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato label.setBackground(list.getBackground()); 256b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato label.setForeground(list.getForeground()); 257b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato } 258b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 259b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato label.setOpaque(true); 260b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 261b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato return label; 262b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato } 263b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato } 264b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 265b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 266b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato /** 267b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato * Attaches the tool tip from the GUI resources that corresponds to the 268b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato * given key, to the given component. 269b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato */ 270b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato private static JComponent tip(JComponent component, String messageKey) 271b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato { 272b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato component.setToolTipText(msg(messageKey)); 273b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 274b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato return component; 275b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato } 276b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 277b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 278b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato /** 279b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato * Returns the message from the GUI resources that corresponds to the given 280b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato * key. 281b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato */ 282b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato private static String msg(String messageKey) 283b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato { 284b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato return GUIResources.getMessage(messageKey); 285b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato } 286b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 287b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 288b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato /** 289b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato * This class wraps a MemberSpecification, additionally storing whether 290b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato * the option refers to a field or to a method. 291b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato */ 292b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato private static class MyMemberSpecificationWrapper 293b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato { 294b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato public MemberSpecification memberSpecification; 295b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato public final boolean isField; 296b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 297b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato public MyMemberSpecificationWrapper(MemberSpecification memberSpecification, 298b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato boolean isField) 299b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato { 300b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato this.memberSpecification = memberSpecification; 301b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato this.isField = isField; 302b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato } 303b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato } 304b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato} 305