Skip to main content

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
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);
+                 }
+}



Back to the top