我想在
xtend
中生成一个Resource变量(指向磁盘上的文件)。
该变量将在 foreach
和编译函数中使用。
代码:
override doGenerate(Resource resource, ResourceSet input, IFileSystemAccess2 fsa, IGeneratorContext context) {
allResources = input.resources.map(r|r.allContents.toIterable.filter(CmlProgram)).flatten
this.fsa = fsa
var BecomeRichestPath = "C:\\path\\to\\file";
var file = new File(BecomeRichestPath).toURI()
LOG.info("URI: " + file)
var r = input.createResource(file) <---------- error here
for (p : resource.allContents.toIterable.filter(CmlProgram)) {
if (!p.contracts.empty) {
fsa.generateFile("/" + resource.URI.trimFileExtension.segmentsList.last + ".sol", p.compile)
println("Count: " + p.eAllContents().size())
}
}
}
为此,我使用
createResource()
列出这里的功能
尽管如此,编译时我还是收到了错误:
类型不匹配:编译期间无法从 URI 转换为 URI。
我无法理解它。
这是我使用的导入列表:
import org.eclipse.emf.ecore.EObject
import org.eclipse.emf.ecore.resource.Resource
import org.eclipse.emf.ecore.resource.ResourceSet
import org.eclipse.xtext.EcoreUtil2
import org.eclipse.xtext.generator.IFileSystemAccess2
import org.eclipse.xtext.generator.IGeneratorContext
发现问题了,显然有2种类型
URI
:
java.net.URI
org.eclipse.emf.common.util.URI
函数
createResource()
需要URI
的this类型以避免转换错误。
工作代码需要重新导入
import org.eclipse.emf.common.util.URI
并且函数调用需要修改为
var r = input.createResource(URI.createURI(file.toString))