Eclipse Xtext:通过JvmModelInferrer的通配符泛型类型

Eclipse Xtext:通过JvmModelInferrer的通配符泛型类型,eclipse,dsl,xtext,Eclipse,Dsl,Xtext,我必须用DSL生成的类实现一个外部接口。要实现的方法之一具有以下特征: public void execute(SomeType<? extends OtherType> param1, ...) {...} 它几乎可以工作,但产生了一个非常奇怪的输出: public void execute(final /*SomeType<? extends OtherType> */Object param1, ...) {...} public void execute(fi

我必须用DSL生成的类实现一个外部接口。要实现的方法之一具有以下特征:

public void execute(SomeType<? extends OtherType> param1, ...) {...}
它几乎可以工作,但产生了一个非常奇怪的输出:

public void execute(final /*SomeType<? extends OtherType> */Object param1, ...) {...}

public void execute(final/*SomeType基本上,您应该在模型中设置类型参数,而不是在字符串中创建它。为此,我们在查询中使用以下构造:

it.parameters += pattern.toParameter("processor", 
      pattern.newTypeRef(typeof (IMatchProcessor),
                         cloneWithProxies(matchClassReference).wildCardSuper))
这里,cloneWithProxies由JvmTypesBuilder提供(可以注入),而wildCardSuper是我们编写的一个助手方法:

public JvmWildcardTypeReference wildCardSuper(JvmTypeReference clone) {
        JvmWildcardTypeReference result = factory.createJvmWildcardTypeReference();
        JvmLowerBound lowerBound = factory.createJvmLowerBound();
        lowerBound.setTypeReference(clone);
        result.getConstraints().add(lowerBound);
        return result;
}
public JvmWildcardTypeReference wildCardSuper(JvmTypeReference clone) {
        JvmWildcardTypeReference result = factory.createJvmWildcardTypeReference();
        JvmLowerBound lowerBound = factory.createJvmLowerBound();
        lowerBound.setTypeReference(clone);
        result.getConstraints().add(lowerBound);
        return result;
}