001package com.hammurapi.common; 002 003import java.lang.annotation.ElementType; 004import java.lang.annotation.Retention; 005import java.lang.annotation.RetentionPolicy; 006import java.lang.annotation.Target; 007 008/** 009 * Condition annotation can be used instead of accept methods for parameters and 010 * if () blocks inside infer methods. 011 * 012 * @author Pavel 013 * 014 */ 015@Target({ElementType.METHOD, ElementType.PARAMETER}) 016@Retention(RetentionPolicy.RUNTIME) 017public @interface Condition { 018 019 /** 020 * Condition definition has the following format <code>[language(parameter list)://] condition expression</code>. Default language is Java. 021 * If language is not Java, then Extractor framework is used to look up a extractor provider to create extractor from the expression. 022 * Parameter list is a comma separated list of parameter names, parameters not used in the condition expression can be omitted. 023 * E.g. <code>parent, child, sibling</code> or, if <code>child</code> is not 024 * used in the condition expression <code>parent,,sibling</code>. If parameter list is omitted, then arguments can be accessed through <code>args</code> array for 025 * method level conditions and <code>arg</code> for parameter level conditions. 026 * Condition expression is a fragment of Java code returning boolean. 027 * Handler method's declaring class instance is available through <code>eCtx</code> parameter. 028 */ 029 String[] value(); 030 031}