import java.util.function.Function;
import org.checkerframework.framework.testchecker.flowexpression.qual.FlowExp;

public class LambdaParameter {

  void method(String methodParam) {
    Function<String, String> func1 =
        (
            // :: error: (lambda.param)
            @FlowExp("methodParam") String lambdaParam) -> {
          return "";
        };
    Function<String, String> func2 =
        (
            // :: error: (lambda.param) :: error: (expression.unparsable)
            @FlowExp("lambdaParam") String lambdaParam) -> {
          return "";
        };
    Function<String, String> func3 =
        (
            // :: error: (lambda.param)
            @FlowExp("#1") String lambdaParam) -> {
          @FlowExp("lambdaParam") String s = lambdaParam;
          return "";
        };
    Function<@FlowExp("methodParam") String, String> func4 =
        (
            @FlowExp("methodParam") String lambdaParam) -> {
          return "";
        };
  }

  void method2(String methodParam, @FlowExp("#1") String methodParam2) {
    Function<@FlowExp("methodParam") String, String> func1 =
        (
            @FlowExp("methodParam") String lambdaParam) -> {
          @FlowExp("methodParam") String a = methodParam2;
          @FlowExp("methodParam") String b = lambdaParam;
          return "";
        };
  }

  void method3() {
    String local = "";
    Function<String, String> func1 =
        (
            // :: error: (lambda.param)
            @FlowExp("local") String lambdaParam) -> {
          return "";
        };
    Function<@FlowExp("local") String, String> func2 =
        (
            @FlowExp("local") String lambdaParam) -> {
          return "";
        };
  }

  void method4() {
    String local = "";
    @FlowExp("local") String otherLocal = null;
    Function<@FlowExp("local") String, String> func1 =
        (
            @FlowExp("local") String lambdaParam) -> {
          @FlowExp("local") String a = otherLocal;
          @FlowExp("local") String b = lambdaParam;
          return "";
        };
  }
}
