代码之家  ›  专栏  ›  技术社区  ›  kutschkem

Xtext-如何按文件名进行交叉引用?

  •  0
  • kutschkem  · 技术社区  · 8 年前

    我想在XText中进行交叉引用,而不是使用另一个文件中的某些属性,而是通过文件元数据(文件名)进行交叉引用。

    import: "string_msg/msg/StringMessage"
    
    inputs:
        name: testString
        type: types.string_msg.StringMessage   # this is the cross-reference
        description: "Here goes some type of description or the other"      
    

    “string\u msg/msg/StringMessage”所属的语言仅包含属性信息,而不包含类型名称。我必须从文件名派生类型名称,但理想情况下,要使引用文件的模型对象可用。

    我该怎么做?到目前为止,我看到的所有示例都通过名称属性引用了其他EObjects。

    1 回复  |  直到 8 年前
        1
  •  0
  •   Christian Dietrich    8 年前

    您可以调整 IQualifiedNameProvider 并使用 EObject s eResource 以及资源 URI 计算名称。

    package org.xtext.example.mydsl10;
    
    import org.eclipse.emf.common.util.URI;
    import org.eclipse.xtext.naming.DefaultDeclarativeQualifiedNameProvider;
    import org.eclipse.xtext.naming.QualifiedName;
    import org.xtext.example.mydsl10.myDsl.Greeting;
    
    public class MyDslNameProvider extends DefaultDeclarativeQualifiedNameProvider {
    
        public QualifiedName qualifiedName(Greeting g) {
            URI uri = g.eResource().getURI();
            // this is your job 
            String simpleName = uri.trimFileExtension().lastSegment();
            return QualifiedName.create(simpleName, g.getName());
        }
    
    }
    

    别忘了绑定

    class MyDslRuntimeModule extends AbstractMyDslRuntimeModule {
    
        override bindIQualifiedNameProvider() {
            MyDslNameProvider
        }
    
    }