my attempt.
java -cp "all_jars_from_eclipse_plugin_dir" MyStandaloneIndexer file2.cc file1.cc
NOTE: that the include path is setup to find file2.h and file1.h in the directory you
run java from or in /tmp.
import org.eclipse.cdt.core.dom.ILinkage;
import org.eclipse.cdt.core.dom.ast.gnu.cpp.GPPLanguage;
import org.eclipse.cdt.core.index.URIRelativeLocationConverter;
import org.eclipse.cdt.core.model.ILanguage;
import org.eclipse.cdt.core.parser.IScannerInfo;
import org.eclipse.cdt.internal.core.indexer.ILanguageMapper;
import org.eclipse.cdt.internal.core.indexer.IStandaloneScannerInfoProvider;
import org.eclipse.cdt.internal.core.indexer.StandaloneFastIndexer;
import org.eclipse.cdt.internal.core.indexer.StdoutLogService;
import org.eclipse.cdt.internal.core.pdom.dom.IPDOMLinkageFactory;
import org.eclipse.cdt.internal.core.pdom.dom.c.PDOMCLinkageFactory;
import org.eclipse.cdt.internal.core.pdom.dom.cpp.PDOMCPPLinkageFactory;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IProgressMonitor;
import java.io.File;
import java.net.URI;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
/**
*/
public class MyStandaloneIndexer extends StandaloneFastIndexer {
// Used by the cdt to help figure out which internal parsers to use for C, c++ and fortran.
static HashMap<String, IPDOMLinkageFactory> linkageFactoryMappings =
new HashMap<String, IPDOMLinkageFactory>();
static {
linkageFactoryMappings.put(ILinkage.CPP_LINKAGE_NAME, new PDOMCPPLinkageFactory());
}
public static void main(String args[]) throws Exception {
File writableIndex = new File("/tmp/standaloneIndexFile.pdom");
MyStandaloneIndexer indexer = new MyStandaloneIndexer(writableIndex);
indexer.setTraceStatistics(true);
ArrayList<String> files = new ArrayList();
for (String arg : args) {
files.add(arg);
}
indexer.rebuild(files, new MyProgressMonitor());
}
public MyStandaloneIndexer(File writableIndexFile) throws Exception {
super(
writableIndexFile,
new URIRelativeLocationConverter(new URI("file", "/", null)),
linkageFactoryMappings,
new MyScannerProvider(),
new MyLanguageMapper(),
new StdoutLogService());
setShowActivity(true);
setShowProblems(true);
}
static public class MyLanguageMapper implements ILanguageMapper {
public ILanguage getLanguage(String file) {
return GPPLanguage.getDefault();
}
}
static public class MyScannerProvider implements IStandaloneScannerInfoProvider {
MyScannerInfo myInfo = new MyScannerInfo();
public IScannerInfo getScannerInformation(String path) {
return myInfo;
}
public IScannerInfo getDefaultScannerInformation(int linkageID) {
return myInfo;
}
}
// NOTE: sets include path to /tmp followed by the current dir.
static public class MyScannerInfo implements IScannerInfo {
final String[] includePath = new String[] {
"/tmp",
System.getProperty("user.dir")
};
final Map<String, String> defines = new HashMap<String, String>();
public Map<String, String> getDefinedSymbols() {
return defines;
};
public String[] getIncludePaths() {
return includePath;
};
}
// Use NullProgressMonitor if we don't care.
static public class MyProgressMonitor implements IProgressMonitor {
public void beginTask(String name, int totalWork) {
System.out.println("monitor: Beginning task: " + name);
}
public void done() { System.out.println("monitor: DONE"); }
public void internalWorked(double work) { System.out.println("monitor: internalWorked: " + work); }
public boolean isCanceled() { return false; }
public void setCanceled(boolean value) { System.out.println("monitor: setCanceled: " + value); }
public void setTaskName(String name) { System.out.println("monitor: setTaskName: " + name); }
public void subTask(String name) { System.out.println("monitor: subtask: " + name); }
public void worked(int work) { System.out.println("monitor: worked: " + work); }
}
}