Hi Pengcheng: I have studied your elegant statically executable LoD checker (class form). Earlier I wrote: The best way to statically check style rules in AspectJ is to make the abstract syntax tree P of the program under consideration available to the AspectJ programmer. P is processed by aspects in a distinct part of the program that is marked "static". Aspects are very convenient to process P especially with the AspectJ extensions that DAJ provides. Your checker seems much simpler than my solution. Here is my summary. You check lexical call join points: If it is of a newly constructed class or of a field class, it is ok. Otherwise it is potentially negative. In the static execution join points (before part) you compute all argument types. In the after part you check the potentially negative join points for the argument types and you report the ones that stay negative. What is interesting is that you do it all with classes without using aspects with a declare warning statement. The violation message is through System.out.println. So how do we get the result at AspectJ compile-time? -- Karl