Skip to main content

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
Re: [cdt-patch] class wizard

Here is a revised patch which should fix the problem.

Thanks
-Chris


Chris Wiebe wrote:

OK, I'm guessing it's because you have no classes in your project. It tries to check for an existing class with the name you entered. If you don't have any classes in your project it brings up the error dialog. My bad. I'll fix this and send you a new patch ASAP.

Thanks
-Chris

Hoda Amer wrote:


I did a "replace with latest from head" for core, UI and all other projects, then applied your patch to UI (Ignoring white spaces), then created a new Managed Make project, then launched the class wizard (from the context menu of the new project), then tried to type something in the class name text field and I kept getting this message with each typed letter.

Hoda Amer
Staff Software Engineer
Rational Software - IBM Software Group


*Chris Wiebe <cwiebe@xxxxxxx>*
Sent by: cdt-patch-admin@xxxxxxxxxxx

04/07/2004 02:12 PM
Please respond to
cdt-patch


To
    cdt-patch@xxxxxxxxxxx
cc
Subject
    Re: [cdt-patch] class wizard






That's strange.  I assume you updated to the latest cdt core and ui
plugins.  Did you select a project first, and then open the wizard?

Chris

Hoda Amer wrote:

 >
 > Sorry, but I have to reject this patch Chris.
 > With each letter I type in the class name text field I get an error
> message "No classes available!". Also when you choose base class button
 > it does not work and you get the same message.
 >
 >
 > Hoda Amer
 > Staff Software Engineer
 > Rational Software - IBM Software Group
 >
 >
 > *Chris Wiebe <cwiebe@xxxxxxx>*
 > Sent by: cdt-patch-admin@xxxxxxxxxxx
 >
 > 04/07/2004 12:31 PM
 > Please respond to
 > cdt-patch
 >
 >
 >                   > To
 >                  cdt-patch@xxxxxxxxxxx
 > cc
 >                   > Subject
 >                  [cdt-patch] class wizard
 >
 >
 >                   >
 >
 >
 >
 >
 > This patch updates the class wizard to use the type cache & type
 > selection dialog when choosing a base class.
 >
 > -Chris
 >
 >
> Index: src/org/eclipse/cdt/internal/ui/wizards/NewWizardMessages.properties
 > ===================================================================
 > RCS file:
> /home/tools/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/wizards/NewWizardMessages.properties,v
 > retrieving revision 1.5
 > diff -u -r1.5 NewWizardMessages.properties
> --- src/org/eclipse/cdt/internal/ui/wizards/NewWizardMessages.properties
 >                 26 Mar 2004 22:05:27 -0000                 1.5
> +++ src/org/eclipse/cdt/internal/ui/wizards/NewWizardMessages.properties
 >                 7 Apr 2004 16:27:18 -0000
 > @@ -164,22 +164,27 @@
 > NewClassWizardPage.operations.getProjectClasses=Looking for classes in
 > project
 >
 > NewClassWizardPage.error.NotAvailableForNonCppProjects= The wizard is
 > not available for non C++ projects.
 > -# ------- BaseClassSelectionDialog -----
 >
 > -BaseClassSelectionDialog.title=Classes in this project
 > -BaseClassSelectionDialog.message=Select a base class:
 > +NewClassWizardPage.getProjectClasses.exception.title=Exception
 > +NewClassWizardPage.getProjectClasses.exception.message=Unexpected
 > exception. See log for details.
 > +NewClassWizardPage.getProjectClasses.noclasses.title=Class Selection
 > +NewClassWizardPage.getProjectClasses.noclasses.message=No classes
 > available.
 >
 > -# ------- NewClassWizardPage -------
 > +# ------- BaseClassSelectionDialog -----
 >
 > -NewClassCreationWizard.title=New Java Class
 > +BaseClassSelectionDialog.title=Choose Base Class
> +BaseClassSelectionDialog.message=&Choose a class (? = any character, *
 > = any string):
 > +BaseClassSelectionDialog.filter=
 >
 > -NewClassWizardPage.title=Java Class
 > -NewClassWizardPage.description=Create a new Java class.
 > +# ------- NewClassWizardPage -------
 >
 > -NewClassWizardPage.methods.label=Which method stubs would you like to
 > create?
> -NewClassWizardPage.methods.main=public static void main(Strin&g[] args)
 > -NewClassWizardPage.methods.constructors=&Constructors from superclass
 > -NewClassWizardPage.methods.inherited=In&herited abstract methods
 > +# these are UNUSED by the CDT
 > +# NewClassWizardPage.title=Java Class
 > +# NewClassWizardPage.description=Create a new Java class.
> +# NewClassWizardPage.methods.label=Which method stubs would you like to
 > create?
> +# NewClassWizardPage.methods.main=public static void main(Strin&g[] args) > +# NewClassWizardPage.methods.constructors=&Constructors from superclass
 > +# NewClassWizardPage.methods.inherited=In&herited abstract methods
 >
 >
 > # ------- NewInterfaceWizardPage -------
 > Index: src/org/eclipse/cdt/ui/wizards/NewClassWizardPage.java
 > ===================================================================
 > RCS file:
> /home/tools/org.eclipse.cdt.ui/src/org/eclipse/cdt/ui/wizards/NewClassWizardPage.java,v
 > retrieving revision 1.13
 > diff -u -r1.13 NewClassWizardPage.java
