test/tools/javac/lambda/LambdaScope01.java
author mcimadamore
Thu May 27 18:11:12 2010 +0100 (24 months ago)
changeset 553 7704dcd17e0b
child 5581f2a6005435d
permissions -rw-r--r--
initial lambda push; the current prototype suuports the following features:
*) function types syntax (optionally enabled with -XDallowFunctionTypes)
*) function types subtyping
*) full support for lambda expression of type 1 and 2
*) inference of thrown types/return type in a lambda
*) lambda conversion using rules specified in v0.1.5 draft
*) support references to 'this' (both explicit and implicit)
*) translation using method handles

The modified script build of the langtools repository now generates an additional jarfile called javacrt.jar which contains an helper class to be used during SAM conversion; after the build, the generated scripts javac/java will take care of automatically setting up the required dependencies so that code containing lambda expressions can be compiled and executed.
        1 /*
        2  * Copyright 2010 Sun Microsystems, Inc.  All Rights Reserved.
        3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
        4  *
        5  * This code is free software; you can redistribute it and/or modify it
        6  * under the terms of the GNU General Public License version 2 only, as
        7  * published by the Free Software Foundation.
        8  *
        9  * This code is distributed in the hope that it will be useful, but WITHOUT
       10  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
       11  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
       12  * version 2 for more details (a copy is included in the LICENSE file that
       13  * accompanied this code).
       14  *
       15  * You should have received a copy of the GNU General Public License version
       16  * 2 along with this work; if not, write to the Free Software Foundation,
       17  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
       18  *
       19  * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
       20  * CA 95054 USA or visit www.sun.com if you need additional information or
       21  * have any questions.
       22  */
       23 
       24 /*
       25  * @test
       26  * @summary basic test for capture of non-mutable locals
       27  * @author  Brian Goetz
       28  * @author  Maurizio Cimadamore
       29  * @run main/othervm -XX:+UnlockExperimentalVMOptions -XX:+EnableMethodHandles LambdaScope01
       30  */
       31 
       32 public class LambdaScope01 {
       33 
       34     static int assertionCount = 0;
       35 
       36     static void assertTrue(boolean cond) {
       37         assertionCount++;
       38         if (!cond)
       39             throw new AssertionError();
       40     }
       41 
       42     interface TU<T, U> {
       43         public T foo(U u);
       44     }
       45 
       46     public static <T, U> T exec(TU<T, U> lambda, U x) {
       47         return lambda.foo(x);
       48     }
       49 
       50     public int n = 5;
       51 
       52     public int hashCode() {
       53         throw new RuntimeException();
       54     }
       55 
       56     public void test1() {
       57         int x = LambdaScope01.<Integer,Integer>exec(#(Integer x)(x * hashCode()), 3);
       58         assertTrue(true); //should not throw
       59     }
       60 
       61     public void test2() {
       62         final int n = 10;
       63         int x = LambdaScope01.<Integer,Integer>exec(#(Integer x)(x + n), 3);
       64         assertTrue(13 == x);
       65     }
       66 
       67     public static void main(String[] args) {
       68         LambdaScope01 t = new LambdaScope01();
       69         t.test1();
       70         t.test2();
       71         assertTrue(assertionCount == 2);
       72     }
       73 }