This Bugzilla instance is a read-only archive of historic NetBeans bug reports. To report a bug in NetBeans please follow the project's instructions for reporting issues.

View | Details | Raw Unified | Return to bug 125060
Collapse All | Expand All

(-)org/netbeans/modules/java/hints/Bundle.properties (-20 / +2 lines)
Lines 73-79 Link Here
73
LBL_Imports_DUPLICATE=Multiple Import
73
LBL_Imports_DUPLICATE=Multiple Import
74
LBL_Imports_SAME_PACKAGE=Import From The Same Package
74
LBL_Imports_SAME_PACKAGE=Import From The Same Package
75
LBL_Imports_DEFAULT_PACKAGE=Import From java.lang Package
75
LBL_Imports_DEFAULT_PACKAGE=Import From java.lang Package
76
LBL_Imports_FORBIDDEN=Import From Forbidden Package
76
LBL_Imports_EXCLUDED=Import from Excluded
77
LBL_Imports_STAR=Star import
77
LBL_Imports_STAR=Star import
78
78
79
DSC_Imports_DELAGATE=Delegate - non GUI
79
DSC_Imports_DELAGATE=Delegate - non GUI
Lines 81-87 Link Here
81
DSC_Imports_DUPLICATE=Multiple Import
81
DSC_Imports_DUPLICATE=Multiple Import
82
DSC_Imports_SAME_PACKAGE=Import From The Same Package
82
DSC_Imports_SAME_PACKAGE=Import From The Same Package
83
DSC_Imports_DEFAULT_PACKAGE=Import From java.lang Package
83
DSC_Imports_DEFAULT_PACKAGE=Import From java.lang Package
84
DSC_Imports_FORBIDDEN=Import From Forbidden Package
84
DSC_Imports_EXCLUDED=Import from package or class which has been labelled "Excluded" in the Code Completer
85
DSC_Imports_STAR=Star import
85
DSC_Imports_STAR=Star import
86
86
87
LBL_Imports_Fix_One_SAME_PACKAGE=Remove import from same package
87
LBL_Imports_Fix_One_SAME_PACKAGE=Remove import from same package
Lines 175-192 Link Here
175
<CODE>if(...);<BR>else;</CODE>.
175
<CODE>if(...);<BR>else;</CODE>.
176
DSC_Empty_BLOCK=Checks for empty statements in blocks usually represented\
176
DSC_Empty_BLOCK=Checks for empty statements in blocks usually represented\
177
as superfluous semicolon.
177
as superfluous semicolon.
178
ForbiddenImportsCustomizer.btnAdd.text=&Add
179
ForbiddenImportsCustomizer.btnEdit.text=&Edit
180
ForbiddenImportsCustomizer.btnRemove.text=&Remove
181
ForbiddenImportsCustomizer.titleAdd=Add Forbidden Import
182
ForbiddenImportsCustomizer.titleEdit=Edit Forbidden Import
183
ForbiddenImportsCustomizer.label=Forbidden import: 
184
ForbiddenImportsCustomizer.btnAdd=Add
185
ForbiddenImportsCustomizer.btnEdit=Update
186
ForbiddenImportsCustomizer.btnCancel=Cancel
187
ForbiddenImportsCustomizer.hint=<html><i>Use * for a single package, use ** for all packages.
188
178
189
190
MSG_HiddenField=Field hides another field
179
MSG_HiddenField=Field hides another field
191
HINT_HiddenField=Declaration of a field in a class can hide declaration of \
180
HINT_HiddenField=Declaration of a field in a class can hide declaration of \
192
another field in superclasses. Although possible, this is not very good programming style.
181
another field in superclasses. Although possible, this is not very good programming style.
Lines 272-284 Link Here
272
DSC_SynchronizationOnNonFinalField=Synchronization on non-final field
261
DSC_SynchronizationOnNonFinalField=Synchronization on non-final field
273
ERR_SynchronizationOnNonFinalField=Synchronization on non-final field
262
ERR_SynchronizationOnNonFinalField=Synchronization on non-final field
274
DN_SynchronizationOnNonFinalField=Synchronization on non-final field
263
DN_SynchronizationOnNonFinalField=Synchronization on non-final field
275
ForbiddenImportsCustomizer.listItems.AccessibleContext.accessibleDescription=List of forbidden packages
276
ForbiddenImportsCustomizer.listItems.AccessibleContext.accessibleName=Forbidden packages list
277
ForbiddenImportsCustomizer.jScrollPane1.AccessibleContext.accessibleDescription=Forbidden packages pane
278
ForbiddenImportsCustomizer.jScrollPane1.AccessibleContext.accessibleName=Forbidden packages pane
279
ForbiddenImportsCustomizer.AccessibleContext.accessibleDescription=Forbidden packages customiser
280
ForbiddenImportsCustomizer.AccessibleContext.accessibleName=Forbidden packages customiser
281
ForbiddenImportsCustomizer.btnAdd.AccessibleContext.accessibleDescription=Adds new forbidden package to the list
282
264
283
HINT_SuspiciousCall=Suspicious call to {0}:\nExpected type {2}, actual type {1}
265
HINT_SuspiciousCall=Suspicious call to {0}:\nExpected type {2}, actual type {1}
284
HINT_SuspiciousCallIncompatibleTypes=Suspicious call to {0}:\nGiven object cannot contain instances of {1} (expected {2})
266
HINT_SuspiciousCallIncompatibleTypes=Suspicious call to {0}:\nGiven object cannot contain instances of {1} (expected {2})
(-)org/netbeans/modules/java/hints/ForbiddenImportsCustomizer.form (-135 lines)
Lines 1-135 Link Here
1
<?xml version="1.0" encoding="UTF-8" ?>
2
3
<Form version="1.4" maxVersion="1.4" type="org.netbeans.modules.form.forminfo.JPanelFormInfo">
4
  <Properties>
