1
0
Fork 0
mirror of https://github.com/eclipse-cdt/cdt synced 2025-07-24 09:25:31 +02:00

Fix for 150404: [CommonNavigator] CDT Projects appear twice (in cooperation with Michael D. Elder)

This commit is contained in:
Anton Leherbauer 2007-04-25 09:49:23 +00:00
parent 75844814e9
commit f8a2192e8b
3 changed files with 141 additions and 107 deletions

View file

@ -699,7 +699,7 @@
<extension
point="org.eclipse.ui.popupMenus">
<objectContribution
adaptable="false"
adaptable="true"
id="org.eclipse.cdt.ui.rebuildIndexContribution"
objectClass="org.eclipse.cdt.core.model.ICElement">
<action
@ -721,18 +721,19 @@
</groupMarker>
</menu>
<visibility>
<or>
<objectClass
name="org.eclipse.cdt.core.model.ICProject">
</objectClass>
<objectClass
name="org.eclipse.cdt.core.model.ICContainer">
</objectClass>
<objectClass
name="org.eclipse.cdt.core.model.ITranslationUnit">
</objectClass>
</or>
<objectState
name="projectNature"
value="org.eclipse.cdt.core.cnature"/>
</visibility>
<!-- See https://bugs.eclipse.org/bugs/show_bug.cgi?id=143594
[Menus] popupMenus.exsd schema incorrectly does not allow eclipse core expressions -->
<!--enablement>
<adapt type="org.eclipse.core.resources.IProject">
<test
property="org.eclipse.core.resources.projectNature"
value="org.eclipse.cdt.core.cnature"/>
</adapt>
</enablement-->
</objectContribution>
<objectContribution
objectClass="org.eclipse.core.resources.IMarker"
@ -1846,17 +1847,31 @@
class="org.eclipse.cdt.internal.ui.navigator.CNavigatorOpenActionProvider"
id="org.eclipse.cdt.ui.navigator.actions.open"
overrides="org.eclipse.ui.navigator.resources.OpenActions">
<enablement>
<instanceof value="org.eclipse.cdt.core.model.ICElement"/>
</enablement>
<enablement>
<or>
<instanceof value="org.eclipse.cdt.core.model.ICElement" />
<adapt type="org.eclipse.core.resources.IProject">
<test
property="org.eclipse.core.resources.projectNature"
value="org.eclipse.cdt.core.cnature"/>
</adapt>
</or>
</enablement>
</actionProvider>
<actionProvider
class="org.eclipse.cdt.internal.ui.navigator.CNavigatorBuildActionProvider"
dependsOn="org.eclipse.ui.navigator.resources.ResourceMgmtActions"
id="org.eclipse.cdt.ui.navigator.actions.build">
<enablement>
<instanceof value="org.eclipse.cdt.core.model.ICElement"/>
</enablement>
<enablement>
<or>
<instanceof value="org.eclipse.cdt.core.model.ICElement" />
<adapt type="org.eclipse.core.resources.IProject">
<test
property="org.eclipse.core.resources.projectNature"
value="org.eclipse.cdt.core.cnature"/>
</adapt>
</or>
</enablement>
</actionProvider>
<actionProvider
class="org.eclipse.cdt.internal.ui.navigator.CNavigatorSearchActionProvider"
@ -1889,7 +1904,7 @@
overrides="org.eclipse.ui.navigator.resources.actions.RefactorActions">
<enablement>
<or>
<instanceof value="org.eclipse.cdt.core.model.ICElement" />
<instanceof value="org.eclipse.cdt.core.model.ICElement" />
<instanceof value="org.eclipse.core.resources.IResource" />
</or>
</enablement>
@ -1899,96 +1914,96 @@
menuGroupId="org.eclipse.cdt.ui.newProject"
type="new"
wizardId="org.eclipse.cdt.ui.wizards.NewCWizard1">
<enablement>
<or>
<instanceof value="org.eclipse.cdt.core.model.ICElement" />
<adapt type="org.eclipse.core.resources.IProject">
<test
property="org.eclipse.core.resources.projectNature"
value="org.eclipse.cdt.core.cnature"/>
</adapt>
</or>
</enablement>
<enablement>
<or>
<instanceof value="org.eclipse.cdt.core.model.ICElement" />
<adapt type="org.eclipse.core.resources.IProject">
<test
property="org.eclipse.core.resources.projectNature"
value="org.eclipse.cdt.core.cnature"/>
</adapt>
</or>
</enablement>
</commonWizard>
<commonWizard
associatedExtensionId="org.eclipse.cdt.ui.navigator.content"
menuGroupId="org.eclipse.cdt.ui.newProject"
type="new"
wizardId="org.eclipse.cdt.ui.wizards.NewCWizard2">
<enablement>
<or>
<instanceof value="org.eclipse.cdt.core.model.ICElement" />
<adapt type="org.eclipse.core.resources.IProject">
<test
property="org.eclipse.core.resources.projectNature"
value="org.eclipse.cdt.core.cnature"/>
</adapt>
</or>
</enablement>
<enablement>
<or>
<instanceof value="org.eclipse.cdt.core.model.ICElement" />
<adapt type="org.eclipse.core.resources.IProject">
<test
property="org.eclipse.core.resources.projectNature"
value="org.eclipse.cdt.core.cnature"/>
</adapt>
</or>
</enablement>
</commonWizard>
<commonWizard
associatedExtensionId="org.eclipse.cdt.ui.navigator.content"
menuGroupId="org.eclipse.cdt.ui"
type="new"
wizardId="org.eclipse.cdt.ui.wizards.NewSourceFileCreationWizard">
<enablement>
<or>
<instanceof value="org.eclipse.cdt.core.model.ICElement" />
<adapt type="org.eclipse.core.resources.IProject">
<test
property="org.eclipse.core.resources.projectNature"
value="org.eclipse.cdt.core.cnature"/>
</adapt>
</or>
</enablement>
<enablement>
<or>
<instanceof value="org.eclipse.cdt.core.model.ICElement" />
<adapt type="org.eclipse.core.resources.IProject">
<test
property="org.eclipse.core.resources.projectNature"
value="org.eclipse.cdt.core.cnature"/>
</adapt>
</or>
</enablement>
</commonWizard>
<commonWizard
associatedExtensionId="org.eclipse.cdt.ui.navigator.content"
menuGroupId="org.eclipse.cdt.ui"
type="new"
wizardId="org.eclipse.cdt.ui.wizards.NewHeaderFileCreationWizard">
<enablement>
<or>
<instanceof value="org.eclipse.cdt.core.model.ICElement" />
<adapt type="org.eclipse.core.resources.IProject">
<test
property="org.eclipse.core.resources.projectNature"
value="org.eclipse.cdt.core.cnature"/>
</adapt>
</or>
</enablement>
<enablement>
<or>
<instanceof value="org.eclipse.cdt.core.model.ICElement" />
<adapt type="org.eclipse.core.resources.IProject">
<test
property="org.eclipse.core.resources.projectNature"
value="org.eclipse.cdt.core.cnature"/>
</adapt>
</or>
</enablement>
</commonWizard>
<commonWizard
associatedExtensionId="org.eclipse.cdt.ui.navigator.content"
menuGroupId="org.eclipse.cdt.ui"
type="new"
wizardId="org.eclipse.cdt.ui.wizards.NewSourceFolderCreationWizard">
<enablement>
<or>
<instanceof value="org.eclipse.cdt.core.model.ICElement" />
<adapt type="org.eclipse.core.resources.IProject">
<test
property="org.eclipse.core.resources.projectNature"
value="org.eclipse.cdt.core.cnature"/>
</adapt>
</or>
</enablement>
<enablement>
<or>
<instanceof value="org.eclipse.cdt.core.model.ICElement" />
<adapt type="org.eclipse.core.resources.IProject">
<test
property="org.eclipse.core.resources.projectNature"
value="org.eclipse.cdt.core.cnature"/>
</adapt>
</or>
</enablement>
</commonWizard>
<commonWizard
associatedExtensionId="org.eclipse.cdt.ui.navigator.content"
menuGroupId="org.eclipse.cdt.ui"
type="new"
wizardId="org.eclipse.cdt.ui.wizards.NewClassCreationWizard">
<enablement>
<or>
<instanceof value="org.eclipse.cdt.core.model.ICElement" />
<adapt type="org.eclipse.core.resources.IProject">
<test
property="org.eclipse.core.resources.projectNature"
value="org.eclipse.cdt.core.ccnature"/>
</adapt>
</or>
</enablement>
<enablement>
<or>
<instanceof value="org.eclipse.cdt.core.model.ICElement" />
<adapt type="org.eclipse.core.resources.IProject">
<test
property="org.eclipse.core.resources.projectNature"
value="org.eclipse.cdt.core.ccnature"/>
</adapt>
</or>
</enablement>
</commonWizard>
<dropAssistant
class="org.eclipse.cdt.internal.ui.navigator.CNavigatorDropAdapterAssistant"

