2

我想在jQAssistant的帮助下实现一些命名约定。所有实现该PropertyConverter接口的类的名称都应以Converter. 此规则不适用于匿名内部类。现在我有两个疑问。这个返回所有违反命名规则的类:

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

但是我无法合并这两个查询,因此我只能得到第一个查询的结果,这些结果不包含在第二个结果集中。

如何结合这两个查询?

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 回答