5
    <Property name="opaque" type="boolean" value="false"/>
6
  </Properties>
7
  <AccessibilityProperties>
8
    <Property name="AccessibleContext.accessibleName" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
9
      <ResourceString bundle="org/netbeans/modules/java/hints/Bundle.properties" key="ForbiddenImportsCustomizer.AccessibleContext.accessibleName" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
10
    </Property>
11
    <Property name="AccessibleContext.accessibleDescription" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
12
      <ResourceString bundle="org/netbeans/modules/java/hints/Bundle.properties" key="ForbiddenImportsCustomizer.AccessibleContext.accessibleDescription" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
13
    </Property>
14
  </AccessibilityProperties>
15
  <AuxValues>
16
    <AuxValue name="FormSettings_autoResourcing" type="java.lang.Integer" value="1"/>
17
    <AuxValue name="FormSettings_autoSetComponentName" type="java.lang.Boolean" value="false"/>
18
    <AuxValue name="FormSettings_generateFQN" type="java.lang.Boolean" value="true"/>
19
    <AuxValue name="FormSettings_generateMnemonicsCode" type="java.lang.Boolean" value="true"/>
20
    <AuxValue name="FormSettings_i18nAutoMode" type="java.lang.Boolean" value="true"/>
21
    <AuxValue name="FormSettings_layoutCodeTarget" type="java.lang.Integer" value="2"/>
22
    <AuxValue name="FormSettings_listenerGenerationStyle" type="java.lang.Integer" value="0"/>
23
    <AuxValue name="FormSettings_variablesLocal" type="java.lang.Boolean" value="false"/>
24
    <AuxValue name="FormSettings_variablesModifier" type="java.lang.Integer" value="2"/>
25
    <AuxValue name="designerSize" type="java.awt.Dimension" value="-84,-19,0,5,115,114,0,18,106,97,118,97,46,97,119,116,46,68,105,109,101,110,115,105,111,110,65,-114,-39,-41,-84,95,68,20,2,0,2,73,0,6,104,101,105,103,104,116,73,0,5,119,105,100,116,104,120,112,0,0,1,44,0,0,1,-112"/>
26
  </AuxValues>
27
28
  <Layout class="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout"/>
29
  <SubComponents>
30
    <Container class="javax.swing.JScrollPane" name="jScrollPane1">
31
      <AccessibilityProperties>
32
        <Property name="AccessibleContext.accessibleName" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
33
          <ResourceString bundle="org/netbeans/modules/java/hints/Bundle.properties" key="ForbiddenImportsCustomizer.jScrollPane1.AccessibleContext.accessibleName" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
34
        </Property>
35
        <Property name="AccessibleContext.accessibleDescription" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
36
          <ResourceString bundle="org/netbeans/modules/java/hints/Bundle.properties" key="ForbiddenImportsCustomizer.jScrollPane1.AccessibleContext.accessibleDescription" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
37
        </Property>
38
      </AccessibilityProperties>
39
      <Constraints>
40
        <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
41
          <GridBagConstraints gridX="-1" gridY="-1" gridWidth="1" gridHeight="0" fill="1" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="10" weightX="1.0" weightY="1.0"/>
42
        </Constraint>
43
      </Constraints>
44
45
      <Layout class="org.netbeans.modules.form.compat2.layouts.support.JScrollPaneSupportLayout"/>
46
      <SubComponents>
47
        <Component class="javax.swing.JList" name="listItems">
48
          <Properties>
49
            <Property name="model" type="javax.swing.ListModel" editor="org.netbeans.modules.form.editors2.ListModelEditor">
50
              <StringArray count="5">
51
                <StringItem index="0" value="Item 1"/>
52
                <StringItem index="1" value="Item 2"/>
53
                <StringItem index="2" value="Item 3"/>
54
                <StringItem index="3" value="Item 4"/>
55
                <StringItem index="4" value="Item 5"/>
56
              </StringArray>
57
            </Property>
58
          </Properties>
59
          <AccessibilityProperties>
60
            <Property name="AccessibleContext.accessibleName" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
61
              <ResourceString bundle="org/netbeans/modules/java/hints/Bundle.properties" key="ForbiddenImportsCustomizer.listItems.AccessibleContext.accessibleName" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
62
            </Property>
63
            <Property name="AccessibleContext.accessibleDescription" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
64
              <ResourceString bundle="org/netbeans/modules/java/hints/Bundle.properties" key="ForbiddenImportsCustomizer.listItems.AccessibleContext.accessibleDescription" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
65
            </Property>
66
          </AccessibilityProperties>
67
        </Component>
68
      </SubComponents>
69
    </Container>
70
    <Container class="javax.swing.JPanel" name="jPanel1">
71
      <Properties>
72
        <Property name="opaque" type="boolean" value="false"/>
73
      </Properties>
74
      <Constraints>
75
        <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
76
          <GridBagConstraints gridX="-1" gridY="-1" gridWidth="0" gridHeight="0" fill="0" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="8" insetsBottom="0" insetsRight="0" anchor="18" weightX="0.0" weightY="0.0"/>
77
        </Constraint>
78
      </Constraints>
79
80
      <Layout class="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout"/>
81
      <SubComponents>
82
        <Component class="javax.swing.JButton" name="btnAdd">
83
          <Properties>
84
            <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
85
              <ResourceString bundle="org/netbeans/modules/java/hints/Bundle.properties" key="ForbiddenImportsCustomizer.btnAdd.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
86
            </Property>
87
          </Properties>
88
          <AccessibilityProperties>
89
            <Property name="AccessibleContext.accessibleDescription" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
90
              <ResourceString bundle="org/netbeans/modules/java/hints/Bundle.properties" key="ForbiddenImportsCustomizer.btnAdd.AccessibleContext.accessibleDescription" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
91
            </Property>
92
          </AccessibilityProperties>
93
          <Events>
94
            <EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="addItem"/>
95
          </Events>
96
          <Constraints>
97
            <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
98
              <GridBagConstraints gridX="-1" gridY="-1" gridWidth="0" gridHeight="1" fill="2" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="4" insetsRight="0" anchor="18" weightX="1.0" weightY="0.0"/>
99
            </Constraint>
100
          </Constraints>
101
        </Component>
102
        <Component class="javax.swing.JButton" name="btnEdit">
103
          <Properties>
104
            <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
105
              <ResourceString bundle="org/netbeans/modules/java/hints/Bundle.properties" key="ForbiddenImportsCustomizer.btnEdit.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
106
            </Property>
107
          </Properties>
108
          <Events>
109
            <EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="editItem"/>
110
          </Events>
111
          <Constraints>
112
            <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
113
              <GridBagConstraints gridX="-1" gridY="-1" gridWidth="0" gridHeight="1" fill="2" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="4" insetsRight="0" anchor="18" weightX="1.0" weightY="0.0"/>
114
            </Constraint>
115
          </Constraints>
116
        </Component>
117
        <Component class="javax.swing.JButton" name="btnRemove">
118
          <Properties>
119
            <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
120
              <ResourceString bundle="org/netbeans/modules/java/hints/Bundle.properties" key="ForbiddenImportsCustomizer.btnRemove.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
121
            </Property>
122
          </Properties>
123
          <Events>
124
            <EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="removeItem"/>
125
          </Events>
126
          <Constraints>
127
            <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
128
              <GridBagConstraints gridX="-1" gridY="-1" gridWidth="0" gridHeight="0" fill="2" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="18" weightX="1.0" weightY="1.0"/>
129
            </Constraint>
130
          </Constraints>
131
        </Component>
132
      </SubComponents>
133
    </Container>
134
  </SubComponents>
135
</Form>
(-)org/netbeans/modules/java/hints/ForbiddenImportsCustomizer.java (-314 lines)
Lines 1-314 Link Here
1
/*
2
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
3
 *
4
 * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
5
 *
6
 * The contents of this file are subject to the terms of either the GNU
7
 * General Public License Version 2 only ("GPL") or the Common
8
 * Development and Distribution License("CDDL") (collectively, the
9
 * "License"). You may not use this file except in compliance with the
10
 * License. You can obtain a copy of the License at
11
 * http://www.netbeans.org/cddl-gplv2.html
12
 * or nbbuild/licenses/CDDL-GPL-2-CP. See the License for the
13
 * specific language governing permissions and limitations under the
14
 * License.  When distributing the software, include this License Header
15
 * Notice in each file and include the License file at
16
 * nbbuild/licenses/CDDL-GPL-2-CP.  Sun designates this
17
 * particular file as subject to the "Classpath" exception as provided
18
 * by Sun in the GPL Version 2 section of the License file that
19
 * accompanied this code. If applicable, add the following below the
20
 * License Header, with the fields enclosed by brackets [] replaced by
21
 * your own identifying information:
22
 * "Portions Copyrighted [year] [name of copyright owner]"
23
 *
24
 * Contributor(s):
25
 *
26
 * Portions Copyrighted 2007 Sun Microsystems, Inc.
27
 */
