1
0
Fork 0
mirror of https://github.com/eclipse-cdt/cdt synced 2025-08-04 23:05:47 +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 <extension
point="org.eclipse.ui.popupMenus"> point="org.eclipse.ui.popupMenus">
<objectContribution <objectContribution
adaptable="false" adaptable="true"
id="org.eclipse.cdt.ui.rebuildIndexContribution" id="org.eclipse.cdt.ui.rebuildIndexContribution"
objectClass="org.eclipse.cdt.core.model.ICElement"> objectClass="org.eclipse.cdt.core.model.ICElement">
<action <action
@ -721,18 +721,19 @@
</groupMarker> </groupMarker>
</menu> </menu>
<visibility> <visibility>
<or> <objectState
<objectClass name="projectNature"
name="org.eclipse.cdt.core.model.ICProject"> value="org.eclipse.cdt.core.cnature"/>
</objectClass>
<objectClass
name="org.eclipse.cdt.core.model.ICContainer">
</objectClass>
<objectClass
name="org.eclipse.cdt.core.model.ITranslationUnit">
</objectClass>
</or>
</visibility> </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>
<objectContribution <objectContribution
objectClass="org.eclipse.core.resources.IMarker" objectClass="org.eclipse.core.resources.IMarker"
@ -1847,7 +1848,14 @@
id="org.eclipse.cdt.ui.navigator.actions.open" id="org.eclipse.cdt.ui.navigator.actions.open"
overrides="org.eclipse.ui.navigator.resources.OpenActions"> overrides="org.eclipse.ui.navigator.resources.OpenActions">
<enablement> <enablement>
<or>
<instanceof value="org.eclipse.cdt.core.model.ICElement" /> <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>
</actionProvider> </actionProvider>
<actionProvider <actionProvider
@ -1855,7 +1863,14 @@
dependsOn="org.eclipse.ui.navigator.resources.ResourceMgmtActions" dependsOn="org.eclipse.ui.navigator.resources.ResourceMgmtActions"
id="org.eclipse.cdt.ui.navigator.actions.build"> id="org.eclipse.cdt.ui.navigator.actions.build">
<enablement> <enablement>
<or>
<instanceof value="org.eclipse.cdt.core.model.ICElement" /> <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>
</actionProvider> </actionProvider>
<actionProvider <actionProvider

View file

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

View file

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