> --- src/org/eclipse/cdt/ui/wizards/NewClassWizardPage.java > 26 Feb 2004 19:30:35 -0000 1.13 > +++ src/org/eclipse/cdt/ui/wizards/NewClassWizardPage.java > 7 Apr 2004 16:27:19 -0000
 > @@ -15,28 +15,30 @@
 > import java.io.InputStream;
 > import java.lang.reflect.InvocationTargetException;
 > import java.text.MessageFormat;
 > -import java.util.Iterator;
 > -import java.util.LinkedList;
 > +import java.util.ArrayList;
 > +import java.util.Arrays;
 > +import java.util.Collection;
 > +import java.util.Comparator;
 > import java.util.List;
 >
 > import org.eclipse.cdt.core.CConventions;
 > +import org.eclipse.cdt.core.browser.AllTypesCache;
 > +import org.eclipse.cdt.core.browser.ITypeInfo;
 > +import org.eclipse.cdt.core.browser.TypeInfo;
 > import org.eclipse.cdt.core.model.CModelException;
 > import org.eclipse.cdt.core.model.CoreModel;
 > import org.eclipse.cdt.core.model.ICElement;
 > import org.eclipse.cdt.core.model.ICProject;
 > import org.eclipse.cdt.core.model.IOpenable;
 > -import org.eclipse.cdt.core.model.IParent;
 > import org.eclipse.cdt.core.model.IStructure;
 > import org.eclipse.cdt.core.model.ITranslationUnit;
 > import org.eclipse.cdt.core.model.IWorkingCopy;
 > -import org.eclipse.cdt.core.search.BasicSearchMatch;
 > -import org.eclipse.cdt.core.search.BasicSearchResultCollector;
 > -import org.eclipse.cdt.core.search.ICSearchConstants;
 > -import org.eclipse.cdt.core.search.ICSearchPattern;
 > import org.eclipse.cdt.core.search.ICSearchScope;
 > import org.eclipse.cdt.core.search.SearchEngine;
 > import org.eclipse.cdt.internal.ui.dialogs.StatusInfo;
 > import org.eclipse.cdt.internal.ui.dialogs.StatusUtil;
 > +import org.eclipse.cdt.internal.ui.util.ExceptionHandler;
 > +import org.eclipse.cdt.internal.ui.wizards.*;
 > import org.eclipse.cdt.internal.ui.wizards.NewWizardMessages;
 > import org.eclipse.cdt.internal.ui.wizards.dialogfields.DialogField;
 > import
 > org.eclipse.cdt.internal.ui.wizards.dialogfields.IDialogFieldListener;
 > @@ -49,7 +51,6 @@
 > import org.eclipse.cdt.internal.ui.wizards.dialogfields.Separator;
 > import
> org.eclipse.cdt.internal.ui.wizards.dialogfields.StringButtonDialogField; > import org.eclipse.cdt.internal.ui.wizards.dialogfields.StringDialogField;
 > -import org.eclipse.cdt.ui.CSearchResultLabelProvider;
 > import org.eclipse.cdt.ui.CUIPlugin;
 > import org.eclipse.cdt.ui.CodeGeneration;
 > import org.eclipse.cdt.ui.PreferenceConstants;
 > @@ -68,6 +69,7 @@
 > import org.eclipse.core.runtime.Path;
 > import org.eclipse.core.runtime.SubProgressMonitor;
 > import org.eclipse.jface.dialogs.ErrorDialog;
 > +import org.eclipse.jface.dialogs.IDialogConstants;
 > import org.eclipse.jface.dialogs.MessageDialog;
 > import org.eclipse.jface.operation.IRunnableWithProgress;
 > import org.eclipse.jface.viewers.IStructuredSelection;
 > @@ -81,7 +83,6 @@
 > import org.eclipse.swt.widgets.Listener;
 > import org.eclipse.ui.actions.WorkspaceModifyOperation;
 > import org.eclipse.ui.dialogs.ContainerGenerator;
 > -import org.eclipse.ui.dialogs.ElementListSelectionDialog;
 > import org.eclipse.ui.internal.WorkbenchMessages;
 > import org.eclipse.ui.internal.WorkbenchPlugin;
 >
 > @@ -111,7 +112,7 @@
 >                  // the created class element
 >                  private /*IStructure*/ ICElement createdClass = null;
> > - private List elementsOfTypeClassInProject = null; > + private ITypeInfo[] elementsOfTypeClassInProject = null;
 >                   >                  // Controls
 >                  private StringDialogField fClassNameDialogField;
 > @@ -129,8 +130,6 @@
 >
 >                  private boolean hasCppNature = false;
> > - BasicSearchResultCollector resultCollector;
 > -                 SearchEngine searchEngine;
 >
> // -------------------- Initialization ------------------ > public NewClassWizardPage(IStructuredSelection selection) {
 > @@ -181,9 +180,6 @@
 >
 >                                   fClassNameStatus=  new StatusInfo();
 >                                   fBaseClassStatus=  new StatusInfo();
 > -
 > -                                  resultCollector = new
 > BasicSearchResultCollector ();
