classspecificationdialog.java

来自「proguard 一个java的混淆器」· Java 代码 · 共 535 行 · 第 1/2 页

JAVA
535
字号
/* * ProGuard -- shrinking, optimization, obfuscation, and preverification *             of Java bytecode. * * Copyright (c) 2002-2007 Eric Lafortune (eric@graphics.cornell.edu) * * This program is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the Free * Software Foundation; either version 2 of the License, or (at your option) * any later version. * * This program is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for * more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */package proguard.gui;import proguard.*;import proguard.classfile.ClassConstants;import proguard.classfile.util.ClassUtil;import javax.swing.*;import javax.swing.border.*;import java.awt.*;import java.awt.event.*;import java.util.List;/** * This <code>JDialog</code> allows the user to enter a String. * * @author Eric Lafortune */final class ClassSpecificationDialog extends JDialog{    /**     * Return value if the dialog is canceled (with the Cancel button or by     * closing the dialog window).     */    public static final int CANCEL_OPTION = 1;    /**     * Return value if the dialog is approved (with the Ok button).     */    public static final int APPROVE_OPTION = 0;    private final JTextArea commentsTextArea = new JTextArea(4, 20);    private final JRadioButton keepClassesAndMembersRadioButton  = new JRadioButton(msg("keep"));    private final JRadioButton keepClassMembersRadioButton       = new JRadioButton(msg("keepClassMembers"));    private final JRadioButton keepClassesWithMembersRadioButton = new JRadioButton(msg("keepClassesWithMembers"));    private final JRadioButton allowShrinkingRadioButton    = new JRadioButton(msg("allowShrinking"));    private final JRadioButton allowOptimizationRadioButton = new JRadioButton(msg("allowOptimization"));    private final JRadioButton allowObfuscationRadioButton  = new JRadioButton(msg("allowObfuscation"));    private final JRadioButton[] publicRadioButtons;    private final JRadioButton[] finalRadioButtons;    private final JRadioButton[] interfaceRadioButtons;    private final JRadioButton[] abstractRadioButtons;    private final JTextField annotationTypeTextField        = new JTextField(20);    private final JTextField classNameTextField             = new JTextField(20);    private final JTextField extendsAnnotationTypeTextField = new JTextField(20);    private final JTextField extendsClassNameTextField      = new JTextField(20);    private final MemberSpecificationsPanel memberSpecificationsPanel;    private int returnValue;    public ClassSpecificationDialog(JFrame owner, boolean fullKeepOptions)    {        super(owner, true);        setResizable(true);        // Create some constraints that can be reused.        GridBagConstraints constraints = new GridBagConstraints();        constraints.anchor = GridBagConstraints.WEST;        constraints.insets = new Insets(1, 2, 1, 2);        GridBagConstraints constraintsStretch = new GridBagConstraints();        constraintsStretch.fill    = GridBagConstraints.HORIZONTAL;        constraintsStretch.weightx = 1.0;        constraintsStretch.anchor  = GridBagConstraints.WEST;        constraintsStretch.insets  = constraints.insets;        GridBagConstraints constraintsLast = new GridBagConstraints();        constraintsLast.gridwidth = GridBagConstraints.REMAINDER;        constraintsLast.anchor    = GridBagConstraints.WEST;        constraintsLast.insets    = constraints.insets;        GridBagConstraints constraintsLastStretch = new GridBagConstraints();        constraintsLastStretch.gridwidth = GridBagConstraints.REMAINDER;        constraintsLastStretch.fill      = GridBagConstraints.HORIZONTAL;        constraintsLastStretch.weightx   = 1.0;        constraintsLastStretch.anchor    = GridBagConstraints.WEST;        constraintsLastStretch.insets    = constraints.insets;        GridBagConstraints panelConstraints = new GridBagConstraints();        panelConstraints.gridwidth = GridBagConstraints.REMAINDER;        panelConstraints.fill      = GridBagConstraints.HORIZONTAL;        panelConstraints.weightx   = 1.0;        panelConstraints.weighty   = 0.0;        panelConstraints.anchor    = GridBagConstraints.NORTHWEST;        panelConstraints.insets    = constraints.insets;        GridBagConstraints stretchPanelConstraints = new GridBagConstraints();        stretchPanelConstraints.gridwidth = GridBagConstraints.REMAINDER;        stretchPanelConstraints.fill      = GridBagConstraints.BOTH;        stretchPanelConstraints.weightx   = 1.0;        stretchPanelConstraints.weighty   = 1.0;        stretchPanelConstraints.anchor    = GridBagConstraints.NORTHWEST;        stretchPanelConstraints.insets    = constraints.insets;        GridBagConstraints labelConstraints = new GridBagConstraints();        labelConstraints.anchor = GridBagConstraints.CENTER;        labelConstraints.insets = new Insets(2, 10, 2, 10);        GridBagConstraints lastLabelConstraints = new GridBagConstraints();        lastLabelConstraints.gridwidth = GridBagConstraints.REMAINDER;        lastLabelConstraints.anchor    = GridBagConstraints.CENTER;        lastLabelConstraints.insets    = labelConstraints.insets;        GridBagConstraints advancedButtonConstraints = new GridBagConstraints();        advancedButtonConstraints.weightx = 1.0;        advancedButtonConstraints.weighty = 1.0;        advancedButtonConstraints.anchor  = GridBagConstraints.SOUTHWEST;        advancedButtonConstraints.insets  = new Insets(4, 4, 8, 4);        GridBagConstraints okButtonConstraints = new GridBagConstraints();        okButtonConstraints.weightx = 1.0;        okButtonConstraints.weighty = 1.0;        okButtonConstraints.anchor  = GridBagConstraints.SOUTHEAST;        okButtonConstraints.insets  = advancedButtonConstraints.insets;        GridBagConstraints cancelButtonConstraints = new GridBagConstraints();        cancelButtonConstraints.gridwidth = GridBagConstraints.REMAINDER;        cancelButtonConstraints.weighty   = 1.0;        cancelButtonConstraints.anchor    = GridBagConstraints.SOUTHEAST;        cancelButtonConstraints.insets    = advancedButtonConstraints.insets;        GridBagLayout layout = new GridBagLayout();        Border etchedBorder = BorderFactory.createEtchedBorder(EtchedBorder.RAISED);        // Create the comments panel.        JPanel commentsPanel = new JPanel(layout);        commentsPanel.setBorder(BorderFactory.createTitledBorder(etchedBorder,                                                                 msg("comments")));        JScrollPane commentsScrollPane = new JScrollPane(commentsTextArea);        commentsScrollPane.setBorder(classNameTextField.getBorder());        commentsPanel.add(tip(commentsScrollPane, "commentsTip"), constraintsLastStretch);        // Create the keep option panel.        ButtonGroup keepButtonGroup = new ButtonGroup();        keepButtonGroup.add(keepClassesAndMembersRadioButton);        keepButtonGroup.add(keepClassMembersRadioButton);        keepButtonGroup.add(keepClassesWithMembersRadioButton);        JPanel keepOptionPanel = new JPanel(layout);        keepOptionPanel.setBorder(BorderFactory.createTitledBorder(etchedBorder,                                                                   msg("keepTitle")));        keepOptionPanel.add(tip(keepClassesAndMembersRadioButton,  "keepTip"),                   constraintsLastStretch);        keepOptionPanel.add(tip(keepClassMembersRadioButton,       "keepClassMembersTip"),       constraintsLastStretch);        keepOptionPanel.add(tip(keepClassesWithMembersRadioButton, "keepClassesWithMembersTip"), constraintsLastStretch);        // Create the allow option panel.        final JPanel allowOptionPanel = new JPanel(layout);        allowOptionPanel.setBorder(BorderFactory.createTitledBorder(etchedBorder,                                                                    msg("allowTitle")));        allowOptionPanel.add(tip(allowShrinkingRadioButton,    "allowShrinkingTip"),    constraintsLastStretch);        allowOptionPanel.add(tip(allowOptimizationRadioButton, "allowOptimizationTip"), constraintsLastStretch);        allowOptionPanel.add(tip(allowObfuscationRadioButton,  "allowObfuscationTip"),  constraintsLastStretch);        // Create the access panel.        JPanel accessPanel = new JPanel(layout);        accessPanel.setBorder(BorderFactory.createTitledBorder(etchedBorder,                                                               msg("access")));        accessPanel.add(Box.createGlue(),                                labelConstraints);        accessPanel.add(tip(new JLabel(msg("required")), "requiredTip"), labelConstraints);        accessPanel.add(tip(new JLabel(msg("not")),      "notTip"),      labelConstraints);        accessPanel.add(tip(new JLabel(msg("dontCare")), "dontCareTip"), labelConstraints);        accessPanel.add(Box.createGlue(),                                constraintsLastStretch);        publicRadioButtons    = addRadioButtonTriplet("Public",    accessPanel);        finalRadioButtons     = addRadioButtonTriplet("Final",     accessPanel);        interfaceRadioButtons = addRadioButtonTriplet("Interface", accessPanel);        abstractRadioButtons  = addRadioButtonTriplet("Abstract",  accessPanel);        // Create the annotation type panel.        final JPanel annotationTypePanel = new JPanel(layout);        annotationTypePanel.setBorder(BorderFactory.createTitledBorder(etchedBorder,                                                                       msg("annotation")));        annotationTypePanel.add(tip(annotationTypeTextField, "classNameTip"), constraintsLastStretch);        // Create the class name panel.        JPanel classNamePanel = new JPanel(layout);        classNamePanel.setBorder(BorderFactory.createTitledBorder(etchedBorder,                                                                  msg("class")));        classNamePanel.add(tip(classNameTextField, "classNameTip"), constraintsLastStretch);        // Create the extends annotation type panel.        final JPanel extendsAnnotationTypePanel = new JPanel(layout);        extendsAnnotationTypePanel.setBorder(BorderFactory.createTitledBorder(etchedBorder,                                                                              msg("extendsImplementsAnnotation")));        extendsAnnotationTypePanel.add(tip(extendsAnnotationTypeTextField, "classNameTip"), constraintsLastStretch);        // Create the extends class name panel.        JPanel extendsClassNamePanel = new JPanel(layout);        extendsClassNamePanel.setBorder(BorderFactory.createTitledBorder(etchedBorder,                                                                         msg("extendsImplementsClass")));        extendsClassNamePanel.add(tip(extendsClassNameTextField, "classNameTip"), constraintsLastStretch);        // Create the class member list panel.        memberSpecificationsPanel = new MemberSpecificationsPanel(this, fullKeepOptions);        memberSpecificationsPanel.setBorder(BorderFactory.createTitledBorder(etchedBorder,                                                                             msg("classMembers")));        // Create the Advanced button.        final JButton advancedButton = new JButton(msg("basic"));        advancedButton.addActionListener(new ActionListener()        {            public void actionPerformed(ActionEvent e)            {                boolean visible = !allowOptionPanel.isVisible();                allowOptionPanel.setVisible(visible);                annotationTypePanel.setVisible(visible);                extendsAnnotationTypePanel.setVisible(visible);                advancedButton.setText(msg(visible ? "basic" : "advanced"));                pack();            }        });        advancedButton.doClick();        // Create the Ok button.        JButton okButton = new JButton(msg("ok"));        okButton.addActionListener(new ActionListener()        {            public void actionPerformed(ActionEvent e)            {                returnValue = APPROVE_OPTION;                hide();            }        });        // Create the Cancel button.        JButton cancelButton = new JButton(msg("cancel"));        cancelButton.addActionListener(new ActionListener()

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?