package com.mobilesorcery.sdk.capabilities.core.apianalysis;
import java.text.MessageFormat;
import java.util.Set;
import org.eclipse.cdt.core.CCorePlugin;
import org.eclipse.cdt.core.dom.ast.IASTTranslationUnit;
import org.eclipse.cdt.core.index.IIndex;
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.ITranslationUnit;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Status;
import com.mobilesorcery.sdk.capabilities.core.ICapabilitiesAnalyzer;
import com.mobilesorcery.sdk.core.CoreMoSyncPlugin;
import com.mobilesorcery.sdk.core.ICapabilities;
public class APICapabilitiesAnalyzer implements ICapabilitiesAnalyzer {
public APICapabilitiesAnalyzer() {
}
public ICapabilities analyze(IProject project, IProgressMonitor monitor) throws CoreException {
ICProject cProject = CoreModel.getDefault().create(project);
monitor.beginTask(MessageFormat.format("Analyzing {0}", project.getName()), 1);
monitor.worked(1);
IIndex index = CCorePlugin.getIndexManager().getIndex(cProject);
try {
index.acquireReadLock();
} catch (InterruptedException e) {
throw new CoreException(new Status(IStatus.ERROR, CoreMoSyncPlugin.PLUGIN_ID, e.getMessage(), e));
}
try {
APICapabilitiesAnalyzerASTVisitor astVisitor = new APICapabilitiesAnalyzerASTVisitor(project, APICapabilitiesMap.getInstance());
astVisitor.setProgressMonitor(monitor);
astVisitor.setIndex(index);
cProject.accept(astVisitor);
return astVisitor.getCapabilities();
} finally {
index.releaseReadLock();
monitor.done();
}
}
}