> - searchEngine = new SearchEngine(); > > }
 >                   >                  public void init() {
 > @@ -330,9 +326,9 @@
> > private void classPageChangeControlPressed(DialogField
 > field) {
> if (field == fBaseClassDialogField) {
 > -                                                   BasicSearchMatch
 > element= (BasicSearchMatch)chooseBaseClass();
> - if (element != null) { > - > fBaseClassDialogField.setText(element.getName());
 > +                                                   ITypeInfo info=
 > chooseBaseClass();
> + if (info != null) { > + > fBaseClassDialogField.setText(info.getQualifiedName());
 >                                                    }
 >                                   }
 >                  }
 > @@ -398,8 +394,8 @@
 >                  }
 >                   >                  private ICElement
 > getSelectionCElement(IStructuredSelection sel) {
> - if (!sel.isEmpty() && sel instanceof
 > IStructuredSelection) {
 > -                                                   List list=
 > ((IStructuredSelection)sel).toList();
 > +                                  if (!sel.isEmpty()) {
> + List list= sel.toList(); > if (list.size() == 1) { > > Object element= list.get(0);
 >                                                                     if
 > (element instanceof ICElement) {
 > @@ -411,8 +407,8 @@
 >                  }
 >
 >                  private IResource
 > getSelectionResourceElement(IStructuredSelection sel) {
> - if (!sel.isEmpty() && sel instanceof
 > IStructuredSelection) {
 > -                                                   List list=
 > ((IStructuredSelection)sel).toList();
 > +                                  if (!sel.isEmpty()) {
> + List list= sel.toList(); > if (list.size() == 1) { > > Object element= list.get(0);
 >                                                                     if
 > (element instanceof IResource) {
 > @@ -428,90 +424,73 @@
 >                                   return null;
 >                  }
> > - private void getChildrenOfTypeClass(IParent parent,
 > List elementsFound, IProgressMonitor monitor, int worked){
 > -                                  ICElement[] elements =
 > parent.getChildren();
 > -                                  monitor.worked( worked );
> - > - for (int i = 0; i< elements.length; i++){ > - ICElement element =
 > (ICElement)elements[i];
> - > if(element.getElementType() == ICElement.C_CLASS){ > - > elementsFound.add(element);
 > -                                                   }
 > -                                                   if(element
 > instanceof IParent){
> - > getChildrenOfTypeClass((IParent)element, elementsFound, monitor, worked+1);
 > -                                                   }
 > -                                  }
 > -                 }
> - > - private void searchForClasses(ICProject cProject, List
 > elementsFound, IProgressMonitor monitor, int worked){
 > -                                  ICSearchPattern pattern =
 > SearchEngine.createSearchPattern( "*", ICSearchConstants.CLASS,
 > ICSearchConstants.DECLARATIONS, false ); //$NON-NLS-1$
> - ICElement[] elements = new ICElement[1];
 > -                                  elements[0] = cProject;
 > -                                  ICSearchScope scope =
 > SearchEngine.createCSearchScope(elements, true);
 > -
 > -                                  try {
> - > searchEngine.search(CUIPlugin.getWorkspace(), pattern, scope,
 > resultCollector, false);
 > -                                  } catch (InterruptedException e) {
 > -                                  }
> - > elementsFound.addAll(resultCollector.getSearchResults());
 > -                 }
> - > - private List getClassElementsInProject(){ > - return elementsOfTypeClassInProject;
 > -                 }
> - > - private List findClassElementsInProject(){ > > + private ITypeInfo[] findClassElementsInProject(){ > > if(eSelection == null){
 > -                                                   return new
> LinkedList(); > + return null;
 >                                   }
 >
> if( > elementsOfTypeClassInProject != null ){
 >                                                    return
 > elementsOfTypeClassInProject;
 >                                   }
 > -
 > -                                  elementsOfTypeClassInProject = new
> LinkedList(); > - IRunnableWithProgress runnable= new
 > IRunnableWithProgress() {
 > -                                                   public void
 > run(IProgressMonitor monitor) throws InvocationTargetException,
 > InterruptedException {
> - if
 > (monitor == null) {
> - > monitor= new NullProgressMonitor(); > - } > > - > monitor.beginTask(NewWizardMessages.getString("NewClassWizardPage.operations.getProjectClasses"),
 > 5); //$NON-NLS-1$
> - try{ > - > ICProject cProject = eSelection.getCProject(); > - > searchForClasses(cProject, elementsOfTypeClassInProject,
 > monitor, 1);
> - > //getChildrenOfTypeClass((IParent)cProject,
 > elementsOfTypeClassInProject, monitor, 1);
> - > monitor.worked(5);
 > -                                                                    }
 > finally{
> - > monitor.done(); > + > + ICProject cProject=
 > eSelection.getCProject();
> + ICElement[] elements= new ICElement[]
 > { cProject };
 > +                                  final ICSearchScope scope=
 > SearchEngine.createCSearchScope(elements, true);
 > +                                  final int[] kinds= {
 > ICElement.C_CLASS, ICElement.C_STRUCT };
 > +                                  final Collection typeList= new
 > ArrayList();
 > +
> + if (AllTypesCache.isCacheUpToDate()) {
 > +                                                   // run without
 > progress monitor
> + > AllTypesCache.getTypes(scope, kinds, null, typeList);
 > +                                  } else {
> + > IRunnableWithProgress runnable= new IRunnableWithProgress() { > + > public void run(IProgressMonitor monitor) throws
 > InvocationTargetException, InterruptedException {
> + > AllTypesCache.getTypes(scope, kinds, monitor, typeList); > + > if (monitor.isCanceled()) { > + > throw new InterruptedException(); > + > }
 >                                                                     }
 > +                                                   };
 > +
 > +                                                   try {
> + > getContainer().run(true, true, runnable);
 > +                                                   } catch
 > (InvocationTargetException e) {
> + > String title= > NewWizardMessages.getString("NewClassWizardPage.getProjectClasses.exception.title");
 > //$NON-NLS-1$
> + > String message= > NewWizardMessages.getString("NewClassWizardPage.getProjectClasses.exception.message");
 > //$NON-NLS-1$
> + > ExceptionHandler.handle(e, title, message); > + > return null;
 > +                                                   } catch
 > (InterruptedException e) {
> + //
 > cancelled by user
> + > return null;
 >                                                    }
 > -                                  };
 > +                                  }
> > - try { > - > getWizard().getContainer().run(false, true, runnable); > - } catch (InvocationTargetException e) > { > - } catch (InterruptedException e) {
 > -                                  }
 > -                                  finally {
 > +                                  if (typeList.isEmpty()) {
 > +                                                   String title=
> NewWizardMessages.getString("NewClassWizardPage.getProjectClasses.noclasses.title");
 > //$NON-NLS-1$
 > +                                                   String message=
> NewWizardMessages.getString("NewClassWizardPage.getProjectClasses.noclasses.message");
 > //$NON-NLS-1$
> + > MessageDialog.openInformation(getShell(), title, message); > + > elementsOfTypeClassInProject= null;
 > +                                  } else {
> + > elementsOfTypeClassInProject= (ITypeInfo[]) typeList.toArray(new
 > ITypeInfo[typeList.size()]);
> + > Arrays.sort(elementsOfTypeClassInProject, TYPE_NAME_COMPARATOR);
 >                                   }
 > +
> return elementsOfTypeClassInProject; > > } > > - protected Object chooseBaseClass(){ > - // find the available classes in this
 > project
 > -                                  List elementsFound =
 > findClassElementsInProject();
> - > - ElementListSelectionDialog dialog =
 > new ElementListSelectionDialog(getShell(), new
 > CSearchResultLabelProvider());
> - > dialog.setTitle(NewWizardMessages.getString("BaseClassSelectionDialog.title"));
 > //$NON-NLS-1$
> - > dialog.setMessage(NewWizardMessages.getString("BaseClassSelectionDialog.message"));
 > //$NON-NLS-1$
> - > dialog.setElements(elementsFound.toArray()); > - dialog.setFilter("*"); //$NON-NLS-1$ > - > - if (dialog.open() ==
 > ElementListSelectionDialog.OK) {
 > -                                                   Object element=
 > dialog.getFirstResult();
 > -                                                   return element;
> - } > - return null;
 > +                 protected ITypeInfo chooseBaseClass(){
 > +                                  ITypeInfo[] elementsFound=
 > findClassElementsInProject();
 > +                                  if (elementsFound == null)
 > +                                                   return null;
 > +
> + BaseClassSelectionDialog dialog= new
 > BaseClassSelectionDialog(getShell());
 > +                                  dialog.setElements(elementsFound);
 > +
 > +                                  int result= dialog.open();
> + if (result != IDialogConstants.OK_ID)
 > +                                                   return null;
> + > + return
 > (ITypeInfo)dialog.getFirstResult();
 >                  }
> > // ------------- getter methods for dialog controls > ------------- > @@ -806,16 +785,24 @@
 >                                   if((baseClassName != null) &&
 > (baseClassName.length() > 0))
 >                                   {
> extendingBase = true; > - List classElements =
 > findClassElementsInProject();
 > -                                                   BasicSearchMatch
 > baseClass = (BasicSearchMatch)findInList(baseClassName, null,
 > classElements);
> + > + ITypeInfo[]
 > classElements = findClassElementsInProject();
> + ITypeInfo baseClass
 > = findInList(baseClassName, null, classElements);
 >
> -// if(baseClass != null){ > -// > IPath baseClassFileLocation = baseClass.getLocation(); > -// > IPath newFilePath = getContainerFullPath(linkedResourceGroupForHeader); > -// > baseClassFileName = baseClassName + HEADER_EXT;
 > -//                                                   } else {
> + if (baseClass != null) { > + > IPath includePath= null; > + if
 > (eSelection != null)
> + > includePath=
 > baseClass.resolveIncludePath(eSelection.getCProject());
> + if
 > (includePath == null)
> + > includePath= baseClass.getLocation();
 > +
> + if
 > (includePath != null)
> + > baseClassFileName= includePath.toString(); > + else > + > baseClassFileName= baseClass.getFileName();
 > +                                                   } else {
> > baseClassFileName = baseClassName + HEADER_EXT;
 > -//                                                   }
 > +                                                   }
 >                                   }
> > if(isIncludeGuard()){
 > @@ -923,7 +910,6 @@
> text.append(lineDelimiter); > > return text.toString();
 >                  }
 > -                 >
 >                  // ------ validation --------
 >                  protected void doStatusUpdate() {
 > @@ -983,7 +969,7 @@
> } >
 >                                   // must not exist
 > -                                  List elementsFound =
 > findClassElementsInProject();
 > +                                  ITypeInfo[] elementsFound=
 > findClassElementsInProject();
 >                                   if(foundInList(getNewClassName(),
 > getContainerPath(linkedResourceGroupForHeader), elementsFound)){
> > status.setWarning(NewWizardMessages.getString("NewClassWizardPage.error.ClassNameExists"));
 > //$NON-NLS-1$
 >                                   }
 > @@ -1014,35 +1000,29 @@
 >                                   }
 >
> // if class does not exist, give warning
 > -                                  List elementsFound =
 > findClassElementsInProject();
 > +                                  ITypeInfo[] elementsFound =
 > findClassElementsInProject();
 >                                   if(!foundInList(baseClassName, null,
 > elementsFound)){
> > status.setWarning(NewWizardMessages.getString("NewClassWizardPage.warning.BaseClassNotExists"));
 > //$NON-NLS-1$
 >                                   }
> return status; > > } > > - private Object findInList(String name, IPath path,
 > List elements){
 > -                                  Iterator i = elements.iterator();
 > -                                  while (i.hasNext()){
 > -                                                   BasicSearchMatch
 > element = (BasicSearchMatch)i.next();
 > -                                                   if(path != null){
> - //
 > check both the name and the path
> - if
 > ((name.equals(element.getName())) &&
 > (path.makeAbsolute().equals(element.getLocation())))
> - > return element;
 > -                                                   } else {
> - //
 > we don't care about the path
> - if
 > (name.equals(element.getName()))
> - > return element; > > - }
 > -                                  }
 > -                                  return null;
 > +                 /**
 > +                  * A comparator for simple type names
 > +                  */
> + final static private Comparator TYPE_NAME_COMPARATOR=
 > new Comparator() {
> + public int compare(Object o1, Object
 > o2) {
 > +                                                   return
 > ((ITypeInfo)o1).getName().compareTo(((ITypeInfo)o2).getName());
 > +                                  }
 > +                 };
> + private ITypeInfo findInList(String name, IPath path,
 > ITypeInfo[] elements) {
 > +                                  if (elements == null)
 > +                                                   return null;
> + return TypeInfo.findType(name, path,
 > elements);
 >                  }
> > - private boolean foundInList(String name, IPath path,
 > List elements){
 > -                                  if(findInList(name, path, elements)
 > != null)
 > -                                                   return true;
 > -                                  else
 > -                                                   return false;
 > +                 private boolean foundInList(String name, IPath path,
 > ITypeInfo[] elements){
 > +                                  return (findInList(name, path,
 > elements) != null);
 >                  }
 >
 > }
> Index: src/org/eclipse/cdt/internal/ui/wizards/BaseClassSelectionDialog.java
 > ===================================================================
 > RCS file:
 > src/org/eclipse/cdt/internal/ui/wizards/BaseClassSelectionDialog.java
 > diff -N
 > src/org/eclipse/cdt/internal/ui/wizards/BaseClassSelectionDialog.java
 > --- /dev/null                 1 Jan 1970 00:00:00 -0000
 > +++
> src/org/eclipse/cdt/internal/ui/wizards/BaseClassSelectionDialog.java > 1 Jan 1970 00:00:00 -0000
 > @@ -0,0 +1,39 @@
> +/*******************************************************************************
 > + * Copyright (c) 2004 IBM Corporation and others.
 > + * All rights reserved. This program and the accompanying materials
> + * are made available under the terms of the Common Public License v1.0
 > + * which accompanies this distribution, and is available at
 > + * http://www.eclipse.org/legal/cpl-v10.html
 > + *
 > + * Contributors:
 > + *     IBM Corporation - initial API and implementation
 > + *     QNX Software Systems - adapted for use in CDT
 > +
> *******************************************************************************/
 > +package org.eclipse.cdt.internal.ui.wizards;
 > +
 > +import org.eclipse.cdt.core.model.ICElement;
 > +import org.eclipse.cdt.ui.browser.typeinfo.TypeSelectionDialog;
 > +import org.eclipse.swt.widgets.Shell;
 > +
 > +/**
 > + * A dialog to select a type from a list of types. The selected type
 > will be
 > + * opened in the editor.
 > + */
 > +public class BaseClassSelectionDialog extends TypeSelectionDialog {
 > +
 > +                 private static final String DIALOG_SETTINGS=
 > BaseClassSelectionDialog.class.getName();
 > +                 private static final int[] fVisibleTypes=
 > {ICElement.C_CLASS, ICElement.C_STRUCT};
 > +
 > +                 /**
> + * Constructs an instance of <code>OpenTypeDialog</code>.
 > +                  * @param parent  the parent shell.
 > +                  */
 > +                 public BaseClassSelectionDialog(Shell parent) {
 > +                                  super(parent);
> + > setTitle(NewWizardMessages.getString("BaseClassSelectionDialog.title"));
 > //$NON-NLS-1$
> + > setMessage(NewWizardMessages.getString("BaseClassSelectionDialog.message"));
 > //$NON-NLS-1$
 > +                                  setMatchEmptyString(true);
 > +                                  setDialogSettings(DIALOG_SETTINGS);
 > +                                  setVisibleTypes(fVisibleTypes);
 > +                 }
 > +}
 >
_______________________________________________
cdt-patch mailing list
cdt-patch@xxxxxxxxxxx
http://dev.eclipse.org/mailman/listinfo/cdt-patch

_______________________________________________
cdt-patch mailing list
cdt-patch@xxxxxxxxxxx
http://dev.eclipse.org/mailman/listinfo/cdt-patch


Index: src/org/eclipse/cdt/internal/ui/wizards/NewWizardMessages.properties
===================================================================
RCS file: /home/tools/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/wizards/NewWizardMessages.properties,v
retrieving revision 1.5
diff -u -r1.5 NewWizardMessages.properties
--- src/org/eclipse/cdt/internal/ui/wizards/NewWizardMessages.properties	26 Mar 2004 22:05:27 -0000	1.5
+++ src/org/eclipse/cdt/internal/ui/wizards/NewWizardMessages.properties	7 Apr 2004 19:39:29 -0000
@@ -164,22 +164,27 @@
 NewClassWizardPage.operations.getProjectClasses=Looking for classes in project
 
 NewClassWizardPage.error.NotAvailableForNonCppProjects= The wizard is not available for non C++ projects.
-# ------- BaseClassSelectionDialog -----
 
-BaseClassSelectionDialog.title=Classes in this project
-BaseClassSelectionDialog.message=Select a base class:
+NewClassWizardPage.getProjectClasses.exception.title=Exception
+NewClassWizardPage.getProjectClasses.exception.message=Unexpected exception. See log for details.
+NewClassWizardPage.getProjectClasses.noclasses.title=Class Selection
+NewClassWizardPage.getProjectClasses.noclasses.message=No classes available.
 
-# ------- NewClassWizardPage ------- 
+# ------- BaseClassSelectionDialog -----
 
-NewClassCreationWizard.title=New Java Class
+BaseClassSelectionDialog.title=Choose Base Class
+BaseClassSelectionDialog.message=&Choose a class (? = any character, * = any string):
+BaseClassSelectionDialog.filter=
 
-NewClassWizardPage.title=Java Class
-NewClassWizardPage.description=Create a new Java class.
+# ------- NewClassWizardPage ------- 
 
-NewClassWizardPage.methods.label=Which method stubs would you like to create?
-NewClassWizardPage.methods.main=public static void main(Strin&g[] args)
-NewClassWizardPage.methods.constructors=&Constructors from superclass
-NewClassWizardPage.methods.inherited=In&herited abstract methods
+# these are UNUSED by the CDT
+# NewClassWizardPage.title=Java Class
+# NewClassWizardPage.description=Create a new Java class.
+# NewClassWizardPage.methods.label=Which method stubs would you like to create?
+# NewClassWizardPage.methods.main=public static void main(Strin&g[] args)
+# NewClassWizardPage.methods.constructors=&Constructors from superclass
+# NewClassWizardPage.methods.inherited=In&herited abstract methods
 
 
 # ------- NewInterfaceWizardPage -------
Index: src/org/eclipse/cdt/ui/wizards/NewClassWizardPage.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.ui/src/org/eclipse/cdt/ui/wizards/NewClassWizardPage.java,v
retrieving revision 1.13
diff -u -r1.13 NewClassWizardPage.java
--- src/org/eclipse/cdt/ui/wizards/NewClassWizardPage.java	26 Feb 2004 19:30:35 -0000	1.13
+++ src/org/eclipse/cdt/ui/wizards/NewClassWizardPage.java	7 Apr 2004 19:39:31 -0000
@@ -15,28 +15,30 @@
 import java.io.InputStream;
 import java.lang.reflect.InvocationTargetException;
 import java.text.MessageFormat;
-import java.util.Iterator;
-import java.util.LinkedList;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Comparator;
 import java.util.List;
 
 import org.eclipse.cdt.core.CConventions;
+import org.eclipse.cdt.core.browser.AllTypesCache;
+import org.eclipse.cdt.core.browser.ITypeInfo;
+import org.eclipse.cdt.core.browser.TypeInfo;
 import org.eclipse.cdt.core.model.CModelException;
 import org.eclipse.cdt.core.model.CoreModel;
 import org.eclipse.cdt.core.model.ICElement;
 import org.eclipse.cdt.core.model.ICProject;
 import org.eclipse.cdt.core.model.IOpenable;
-import org.eclipse.cdt.core.model.IParent;
 import org.eclipse.cdt.core.model.IStructure;
 import org.eclipse.cdt.core.model.ITranslationUnit;
 import org.eclipse.cdt.core.model.IWorkingCopy;
-import org.eclipse.cdt.core.search.BasicSearchMatch;
-import org.eclipse.cdt.core.search.BasicSearchResultCollector;
-import org.eclipse.cdt.core.search.ICSearchConstants;
-import org.eclipse.cdt.core.search.ICSearchPattern;
 import org.eclipse.cdt.core.search.ICSearchScope;
 import org.eclipse.cdt.core.search.SearchEngine;
 import org.eclipse.cdt.internal.ui.dialogs.StatusInfo;
 import org.eclipse.cdt.internal.ui.dialogs.StatusUtil;
+import org.eclipse.cdt.internal.ui.util.ExceptionHandler;
+import org.eclipse.cdt.internal.ui.wizards.*;
 import org.eclipse.cdt.internal.ui.wizards.NewWizardMessages;
 import org.eclipse.cdt.internal.ui.wizards.dialogfields.DialogField;
 import org.eclipse.cdt.internal.ui.wizards.dialogfields.IDialogFieldListener;
@@ -49,7 +51,6 @@
 import org.eclipse.cdt.internal.ui.wizards.dialogfields.Separator;
 import org.eclipse.cdt.internal.ui.wizards.dialogfields.StringButtonDialogField;
 import org.eclipse.cdt.internal.ui.wizards.dialogfields.StringDialogField;
-import org.eclipse.cdt.ui.CSearchResultLabelProvider;
 import org.eclipse.cdt.ui.CUIPlugin;
 import org.eclipse.cdt.ui.CodeGeneration;
 import org.eclipse.cdt.ui.PreferenceConstants;
@@ -68,6 +69,7 @@
 import org.eclipse.core.runtime.Path;
 import org.eclipse.core.runtime.SubProgressMonitor;
 import org.eclipse.jface.dialogs.ErrorDialog;
+import org.eclipse.jface.dialogs.IDialogConstants;
 import org.eclipse.jface.dialogs.MessageDialog;
 import org.eclipse.jface.operation.IRunnableWithProgress;
 import org.eclipse.jface.viewers.IStructuredSelection;
@@ -81,7 +83,6 @@
 import org.eclipse.swt.widgets.Listener;
 import org.eclipse.ui.actions.WorkspaceModifyOperation;
 import org.eclipse.ui.dialogs.ContainerGenerator;
-import org.eclipse.ui.dialogs.ElementListSelectionDialog;
 import org.eclipse.ui.internal.WorkbenchMessages;
 import org.eclipse.ui.internal.WorkbenchPlugin;
 
@@ -111,7 +112,7 @@
 	// the created class element
 	private /*IStructure*/ ICElement createdClass = null;
 	
-	private List elementsOfTypeClassInProject = null;
+	private ITypeInfo[] elementsOfTypeClassInProject = null;
 	
 	// Controls
 	private StringDialogField fClassNameDialogField;
@@ -129,8 +130,6 @@
 
 	private boolean hasCppNature = false;
 	
-	BasicSearchResultCollector  resultCollector;
-	SearchEngine searchEngine;
 
 	// -------------------- Initialization ------------------
 	public NewClassWizardPage(IStructuredSelection selection) {
@@ -181,9 +180,6 @@
 
 		fClassNameStatus=  new StatusInfo();
 		fBaseClassStatus=  new StatusInfo();
-
-		resultCollector = new BasicSearchResultCollector ();
-		searchEngine = new SearchEngine();		
 	}
 	
 	public void init() {
@@ -330,9 +326,9 @@
 	
 	private void classPageChangeControlPressed(DialogField field) {
 		if (field == fBaseClassDialogField) {
-			BasicSearchMatch element= (BasicSearchMatch)chooseBaseClass();
-			if (element != null) {
-				fBaseClassDialogField.setText(element.getName());
+			ITypeInfo info= chooseBaseClass();
+			if (info != null) {
+				fBaseClassDialogField.setText(info.getQualifiedName());
 			}
 		}
 	}
@@ -398,8 +394,8 @@
 	}
 	
 	private ICElement getSelectionCElement(IStructuredSelection sel) {
-		if (!sel.isEmpty() && sel instanceof IStructuredSelection) {
-			List list= ((IStructuredSelection)sel).toList();
+		if (!sel.isEmpty()) {
+			List list= sel.toList();
 			if (list.size() == 1) {
 				Object element= list.get(0);
 				if (element instanceof ICElement) {
@@ -411,8 +407,8 @@
 	}
 
 	private IResource getSelectionResourceElement(IStructuredSelection sel) {
-		if (!sel.isEmpty() && sel instanceof IStructuredSelection) {
-			List list= ((IStructuredSelection)sel).toList();
+		if (!sel.isEmpty()) {
+			List list= sel.toList();
 			if (list.size() == 1) {
 				Object element= list.get(0);
 				if (element instanceof IResource) {
@@ -428,90 +424,74 @@
 		return null;
 	}
 	
-	private void getChildrenOfTypeClass(IParent parent, List elementsFound, IProgressMonitor monitor, int worked){
-		ICElement[] elements = parent.getChildren();
-		monitor.worked( worked );
-		
-		for (int i = 0; i< elements.length; i++){
-			ICElement element = (ICElement)elements[i];
-			if(element.getElementType() == ICElement.C_CLASS){
-				elementsFound.add(element);
-			}
-			if(element instanceof IParent){
-				getChildrenOfTypeClass((IParent)element, elementsFound, monitor, worked+1);
-			}
-		}
-	}
-	
-	private void searchForClasses(ICProject cProject, List elementsFound, IProgressMonitor monitor, int worked){
-		ICSearchPattern pattern = SearchEngine.createSearchPattern( "*", ICSearchConstants.CLASS, ICSearchConstants.DECLARATIONS, false ); //$NON-NLS-1$
-		ICElement[] elements = new ICElement[1];
-		elements[0] = cProject;
-		ICSearchScope scope = SearchEngine.createCSearchScope(elements, true);
-
-		try {
-			searchEngine.search(CUIPlugin.getWorkspace(), pattern, scope, resultCollector, false);
-		} catch (InterruptedException e) {
-		}
-		elementsFound.addAll(resultCollector.getSearchResults());
-	}
-	
-	private List getClassElementsInProject(){
-		return elementsOfTypeClassInProject;
-	}
-	
-	private List findClassElementsInProject(){		
+	private ITypeInfo[] findClassElementsInProject(){		
 		if(eSelection == null){
-			return new LinkedList();			
+			return null;
 		}
 
 		if(	elementsOfTypeClassInProject != null ){
 			return elementsOfTypeClassInProject;
 		}
-
-		elementsOfTypeClassInProject = new LinkedList();		
-		IRunnableWithProgress runnable= new IRunnableWithProgress() {
-			public void run(IProgressMonitor monitor) throws InvocationTargetException, InterruptedException {
-				if (monitor == null) {
-					monitor= new NullProgressMonitor();
-				}				
-				monitor.beginTask(NewWizardMessages.getString("NewClassWizardPage.operations.getProjectClasses"), 5); //$NON-NLS-1$
-				try{
-					ICProject cProject = eSelection.getCProject();
-					searchForClasses(cProject, elementsOfTypeClassInProject, monitor, 1);
-					//getChildrenOfTypeClass((IParent)cProject, elementsOfTypeClassInProject, monitor, 1);
-					monitor.worked(5);
-				} finally{
-					monitor.done();
+		
+		ICProject cProject= eSelection.getCProject();
+		ICElement[] elements= new ICElement[] { cProject };
+		final ICSearchScope scope= SearchEngine.createCSearchScope(elements, true);
+		final int[] kinds= { ICElement.C_CLASS, ICElement.C_STRUCT };
+		final Collection typeList= new ArrayList();
+
+		if (AllTypesCache.isCacheUpToDate()) {
+			// run without progress monitor
+			AllTypesCache.getTypes(scope, kinds, null, typeList);
+		} else {
+			IRunnableWithProgress runnable= new IRunnableWithProgress() {
+				public void run(IProgressMonitor monitor) throws InvocationTargetException, InterruptedException {
+					AllTypesCache.getTypes(scope, kinds, monitor, typeList);
+					if (monitor.isCanceled()) {
+						throw new InterruptedException();
+					}
 				}
+			};
+
+			try {
+				getContainer().run(true, true, runnable);
+			} catch (InvocationTargetException e) {
+				String title= NewWizardMessages.getString("NewClassWizardPage.getProjectClasses.exception.title"); //$NON-NLS-1$
+				String message= NewWizardMessages.getString("NewClassWizardPage.getProjectClasses.exception.message"); //$NON-NLS-1$
+				ExceptionHandler.handle(e, title, message);
+				return null;
+			} catch (InterruptedException e) {
+				// cancelled by user
+				return null;
 			}
-		};
+		}
 		
-		try {
-			getWizard().getContainer().run(false, true, runnable);
-		} catch (InvocationTargetException e) {				
-		} catch (InterruptedException e) {
-		} 
-		finally {
+		if (typeList.isEmpty()) {
+			elementsOfTypeClassInProject= new ITypeInfo[0];
+		} else {
+			elementsOfTypeClassInProject= (ITypeInfo[]) typeList.toArray(new ITypeInfo[typeList.size()]);
+			Arrays.sort(elementsOfTypeClassInProject, TYPE_NAME_COMPARATOR);
 		}
+
 		return elementsOfTypeClassInProject;				
 	}
 	
-	protected Object chooseBaseClass(){
-		// find the available classes in this project
-		List elementsFound = findClassElementsInProject();
-		
-		ElementListSelectionDialog dialog = new ElementListSelectionDialog(getShell(), new CSearchResultLabelProvider());
-		dialog.setTitle(NewWizardMessages.getString("BaseClassSelectionDialog.title")); //$NON-NLS-1$
-		dialog.setMessage(NewWizardMessages.getString("BaseClassSelectionDialog.message")); //$NON-NLS-1$
-		dialog.setElements(elementsFound.toArray());
-		dialog.setFilter("*"); //$NON-NLS-1$
-		
-		if (dialog.open() == ElementListSelectionDialog.OK) {
-			Object element= dialog.getFirstResult();
-			return element;
-		}		
-		return null;
+	protected ITypeInfo chooseBaseClass(){
+		ITypeInfo[] elementsFound= findClassElementsInProject();
+		if (elementsFound == null || elementsFound.length == 0) {
+			String title= NewWizardMessages.getString("NewClassWizardPage.getProjectClasses.noclasses.title"); //$NON-NLS-1$
+			String message= NewWizardMessages.getString("NewClassWizardPage.getProjectClasses.noclasses.message"); //$NON-NLS-1$
+			MessageDialog.openInformation(getShell(), title, message);
+			return null;
+		}
+
+		BaseClassSelectionDialog dialog= new BaseClassSelectionDialog(getShell());
+		dialog.setElements(elementsFound);
+
+		int result= dialog.open();
+		if (result != IDialogConstants.OK_ID)
+			return null;
+		
+		return (ITypeInfo)dialog.getFirstResult();
 	}
 	
 	// ------------- getter methods for dialog controls ------------- 			
@@ -806,16 +786,24 @@
 		if((baseClassName != null) && (baseClassName.length() > 0))
 		{
 			extendingBase = true;
-			List classElements = findClassElementsInProject();
-			BasicSearchMatch baseClass = (BasicSearchMatch)findInList(baseClassName, null, classElements);
+			
+			ITypeInfo[] classElements = findClassElementsInProject();
+			ITypeInfo baseClass = findInList(baseClassName, null, classElements);
 
-//			if(baseClass != null){
-//				IPath baseClassFileLocation = baseClass.getLocation();
-//				IPath newFilePath = getContainerFullPath(linkedResourceGroupForHeader);
-//				baseClassFileName = baseClassName + HEADER_EXT;
-//			} else {
+			if (baseClass != null) {
+				IPath includePath= null;
+				if (eSelection != null)
+					includePath= baseClass.resolveIncludePath(eSelection.getCProject());
+				if (includePath == null)
+					includePath= baseClass.getLocation();
+
+				if (includePath != null)
+					baseClassFileName= includePath.toString();
+				else
+					baseClassFileName= baseClass.getFileName();
+			} else {
 				baseClassFileName = baseClassName + HEADER_EXT;
-//			}
+			}
 		}
 		
 		if(isIncludeGuard()){
@@ -923,7 +911,6 @@
 		text.append(lineDelimiter);				
 		return text.toString();
 	}
-	
 
 	// ------ validation --------
 	protected void doStatusUpdate() {
@@ -983,7 +970,7 @@
 		}		
 
 		// must not exist
-		List elementsFound = findClassElementsInProject();
+		ITypeInfo[] elementsFound= findClassElementsInProject();
 		if(foundInList(getNewClassName(), getContainerPath(linkedResourceGroupForHeader), elementsFound)){
 			status.setWarning(NewWizardMessages.getString("NewClassWizardPage.error.ClassNameExists")); //$NON-NLS-1$
 		}
@@ -1014,35 +1001,29 @@
 		} 
 
 		// if class does not exist, give warning 
-		List elementsFound = findClassElementsInProject();
+		ITypeInfo[] elementsFound = findClassElementsInProject();
 		if(!foundInList(baseClassName, null, elementsFound)){
 			status.setWarning(NewWizardMessages.getString("NewClassWizardPage.warning.BaseClassNotExists")); //$NON-NLS-1$
 		}
 		return status;		
 	}
 		
-	private Object findInList(String name, IPath path, List elements){
-		Iterator i = elements.iterator();
-		while (i.hasNext()){
-			BasicSearchMatch element = (BasicSearchMatch)i.next();
-			if(path != null){
-				// check both the name and the path
-				if ((name.equals(element.getName())) && (path.makeAbsolute().equals(element.getLocation())))
-					return element;
-			} else {
-				// we don't care about the path
-				if (name.equals(element.getName()))
-					return element;				
-			}
-		}
-		return null;
+	/**
+	 * A comparator for simple type names
+	 */
+	final static private Comparator TYPE_NAME_COMPARATOR= new Comparator() {
+		public int compare(Object o1, Object o2) {
+			return ((ITypeInfo)o1).getName().compareTo(((ITypeInfo)o2).getName());
+		}
+	};
+	private ITypeInfo findInList(String name, IPath path, ITypeInfo[] elements) {
+		if (elements == null || elements.length == 0)
+			return null;
+		return TypeInfo.findType(name, path, elements);
 	}
 	
-	private boolean foundInList(String name, IPath path, List elements){
-		if(findInList(name, path, elements) != null)
-			return true;
-		else
-			return false;
+	private boolean foundInList(String name, IPath path, ITypeInfo[] elements){
+		return (findInList(name, path, elements) != null);
 	}
 
 }
Index: src/org/eclipse/cdt/internal/ui/wizards/BaseClassSelectionDialog.java
===================================================================
RCS file: src/org/eclipse/cdt/internal/ui/wizards/BaseClassSelectionDialog.java
diff -N src/org/eclipse/cdt/internal/ui/wizards/BaseClassSelectionDialog.java
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ src/org/eclipse/cdt/internal/ui/wizards/BaseClassSelectionDialog.java	1 Jan 1970 00:00:00 -0000
@@ -0,0 +1,39 @@
+/*******************************************************************************
+ * Copyright (c) 2004 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials 
+ * are made available under the terms of the Common Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/cpl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *     QNX Software Systems - adapted for use in CDT
+ *******************************************************************************/
+package org.eclipse.cdt.internal.ui.wizards;
+
+import org.eclipse.cdt.core.model.ICElement;
+import org.eclipse.cdt.ui.browser.typeinfo.TypeSelectionDialog;
+import org.eclipse.swt.widgets.Shell;
+
+/**
+ * A dialog to select a type from a list of types. The selected type will be
+ * opened in the editor.
+ */
+public class BaseClassSelectionDialog extends TypeSelectionDialog {
+
+	private static final String DIALOG_SETTINGS= BaseClassSelectionDialog.class.getName();
+	private static final int[] fVisibleTypes= {ICElement.C_CLASS, ICElement.C_STRUCT};
+
+	/**
+	 * Constructs an instance of <code>OpenTypeDialog</code>.
+	 * @param parent  the parent shell.
+	 */
+	public BaseClassSelectionDialog(Shell parent) {
+		super(parent);
+		setTitle(NewWizardMessages.getString("BaseClassSelectionDialog.title")); //$NON-NLS-1$
+		setMessage(NewWizardMessages.getString("BaseClassSelectionDialog.message")); //$NON-NLS-1$
+		setMatchEmptyString(true);
+		setDialogSettings(DIALOG_SETTINGS);
+		setVisibleTypes(fVisibleTypes);
+	}
+}

Back to the top