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