28
package org.netbeans.modules.java.hints;
29
30
import java.awt.Dialog;
31
import java.awt.GridBagConstraints;
32
import java.awt.GridBagLayout;
33
import java.awt.Insets;
34
import java.util.ArrayList;
35
import java.util.List;
36
import java.util.StringTokenizer;
37
import java.util.prefs.Preferences;
38
import javax.swing.BorderFactory;
39
import javax.swing.DefaultListModel;
40
import javax.swing.JButton;
41
import javax.swing.JLabel;
42
import javax.swing.JPanel;
43
import javax.swing.JTextField;
44
import javax.swing.event.DocumentEvent;
45
import javax.swing.event.DocumentListener;
46
import javax.swing.event.ListSelectionEvent;
47
import javax.swing.event.ListSelectionListener;
48
import org.openide.DialogDescriptor;
49
import org.openide.DialogDisplayer;
50
import org.openide.util.NbBundle;
51
52
/**
53
 *
54
 * @author  phrebejk
55
 */
56
public class ForbiddenImportsCustomizer extends javax.swing.JPanel {
57
    
58
    private static String FORBIDDEN_IMPORTS_KEY = "ForbiddenImports"; // NOI18N
59
    private static String FORBIDDEN_IMPORTS_DEFAULT = "sun.**"; // NOI18N
60
    private static String IMPORTS_DELIMITER = ";"; // NOI18N
61
    
62
    private Preferences prefs;
63
    
64
    /** Creates new form ForbiddenImports */
65
    public ForbiddenImportsCustomizer(Preferences node) {
66
        this.prefs = node;
67
        initComponents();
68
        DefaultListModel model = new DefaultListModel();
69
        for( String item : getForbiddenImports(node) ) {
70
            model.addElement( item );
71
        }
72
        listItems.setModel( model );
73
        listItems.addListSelectionListener( new ListSelectionListener() {
74
            public void valueChanged(ListSelectionEvent e) {
75
                enableButtons();
76
            }
77
        });
78
        enableButtons();
79
    }
80
    
81
    private void enableButtons() {
82
        int selIndex = listItems.getSelectedIndex();
83
        btnEdit.setEnabled( selIndex >= 0 );
84
        btnRemove.setEnabled( selIndex >= 0 );
85
    }
86
    
87
    private void updatePreferences() {
88
        String[] items = new String[listItems.getModel().getSize()];
89
        for( int i=0; i<((DefaultListModel)listItems.getModel()).size(); i++ ) {
90
            items[i] = (String)listItems.getModel().getElementAt(i);
91
        }
92
        prefs.put(FORBIDDEN_IMPORTS_KEY, encodeForbiddenImports( items ));
93
    }
94
    
95
    private String showInputDialog( String initialValue ) {
96
        String title = null == initialValue ? NbBundle.getMessage( ForbiddenImportsCustomizer.class, "ForbiddenImportsCustomizer.titleAdd" ) //NOI18N
97
                : NbBundle.getMessage( ForbiddenImportsCustomizer.class, "ForbiddenImportsCustomizer.titleEdit" ); //NOI18N
98
        final JButton btnOk = new JButton( null == initialValue ? NbBundle.getMessage( ForbiddenImportsCustomizer.class, "ForbiddenImportsCustomizer.btnAdd" ) //NOI18N
99
                : NbBundle.getMessage( ForbiddenImportsCustomizer.class, "ForbiddenImportsCustomizer.btnEdit" ) ); //NOI18N
100
        btnOk.setEnabled( null != initialValue );
101
        JButton btnCancel = new JButton( NbBundle.getMessage( ForbiddenImportsCustomizer.class, "ForbiddenImportsCustomizer.btnCancel" ) ); //NOI18N
102
        
103
        JPanel panel = new JPanel( new GridBagLayout() );
104
        panel.setBorder( BorderFactory.createEmptyBorder(10, 10, 0, 10) );
105
        
106
        JTextField input = new JTextField();
107
        input.setText( null == initialValue ? "" : initialValue );
108
        input.getDocument().addDocumentListener( new DocumentListener() {
109
110
            public void insertUpdate(DocumentEvent e) {
111
                btnOk.setEnabled( e.getDocument().getLength() > 0 );
112
            }
113
114
            public void removeUpdate(DocumentEvent e) {
115
                btnOk.setEnabled( e.getDocument().getLength() > 0 );
116
            }
117
118
            public void changedUpdate(DocumentEvent e) {
119
                btnOk.setEnabled( e.getDocument().getLength() > 0 );
120
            }
121
        });
122
        
123
        panel.add( new JLabel(NbBundle.getMessage( ForbiddenImportsCustomizer.class, "ForbiddenImportsCustomizer.label" ) ),  //NOI18N
124
                new GridBagConstraints(0,0,1,1,0.0,0.0,GridBagConstraints.WEST,GridBagConstraints.NONE,new Insets(0,0,0,5),0,0) );
125
        panel.add( input, new GridBagConstraints(1,0,1,1,1.0,0.0,GridBagConstraints.WEST,GridBagConstraints.HORIZONTAL,new Insets(0,0,0,0),0,0) );
126
        panel.add( new JLabel(NbBundle.getMessage(ForbiddenImportsCustomizer.class, "ForbiddenImportsCustomizer.hint") ),  //NOI18N 
127
                new GridBagConstraints(1,1,1,1,1.0,0.0,GridBagConstraints.WEST,GridBagConstraints.HORIZONTAL,new Insets(5,0,0,0),0,0) );
128
        
129
        DialogDescriptor dd = new DialogDescriptor(panel, title, true, 
130
                new Object[] { btnOk, btnCancel }, btnOk, 
131
                DialogDescriptor.DEFAULT_ALIGN, null, null );
132
        Dialog dlg = DialogDisplayer.getDefault().createDialog(dd);
133
        dlg.setVisible( true );
134
        if( btnOk == dd.getValue() ) {
135
            return input.getText();
136
        }
137
        return null;
138
    } 
139
    
140
    /** This method is called from within the constructor to
141
     * initialize the form.
142
     * WARNING: Do NOT modify this code. The content of this method is
143
     * always regenerated by the Form Editor.
144
     */
145
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
146
    private void initComponents() {
147
        java.awt.GridBagConstraints gridBagConstraints;
148
149
        jScrollPane1 = new javax.swing.JScrollPane();
150
        listItems = new javax.swing.JList();
151
        jPanel1 = new javax.swing.JPanel();
152
        btnAdd = new javax.swing.JButton();
153
        btnEdit = new javax.swing.JButton();
154
        btnRemove = new javax.swing.JButton();
155
156
        setOpaque(false);
157
        setLayout(new java.awt.GridBagLayout());
158
159
        listItems.setModel(new javax.swing.AbstractListModel() {
160
            String[] strings = { "Item 1", "Item 2", "Item 3", "Item 4", "Item 5" };
161
            public int getSize() { return strings.length; }
162
            public Object getElementAt(int i) { return strings[i]; }
163
        });
164
        jScrollPane1.setViewportView(listItems);
165
        listItems.getAccessibleContext().setAccessibleName(org.openide.util.NbBundle.getMessage(ForbiddenImportsCustomizer.class, "ForbiddenImportsCustomizer.listItems.AccessibleContext.accessibleName")); // NOI18N
166
        listItems.getAccessibleContext().setAccessibleDescription(org.openide.util.NbBundle.getMessage(ForbiddenImportsCustomizer.class, "ForbiddenImportsCustomizer.listItems.AccessibleContext.accessibleDescription")); // NOI18N
167
168
        gridBagConstraints = new java.awt.GridBagConstraints();
169
        gridBagConstraints.gridheight = java.awt.GridBagConstraints.REMAINDER;
170
        gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH;
171
        gridBagConstraints.weightx = 1.0;
172
        gridBagConstraints.weighty = 1.0;
173
        add(jScrollPane1, gridBagConstraints);
174
        jScrollPane1.getAccessibleContext().setAccessibleName(org.openide.util.NbBundle.getMessage(ForbiddenImportsCustomizer.class, "ForbiddenImportsCustomizer.jScrollPane1.AccessibleContext.accessibleName")); // NOI18N
175
        jScrollPane1.getAccessibleContext().setAccessibleDescription(org.openide.util.NbBundle.getMessage(ForbiddenImportsCustomizer.class, "ForbiddenImportsCustomizer.jScrollPane1.AccessibleContext.accessibleDescription")); // NOI18N
176
177
        jPanel1.setOpaque(false);
178
        jPanel1.setLayout(new java.awt.GridBagLayout());
179
180
        org.openide.awt.Mnemonics.setLocalizedText(btnAdd, org.openide.util.NbBundle.getMessage(ForbiddenImportsCustomizer.class, "ForbiddenImportsCustomizer.btnAdd.text")); // NOI18N
181
        btnAdd.addActionListener(new java.awt.event.ActionListener() {
182
            public void actionPerformed(java.awt.event.ActionEvent evt) {
183
                addItem(evt);
184
            }
185
        });
186
        gridBagConstraints = new java.awt.GridBagConstraints();
187
        gridBagConstraints.gridwidth = java.awt.GridBagConstraints.REMAINDER;
188
        gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
189
        gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST;
190
        gridBagConstraints.weightx = 1.0;
191
        gridBagConstraints.insets = new java.awt.Insets(0, 0, 4, 0);
192
        jPanel1.add(btnAdd, gridBagConstraints);
193
        btnAdd.getAccessibleContext().setAccessibleDescription(org.openide.util.NbBundle.getMessage(ForbiddenImportsCustomizer.class, "ForbiddenImportsCustomizer.btnAdd.AccessibleContext.accessibleDescription")); // NOI18N
194
195
        org.openide.awt.Mnemonics.setLocalizedText(btnEdit, org.openide.util.NbBundle.getMessage(ForbiddenImportsCustomizer.class, "ForbiddenImportsCustomizer.btnEdit.text")); // NOI18N
196
        btnEdit.addActionListener(new java.awt.event.ActionListener() {
197
            public void actionPerformed(java.awt.event.ActionEvent evt) {
198
                editItem(evt);
199
            }
200
        });
201
        gridBagConstraints = new java.awt.GridBagConstraints();
202
        gridBagConstraints.gridwidth = java.awt.GridBagConstraints.REMAINDER;
203
        gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
204
        gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST;
205
        gridBagConstraints.weightx = 1.0;
206
        gridBagConstraints.insets = new java.awt.Insets(0, 0, 4, 0);
207
        jPanel1.add(btnEdit, gridBagConstraints);
208
209
        org.openide.awt.Mnemonics.setLocalizedText(btnRemove, org.openide.util.NbBundle.getMessage(ForbiddenImportsCustomizer.class, "ForbiddenImportsCustomizer.btnRemove.text")); // NOI18N
210
        btnRemove.addActionListener(new java.awt.event.ActionListener() {
211
            public void actionPerformed(java.awt.event.ActionEvent evt) {
212
                removeItem(evt);
213
            }
214
        });
215
        gridBagConstraints = new java.awt.GridBagConstraints();
216
        gridBagConstraints.gridwidth = java.awt.GridBagConstraints.REMAINDER;
217
        gridBagConstraints.gridheight = java.awt.GridBagConstraints.REMAINDER;
218
        gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
219
        gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST;
220
        gridBagConstraints.weightx = 1.0;
221
        gridBagConstraints.weighty = 1.0;
222
        jPanel1.add(btnRemove, gridBagConstraints);
223
224
        gridBagConstraints = new java.awt.GridBagConstraints();
225
        gridBagConstraints.gridwidth = java.awt.GridBagConstraints.REMAINDER;
226
        gridBagConstraints.gridheight = java.awt.GridBagConstraints.REMAINDER;
227
        gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST;
228
        gridBagConstraints.insets = new java.awt.Insets(0, 8, 0, 0);
229
        add(jPanel1, gridBagConstraints);
230
231
        getAccessibleContext().setAccessibleName(org.openide.util.NbBundle.getMessage(ForbiddenImportsCustomizer.class, "ForbiddenImportsCustomizer.AccessibleContext.accessibleName")); // NOI18N
232
        getAccessibleContext().setAccessibleDescription(org.openide.util.NbBundle.getMessage(ForbiddenImportsCustomizer.class, "ForbiddenImportsCustomizer.AccessibleContext.accessibleDescription")); // NOI18N
233
    }// </editor-fold>//GEN-END:initComponents
234
235
private void removeItem(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_removeItem
236
    int selIndex = listItems.getSelectedIndex();//GEN-LAST:event_removeItem
237
    if( selIndex < 0 )
238
        return;
239
    ((DefaultListModel)listItems.getModel()).remove( selIndex );
240
    selIndex++;
241
    if( selIndex > listItems.getModel().getSize()-1 )
242
        selIndex = listItems.getModel().getSize()-1;
243
    listItems.getSelectionModel().setSelectionInterval( selIndex, selIndex );
244
    updatePreferences();
245
}                           
246
247
private void editItem(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_editItem
248
    int selIndex = listItems.getSelectedIndex();//GEN-LAST:event_editItem
249
    if( selIndex < 0 )
250
        return;
251
    String initialValue = (String)((DefaultListModel)listItems.getModel()).get( selIndex );
252
    String newValue = showInputDialog( initialValue );
253
    if( null != newValue ) {
254
        ((DefaultListModel)listItems.getModel()).set( selIndex, newValue );
255
        listItems.getSelectionModel().setSelectionInterval( selIndex, selIndex );
256
        updatePreferences();
257
    }
258
}                         
259
260
private void addItem(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_addItem
261
    String newValue = showInputDialog( null );//GEN-LAST:event_addItem
262
    if( null != newValue ) {
263
        ((DefaultListModel)listItems.getModel()).addElement( newValue );
264
        int count = listItems.getModel().getSize();
265
        if( count > 0 )
266
            listItems.getSelectionModel().setSelectionInterval( count-1, count-1 );
267
        updatePreferences();
268
    }
269
270
}                        
271
    
272
    
273
    // Variables declaration - do not modify//GEN-BEGIN:variables
274
    private javax.swing.JButton btnAdd;
275
    private javax.swing.JButton btnEdit;
276
    private javax.swing.JButton btnRemove;
277
    private javax.swing.JPanel jPanel1;
278
    private javax.swing.JScrollPane jScrollPane1;
279
    private javax.swing.JList listItems;
280
    // End of variables declaration//GEN-END:variables
281
    
282
    public static String encodeForbiddenImports( String[] forbiddenImports ) {
283
        
284
        StringBuffer sb = new StringBuffer();
285
        
286
        for( String fi : forbiddenImports ) {
287
            sb.append(fi);
288
            sb.append(IMPORTS_DELIMITER); 
289
        }
290
        
291
        return sb.toString();
292
    }
293
    
294
    public static String[] decodeForbiddenImports( String forbiddenImports ) {
295
        
296
        StringTokenizer st = new StringTokenizer(forbiddenImports, IMPORTS_DELIMITER, false );
297
        
298
        List<String> imList = new ArrayList<String>();
299
        
300
        while( st.hasMoreTokens() ) {
301
            String im = st.nextToken();
302
            imList.add(im);
303
        }
304
        
305
        return imList.toArray(new String[imList.size()]);
306
        
307
    }
308
    
309
    public static String[] getForbiddenImports(Preferences node ) {
310
        String text = node.get(FORBIDDEN_IMPORTS_KEY, FORBIDDEN_IMPORTS_DEFAULT);
311
        return decodeForbiddenImports(text);
312
    }
313
    
314
}
(-)org/netbeans/modules/java/hints/Imports.java (-58 / +17 lines)
Lines 44-57 Link Here
44
import java.util.prefs.PreferenceChangeEvent;
44
import java.util.prefs.PreferenceChangeEvent;
45
import java.util.prefs.PreferenceChangeListener;
45
import java.util.prefs.PreferenceChangeListener;
46
import java.util.prefs.Preferences;
46
import java.util.prefs.Preferences;
47
import java.util.regex.Pattern;
48
import javax.swing.JComponent;
49
import org.netbeans.api.java.source.Task;
47
import org.netbeans.api.java.source.Task;
50
import org.netbeans.api.java.source.CompilationInfo;
48
import org.netbeans.api.java.source.CompilationInfo;
51
import org.netbeans.api.java.source.JavaSource;
49
import org.netbeans.api.java.source.JavaSource;
52
import org.netbeans.api.java.source.TreeMaker;
50
import org.netbeans.api.java.source.TreeMaker;
53
import org.netbeans.api.java.source.TreePathHandle;
51
import org.netbeans.api.java.source.TreePathHandle;
54
import org.netbeans.api.java.source.WorkingCopy;
52
import org.netbeans.api.java.source.WorkingCopy;
53
import org.netbeans.modules.editor.java.Utilities;
55
import org.netbeans.modules.java.editor.semantic.RemoveUnusedImportFix;
54
import org.netbeans.modules.java.editor.semantic.RemoveUnusedImportFix;
56
import org.netbeans.modules.java.hints.spi.AbstractHint;
55
import org.netbeans.modules.java.hints.spi.AbstractHint;
57
import org.netbeans.spi.editor.hints.ChangeInfo;
56
import org.netbeans.spi.editor.hints.ChangeInfo;
Lines 77-83 Link Here
77
    private Imports duplicate;
