/* Copyright (C) 2009 Mobile Sorcery AB This program is free software; you can redistribute it and/or modify it under the terms of the Eclipse Public License v1.0. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the Eclipse Public License v1.0 for more details. You should have received a copy of the Eclipse Public License v1.0 along with this program. It is also available at http://www.eclipse.org/legal/epl-v10.html */ package com.mobilesorcery.sdk.internal.dependencies; import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; import java.util.HashMap; import java.util.List; import java.util.Map; import org.eclipse.cdt.core.model.CModelException; import org.eclipse.cdt.core.model.ICElement; import org.eclipse.cdt.core.model.IInclude; import org.eclipse.cdt.core.model.ITranslationUnit; import org.eclipse.cdt.internal.core.model.CModelManager; import org.eclipse.core.resources.IFile; import org.eclipse.core.resources.IResource; import org.eclipse.core.resources.IWorkspace; import org.eclipse.core.resources.ResourcesPlugin; import org.eclipse.core.runtime.Path; import com.mobilesorcery.sdk.core.CoreMoSyncPlugin; public class CResourceDependencyProvider implements IDependencyProvider<IResource> { public static List<IResource> computeDependenciesOf(List<IResource> resources) throws CModelException { ArrayList<IResource> result = new ArrayList<IResource>(); for (IResource resource : resources) { computeDependenciesOf(resource, result); } return result; } public static void computeDependenciesOf(IResource resource, List<IResource> result) throws CModelException { ICElement cfile = CModelManager.getDefault().create(resource, null); if (cfile == null) { return; } ITranslationUnit tu = (ITranslationUnit) cfile.getAdapter(ITranslationUnit.class); if (tu == null) { return; } IInclude[] includes = tu.getIncludes(); for (int i = 0; i < includes.length; i++) { IWorkspace ws = ResourcesPlugin.getWorkspace(); IFile[] files = ws.getRoot().findFilesForLocation(new Path(includes[i].getFullFileName())); result.addAll(Arrays.asList(files)); } if (CoreMoSyncPlugin.getDefault().isDebugging()) { CoreMoSyncPlugin.trace("Resolved dependencies of " + resource + ": " + result); } } public Map<IResource, Collection<IResource>> computeDependenciesOf(IResource resource) throws CModelException { ArrayList<IResource> dependencies = new ArrayList<IResource>(); computeDependenciesOf(resource, dependencies); Map<IResource, Collection<IResource>> result = new HashMap<IResource, Collection<IResource>>(); result.put(resource, dependencies); return result; } }