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