76
    private Imports duplicate;
78
    private Imports defaultPackage; 
77
    private Imports defaultPackage; 
79
    private Imports samePackage; 
78
    private Imports samePackage; 
80
    private Imports forbiddenPackage; 
79
    private Imports excludedPackage;
81
    private Imports unused; 
80
    private Imports unused; 
82
    private Imports star;
81
    private Imports star;
83
        
82
        
Lines 109-118 Link Here
109
        return d.defaultPackage;
108
        return d.defaultPackage;
110
    }
109
    }
111
    
110
    
112
    public static Imports createForbidden() {
111
    public static Imports createExcluded() {
113
        Imports d = getDelegate();
112
        Imports d = getDelegate();
114
        d.forbiddenPackage = new Imports( ImportHintKind.FORBIDDEN );
113
        d.excludedPackage = new Imports( ImportHintKind.EXCLUDED );
115
        return d.forbiddenPackage;
114
        return d.excludedPackage;
116
    }
115
    }
117
    
116
    
118
    public static Imports createSamePackage() {
117
    public static Imports createSamePackage() {
Lines 223-237 Link Here
223
                }
222
                }
224
223
225
                break;
224
                break;
226
            case FORBIDDEN:
225
            case EXCLUDED:
227
                Imports forbidPackage = getDelegate().forbiddenPackage;
