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:
parent
75844814e9
commit
f8a2192e8b
3 changed files with 141 additions and 107 deletions
|
@ -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
|
||||||
|
|
|
@ -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();
|
||||||
|
|
|
@ -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);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue