我有一个名为org.eclipse.jface.text.templates.Template的模板:
Template template = new Template(name, description, contextTypeId, pattern, true);
或更好的org.eclipse.cdt.core.model.Template:
Template template = new Template(templateString);
或者让我们说模板已经在首选项中 - > C / C ++ - >代码风格 - >我可以直接从代码模板中获取代码模板。
现在我想创建一个文件,就像你在向导中所做的那样,但是以编程方式:
IFile mainTestFile = testFolder.getFile(resource.getName() + ".myfile");
if (!mainTestFile.exists()) {
mainTestFile.create(template, true, null);
}
不幸的是,它仅适用于InputStream而不适用于Template。
那么如何从我拥有的模板中以编程方式在eclipse项目中创建文件呢?
答案 0 :(得分:0)
好的,所以我这样做的方式可能看起来有点反直觉,但它确实有效:
首先,您需要一个扩展CDT NewSourceFileCreationWizardPage的类。然后重载createFile方法以使用您自己定义的org.eclipse.jface.text.templates.Template。模板代码将放在一个字符串中,该字符串可以从资源文件中获取。
Template myTemplate = new Template("My Template", "My Template for file", "com.my.template.contenttype.contenttype_context", templateString, true);
MyNewFileWizardPage myTemplateWizard = new MyNewFileWizardPage ();
mainTestFile = myTemplateWizard.createMyFile(myTemplate, mainTestFile.getLocation(), null);
自定义新文件向导页面:
class MyNewFileWizardPage extends NewSourceFileCreationWizardPage{
private ITranslationUnit fNewFileTU = null;
@SuppressWarnings("restriction")
public IFile createMyFile(Template template, IPath filePath, IProgressMonitor monitor) throws CoreException {
if (filePath != null) {
if (monitor == null)
monitor = new NullProgressMonitor();
try {
fNewFileTU = null;
IFile newFile = NewSourceFileGenerator.createSourceFile(filePath, true, monitor);
if (newFile != null) {
fNewFileTU = (ITranslationUnit) CoreModel.getDefault().create(newFile);
if (fNewFileTU != null) {
String lineDelimiter = StubUtility.getLineDelimiterUsed(fNewFileTU);
String content = CodeGeneration.getBodyFileContent(template, fNewFileTU, null, null, lineDelimiter);
if (content != null) {
fNewFileTU.getBuffer().setContents(content.toCharArray());
fNewFileTU.save(monitor, true);
return newFile;
}
}
}
} finally {
monitor.done();
}
}
return null;
}
}
然后使用创建的IFile,如果你想要改变它,你可以进一步修改它。