1.1 --- a/test/tools/javac/lambda/LambdaParserTest.java Tue Jan 08 10:17:29 2013 +0100 1.2 +++ b/test/tools/javac/lambda/LambdaParserTest.java Tue Jan 08 13:47:57 2013 +0000 1.3 @@ -1,5 +1,5 @@ 1.4 /* 1.5 - * Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved. 1.6 + * Copyright (c) 2011, 2013, Oracle and/or its affiliates. All rights reserved. 1.7 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 1.8 * 1.9 * This code is free software; you can redistribute it and/or modify it 1.10 @@ -27,21 +27,21 @@ 1.11 * @bug 8003280 1.12 * @summary Add lambda tests 1.13 * Add parser support for lambda expressions 1.14 + * @library ../lib 1.15 + * @build JavacTestingAbstractThreadedTest 1.16 + * @run main LambdaParserTest 1.17 */ 1.18 1.19 -import com.sun.source.util.JavacTask; 1.20 import java.net.URI; 1.21 import java.util.Arrays; 1.22 import javax.tools.Diagnostic; 1.23 -import javax.tools.JavaCompiler; 1.24 import javax.tools.JavaFileObject; 1.25 import javax.tools.SimpleJavaFileObject; 1.26 -import javax.tools.StandardJavaFileManager; 1.27 -import javax.tools.ToolProvider; 1.28 +import com.sun.source.util.JavacTask; 1.29 1.30 -public class LambdaParserTest { 1.31 - 1.32 - static int checkCount = 0; 1.33 +public class LambdaParserTest 1.34 + extends JavacTestingAbstractThreadedTest 1.35 + implements Runnable { 1.36 1.37 enum LambdaKind { 1.38 NILARY_EXPR("()->x"), 1.39 @@ -173,25 +173,26 @@ 1.40 } 1.41 1.42 public static void main(String... args) throws Exception { 1.43 - 1.44 - //create default shared JavaCompiler - reused across multiple compilations 1.45 - JavaCompiler comp = ToolProvider.getSystemJavaCompiler(); 1.46 - StandardJavaFileManager fm = comp.getStandardFileManager(null, null, null); 1.47 - 1.48 for (LambdaKind lk : LambdaKind.values()) { 1.49 for (LambdaParameterKind pk1 : LambdaParameterKind.values()) { 1.50 - if (lk.arity() < 1 && pk1 != LambdaParameterKind.IMPLICIT) continue; 1.51 + if (lk.arity() < 1 && pk1 != LambdaParameterKind.IMPLICIT) 1.52 + continue; 1.53 for (LambdaParameterKind pk2 : LambdaParameterKind.values()) { 1.54 - if (lk.arity() < 2 && pk2 != LambdaParameterKind.IMPLICIT) continue; 1.55 + if (lk.arity() < 2 && pk2 != LambdaParameterKind.IMPLICIT) 1.56 + continue; 1.57 for (ModifierKind mk1 : ModifierKind.values()) { 1.58 - if (mk1 != ModifierKind.NONE && lk.isShort()) continue; 1.59 - if (lk.arity() < 1 && mk1 != ModifierKind.NONE) continue; 1.60 + if (mk1 != ModifierKind.NONE && lk.isShort()) 1.61 + continue; 1.62 + if (lk.arity() < 1 && mk1 != ModifierKind.NONE) 1.63 + continue; 1.64 for (ModifierKind mk2 : ModifierKind.values()) { 1.65 - if (lk.arity() < 2 && mk2 != ModifierKind.NONE) continue; 1.66 + if (lk.arity() < 2 && mk2 != ModifierKind.NONE) 1.67 + continue; 1.68 for (SubExprKind sk : SubExprKind.values()) { 1.69 for (ExprKind ek : ExprKind.values()) { 1.70 - new LambdaParserTest(pk1, pk2, mk1, mk2, lk, sk, ek) 1.71 - .run(comp, fm); 1.72 + pool.execute( 1.73 + new LambdaParserTest(pk1, pk2, mk1, 1.74 + mk2, lk, sk, ek)); 1.75 } 1.76 } 1.77 } 1.78 @@ -199,7 +200,8 @@ 1.79 } 1.80 } 1.81 } 1.82 - System.out.println("Total check executed: " + checkCount); 1.83 + 1.84 + checkAfterExec(); 1.85 } 1.86 1.87 LambdaParameterKind pk1; 1.88 @@ -212,8 +214,9 @@ 1.89 JavaSource source; 1.90 DiagnosticChecker diagChecker; 1.91 1.92 - LambdaParserTest(LambdaParameterKind pk1, LambdaParameterKind pk2, ModifierKind mk1, 1.93 - ModifierKind mk2, LambdaKind lk, SubExprKind sk, ExprKind ek) { 1.94 + LambdaParserTest(LambdaParameterKind pk1, LambdaParameterKind pk2, 1.95 + ModifierKind mk1, ModifierKind mk2, LambdaKind lk, 1.96 + SubExprKind sk, ExprKind ek) { 1.97 this.pk1 = pk1; 1.98 this.pk2 = pk2; 1.99 this.mk1 = mk1; 1.100 @@ -235,7 +238,8 @@ 1.101 1.102 public JavaSource() { 1.103 super(URI.create("myfo:/Test.java"), JavaFileObject.Kind.SOURCE); 1.104 - source = template.replaceAll("#E", ek.expressionString(pk1, pk2, mk1, mk2, lk, sk)); 1.105 + source = template.replaceAll("#E", 1.106 + ek.expressionString(pk1, pk2, mk1, mk2, lk, sk)); 1.107 } 1.108 1.109 @Override 1.110 @@ -244,19 +248,20 @@ 1.111 } 1.112 } 1.113 1.114 - void run(JavaCompiler tool, StandardJavaFileManager fm) throws Exception { 1.115 - JavacTask ct = (JavacTask)tool.getTask(null, fm, diagChecker, 1.116 + public void run() { 1.117 + JavacTask ct = (JavacTask)comp.getTask(null, fm.get(), diagChecker, 1.118 null, null, Arrays.asList(source)); 1.119 try { 1.120 ct.parse(); 1.121 } catch (Throwable ex) { 1.122 - throw new AssertionError("Error thrown when parsing the following source:\n" + source.getCharContent(true)); 1.123 + processException(ex); 1.124 + return; 1.125 } 1.126 check(); 1.127 } 1.128 1.129 void check() { 1.130 - checkCount++; 1.131 + checkCount.incrementAndGet(); 1.132 1.133 boolean errorExpected = (lk.arity() > 0 && !mk1.compatibleWith(pk1)) || 1.134 (lk.arity() > 1 && !mk2.compatibleWith(pk2)); 1.135 @@ -275,7 +280,8 @@ 1.136 } 1.137 } 1.138 1.139 - static class DiagnosticChecker implements javax.tools.DiagnosticListener<JavaFileObject> { 1.140 + static class DiagnosticChecker 1.141 + implements javax.tools.DiagnosticListener<JavaFileObject> { 1.142 1.143 boolean errorFound; 1.144 1.145 @@ -285,4 +291,5 @@ 1.146 } 1.147 } 1.148 } 1.149 + 1.150 }