View file

@ -7,6 +7,7 @@
*
* Contributors:
* Markus Schorn - initial API and implementation
* Anton Leherbauer (Wind River Systems)
*******************************************************************************/
package org.eclipse.cdt.internal.ui.actions;
@ -41,7 +42,8 @@ public abstract class AbstractUpdateIndexAction implements IObjectActionDelegate
if (!(fSelection instanceof IStructuredSelection))
return;
Iterator i= ((IStructuredSelection)fSelection).iterator();
IStructuredSelection cElements= SelectionConverter.convertSelectionToCElements(fSelection);
Iterator i= cElements.iterator();
ArrayList tuSelection= new ArrayList();
while (i.hasNext()) {
Object o= i.next();

View file

@ -17,6 +17,9 @@ import java.util.List;
import java.util.Set;
import org.eclipse.core.resources.IContainer;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IFolder;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.resources.IWorkspaceRoot;
import org.eclipse.core.runtime.IAdaptable;
@ -33,6 +36,7 @@ import org.eclipse.ui.navigator.PipelinedViewerUpdate;
import org.eclipse.cdt.core.model.CoreModel;
import org.eclipse.cdt.core.model.ICElement;
import org.eclipse.cdt.core.model.ICModel;
import org.eclipse.cdt.core.model.ICProject;
import org.eclipse.cdt.ui.CUIPlugin;
import org.eclipse.cdt.ui.PreferenceConstants;
@ -144,7 +148,8 @@ public class CNavigatorContentProvider extends CViewContentProvider implements I
Object parent= super.getParent(element);
if (parent instanceof ICModel) {
return getViewerInput() != null ? fRealInput : parent;
}
} else if (parent instanceof ICProject)
return ((ICProject)parent).getProject();
return parent;
}
@ -169,8 +174,11 @@ public class CNavigatorContentProvider extends CViewContentProvider implements I
*/
public Object[] getElements(Object parent) {
if (parent instanceof IWorkspaceRoot) {
return super.getElements(CoreModel.create((IWorkspaceRoot)parent));
}
// return super.getElements(CoreModel.create((IWorkspaceRoot)parent));
return ((IWorkspaceRoot)parent).getProjects();
} else if (parent instanceof IProject) {
return super.getChildren(CoreModel.getDefault().create((IProject)parent));
}
return super.getElements(parent);
}
@ -180,7 +188,10 @@ public class CNavigatorContentProvider extends CViewContentProvider implements I
public Object[] getChildren(Object element) {
Object children[];
if (element instanceof IWorkspaceRoot) {
children = super.getChildren(CoreModel.create((IWorkspaceRoot)element));
// children = super.getChildren(CoreModel.create((IWorkspaceRoot)element));
return ((IWorkspaceRoot)element).getProjects();
} else if (element instanceof IProject) {
return super.getChildren(CoreModel.getDefault().create((IProject)element));
} else {
children = super.getChildren(element);
}
@ -190,26 +201,30 @@ public class CNavigatorContentProvider extends CViewContentProvider implements I
/*
* @see org.eclipse.ui.navigator.IPipelinedTreeContentProvider#getPipelinedChildren(java.lang.Object, java.util.Set)
*/
public void getPipelinedChildren(Object parent, Set currentChildren) {
Object[] children= getChildren(parent);
for (Iterator iter= currentChildren.iterator(); iter.hasNext();) {
if (iter.next() instanceof IResource) {
iter.remove();
}
}
currentChildren.addAll(Arrays.asList(children));
public void getPipelinedChildren(Object parent, Set currentChildren) {
customizeCElements(getChildren(parent), currentChildren);
}
// private boolean isCElement(IResource resource) {
// // TODO Implement me properly.
// return CoreModel.getDefault().create(resource) != null;
// }
/*
* @see org.eclipse.ui.navigator.IPipelinedTreeContentProvider#getPipelinedElements(java.lang.Object, java.util.Set)
*/
public void getPipelinedElements(Object input, Set currentElements) {
// only replace plain resource elements with custom elements
// and avoid duplicating elements already customized
// by upstream content providers
Object[] elements= getElements(input);
List elementList= Arrays.asList(elements);
for (Iterator iter= currentElements.iterator(); iter.hasNext();) {
// by upstream content providers
customizeCElements(getElements(input), currentElements);
}
private void customizeCElements(Object[] cChildren, Set proposedChildren) {
List elementList= Arrays.asList(cChildren);
for (Iterator iter= proposedChildren.iterator(); iter.hasNext();) {
Object element= iter.next();
IResource resource= null;
if (element instanceof IResource) {
@ -220,21 +235,21 @@ public class CNavigatorContentProvider extends CViewContentProvider implements I
if (resource != null) {
int i= elementList.indexOf(resource);
if (i >= 0) {
elements[i]= null;
cChildren[i]= null;
}
}
}
for (int i= 0; i < elements.length; i++) {
Object element= elements[i];
for (int i= 0; i < cChildren.length; i++) {
Object element= cChildren[i];
if (element instanceof ICElement) {
ICElement cElement= (ICElement)element;
IResource resource= cElement.getResource();
if (resource != null) {
currentElements.remove(resource);
proposedChildren.remove(resource);
}
currentElements.add(element);
proposedChildren.add(element);
} else if (element != null) {
currentElements.add(element);
proposedChildren.add(element);
}
}
}
@ -286,11 +301,12 @@ public class CNavigatorContentProvider extends CViewContentProvider implements I
private boolean convertToCElements(
PipelinedShapeModification modification) {
Object parent= modification.getParent();
// don't convert projects
if (parent instanceof IContainer) {
ICElement element= CoreModel.getDefault().create((IContainer) parent);
if (element != null) {
// don't convert the root
if( !(element instanceof ICModel)) {
// don't convert the root
if( !(element instanceof ICModel) && !(element instanceof ICProject) ) {
modification.setParent(element);
}
return convertToCElements(modification.getChildren());
@ -313,10 +329,11 @@ public class CNavigatorContentProvider extends CViewContentProvider implements I
ICElement newChild;
for (Iterator iter= currentChildren.iterator(); iter.hasNext();) {
Object child= iter.next();
if (child instanceof IResource) {
// do not convert IProject
if (child instanceof IFile || child instanceof IFolder) {
IResource resource= (IResource)child;
if (resource.isAccessible()) {
if ((newChild= CoreModel.getDefault().create((IResource) child)) != null) {
if ( resource.isAccessible() ) {
if ((newChild= CoreModel.getDefault().create(resource)) != null) {
iter.remove();
convertedChildren.add(newChild);
}