226
                Imports excludePackage = getDelegate().excludedPackage;
228
                String[] regexps = getRegexps(forbidPackage.getPreferences(null));
227
				String pkg = ms.getExpression().toString();
229
                if (forbidPackage != null &&
228
				String klass = ms.getIdentifier().toString();
230
                        forbidPackage.isEnabled() &&
229
				String exp = pkg + "." + (!klass.equals("*") ? klass : ""); //NOI18N
231
                        isForbidden(ms.getExpression().toString(), regexps)) {
230
                if (excludePackage != null &&
231
                        excludePackage.isEnabled() &&
232
                        Utilities.isExcluded(exp)) {
232
                    result.add(ErrorDescriptionFactory.createErrorDescription(
233
                    result.add(ErrorDescriptionFactory.createErrorDescription(
233
                            forbidPackage.getSeverity().toEditorSeverity(),
234
                            excludePackage.getSeverity().toEditorSeverity(),
234
                            forbidPackage.getDisplayName(),
235
                            excludePackage.getDisplayName(),
235
                            NO_FIXES,
236
                            NO_FIXES,
236
                            ci.getFileObject(),
237
                            ci.getFileObject(),
237
                            (int) ci.getTrees().getSourcePositions().getStartPosition(ci.getCompilationUnit(), it),
238
                            (int) ci.getTrees().getSourcePositions().getStartPosition(ci.getCompilationUnit(), it),
Lines 316-331 Link Here
316
        return p;
317
        return p;
317
    }
318
    }
318
    
319
    
319
    @Override
320
    public JComponent getCustomizer(Preferences node) {
321
        if ( kind == ImportHintKind.FORBIDDEN ) {
322
            return new ForbiddenImportsCustomizer( node );
323
        }
324
        else {
325
            return super.getCustomizer(node);
326
        }
327
    }
328
329
    public void preferenceChange(PreferenceChangeEvent evt) {
320
    public void preferenceChange(PreferenceChangeEvent evt) {
330
        if ( kind == ImportHintKind.UNUSED ) {
321
        if ( kind == ImportHintKind.UNUSED ) {
331
            RemoveUnusedImportFix.setEnabled(isEnabled());
322
            RemoveUnusedImportFix.setEnabled(isEnabled());
Lines 361-412 Link Here
361
                        ihk );
352
                        ihk );
362
    }
353
    }
363
    
354
    
364
    private String[] getRegexps( Preferences node ) {
365
        
366
        String[] texts = ForbiddenImportsCustomizer.getForbiddenImports(node);
367
        String[] result = new String[texts.length]; 
368
        
369
        for (int i = 0; i < texts.length; i++) {
370
            String t = texts[i];
371
            t = t.replace(".", "\\.");
372
            t = t.replace("**", ";;" );
373
            t = t.replace("*", "[^\\.]*");
374
            t = t.replace(";;", ".*");
375
            result[i] = t;
376
        }
377
378
        return result;
379
    }
380
    
381
    private static boolean isForbidden( String pkg, String regexps[] ) {
382
        
383
        Pattern p;
384
               
385
        for( String rg : regexps ) {
386
            
387
            if ( Pattern.matches(rg, pkg)) {
388
                return true;
389
            }
390
            
391
        }
392
                
393
        return false;
394
    }
395
    
396
    private static enum ImportHintKind {
355
    private static enum ImportHintKind {
397
        DELEGATE,
356
        DELEGATE,
398
        UNUSED,
357
        UNUSED,
399
        DUPLICATE,
358
        DUPLICATE,
400
        SAME_PACKAGE,
359
        SAME_PACKAGE,
401
        DEFAULT_PACKAGE,
360
        DEFAULT_PACKAGE,
402
        FORBIDDEN,
361
		EXCLUDED,
403
        STAR;
362
        STAR;
404
        
363
        
405
        boolean defaultOn() {
364
        boolean defaultOn() {
406
        
365
        
407
            switch( this ) {
366
            switch( this ) {
408
                case DELEGATE:
367
                case DELEGATE:
409
                case FORBIDDEN:
368
				case EXCLUDED:
410
                case SAME_PACKAGE:
369
                case SAME_PACKAGE:
411
                case DEFAULT_PACKAGE:
370
                case DEFAULT_PACKAGE:
412
                case UNUSED:
371
                case UNUSED:
(-)org/netbeans/modules/java/hints/resources/layer.xml (-2 / +2 lines)
Lines 174-181 Link Here
174
                    <file name="ImportsSamePackage.instance">
174
                    <file name="ImportsSamePackage.instance">
175
                        <attr name="instanceCreate" methodvalue="org.netbeans.modules.java.hints.Imports.createSamePackage"/>
175
                        <attr name="instanceCreate" methodvalue="org.netbeans.modules.java.hints.Imports.createSamePackage"/>
176
                    </file>
176
                    </file>
177
                    <file name="ImportsForbidden.instance">
177
					<file name="ImportsExcluded.instance">
178
                        <attr name="instanceCreate" methodvalue="org.netbeans.modules.java.hints.Imports.createForbidden"/>
178
                        <attr name="instanceCreate" methodvalue="org.netbeans.modules.java.hints.Imports.createExcluded"/>
179
                    </file>
179
                    </file>
180
                    <file name="ImportsStar.instance">
180
                    <file name="ImportsStar.instance">
181
                        <attr name="instanceCreate" methodvalue="org.netbeans.modules.java.hints.Imports.createStar"/>
181
                        <attr name="instanceCreate" methodvalue="org.netbeans.modules.java.hints.Imports.createStar"/>

Return to bug 125060