### Eclipse Workspace Patch 1.0 #P org.eclipse.jdt.ui Index: ui/org/eclipse/jdt/internal/ui/dialogs/PackageSelectionDialog.java =================================================================== RCS file: /cvsroot/eclipse/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/dialogs/PackageSelectionDialog.java,v retrieving revision 1.8 diff -u -r1.8 PackageSelectionDialog.java --- ui/org/eclipse/jdt/internal/ui/dialogs/PackageSelectionDialog.java 13 Apr 2005 17:35:12 -0000 1.8 +++ ui/org/eclipse/jdt/internal/ui/dialogs/PackageSelectionDialog.java 11 Nov 2005 14:20:51 -0000 @@ -10,21 +10,12 @@ *******************************************************************************/ package org.eclipse.jdt.internal.ui.dialogs; -import java.lang.reflect.InvocationTargetException; import java.util.ArrayList; import java.util.HashSet; -import org.eclipse.core.runtime.CoreException; -import org.eclipse.core.runtime.IProgressMonitor; +import org.eclipse.core.runtime.IPath; -import org.eclipse.jdt.core.IJavaElement; -import org.eclipse.jdt.core.IPackageFragmentRoot; -import org.eclipse.jdt.core.search.IJavaSearchConstants; -import org.eclipse.jdt.core.search.IJavaSearchScope; -import org.eclipse.jdt.core.search.SearchEngine; -import org.eclipse.jdt.core.search.SearchMatch; -import org.eclipse.jdt.core.search.SearchPattern; -import org.eclipse.jdt.core.search.SearchRequestor; +import org.eclipse.core.resources.ResourcesPlugin; import org.eclipse.swt.graphics.Point; import org.eclipse.swt.graphics.Rectangle; @@ -35,21 +26,27 @@ import org.eclipse.jface.dialogs.IDialogSettings; import org.eclipse.jface.dialogs.MessageDialog; import org.eclipse.jface.operation.IRunnableContext; -import org.eclipse.jface.operation.IRunnableWithProgress; import org.eclipse.jface.viewers.ILabelProvider; -import org.eclipse.ui.dialogs.ElementListSelectionDialog; import org.eclipse.ui.PlatformUI; +import org.eclipse.ui.dialogs.ElementListSelectionDialog; + +import org.eclipse.jdt.core.IJavaElement; +import org.eclipse.jdt.core.IJavaModel; +import org.eclipse.jdt.core.IJavaProject; +import org.eclipse.jdt.core.IPackageFragment; +import org.eclipse.jdt.core.IPackageFragmentRoot; +import org.eclipse.jdt.core.JavaCore; +import org.eclipse.jdt.core.JavaModelException; +import org.eclipse.jdt.core.search.IJavaSearchScope; -import org.eclipse.jdt.internal.corext.util.SearchUtils; +import org.eclipse.jdt.ui.JavaElementLabelProvider; import org.eclipse.jdt.internal.ui.IJavaHelpContextIds; import org.eclipse.jdt.internal.ui.JavaPlugin; import org.eclipse.jdt.internal.ui.JavaUIMessages; import org.eclipse.jdt.internal.ui.util.ExceptionHandler; -import org.eclipse.jdt.ui.JavaElementLabelProvider; - /** * Dialog to browse for package fragments. */ @@ -97,63 +94,41 @@ * @see org.eclipse.jface.window.Window#open() */ public int open() { - final ArrayList packageList= new ArrayList(); + ArrayList packageList= new ArrayList(); + HashSet addedNames= new HashSet(); + + boolean addDefault= (fFlags & F_HIDE_DEFAULT_PACKAGE) == 0; + boolean duplicates= (fFlags & F_REMOVE_DUPLICATES) == 0; + boolean includeParents= (fFlags & F_SHOW_PARENTS) != 0; + + IPath[] paths= fScope.enclosingProjectsAndJars(); + IJavaModel model= JavaCore.create(ResourcesPlugin.getWorkspace().getRoot()); - IRunnableWithProgress runnable= new IRunnableWithProgress() { - public void run(final IProgressMonitor monitor) throws InvocationTargetException, InterruptedException { - try { - SearchRequestor requestor= new SearchRequestor() { - private HashSet fSet= new HashSet(); - private final boolean fAddDefault= (fFlags & F_HIDE_DEFAULT_PACKAGE) == 0; - private final boolean fDuplicates= (fFlags & F_REMOVE_DUPLICATES) == 0; - private final boolean fIncludeParents= (fFlags & F_SHOW_PARENTS) != 0; - - public void acceptSearchMatch(SearchMatch match) throws CoreException { - IJavaElement enclosingElement= (IJavaElement) match.getElement(); - String name= enclosingElement.getElementName(); - if (fAddDefault || name.length() > 0) { - if (fDuplicates || fSet.add(name)) { - packageList.add(enclosingElement); - if (fIncludeParents) { - addParentPackages(enclosingElement, name); + try { + for (int i= 0; i < paths.length; i++) { + IPath curr= paths[i]; + if (curr.segmentCount() == 1) { + IJavaProject javaProject= model.getJavaProject(curr.segment(0)); + if (javaProject.exists()) { + IPackageFragment[] fragments= javaProject.getPackageFragments(); + for (int j= 0; j < fragments.length; j++) { + IJavaElement fragement= fragments[i]; + String name= fragement.getElementName(); + if (addDefault || name.length() > 0) { + if (duplicates || addedNames.add(name)) { + packageList.add(fragement); + if (includeParents) { + addParentPackages(fragement, name, addedNames, duplicates, packageList); } } } } - - private void addParentPackages(IJavaElement enclosingElement, String name) { - IPackageFragmentRoot root= (IPackageFragmentRoot) enclosingElement.getParent(); - int idx= name.lastIndexOf('.'); - while (idx != -1) { - name= name.substring(0, idx); - if (fDuplicates || fSet.add(name)) { - packageList.add(root.getPackageFragment(name)); - } - idx= name.lastIndexOf('.'); - } - } - }; - SearchPattern pattern= SearchPattern.createPattern("*", //$NON-NLS-1$ - IJavaSearchConstants.PACKAGE, IJavaSearchConstants.DECLARATIONS, - SearchPattern.R_PATTERN_MATCH | SearchPattern.R_CASE_SENSITIVE); - new SearchEngine().search(pattern, SearchUtils.getDefaultSearchParticipants(), fScope, requestor, monitor); - } catch (CoreException e) { - throw new InvocationTargetException(e); - } - if (monitor.isCanceled()) { - throw new InterruptedException(); + } } } - }; - - try { - fContext.run(true, true, runnable); - } catch (InvocationTargetException e) { + } catch (JavaModelException e) { ExceptionHandler.handle(e, JavaUIMessages.PackageSelectionDialog_error_title, JavaUIMessages.TypeSelectionDialog_error3Message); return CANCEL; - } catch (InterruptedException e) { - // cancelled by user - return CANCEL; } if (packageList.isEmpty()) { @@ -167,7 +142,18 @@ return super.open(); } - + + private void addParentPackages(IJavaElement enclosingElement, String name, HashSet addedNames, boolean duplicates, ArrayList packageList) { + IPackageFragmentRoot root= (IPackageFragmentRoot) enclosingElement.getParent(); + int idx= name.lastIndexOf('.'); + while (idx != -1) { + name= name.substring(0, idx); + if (duplicates || addedNames.add(name)) { + packageList.add(root.getPackageFragment(name)); + } + idx= name.lastIndexOf('.'); + } + } /* * @see org.eclipse.jface.window.Window#configureShell(Shell)