private void addPathToResourceGroup( CPElement element, CPElementGroup parent, CPElementGroup group) { IPath resPath = element.getPath(); IPath[] exclusions = (IPath[]) element.getAttribute(CPElement.EXCLUSION); if ((group != parent || !group.getResource().equals(element.getResource())) && resPath.isPrefixOf(group.getPath()) && (resPath.equals(group.getPath()) || !CoreModelUtil.isExcludedPath( group.getResource().getFullPath().removeFirstSegments(resPath.segmentCount()), exclusions))) { if (parent != null) { // try to insert at proper place in group... int insertHere = -1; int ndx = parent.indexof(element); if (ndx != -1) { CPElement[] children = parent.getChildren(element.getEntryKind()); for (int i = ndx; i < children.length; i++) { insertHere = group.indexof(new CPElement(children[i], group.getPath(), group.getResource())); if (insertHere != -1) { group.addChild( new CPElement(element, group.getPath(), group.getResource()), insertHere); break; } } } if (insertHere == -1) { group.addChild(new CPElement(element, group.getPath(), group.getResource())); } } else { group.addChild(new CPElement(element, group.getPath(), group.getResource())); } } }
private List<CPElementGroup> createGroups(ICElement element, List<CPElement> cPaths) { // create resource groups List<CPElementGroup> resourceGroups = new ArrayList<CPElementGroup>(5); fTopGroup = new CPElementGroup(element.getResource()); resourceGroups.add(fTopGroup); // add containers first so that they appear at top of list for (int i = 0; i < cPaths.size(); i++) { CPElement cpelement = cPaths.get(i); switch (cpelement.getEntryKind()) { case IPathEntry.CDT_CONTAINER: fTopGroup.addChild(cpelement); break; } } for (int i = 0; i < cPaths.size(); i++) { CPElement cpelement = cPaths.get(i); switch (cpelement.getEntryKind()) { case IPathEntry.CDT_INCLUDE: case IPathEntry.CDT_INCLUDE_FILE: case IPathEntry.CDT_MACRO: case IPathEntry.CDT_MACRO_FILE: CPElementGroup resGroup = new CPElementGroup(cpelement.getResource()); int ndx = resourceGroups.indexOf(resGroup); if (ndx == -1) { resourceGroups.add(resGroup); } else { resGroup = resourceGroups.get(ndx); } resGroup.addChild(cpelement); } } // place each path in its appropriate inherited group (or not if // excluded) for (int i = 0; i < cPaths.size(); i++) { CPElement cpelement = cPaths.get(i); switch (cpelement.getEntryKind()) { case IPathEntry.CDT_INCLUDE: case IPathEntry.CDT_INCLUDE_FILE: case IPathEntry.CDT_MACRO: case IPathEntry.CDT_MACRO_FILE: addPathToResourceGroups(cpelement, null, resourceGroups); } } return resourceGroups; }
/* (non-Javadoc) * @see org.eclipse.cdt.internal.ui.dialogs.cpaths.CPElementFilter#select(org.eclipse.jface.viewers.Viewer, java.lang.Object, java.lang.Object) */ @Override public boolean select(Viewer viewer, Object parent, Object element) { IResource res = null; if (element instanceof CPElement) { CPElement cpElem = (CPElement) element; res = cpElem.getResource(); } else if (element instanceof CPElementGroup) { CPElementGroup cpElemGroup = (CPElementGroup) element; res = cpElemGroup.getResource(); } if (res != null && !res.equals(fCurrCElement.getResource())) { IPath currResPath = fCurrCElement.getResource().getFullPath(); IPath resPath = res.getFullPath(); boolean found = false; for (int i = currResPath.segmentCount() - 1; i >= 0; --i) { if (resPath.equals(currResPath.uptoSegment(i))) { found = true; break; } } if (found == false) return false; } return super.select(viewer, parent, element); }
public String getCPElementText(CPElement cpentry) { IPath path = cpentry.getPath(); switch (cpentry.getEntryKind()) { case IPathEntry.CDT_LIBRARY: { IPath libPath = (IPath) cpentry.getAttribute(CPElement.LIBRARY); StringBuffer str = new StringBuffer(); addBaseString(libPath, cpentry, str); addExport(cpentry, str); addParentInfo(cpentry, str); return str.toString(); } case IPathEntry.CDT_PROJECT: return path.lastSegment(); case IPathEntry.CDT_INCLUDE: { IPath incPath = ((IPath) cpentry.getAttribute(CPElement.INCLUDE)); StringBuffer str = new StringBuffer(); addBaseString(incPath, cpentry, str); addExport(cpentry, str); addParentInfo(cpentry, str); return str.toString(); } case IPathEntry.CDT_INCLUDE_FILE: { IPath incFilePath = ((IPath) cpentry.getAttribute(CPElement.INCLUDE_FILE)); StringBuffer str = new StringBuffer(); addBaseString(incFilePath, cpentry, str); addExport(cpentry, str); addParentInfo(cpentry, str); return str.toString(); } case IPathEntry.CDT_MACRO: { StringBuffer str = new StringBuffer( (String) cpentry.getAttribute(CPElement.MACRO_NAME) + "=" //$NON-NLS-1$ + (String) cpentry.getAttribute(CPElement.MACRO_VALUE)); addBaseString(null, cpentry, str); addExport(cpentry, str); addParentInfo(cpentry, str); return str.toString(); } case IPathEntry.CDT_MACRO_FILE: { IPath macroFilePath = ((IPath) cpentry.getAttribute(CPElement.MACROS_FILE)); StringBuffer str = new StringBuffer(); addBaseString(macroFilePath, cpentry, str); addExport(cpentry, str); addParentInfo(cpentry, str); return str.toString(); } case IPathEntry.CDT_CONTAINER: { StringBuffer str = new StringBuffer(path.toString()); try { IPathEntryContainer container = CoreModel.getPathEntryContainer(cpentry.getPath(), cpentry.getCProject()); if (container != null) { str.setLength(0); str.append(container.getDescription()); } } catch (CModelException e) { } addExport(cpentry, str); return str.toString(); } case IPathEntry.CDT_SOURCE: case IPathEntry.CDT_OUTPUT: { StringBuffer buf = new StringBuffer(path.makeRelative().toString()); IResource resource = cpentry.getResource(); if (resource != null && !resource.exists()) { buf.append(' '); if (cpentry.getStatus().getSeverity() != IStatus.OK) { // only valid error for src/output would missing path... buf.append(fCreateLabel); } else { buf.append(fNewLabel); } } return buf.toString(); } default: // pass } return CPathEntryMessages.CPElementLabelProvider_unknown_element_label; }