在查询 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>
我想在 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>