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