问题:
如果存在诸如如下所示的过滤器 B,则过滤器 A 将不起作用:
B 放置在 A 之前,并且与 B 匹配的类也与 A 匹配。
例如,如果过滤器看起来如下所示:
ClassA* method* INCLUDE * * EXCLUDE
这样,第一个过滤器将不正确地包括 ClassABC 中的方法 initialize(),这是因为它的类名与模式 classA* 匹配,即使方法名与方法模式不匹配。这也暗示了以下情况将导致包括以 ClassA 开头的所有方法:
ClassA* method* INCLUDE ClassA* * EXCLUDE
因为总是忽略第二个过滤器。
变通方法:
缺省情况下,如果类或方法与任何过滤器都不匹配,则将包括它。因此,永远也不要使用 INCLUDE 过滤器,而只使用 EXCLUDE 过滤器。因为只有第一个匹配的类模式起作用,所以对每个类只能指定一个 EXCLUDE 过滤器,并且在此过滤器中,可以使用方法模式来指定排除哪些方法,如下所示:
ClassA method* EXCLUDE ClassB call* EXCLUDE
(C) Copyright IBM Corporation 2000, 2003. All Rights Reserved.