/******************************************************************************* * Copyright (c) 2007, 2014 IBM Corporation and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * IBM Corporation - initial API and implementation *******************************************************************************/ package org.eclipse.jdt.internal.ui.search; import org.eclipse.jdt.core.search.IJavaSearchConstants; import org.eclipse.jdt.ui.JavaElementLabels; import java.util.ArrayList; public class MatchLocations { // public static class MatchLocationSelectionDialog extends TrayDialog { // // private final ArrayList<Button> fButtons; // private final int fSearchFor; // private int fCurrentSelection; // // public MatchLocationSelectionDialog(Shell parent, int initialSelection, int searchFor) { // super(parent); // fSearchFor= searchFor; // fButtons= new ArrayList<Button>(); // fCurrentSelection= initialSelection; // } // // /* (non-Javadoc) // * @see org.eclipse.jface.window.Window#configureShell(org.eclipse.swt.widgets.Shell) // */ // @Override // protected void configureShell(Shell shell) { // super.configureShell(shell); // shell.setText(SearchMessages.MatchLocations_dialog_title); // } // // /* (non-Javadoc) // * @see org.eclipse.jface.dialogs.Dialog#isResizable() // */ // @Override // protected boolean isResizable() { // return true; // } // // /* (non-Javadoc) // * @see org.eclipse.jface.dialogs.Dialog#createDialogArea(org.eclipse.swt.widgets.Composite) // */ // @Override // protected Control createDialogArea(Composite parent) { // Composite contents= (Composite) super.createDialogArea(parent); // GridLayout layout= (GridLayout) contents.getLayout(); // layout.numColumns= 2; // layout.makeColumnsEqualWidth= true; // // Label label= new Label(contents, SWT.NONE); // label.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, false, false, 2, 1)); // label.setText(SearchMessages.MatchLocations_dialog_description); // // if (fSearchFor == IJavaSearchConstants.TYPE) { // createTypeMatchLocationsControls(contents); // } else { // createMethodFieldMatchLocationsControls(contents); // } // // Composite buttonComposite= new Composite(contents, SWT.NONE); // buttonComposite.setLayoutData(new GridData(SWT.LEFT, SWT.BEGINNING, true, true, 2, 1)); // GridLayout blayout= new GridLayout(2, false); // blayout.marginWidth= 0; // blayout.marginHeight= 0; // buttonComposite.setLayout(blayout); // // Button selectAllButton= new Button(buttonComposite, SWT.PUSH); // selectAllButton.setLayoutData(new GridData()); // selectAllButton.setText(SearchMessages.MatchLocations_select_all_button_label); // selectAllButton.addSelectionListener(new SelectionAdapter() { // @Override // public void widgetDefaultSelected(SelectionEvent e) { // performSelectAction(true); // } // @Override // public void widgetSelected(SelectionEvent e) { // performSelectAction(true); // } // }); // // SWTUtil.setButtonDimensionHint(selectAllButton); // // Button deselectAllButton= new Button(buttonComposite, SWT.PUSH); // deselectAllButton.setLayoutData(new GridData()); // deselectAllButton.setText(SearchMessages.MatchLocations_deselect_all_button_label); // deselectAllButton.addSelectionListener(new SelectionAdapter() { // @Override // public void widgetDefaultSelected(SelectionEvent e) { // performSelectAction(false); // } // @Override // public void widgetSelected(SelectionEvent e) { // performSelectAction(false); // } // }); // SWTUtil.setButtonDimensionHint(deselectAllButton); // // Dialog.applyDialogFont(contents); // // return contents; // } // // private void createMethodFieldMatchLocationsControls(Composite contents) { // // Composite composite= new Composite(contents, SWT.NONE); // GridData gd= new GridData(SWT.LEFT, SWT.BEGINNING, true, true, 2, 1); // gd.minimumWidth= convertHorizontalDLUsToPixels(200); // composite.setLayoutData(gd); // GridLayout blayout= new GridLayout(1, false); // blayout.marginWidth= 0; // blayout.marginHeight= 0; // composite.setLayout(blayout); // // if (fSearchFor == IJavaSearchConstants.METHOD || fSearchFor == IJavaSearchConstants.FIELD) { // createButton(composite, SearchMessages.MatchLocations_this_label, IJavaSearchConstants.THIS_REFERENCE); // createButton(composite, SearchMessages.MatchLocations_implicit_this_label, IJavaSearchConstants.IMPLICIT_THIS_REFERENCE); // // createButton(composite, SearchMessages.MatchLocations_super_label, IJavaSearchConstants.SUPER_REFERENCE); // createButton(composite, SearchMessages.MatchLocations_qualified_label, IJavaSearchConstants.QUALIFIED_REFERENCE); // } // // if (fSearchFor == IJavaSearchConstants.METHOD || fSearchFor == IJavaSearchConstants.CONSTRUCTOR) { // createButton(composite, SearchMessages.MatchLocations_method_reference_label, IJavaSearchConstants.METHOD_REFERENCE_EXPRESSION); // } // } // // private void createTypeMatchLocationsControls(Composite contents) { // Group group= new Group(contents, SWT.NONE); // group.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false, 1, 2)); // group.setLayout(new GridLayout(1, false)); // group.setText(SearchMessages.MatchLocations_declaration_group_label); // // createButton(group, SearchMessages.MatchLocations_imports_label, IJavaSearchConstants.IMPORT_DECLARATION_TYPE_REFERENCE); // createButton(group, SearchMessages.MatchLocations_super_types_label, IJavaSearchConstants.SUPERTYPE_TYPE_REFERENCE); // addSeparator(group); // // createButton(group, SearchMessages.MatchLocations_annotations_label , IJavaSearchConstants.ANNOTATION_TYPE_REFERENCE); // addSeparator(group); // // createButton(group, SearchMessages.MatchLocations_field_types_label, IJavaSearchConstants.FIELD_DECLARATION_TYPE_REFERENCE); // createButton(group, SearchMessages.MatchLocations_local_types_label, IJavaSearchConstants.LOCAL_VARIABLE_DECLARATION_TYPE_REFERENCE); // addSeparator(group); // // createButton(group, SearchMessages.MatchLocations_method_types_label, IJavaSearchConstants.RETURN_TYPE_REFERENCE); // createButton(group, SearchMessages.MatchLocations_parameter_types_label, IJavaSearchConstants.PARAMETER_DECLARATION_TYPE_REFERENCE); // createButton(group, SearchMessages.MatchLocations_thrown_exceptions_label, IJavaSearchConstants.THROWS_CLAUSE_TYPE_REFERENCE); // // Group ptGroup= new Group(contents, SWT.NONE); // ptGroup.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false, 1, 1)); // ptGroup.setLayout(new GridLayout(1, false)); // ptGroup.setText(SearchMessages.MatchLocations_in_parameterized_types_group_label); // // createButton(ptGroup, SearchMessages.MatchLocations_type_parameter_bounds_label, IJavaSearchConstants.TYPE_VARIABLE_BOUND_TYPE_REFERENCE); // createButton(ptGroup, SearchMessages.MatchLocations_wildcard_bounds_label, IJavaSearchConstants.WILDCARD_BOUND_TYPE_REFERENCE); // // createButton(ptGroup, SearchMessages.MatchLocations_type_arguments_label, IJavaSearchConstants.TYPE_ARGUMENT_TYPE_REFERENCE); // // Group statementGroup= new Group(contents, SWT.NONE); // statementGroup.setLayoutData(new GridData(SWT.FILL, SWT.END, true, false)); // statementGroup.setLayout(new GridLayout(1, false)); // statementGroup.setText(SearchMessages.MatchLocations_expression_group_label); // // createButton(statementGroup, SearchMessages.MatchLocations_casts_label, IJavaSearchConstants.CAST_TYPE_REFERENCE); // createButton(statementGroup, SearchMessages.MatchLocations_catch_clauses_label, IJavaSearchConstants.CATCH_TYPE_REFERENCE); // addSeparator(statementGroup); // createButton(statementGroup, SearchMessages.MatchLocations_class_instance_label, IJavaSearchConstants.CLASS_INSTANCE_CREATION_TYPE_REFERENCE); // createButton(statementGroup, SearchMessages.MatchLocations_instanceof_label, IJavaSearchConstants.INSTANCEOF_TYPE_REFERENCE); // } // // protected final void performSelectAction(boolean selectAll) { // for (int i= 0; i < fButtons.size(); i++) { // Button button= fButtons.get(i); // button.setSelection(selectAll); // } // validateSettings(); // } // // private void addSeparator(Composite parent) { // Label label= new Label(parent, SWT.NONE); // GridData data= new GridData(); // data.heightHint= 4; // label.setLayoutData(data); // } // // // private Button createButton(Composite parent, String text, int data) { // boolean isSelected= (fCurrentSelection & data) != 0; // // Button button= new Button(parent, SWT.CHECK); // button.setText(text); // button.setData(new Integer(data)); // button.setLayoutData(new GridData()); // button.setSelection(isSelected); // button.addSelectionListener(new SelectionAdapter() { // @Override // public void widgetDefaultSelected(SelectionEvent e) { // performOptionChanged(); // } // @Override // public void widgetSelected(SelectionEvent e) { // widgetDefaultSelected(e); // } // }); // // // fButtons.add(button); // // return button; // } // // private int getIntValue(Button button) { // Integer bData= (Integer) button.getData(); // if (bData != null) { // return bData.intValue(); // } // return 0; // } // // protected final void performOptionChanged() { // validateSettings(); // } // // private void validateSettings() { // int selected= 0; // for (int i= 0; i < fButtons.size(); i++) { // Button button= fButtons.get(i); // if (button.getSelection()) { // selected |= getIntValue(button); // } // } // fCurrentSelection= selected; // // getButton(IDialogConstants.OK_ID).setEnabled(selected != 0); // } // // public int getCurrentSelection() { // return fCurrentSelection; // } // } public static String getMatchLocationDescription(int locations, int entryLimit) { int nOptions = getNumberOfSelectedSettings(locations, entryLimit); if (nOptions > entryLimit) { return SearchMessages.MatchLocations_match_locations_description; } ArrayList<String> args = new ArrayList<String>(3); if (isSet(locations, IJavaSearchConstants.IMPORT_DECLARATION_TYPE_REFERENCE)) { args.add(SearchMessages.MatchLocations_imports_description); } if (isSet(locations, IJavaSearchConstants.SUPERTYPE_TYPE_REFERENCE)) { args.add(SearchMessages.MatchLocations_super_types_description); } if (isSet(locations, IJavaSearchConstants.ANNOTATION_TYPE_REFERENCE)) { args.add(SearchMessages.MatchLocations_annotations_description); } if (isSet(locations, IJavaSearchConstants.FIELD_DECLARATION_TYPE_REFERENCE)) { args.add(SearchMessages.MatchLocations_field_types_description); } if (isSet(locations, IJavaSearchConstants.LOCAL_VARIABLE_DECLARATION_TYPE_REFERENCE)) { args.add(SearchMessages.MatchLocations_local_types_description); } if (isSet(locations, IJavaSearchConstants.RETURN_TYPE_REFERENCE)) { args.add(SearchMessages.MatchLocations_method_types_description); } if (isSet(locations, IJavaSearchConstants.PARAMETER_DECLARATION_TYPE_REFERENCE)) { args.add(SearchMessages.MatchLocations_parameter_types_description); } if (isSet(locations, IJavaSearchConstants.THROWS_CLAUSE_TYPE_REFERENCE)) { args.add(SearchMessages.MatchLocations_thrown_exceptions_description); } if (isSet(locations, IJavaSearchConstants.TYPE_VARIABLE_BOUND_TYPE_REFERENCE)) { args.add(SearchMessages.MatchLocations_type_parameter_bounds_description); } if (isSet(locations, IJavaSearchConstants.WILDCARD_BOUND_TYPE_REFERENCE)) { args.add(SearchMessages.MatchLocations_wildcard_bounds_description); } if (isSet(locations, IJavaSearchConstants.INSTANCEOF_TYPE_REFERENCE)) { args.add(SearchMessages.MatchLocations_instanceof_description); } if (isSet(locations, IJavaSearchConstants.TYPE_ARGUMENT_TYPE_REFERENCE)) { args.add(SearchMessages.MatchLocations_type_arguments_description); } if (isSet(locations, IJavaSearchConstants.CAST_TYPE_REFERENCE)) { args.add(SearchMessages.MatchLocations_casts_description); } if (isSet(locations, IJavaSearchConstants.CATCH_TYPE_REFERENCE)) { args.add(SearchMessages.MatchLocations_catch_clauses_description); } if (isSet(locations, IJavaSearchConstants.CLASS_INSTANCE_CREATION_TYPE_REFERENCE)) { args.add(SearchMessages.MatchLocations_class_instance_description); } if (isSet(locations, IJavaSearchConstants.SUPER_REFERENCE)) { args.add(SearchMessages.MatchLocations_super_description); } if (isSet(locations, IJavaSearchConstants.QUALIFIED_REFERENCE)) { args.add(SearchMessages.MatchLocations_qualified_description); } if (isSet(locations, IJavaSearchConstants.METHOD_REFERENCE_EXPRESSION)) { args.add(SearchMessages.MatchLocations_method_reference_description); } if (isSet(locations, IJavaSearchConstants.THIS_REFERENCE)) { args.add(SearchMessages.MatchLocations_this_description); } if (isSet(locations, IJavaSearchConstants.IMPLICIT_THIS_REFERENCE)) { args.add(SearchMessages.MatchLocations_implicit_this_description); } if (args.size() == 1) { return args.get(0); } StringBuffer buf = new StringBuffer(); for (int i = 0; i < args.size(); i++) { if (i > 0) { buf.append(JavaElementLabels.COMMA_STRING); } buf.append(args.get(i)); } return buf.toString(); } private static boolean isSet(int flags, int flag) { return (flags & flag) != 0; } public static int getTotalNumberOfSettings(int searchFor) { if (searchFor == IJavaSearchConstants.TYPE) { return 15; } else if (searchFor == IJavaSearchConstants.CONSTRUCTOR) { return 1; } else if (searchFor == IJavaSearchConstants.METHOD) { return 5; } else if (searchFor == IJavaSearchConstants.FIELD) { return 4; } return 0; } public static int getNumberOfSelectedSettings(int locations, int searchFor) { int count = 0; if (searchFor == IJavaSearchConstants.TYPE) { if (isSet(locations, IJavaSearchConstants.IMPORT_DECLARATION_TYPE_REFERENCE)) { count++; } if (isSet(locations, IJavaSearchConstants.SUPERTYPE_TYPE_REFERENCE)) { count++; } if (isSet(locations, IJavaSearchConstants.ANNOTATION_TYPE_REFERENCE)) { count++; } if (isSet(locations, IJavaSearchConstants.FIELD_DECLARATION_TYPE_REFERENCE)) { count++; } if (isSet(locations, IJavaSearchConstants.LOCAL_VARIABLE_DECLARATION_TYPE_REFERENCE)) { count++; } if (isSet(locations, IJavaSearchConstants.RETURN_TYPE_REFERENCE)) { count++; } if (isSet(locations, IJavaSearchConstants.PARAMETER_DECLARATION_TYPE_REFERENCE)) { count++; } if (isSet(locations, IJavaSearchConstants.THROWS_CLAUSE_TYPE_REFERENCE)) { count++; } if (isSet(locations, IJavaSearchConstants.TYPE_VARIABLE_BOUND_TYPE_REFERENCE)) { count++; } if (isSet(locations, IJavaSearchConstants.WILDCARD_BOUND_TYPE_REFERENCE)) { count++; } if (isSet(locations, IJavaSearchConstants.INSTANCEOF_TYPE_REFERENCE)) { count++; } if (isSet(locations, IJavaSearchConstants.TYPE_ARGUMENT_TYPE_REFERENCE)) { count++; } if (isSet(locations, IJavaSearchConstants.CAST_TYPE_REFERENCE)) { count++; } if (isSet(locations, IJavaSearchConstants.CATCH_TYPE_REFERENCE)) { count++; } if (isSet(locations, IJavaSearchConstants.CLASS_INSTANCE_CREATION_TYPE_REFERENCE)) { count++; } } else if (searchFor == IJavaSearchConstants.METHOD || searchFor == IJavaSearchConstants.FIELD) { if (isSet(locations, IJavaSearchConstants.SUPER_REFERENCE)) { count++; } if (isSet(locations, IJavaSearchConstants.QUALIFIED_REFERENCE)) { count++; } if (isSet(locations, IJavaSearchConstants.THIS_REFERENCE)) { count++; } if (isSet(locations, IJavaSearchConstants.IMPLICIT_THIS_REFERENCE)) { count++; } } if (searchFor == IJavaSearchConstants.METHOD || searchFor == IJavaSearchConstants.CONSTRUCTOR) { if (isSet(locations, IJavaSearchConstants.METHOD_REFERENCE_EXPRESSION)) { count++; } } return count; } }