001    /**
002     * Property of Hammurapi Group
003     */
004    package com.hammurapi.review;
005    
006    import java.lang.annotation.ElementType;
007    import java.lang.annotation.Retention;
008    import java.lang.annotation.RetentionPolicy;
009    import java.lang.annotation.Target;
010    
011    /**
012     * This annotation indicates that method is an inspector method.
013     * 
014     * Inspector methods can return facts and post facts (conclusions). Review engine
015     * needs to know types of rule outputs. From rule class introspection
016     * the rule system knows about rule method return type, but it doesn't know
017     * about types posted through <code>post()</code>.
018     * 
019     * Also, return type might not be enough, as returned instances may implement
020     * interfaces which other rules are interested in, but which are not declared
021     * in the rule return type.
022     * 
023     * Annotation parameter allows rules to inform the inference system about posted types.
024     * <P>
025     * For methods without fact types information provided through annotation parameter, 
026     * the review system uses method return type. 
027     * 
028     * @author Pavel
029     *
030     */
031    @Target(ElementType.METHOD)
032    @Retention(RetentionPolicy.RUNTIME)
033    public @interface Inspect {
034            
035            /**
036             * @return Conclusion types posted by this method.
037             */
038            Class<?>[] value() default {};
039            
040            /**
041             * @return Inspector severity. This value is overriden by the value provided in the inspector set definition.
042             */
043            int severity() default 2;
044            
045            /**
046             * @return Inspector category. Category definition in the inspector set definition file overrides this category definition.
047             */
048            String[] category() default {};
049            
050    }