2

jQAssistantの助けを借りて、いくつかの命名規則を実装したいと思います。インターフェイスを実装するすべてのクラスには、PropertyConverterで終わる名前を付ける必要がありますConverter。この規則は、匿名の内部クラスには適用されません。今、私は2つのクエリを持っています。これは、命名規則に違反するすべてのクラスを返します。

MATCH   (t:Type)-[:IMPLEMENTS]->(i:Type) 
WHERE   i.fqn='PropertyConverter' And
NOT     t.name =~ '.*Converter'
RETURN  t.fqn

しかし、このクエリは、 のような名前を持つ内部クラスも返しますABC$1。これらのクラスは、次のクエリで見つけることができます。

 MATCH  (t:Type)-[:IMPLEMENTS]->(i:Type)
 WHERE  i.fqn='org.apache.tamaya.PropertyConverter'
        AND NOT t.name =~ '.*Converter'
 WITH   t
 MATCH  (h:Type)-[:DECLARES]->(t)
 RETURN distinct t.fqn, h.fqn

しかし、2 番目の結果セットに含まれていない最初のクエリの結果のみを取得するように、両方のクエリを組み合わせることができませんでした。

両方のクエリを組み合わせるにはどうすればよいですか?

4

1 に答える 1

3

最善の方法は、定義済みの概念を使用して匿名の内部型 ("java:AnonymousInnerType") を識別することです。Javaプラグインに付属しており、制約は次のようになります。

<constraint id="...">
  <requiresConcept refId="java:AnonymousInnerType" />
  <description>All classes implementing the PropertyConverter interface must have the suffix "Converter".</description>
  <cypher>
    MATCH 
      (t:Type)-[:IMPLEMENTS]->(i:Type)
    WHERE
      i.fqn='PropertyConverter'
      and not t:Anonymous:Inner
      and not t.name =~ '.*Converter'
    RETURN
      t.fqn
  </cypher>
</constraint>
于 2015-04-12T21:02:42.220 に答える