扩展函数 createResource 给出错误“将 URI 转换为 URI”

问题描述 投票:0回答:1

我想在

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
java xtend
1个回答
0
投票

发现问题了,显然有2种类型

URI
:

  1. java.net.URI
  2. org.eclipse.emf.common.util.URI

函数

createResource()
需要URI
this
类型以避免转换错误。

工作代码需要重新导入

import org.eclipse.emf.common.util.URI

并且函数调用需要修改为

var r = input.createResource(URI.createURI(file.toString))
© www.soinside.com 2019 - 2024. All rights reserved.