1 package net.sourceforge.jenesis4java; 2 3 /* 4 * #%L 5 * Jenesis 4 Java Code Generator 6 * %% 7 * Copyright (C) 2000 - 2015 jenesis4java 8 * %% 9 * This program is free software: you can redistribute it and/or modify 10 * it under the terms of the GNU Lesser General Public License as 11 * published by the Free Software Foundation, either version 3 of the 12 * License, or (at your option) any later version. 13 * 14 * This program is distributed in the hope that it will be useful, 15 * but WITHOUT ANY WARRANTY; without even the implied warranty of 16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 17 * GNU General Lesser Public License for more details. 18 * 19 * You should have received a copy of the GNU General Lesser Public 20 * License along with this program. If not, see 21 * <http://www.gnu.org/licenses/lgpl-3.0.html>. 22 * #L% 23 */ 24 25 /** 26 * Copyright (C) 2008, 2010 Richard van Nieuwenhoven - ritchie [at] gmx [dot] at 27 * Copyright (C) 2000, 2001 Paul Cody Johnston - pcj@inxar.org <br> 28 * This file is part of Jenesis4java. Jenesis4java is free software: you can 29 * redistribute it and/or modify it under the terms of the GNU Lesser General 30 * Public License as published by the Free Software Foundation, either version 3 31 * of the License, or (at your option) any later version.<br> 32 * Jenesis4java is distributed in the hope that it will be useful, but WITHOUT 33 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS 34 * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more 35 * details.<br> 36 * You should have received a copy of the GNU Lesser General Public License 37 * along with Jenesis4java. If not, see <http://www.gnu.org/licenses/>. 38 */ 39 40 /** 41 * Models Java 8 lambda expressions. 42 */ 43 // TODO: clarify what Lambda might extend (beyond Codeable). 44 public interface Lambda extends Codeable { 45 46 /** 47 * Adds a new formal parameter with the given class type and name to this 48 * {@code Lambda} and returns this {@code Lambda}. 49 */ 50 Lambda addParameter(Class<?> type, String name); 51 52 /** 53 * Adds a new formal parameter with the given type and name to this 54 * {@code Lambda} and returns this {@code Lambda}. 55 * 56 * @return the {@code Lambda} 57 */ 58 Lambda addParameter(Type type, String name); 59 60 /** 61 * Adds a new formal parameter with the specified name. 62 * 63 * @param name 64 * name of the parameter. 65 * @return the {@code Lambda} 66 */ 67 Lambda addParameter(String name); 68 69 /** 70 * Sets the body of the {@code Lambda} (as an {@code Expression}). 71 * 72 * @param body 73 * the body of the {@code Lambda} 74 * @return the {@code Lambda} 75 */ 76 Lambda setBody(Expression body); 77 78 /** 79 * Creates a new Block as body of the {@code Lambda}. 80 * 81 * @return the {@code Block} containing the (initially empty) body of the 82 * {@code Lambda}. 83 */ 84 Block newBodyBlock(); 85 }