diff -r 37fedec08173 java.editor/src/org/netbeans/modules/editor/java/JavaCompletionProvider.java --- a/java.editor/src/org/netbeans/modules/editor/java/JavaCompletionProvider.java Mon Apr 06 09:07:07 2009 +0200 +++ b/java.editor/src/org/netbeans/modules/editor/java/JavaCompletionProvider.java Mon Apr 06 22:24:04 2009 +0100 @@ -2422,10 +2422,12 @@ (Utilities.isShowDeprecatedMembers() || !elements.isDeprecated(e)) && tu.isAccessible(scope, e, t); case METHOD: - return startsWith(env, e.getSimpleName().toString(), prefix) && - (Utilities.isShowDeprecatedMembers() || !elements.isDeprecated(e)) && - (!isStatic || e.getModifiers().contains(STATIC)) && - tu.isAccessible(scope, e, t); + String sn = e.getSimpleName().toString(); + return startsWith(env, sn, prefix) && + (Utilities.isShowDeprecatedMembers() || !elements.isDeprecated(e)) && + (!isStatic || e.getModifiers().contains(STATIC)) && + tu.isAccessible(scope, e, t) && + !Utilities.isExcluded(Utilities.getElementName(e.getEnclosingElement(), true) + "." + sn); //NOI18N } return false; } @@ -2606,11 +2608,13 @@ isOfKindAndType(asMemberOf(e, t, types), e, kinds, baseType, scope, trees, types) && tu.isAccessible(scope, e, t); case METHOD: - return startsWith(env, e.getSimpleName().toString(), prefix) && + String sn = e.getSimpleName().toString(); + return startsWith(env, sn, prefix) && (Utilities.isShowDeprecatedMembers() || !elements.isDeprecated(e)) && isOfKindAndType(((ExecutableType)asMemberOf(e, t, types)).getReturnType(), e, kinds, baseType, scope, trees, types) && (isSuperCall && e.getModifiers().contains(PROTECTED) || tu.isAccessible(scope, e, isSuperCall && enclType != null ? enclType : t)) && - (!isStatic || e.getModifiers().contains(STATIC)); + (!isStatic || e.getModifiers().contains(STATIC)) && + !Utilities.isExcluded(Utilities.getElementName(e.getEnclosingElement(), true) + "." + sn); //NOI18N case CLASS: case ENUM: case INTERFACE: @@ -2730,7 +2734,7 @@ if (fqnPrefix == null) fqnPrefix = EMPTY; for (String pkgName : env.getController().getClasspathInfo().getClassIndex().getPackageNames(fqnPrefix, true,EnumSet.allOf(ClassIndex.SearchScope.class))) - if (pkgName.length() > 0) + if (pkgName.length() > 0 && !Utilities.isExcluded(pkgName + ".")) //NOI18N results.add(JavaCompletionItem.createPackageItem(pkgName, anchorOffset, inPkgStmt)); } diff -r 37fedec08173 java.editor/src/org/netbeans/modules/editor/java/LazyTypeCompletionItem.java --- a/java.editor/src/org/netbeans/modules/editor/java/LazyTypeCompletionItem.java Mon Apr 06 09:07:07 2009 +0200 +++ b/java.editor/src/org/netbeans/modules/editor/java/LazyTypeCompletionItem.java Mon Apr 06 22:24:04 2009 +0100 @@ -117,7 +117,7 @@ TypeElement e = handle.resolve(controller); Elements elements = controller.getElements(); if (e != null && (Utilities.isShowDeprecatedMembers() || !elements.isDeprecated(e)) && controller.getTrees().isAccessible(scope, e)) { - if (isOfKind(e, kinds) && (!isInDefaultPackage(e) || isInDefaultPackage(scope.getEnclosingClass()))) + if (isOfKind(e, kinds) && (!isInDefaultPackage(e) || isInDefaultPackage(scope.getEnclosingClass())) && !Utilities.isExcluded(e.getQualifiedName())) delegate = JavaCompletionItem.createTypeItem(e, (DeclaredType)e.asType(), substitutionOffset, true, controller.getElements().isDeprecated(e), insideNew, false); } } diff -r 37fedec08173 java.editor/src/org/netbeans/modules/editor/java/Utilities.java --- a/java.editor/src/org/netbeans/modules/editor/java/Utilities.java Mon Apr 06 09:07:07 2009 +0200 +++ b/java.editor/src/org/netbeans/modules/editor/java/Utilities.java Mon Apr 06 22:24:04 2009 +0100 @@ -56,6 +56,7 @@ import com.sun.source.util.Trees; import java.util.*; +import java.util.concurrent.atomic.AtomicReference; import java.util.prefs.PreferenceChangeEvent; import java.util.prefs.PreferenceChangeListener; import java.util.prefs.Preferences; @@ -113,19 +114,27 @@ showDeprecatedMembers = preferences.getBoolean(SimpleValueNames.SHOW_DEPRECATED_MEMBERS, true); } if (settingName == null || CodeCompletionPanel.GUESS_METHOD_ARGUMENTS.equals(settingName)) { - guessMethodArguments = preferences.getBoolean(CodeCompletionPanel.GUESS_METHOD_ARGUMENTS, true); + guessMethodArguments = preferences.getBoolean(CodeCompletionPanel.GUESS_METHOD_ARGUMENTS, CodeCompletionPanel.GUESS_METHOD_ARGUMENTS_DEFAULT); } if (settingName == null || CodeCompletionPanel.JAVA_AUTO_POPUP_ON_IDENTIFIER_PART.equals(settingName)) { - autoPopupOnJavaIdentifierPart = preferences.getBoolean(CodeCompletionPanel.JAVA_AUTO_POPUP_ON_IDENTIFIER_PART, false); + autoPopupOnJavaIdentifierPart = preferences.getBoolean(CodeCompletionPanel.JAVA_AUTO_POPUP_ON_IDENTIFIER_PART, CodeCompletionPanel.JAVA_AUTO_POPUP_ON_IDENTIFIER_PART_DEFAULT); } if (settingName == null || CodeCompletionPanel.JAVA_AUTO_COMPLETION_TRIGGERS.equals(settingName)) { - javaCompletionAutoPopupTriggers = preferences.get(CodeCompletionPanel.JAVA_AUTO_COMPLETION_TRIGGERS, "."); //NOI18N + javaCompletionAutoPopupTriggers = preferences.get(CodeCompletionPanel.JAVA_AUTO_COMPLETION_TRIGGERS, CodeCompletionPanel.JAVA_AUTO_COMPLETION_TRIGGERS_DEFAULT); } if (settingName == null || CodeCompletionPanel.JAVA_COMPLETION_SELECTORS.equals(settingName)) { - javaCompletionSelectors = preferences.get(CodeCompletionPanel.JAVA_COMPLETION_SELECTORS, ".,;:([+-="); //NOI18N + javaCompletionSelectors = preferences.get(CodeCompletionPanel.JAVA_COMPLETION_SELECTORS, CodeCompletionPanel.JAVA_COMPLETION_SELECTORS_DEFAULT); } if (settingName == null || CodeCompletionPanel.JAVADOC_AUTO_COMPLETION_TRIGGERS.equals(settingName)) { - javadocCompletionAutoPopupTriggers = preferences.get(CodeCompletionPanel.JAVADOC_AUTO_COMPLETION_TRIGGERS, ".#@"); //NOI18N + javadocCompletionAutoPopupTriggers = preferences.get(CodeCompletionPanel.JAVADOC_AUTO_COMPLETION_TRIGGERS, CodeCompletionPanel.JAVADOC_AUTO_COMPLETION_TRIGGERS_DEFAULT); + } + if (settingName == null || CodeCompletionPanel.JAVA_COMPLETION_BLACKLIST.equals(settingName)) { + String blacklist = preferences.get(CodeCompletionPanel.JAVA_COMPLETION_BLACKLIST, CodeCompletionPanel.JAVA_COMPLETION_BLACKLIST_DEFAULT); + updateExcluder(exclude, blacklist); + } + if (settingName == null || CodeCompletionPanel.JAVA_COMPLETION_WHITELIST.equals(settingName)) { + String whitelist = preferences.get(CodeCompletionPanel.JAVA_COMPLETION_WHITELIST, CodeCompletionPanel.JAVA_COMPLETION_WHITELIST_DEFAULT); + updateExcluder(include, whitelist); } } }; @@ -215,9 +224,64 @@ return javadocCompletionAutoPopupTriggers; } + static private volatile AtomicReference> exclude; + static private volatile AtomicReference> include; + + private static void updateExcluder(AtomicReference> existing, String updated) { + Collection nue = new LinkedList(); + if (updated == null || updated.length() == 0) { + existing.set(nue); + return; + } + String[] entries = updated.split(","); //NOI18N + for (String entry : entries) { + if (entry != null && entry.length() != 0) { + nue.add(entry); + } + } + existing.set(nue); + } + + /** + * @param fqn Fully Qualified Name (including method names). Packages names are expected to + * end in a trailing "." + * @return + */ + public static boolean isExcluded(final CharSequence fqn) { + if (fqn == null || fqn.length() == 0 || fqn.equals(".")) { //NOI18N + return true; + } + lazyInit(); + String s = fqn.toString(); + if (!include.get().isEmpty()) { + for (String entry : include.get()) { + if (entry.length() > fqn.length()) { + if (entry.startsWith(s)) { + return false; + } + } else if (s.startsWith(entry)) { + return false; + } + } + } + + if (!exclude.get().isEmpty()) { + for (String entry : exclude.get()) { + if (entry.length() <= fqn.length() && s.startsWith(entry)) { + return true; + } + } + } + + return false; + } + private static void lazyInit() { if (!inited) { inited = true; + Collection empty = Collections.emptySet(); + exclude = new AtomicReference>(empty); + include = new AtomicReference>(empty); preferences = MimeLookup.getLookup(JavaKit.JAVA_MIME_TYPE).lookup(Preferences.class); preferences.addPreferenceChangeListener(WeakListeners.create(PreferenceChangeListener.class, preferencesTracker, preferences)); preferencesTracker.preferenceChange(null); diff -r 37fedec08173 java.editor/src/org/netbeans/modules/java/editor/imports/ComputeImports.java --- a/java.editor/src/org/netbeans/modules/java/editor/imports/ComputeImports.java Mon Apr 06 09:07:07 2009 +0200 +++ b/java.editor/src/org/netbeans/modules/java/editor/imports/ComputeImports.java Mon Apr 06 22:24:04 2009 +0100 @@ -72,6 +72,7 @@ import org.netbeans.api.java.source.ClassIndex.NameKind; import org.netbeans.api.java.source.ElementHandle; import org.netbeans.api.java.source.support.CancellableTreePathScanner; +import org.netbeans.modules.editor.java.Utilities; import org.netbeans.modules.java.editor.javadoc.JavadocImports; import org.openide.util.Union2; @@ -146,7 +147,8 @@ } //#122334: do not propose imports from the default package: - if (info.getElements().getPackageOf(te).getQualifiedName().length() != 0) { + if (info.getElements().getPackageOf(te).getQualifiedName().length() != 0 && + !Utilities.isExcluded(te.getQualifiedName())) { classes.add(te); } } diff -r 37fedec08173 java.editor/src/org/netbeans/modules/java/editor/javadoc/JavadocCompletionQuery.java --- a/java.editor/src/org/netbeans/modules/java/editor/javadoc/JavadocCompletionQuery.java Mon Apr 06 09:07:07 2009 +0200 +++ b/java.editor/src/org/netbeans/modules/java/editor/javadoc/JavadocCompletionQuery.java Mon Apr 06 22:24:04 2009 +0100 @@ -603,7 +603,7 @@ } for (String pkgName : jdctx.javac.getClasspathInfo().getClassIndex().getPackageNames(pkgPrefix, true, EnumSet.allOf(ClassIndex.SearchScope.class))) - if (pkgName.length() > 0) + if (pkgName.length() > 0 && !Utilities.isExcluded(pkgName + ".")) items.add(JavaCompletionItem.createPackageItem(pkgName, substitutionOffset, false)); } diff -r 37fedec08173 java.editor/src/org/netbeans/modules/java/editor/options/Bundle.properties --- a/java.editor/src/org/netbeans/modules/java/editor/options/Bundle.properties Mon Apr 06 09:07:07 2009 +0200 +++ b/java.editor/src/org/netbeans/modules/java/editor/options/Bundle.properties Mon Apr 06 22:24:04 2009 +0100 @@ -116,3 +116,18 @@ LBL_JavaCompletionLabel=Java Code Completion LBL_GuessMethodParameters=jCheckBox1 LBL_GuessMethodArgs=&Guess Filled Method Arguments +CodeCompletionPanel.javaCompletionExcluderLabel.text=Packages/classes: +CodeCompletionPanel.javaCompletionExcludeTable.columnModel.title3=Title 4 +CodeCompletionPanel.javaCompletionExcludeTable.columnModel.title2=Title 3 +CodeCompletionPanel.javaCompletionExcludeTable.columnModel.title1=Title 2 +CodeCompletionPanel.javaCompletionExcluderButton.text=Exclude +CodeCompletionPanel.javaCompletionExcludeTable.columnModel.title3_1=Title 4 +CodeCompletionPanel.javaCompletionExcludeTable.columnModel.title2_1=Title 3 +CodeCompletionPanel.javaCompletionExcludeTable.columnModel.title1_1=Title 2 +CodeCompletionPanel.javaCompletionExcludeScrollPane.TabConstraints.tabTitle=Exclude +CodeCompletionPanel.javaCompletionExcludeTable.columnModel.title0=Fully Qualified Name prefix +CodeCompletionPanel.javaCompletionExcluderAddButton.text=Add +CodeCompletionPanel.javaCompletionIncludeScrollPane.TabConstraints.tabTitle=Include +CodeCompletionPanel.javaCompletionExcluderRemoveButton.text=Remove +CodeCompletionPanel.javaCompletionExcluderFrame.title=Java Completion Excluder +CodeCompletionPanel.javaCompletionExcluderCloseButton.text=Close diff -r 37fedec08173 java.editor/src/org/netbeans/modules/java/editor/options/CodeCompletionPanel.form --- a/java.editor/src/org/netbeans/modules/java/editor/options/CodeCompletionPanel.form Mon Apr 06 09:07:07 2009 +0200 +++ b/java.editor/src/org/netbeans/modules/java/editor/options/CodeCompletionPanel.form Mon Apr 06 22:24:04 2009 +0100 @@ -1,6 +1,179 @@ -
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + <ResourceString bundle="org/netbeans/modules/java/editor/options/Bundle.properties" key="CodeCompletionPanel.javaCompletionExcludeTable.columnModel.title0" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> + + + + + + + + + +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + <ResourceString bundle="org/netbeans/modules/java/editor/options/Bundle.properties" key="CodeCompletionPanel.javaCompletionExcludeTable.columnModel.title0" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> + + + + + + + + + +
+
+
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
@@ -23,133 +196,190 @@ - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff -r 37fedec08173 java.editor/src/org/netbeans/modules/java/editor/options/CodeCompletionPanel.java --- a/java.editor/src/org/netbeans/modules/java/editor/options/CodeCompletionPanel.java Mon Apr 06 09:07:07 2009 +0200 +++ b/java.editor/src/org/netbeans/modules/java/editor/options/CodeCompletionPanel.java Mon Apr 06 22:24:04 2009 +0100 @@ -38,13 +38,21 @@ * Version 2 license, then the option applies only if the new code is * made subject to such option by the copyright holder. */ - package org.netbeans.modules.java.editor.options; +import java.awt.Component; +import java.util.Arrays; +import java.util.Collection; +import java.util.TreeSet; +import java.util.Vector; import java.util.prefs.Preferences; import javax.swing.JComponent; +import javax.swing.JTable; import javax.swing.event.DocumentEvent; import javax.swing.event.DocumentListener; +import javax.swing.event.TableModelEvent; +import javax.swing.event.TableModelListener; +import javax.swing.table.DefaultTableModel; import org.netbeans.modules.options.editor.spi.PreferencesCustomizer; import org.openide.util.HelpCtx; @@ -52,25 +60,49 @@ * * @author Dusan Balek */ -public class CodeCompletionPanel extends javax.swing.JPanel implements DocumentListener { +public class CodeCompletionPanel extends javax.swing.JPanel implements DocumentListener, TableModelListener { public static final String JAVA_AUTO_POPUP_ON_IDENTIFIER_PART = "javaAutoPopupOnIdentifierPart"; //NOI18N + public static final boolean JAVA_AUTO_POPUP_ON_IDENTIFIER_PART_DEFAULT = false; public static final String JAVA_AUTO_COMPLETION_TRIGGERS = "javaAutoCompletionTriggers"; //NOI18N + public static final String JAVA_AUTO_COMPLETION_TRIGGERS_DEFAULT = "."; //NOI18N public static final String JAVA_COMPLETION_SELECTORS = "javaCompletionSelectors"; //NOI18N + public static final String JAVA_COMPLETION_SELECTORS_DEFAULT = ".,;:([+-="; //NOI18N public static final String JAVADOC_AUTO_COMPLETION_TRIGGERS = "javadocAutoCompletionTriggers"; //NOI18N + public static final String JAVADOC_AUTO_COMPLETION_TRIGGERS_DEFAULT = ".#@"; //NOI18N public static final String GUESS_METHOD_ARGUMENTS = "guessMethodArguments"; //NOI18N + public static final boolean GUESS_METHOD_ARGUMENTS_DEFAULT = true; + public static final String JAVA_COMPLETION_WHITELIST = "javaCompletionWhitelist"; //NOI18N + public static final String JAVA_COMPLETION_WHITELIST_DEFAULT = ""; //NOI18N + public static final String JAVA_COMPLETION_BLACKLIST = "javaCompletionBlacklist"; //NOI18N + public static final String JAVA_COMPLETION_BLACKLIST_DEFAULT = ""; //NOI18N - private Preferences preferences; + private final Preferences preferences; + + private void initExcluderTable(JTable table, String pref) { + String[] entries = pref.split(","); //NOI18N + DefaultTableModel model = (DefaultTableModel) table.getModel(); + for (String entry : entries) { + if (entry.length() > 0) { + model.addRow(new String[]{entry}); + } + } + model.addTableModelListener(this); + } /** Creates new form FmtTabsIndents */ public CodeCompletionPanel(Preferences p) { initComponents(); preferences = p; - guessMethodArguments.setSelected(preferences.getBoolean(GUESS_METHOD_ARGUMENTS, true)); - javaAutoPopupOnIdentifierPart.setSelected(preferences.getBoolean(JAVA_AUTO_POPUP_ON_IDENTIFIER_PART, false)); - javaAutoCompletionTriggersField.setText(preferences.get(JAVA_AUTO_COMPLETION_TRIGGERS, ".")); //NOI18N - javaCompletionSelectorsField.setText(preferences.get(JAVA_COMPLETION_SELECTORS, ".,;:([+-=")); //NOI18N - javadocAutoCompletionTriggersField.setText(preferences.get(JAVADOC_AUTO_COMPLETION_TRIGGERS, ".#@")); //NOI18N + guessMethodArguments.setSelected(preferences.getBoolean(GUESS_METHOD_ARGUMENTS, GUESS_METHOD_ARGUMENTS_DEFAULT)); + javaAutoPopupOnIdentifierPart.setSelected(preferences.getBoolean(JAVA_AUTO_POPUP_ON_IDENTIFIER_PART, JAVA_AUTO_POPUP_ON_IDENTIFIER_PART_DEFAULT)); + javaAutoCompletionTriggersField.setText(preferences.get(JAVA_AUTO_COMPLETION_TRIGGERS, JAVA_AUTO_COMPLETION_TRIGGERS_DEFAULT)); + javaCompletionSelectorsField.setText(preferences.get(JAVA_COMPLETION_SELECTORS, JAVA_COMPLETION_SELECTORS_DEFAULT)); + javadocAutoCompletionTriggersField.setText(preferences.get(JAVADOC_AUTO_COMPLETION_TRIGGERS, JAVADOC_AUTO_COMPLETION_TRIGGERS_DEFAULT)); + String blacklist = preferences.get(JAVA_COMPLETION_BLACKLIST, JAVA_COMPLETION_BLACKLIST_DEFAULT); + initExcluderTable(javaCompletionExcludeTable, blacklist); + String whitelist = preferences.get(JAVA_COMPLETION_WHITELIST, JAVA_COMPLETION_WHITELIST_DEFAULT); + initExcluderTable(javaCompletionIncludeTable, whitelist); javaAutoCompletionTriggersField.getDocument().addDocumentListener(this); javaCompletionSelectorsField.getDocument().addDocumentListener(this); javadocAutoCompletionTriggersField.getDocument().addDocumentListener(this); @@ -97,6 +129,60 @@ update(e); } + // allows common excluder buttons to know which table to act on + private JTable getSelectedExcluderTable() { + Component selected = javaCompletionExcluderTab.getSelectedComponent(); + if (selected == javaCompletionExcludeScrollPane) { + return javaCompletionExcludeTable; + } else if (selected == javaCompletionIncludeScrollPane) { + return javaCompletionIncludeTable; + } else { + throw new RuntimeException(selected.getName()); + } + } + + // listen to changes in the excluder lists, and do sanity checking on input + public void tableChanged(TableModelEvent e) { + DefaultTableModel model = (DefaultTableModel) e.getSource(); + String pref; + if (model == javaCompletionExcludeTable.getModel()) { + pref = JAVA_COMPLETION_BLACKLIST; + } else if (model == javaCompletionIncludeTable.getModel()) { + pref = JAVA_COMPLETION_WHITELIST; + } else { + throw new RuntimeException(); + } + @SuppressWarnings("unchecked") + Vector> data = model.getDataVector(); + Collection entries = new TreeSet(); + for (Vector row : data) { + String entry = row.elementAt(0); + if (entry == null) { + continue; + } + // users can enter wildcards, which is the same as the raw prefix + if (entry.contains("*")) + entry = entry.replaceAll("\\*", ""); + entry = entry.trim(); + if (entry.length() == 0) { + continue; + } + // this could be checked by a custom editor on input + if (!entry.matches("[$\\w._]*")) { //NOI18N + continue; + } + entries.add(entry); + } + StringBuilder builder = new StringBuilder(); + for (String entry : entries) { + if (builder.length() > 0) { + builder.append(","); //NOI18N + } + builder.append(entry); + } + preferences.put(pref, builder.toString()); + } + /** This method is called from within the constructor to * initialize the form. * WARNING: Do NOT modify this code. The content of this method is @@ -105,6 +191,16 @@ // //GEN-BEGIN:initComponents private void initComponents() { + javaCompletionExcluderFrame = new javax.swing.JFrame(); + javaCompletionExcluderTab = new javax.swing.JTabbedPane(); + javaCompletionExcludeScrollPane = new javax.swing.JScrollPane(); + javaCompletionExcludeTable = new javax.swing.JTable(); + javaCompletionIncludeScrollPane = new javax.swing.JScrollPane(); + javaCompletionIncludeTable = new javax.swing.JTable(); + javaCompletionExcluderAddButton = new javax.swing.JButton(); + javaCompletionExcluderRemoveButton = new javax.swing.JButton(); + javaCompletionExcluderCloseButton = new javax.swing.JButton(); + javaCompletionPane = new javax.swing.JPanel(); guessMethodArguments = new javax.swing.JCheckBox(); javaAutoPopupOnIdentifierPart = new javax.swing.JCheckBox(); javaAutoCompletionTriggersLabel = new javax.swing.JLabel(); @@ -114,11 +210,113 @@ javadocAutoCompletionTriggersLabel = new javax.swing.JLabel(); javadocAutoCompletionTriggersField = new javax.swing.JTextField(); jSeparator1 = new javax.swing.JSeparator(); + javaCompletionExcluderLabel = new javax.swing.JLabel(); + javaCompletionExcluderButton = new javax.swing.JButton(); + + javaCompletionExcluderFrame.setTitle(org.openide.util.NbBundle.getMessage(CodeCompletionPanel.class, "CodeCompletionPanel.javaCompletionExcluderFrame.title")); // NOI18N + javaCompletionExcluderFrame.setAlwaysOnTop(true); + javaCompletionExcluderFrame.setMinimumSize(new java.awt.Dimension(409, 233)); + javaCompletionExcluderFrame.setUndecorated(true); + + javaCompletionExcludeTable.setModel(new javax.swing.table.DefaultTableModel( + new Object [][] { + + }, + new String [] { + "Fully Qualified Name prefix" + } + ) { + Class[] types = new Class [] { + java.lang.String.class + }; + + public Class getColumnClass(int columnIndex) { + return types [columnIndex]; + } + }); + javaCompletionExcludeTable.getTableHeader().setReorderingAllowed(false); + javaCompletionExcludeScrollPane.setViewportView(javaCompletionExcludeTable); + javaCompletionExcludeTable.getColumnModel().getColumn(0).setHeaderValue(org.openide.util.NbBundle.getMessage(CodeCompletionPanel.class, "CodeCompletionPanel.javaCompletionExcludeTable.columnModel.title0")); // NOI18N + + javaCompletionExcluderTab.addTab(org.openide.util.NbBundle.getMessage(CodeCompletionPanel.class, "CodeCompletionPanel.javaCompletionExcludeScrollPane.TabConstraints.tabTitle"), javaCompletionExcludeScrollPane); // NOI18N + + javaCompletionIncludeTable.setModel(new javax.swing.table.DefaultTableModel( + new Object [][] { + + }, + new String [] { + "Fully Qualified Name prefix" + } + ) { + Class[] types = new Class [] { + java.lang.String.class + }; + + public Class getColumnClass(int columnIndex) { + return types [columnIndex]; + } + }); + javaCompletionIncludeTable.getTableHeader().setReorderingAllowed(false); + javaCompletionIncludeScrollPane.setViewportView(javaCompletionIncludeTable); + javaCompletionIncludeTable.getColumnModel().getColumn(0).setHeaderValue(org.openide.util.NbBundle.getMessage(CodeCompletionPanel.class, "CodeCompletionPanel.javaCompletionExcludeTable.columnModel.title0")); // NOI18N + + javaCompletionExcluderTab.addTab(org.openide.util.NbBundle.getMessage(CodeCompletionPanel.class, "CodeCompletionPanel.javaCompletionIncludeScrollPane.TabConstraints.tabTitle"), javaCompletionIncludeScrollPane); // NOI18N + + org.openide.awt.Mnemonics.setLocalizedText(javaCompletionExcluderAddButton, org.openide.util.NbBundle.getMessage(CodeCompletionPanel.class, "CodeCompletionPanel.javaCompletionExcluderAddButton.text")); // NOI18N + javaCompletionExcluderAddButton.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + javaCompletionExcluderAddButtonActionPerformed(evt); + } + }); + + org.openide.awt.Mnemonics.setLocalizedText(javaCompletionExcluderRemoveButton, org.openide.util.NbBundle.getMessage(CodeCompletionPanel.class, "CodeCompletionPanel.javaCompletionExcluderRemoveButton.text")); // NOI18N + javaCompletionExcluderRemoveButton.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + javaCompletionExcluderRemoveButtonActionPerformed(evt); + } + }); + + org.openide.awt.Mnemonics.setLocalizedText(javaCompletionExcluderCloseButton, org.openide.util.NbBundle.getMessage(CodeCompletionPanel.class, "CodeCompletionPanel.javaCompletionExcluderCloseButton.text")); // NOI18N + javaCompletionExcluderCloseButton.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + javaCompletionExcluderCloseButtonActionPerformed(evt); + } + }); + + org.jdesktop.layout.GroupLayout javaCompletionExcluderFrameLayout = new org.jdesktop.layout.GroupLayout(javaCompletionExcluderFrame.getContentPane()); + javaCompletionExcluderFrame.getContentPane().setLayout(javaCompletionExcluderFrameLayout); + javaCompletionExcluderFrameLayout.setHorizontalGroup( + javaCompletionExcluderFrameLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) + .add(org.jdesktop.layout.GroupLayout.TRAILING, javaCompletionExcluderFrameLayout.createSequentialGroup() + .addContainerGap() + .add(javaCompletionExcluderTab, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 298, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE) + .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED) + .add(javaCompletionExcluderFrameLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING, false) + .add(javaCompletionExcluderCloseButton, 0, 0, Short.MAX_VALUE) + .add(javaCompletionExcluderRemoveButton, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .add(javaCompletionExcluderAddButton, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) + .addContainerGap(10, Short.MAX_VALUE)) + ); + javaCompletionExcluderFrameLayout.setVerticalGroup( + javaCompletionExcluderFrameLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) + .add(javaCompletionExcluderFrameLayout.createSequentialGroup() + .add(javaCompletionExcluderFrameLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) + .add(javaCompletionExcluderFrameLayout.createSequentialGroup() + .addContainerGap() + .add(javaCompletionExcluderTab, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 221, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)) + .add(javaCompletionExcluderFrameLayout.createSequentialGroup() + .add(59, 59, 59) + .add(javaCompletionExcluderAddButton) + .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED) + .add(javaCompletionExcluderRemoveButton) + .add(63, 63, 63) + .add(javaCompletionExcluderCloseButton))) + .addContainerGap(org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) + ); setBorder(javax.swing.BorderFactory.createEmptyBorder(0, 0, 0, 0)); org.openide.awt.Mnemonics.setLocalizedText(guessMethodArguments, org.openide.util.NbBundle.getMessage(CodeCompletionPanel.class, "LBL_GuessMethodArgs")); // NOI18N - guessMethodArguments.setBorder(null); guessMethodArguments.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { guessMethodArgumentsActionPerformed(evt); @@ -126,7 +324,6 @@ }); org.openide.awt.Mnemonics.setLocalizedText(javaAutoPopupOnIdentifierPart, org.openide.util.NbBundle.getMessage(CodeCompletionPanel.class, "LBL_AutoPopupOnIdentifierPartBox")); // NOI18N - javaAutoPopupOnIdentifierPart.setBorder(null); javaAutoPopupOnIdentifierPart.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { javaAutoPopupOnIdentifierPartActionPerformed(evt); @@ -146,52 +343,91 @@ javadocAutoCompletionTriggersField.setText(org.openide.util.NbBundle.getMessage(CodeCompletionPanel.class, "CodeCompletionPanel.javadocAutoCompletionTriggersField.text")); // NOI18N - org.jdesktop.layout.GroupLayout layout = new org.jdesktop.layout.GroupLayout(this); - this.setLayout(layout); - layout.setHorizontalGroup( - layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) - .add(layout.createSequentialGroup() + org.openide.awt.Mnemonics.setLocalizedText(javaCompletionExcluderLabel, org.openide.util.NbBundle.getMessage(CodeCompletionPanel.class, "CodeCompletionPanel.javaCompletionExcluderLabel.text")); // NOI18N + + org.openide.awt.Mnemonics.setLocalizedText(javaCompletionExcluderButton, org.openide.util.NbBundle.getMessage(CodeCompletionPanel.class, "CodeCompletionPanel.javaCompletionExcluderButton.text")); // NOI18N + javaCompletionExcluderButton.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + javaCompletionExcluderButtonActionPerformed(evt); + } + }); + + org.jdesktop.layout.GroupLayout javaCompletionPaneLayout = new org.jdesktop.layout.GroupLayout(javaCompletionPane); + javaCompletionPane.setLayout(javaCompletionPaneLayout); + javaCompletionPaneLayout.setHorizontalGroup( + javaCompletionPaneLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) + .add(javaCompletionPaneLayout.createSequentialGroup() .addContainerGap() - .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) - .add(jSeparator1, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, 362, Short.MAX_VALUE) + .add(javaCompletionPaneLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) + .add(jSeparator1, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, 337, Short.MAX_VALUE) + .add(javaCompletionPaneLayout.createSequentialGroup() + .add(javadocAutoCompletionTriggersLabel) + .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED) + .add(javadocAutoCompletionTriggersField, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 86, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE))) + .addContainerGap()) + .add(javaCompletionPaneLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) + .add(javaCompletionPaneLayout.createSequentialGroup() + .addContainerGap() + .add(javaCompletionPaneLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) .add(guessMethodArguments) - .add(layout.createSequentialGroup() + .add(javaCompletionPaneLayout.createSequentialGroup() .add(javaAutoCompletionTriggersLabel) .add(34, 34, 34) .add(javaAutoCompletionTriggersField, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 86, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)) .add(javaAutoPopupOnIdentifierPart) - .add(layout.createSequentialGroup() - .add(javaCompletionSelectorsLabel) + .add(javaCompletionPaneLayout.createSequentialGroup() + .add(javaCompletionPaneLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.TRAILING) + .add(javaCompletionExcluderLabel) + .add(javaCompletionSelectorsLabel)) + .add(javaCompletionPaneLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) + .add(javaCompletionPaneLayout.createSequentialGroup() .add(30, 30, 30) .add(javaCompletionSelectorsField, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 86, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)) - .add(layout.createSequentialGroup() - .add(javadocAutoCompletionTriggersLabel) - .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED) - .add(javadocAutoCompletionTriggersField, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 86, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE))) - .addContainerGap()) + .add(org.jdesktop.layout.GroupLayout.TRAILING, javaCompletionPaneLayout.createSequentialGroup() + .add(23, 23, 23) + .add(javaCompletionExcluderButton, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 93, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE))))) + .addContainerGap(25, Short.MAX_VALUE))) ); - layout.setVerticalGroup( - layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) - .add(layout.createSequentialGroup() + javaCompletionPaneLayout.setVerticalGroup( + javaCompletionPaneLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) + .add(javaCompletionPaneLayout.createSequentialGroup() + .add(171, 171, 171) + .add(jSeparator1, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE) + .add(18, 18, 18) + .add(javaCompletionPaneLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE) + .add(javadocAutoCompletionTriggersLabel) + .add(javadocAutoCompletionTriggersField, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)) + .addContainerGap(23, Short.MAX_VALUE)) + .add(javaCompletionPaneLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) + .add(javaCompletionPaneLayout.createSequentialGroup() .addContainerGap() - .add(guessMethodArguments) + .add(guessMethodArguments, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 23, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE) .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED) - .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE) + .add(javaCompletionPaneLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE) .add(javaAutoCompletionTriggersLabel) .add(javaAutoCompletionTriggersField, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)) .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED) .add(javaAutoPopupOnIdentifierPart) .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED) - .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE) + .add(javaCompletionPaneLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE) .add(javaCompletionSelectorsLabel) .add(javaCompletionSelectorsField, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)) - .add(18, 18, 18) - .add(jSeparator1, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE) - .add(18, 18, 18) - .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE) - .add(javadocAutoCompletionTriggersLabel) - .add(javadocAutoCompletionTriggersField, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)) - .addContainerGap(30, Short.MAX_VALUE)) + .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED) + .add(javaCompletionPaneLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE) + .add(javaCompletionExcluderButton) + .add(javaCompletionExcluderLabel)) + .addContainerGap(91, Short.MAX_VALUE))) + ); + + org.jdesktop.layout.GroupLayout layout = new org.jdesktop.layout.GroupLayout(this); + this.setLayout(layout); + layout.setHorizontalGroup( + layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) + .add(javaCompletionPane, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + ); + layout.setVerticalGroup( + layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) + .add(javaCompletionPane, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) ); }// //GEN-END:initComponents @@ -202,6 +438,40 @@ private void guessMethodArgumentsActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_guessMethodArgumentsActionPerformed preferences.putBoolean(GUESS_METHOD_ARGUMENTS, guessMethodArguments.isSelected()); }//GEN-LAST:event_guessMethodArgumentsActionPerformed + + private void javaCompletionExcluderButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_javaCompletionExcluderButtonActionPerformed + if (javaCompletionExcluderFrame.isVisible()) + return; + javaCompletionExcluderFrame.pack(); + javaCompletionExcluderFrame.setLocationRelativeTo(this); + javaCompletionExcluderFrame.setVisible(true); +}//GEN-LAST:event_javaCompletionExcluderButtonActionPerformed + + private void javaCompletionExcluderAddButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_javaCompletionExcluderAddButtonActionPerformed + JTable table = getSelectedExcluderTable(); + DefaultTableModel model = (DefaultTableModel) table.getModel(); + int rows = model.getRowCount(); + model.setRowCount(rows + 1); + table.editCellAt(rows, 0); + table.requestFocus(); +}//GEN-LAST:event_javaCompletionExcluderAddButtonActionPerformed + + private void javaCompletionExcluderRemoveButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_javaCompletionExcluderRemoveButtonActionPerformed + JTable table = getSelectedExcluderTable(); + int[] rows = table.getSelectedRows(); + if (rows.length == 0) + return; + // remove rows in descending order: row numbers change when a row is removed + Arrays.sort(rows); + DefaultTableModel model = (DefaultTableModel) table.getModel(); + for (int row = rows.length - 1; row >= 0; row--) { + model.removeRow(rows[row]); + } +}//GEN-LAST:event_javaCompletionExcluderRemoveButtonActionPerformed + + private void javaCompletionExcluderCloseButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_javaCompletionExcluderCloseButtonActionPerformed + javaCompletionExcluderFrame.setVisible(false); + }//GEN-LAST:event_javaCompletionExcluderCloseButtonActionPerformed private void update(DocumentEvent e) { if (e.getDocument() == javaAutoCompletionTriggersField.getDocument()) @@ -218,6 +488,18 @@ private javax.swing.JTextField javaAutoCompletionTriggersField; private javax.swing.JLabel javaAutoCompletionTriggersLabel; private javax.swing.JCheckBox javaAutoPopupOnIdentifierPart; + private javax.swing.JScrollPane javaCompletionExcludeScrollPane; + private javax.swing.JTable javaCompletionExcludeTable; + private javax.swing.JButton javaCompletionExcluderAddButton; + private javax.swing.JButton javaCompletionExcluderButton; + private javax.swing.JButton javaCompletionExcluderCloseButton; + private javax.swing.JFrame javaCompletionExcluderFrame; + private javax.swing.JLabel javaCompletionExcluderLabel; + private javax.swing.JButton javaCompletionExcluderRemoveButton; + private javax.swing.JTabbedPane javaCompletionExcluderTab; + private javax.swing.JScrollPane javaCompletionIncludeScrollPane; + private javax.swing.JTable javaCompletionIncludeTable; + private javax.swing.JPanel javaCompletionPane; private javax.swing.JTextField javaCompletionSelectorsField; private javax.swing.JLabel javaCompletionSelectorsLabel; private javax.swing.JTextField javadocAutoCompletionTriggersField; @@ -226,7 +508,7 @@ private static class CodeCompletionPreferencesCusromizer implements PreferencesCustomizer { - private Preferences preferences; + private final Preferences preferences; private CodeCompletionPreferencesCusromizer(Preferences p) { preferences = p;