1

Xtendについて非常に具体的な質問があります。

すべての例で、xText / xTendについて読みましたが、次のようなものがあります。

override void doGenerate(Resource resource, IFileSystemAccess fsa) {
 for(e: resource.allContents.toIterable.filter(typeof(Entity))) {
   fsa.generateFile(
   e.fullyQualifiedName.toString("/") + ".java",
   e.compile)
 }
}

もっと具体的に言うresource.allContents.toIterable.filter(typeof(Entity))) と、問題を引き起こすのはその行です。エンティティのサブクラスなしで、すべてのエンティティからリソースツリーを下る方法を知りたいです。メソッドフィルターは、リソース内のタイプエンティティとそのサブクラスのすべてのオブジェクトを取得しますが、サブクラスを除外してエンティティのみを取得したいだけです。

4

1 に答える 1

2

次の式を試してください。

allContents.toIterable.filter(typeof(Entity)).filter[ getClass == typeof(Entity) ]

最初のフィルター式は、説明する意味でタイプセーフです(Iterableを返しますが、2番目のフィルター式は、サブタイプを生成しないことを保証します。

EMFを使用する場合、Entityはインターフェースであり、具象クラスはEntityImplのようなものであるため、これは結果を生成しません。その場合、EMF APIを使用して、すべての「実際の」エンティティをフィルタリングすることをお勧めします。

allContents.toIterable
  .filter(typeof(Entity))
  .filter[ eClass == MyEPackage$Literals::ENTITY ]
于 2012-11-06T12:57:20.203 に答える