package com.redhat.ceylon.compiler.java.metadata;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * Marks a parameter of {@code Callable} type as being a functional parameter
 * (i.e. having {@code Method} as its model)
 */
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.PARAMETER})
public @interface FunctionalParameter {
    /** 
     * <p>The names of the parameters of this functional parameter. 
     * Because a functional parameter can itself have functional parameters,
     * and because of the possibility of methods with multiple 
     * parameter lists this is not a simple name. In general values should
     * conform to the {@code input} production of the following grammar:</p>
     *  
     * <pre>
     * input     ::= nameList ( nameList )*
     * nameList  ::= '(' ( name ( ',' name )* )? ')'
     * name      ::= identifier ( nameList )*
     * </pre>
     */
    String value() default "";
}

@@ -992,24 +992,327 @@
    * %3C/pre%3E%0A
+     * %3Cul%3E%0A     *   %3Cli%3EA %7B@code !%7D means that the %7B@code Method%7D model is declared %7B@code void%7D%3C/li%3E%0A     *   %3Cli%3EA %7B@code +%7D means that the %7B@code Parameter%7D model is possibly-empty variadic%3C/li%3E%0A     *   %3Cli%3EA %7B@code *%7D means that the %7B@code Parameter%7D model is nonempty variadic%3C/li%3E%0A     * %3C/ul%3E %0A
      */%0A    

Update javadoc for @FunctionalParameter (now the solution to ceylon/ceylon-compiler#1515 has to deal with voidness and variadicity).