/******************************************************************************* * Copyright (c) 2000, 2009 QNX Software Systems and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * QNX Software Systems - Initial API and implementation *******************************************************************************/ package org.eclipse.cdt.internal.core.model; import java.util.ArrayList; import org.eclipse.cdt.core.model.CoreModel; import org.eclipse.cdt.core.model.ICElement; import org.eclipse.cdt.core.model.ICProject; import org.eclipse.cdt.core.model.ISourceRoot; import org.eclipse.cdt.core.settings.model.ICConfigurationDescription; import org.eclipse.cdt.core.settings.model.ICProjectDescription; import org.eclipse.cdt.core.settings.model.ICSourceEntry; import org.eclipse.cdt.internal.core.settings.model.CProjectDescriptionManager; import org.eclipse.core.resources.IContainer; import org.eclipse.core.resources.IFile; import org.eclipse.core.resources.IResource; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IPath; /** */ public class CContainerInfo extends OpenableInfo { Object[] nonCResources = null; /** * Constructs a new C Model Info */ protected CContainerInfo(CElement element) { super(element); } public Object[] getNonCResources(IResource res) { if (nonCResources != null) return nonCResources; ArrayList<IResource> notChildren = new ArrayList<IResource>(); ICElement celement = getElement(); ICProject cproject = celement.getCProject(); // move back to the sourceroot. while (! (celement instanceof ISourceRoot) && celement != null) { celement = celement.getParent(); } ISourceRoot root = null; if (celement instanceof ISourceRoot) { root = (ISourceRoot)celement; } try { IResource[] resources = null; if (res instanceof IContainer) { IContainer container = (IContainer)res; resources = container.members(false); } ICSourceEntry[] entries = null; ICProjectDescription des = CProjectDescriptionManager.getInstance().getProjectDescription(cproject.getProject(), false); if(des != null){ ICConfigurationDescription cfg = des.getDefaultSettingConfiguration(); if(cfg != null){ entries = cfg.getResolvedSourceEntries(); } } if (resources != null) { for (IResource member : resources) { switch(member.getType()) { case IResource.FOLDER: { // Check if the folder is not itself a sourceEntry. IPath resourcePath = member.getFullPath(); if (cproject.isOnSourceRoot(member) || isSourceEntry(resourcePath, entries) || (root == null && cproject.isOnOutputEntry(member))) { continue; } break; } case IResource.FILE: { String filename = member.getName(); if (root != null && CoreModel.isValidTranslationUnitName(cproject.getProject(), filename) && root.isOnSourceEntry(member)) { continue; } if (cproject.isOnOutputEntry(member) && CModelManager.getDefault().createBinaryFile((IFile) member) != null) { continue; } break; } } notChildren.add(member); } } } catch (CoreException e) { //System.out.println (e); //CPlugin.log (e); //e.printStackTrace(); } setNonCResources(notChildren.toArray()); return nonCResources; } public void setNonCResources(Object[] resources) { nonCResources = resources; } private static boolean isSourceEntry(IPath resourcePath, ICSourceEntry[] entries) { if(entries == null) return false; for (ICSourceEntry entry : entries) { // if (entry.getEntryKind() == IPathEntry.CDT_SOURCE) { IPath sourcePath = entry.getFullPath(); if (resourcePath.equals(sourcePath)) { return true; } // } } return false; } }