在查询 jQAssistant 时排除内部 类

Exclusion of inner classes in query for jQAssistant

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

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

但此查询还 returns 内部 类 其名称类似于 ABC。我可以通过以下查询找到这些 类:

 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

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

如何合并这两个查询?

最好的方法是使用预定义的概念来识别匿名内部类型 ("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>