1.1 --- a/test/tools/javac/varargs/warning/Warn5.java Tue Jan 08 10:17:29 2013 +0100 1.2 +++ b/test/tools/javac/varargs/warning/Warn5.java Tue Jan 08 13:47:57 2013 +0000 1.3 @@ -1,5 +1,5 @@ 1.4 /* 1.5 - * Copyright (c) 2010, 2011, Oracle and/or its affiliates. All rights reserved. 1.6 + * Copyright (c) 2010, 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 @@ -26,10 +26,10 @@ 1.11 * @bug 6993978 7097436 1.12 * @summary Project Coin: Annotation to reduce varargs warnings 1.13 * @author mcimadamore 1.14 + * @library ../../lib 1.15 + * @build JavacTestingAbstractThreadedTest 1.16 * @run main Warn5 1.17 */ 1.18 -import com.sun.source.util.JavacTask; 1.19 -import com.sun.tools.javac.api.JavacTool; 1.20 import java.net.URI; 1.21 import java.util.Arrays; 1.22 import java.util.EnumSet; 1.23 @@ -37,10 +37,12 @@ 1.24 import javax.tools.JavaCompiler; 1.25 import javax.tools.JavaFileObject; 1.26 import javax.tools.SimpleJavaFileObject; 1.27 -import javax.tools.StandardJavaFileManager; 1.28 import javax.tools.ToolProvider; 1.29 +import com.sun.source.util.JavacTask; 1.30 1.31 -public class Warn5 { 1.32 +public class Warn5 1.33 + extends JavacTestingAbstractThreadedTest 1.34 + implements Runnable { 1.35 1.36 enum XlintOption { 1.37 NONE("none"), 1.38 @@ -161,9 +163,6 @@ 1.39 REDUNDANT_SAFEVARARGS; 1.40 } 1.41 1.42 - // Create a single file manager and reuse it for each compile to save time. 1.43 - static StandardJavaFileManager fm = JavacTool.create().getStandardFileManager(null, null, null); 1.44 - 1.45 public static void main(String... args) throws Exception { 1.46 for (SourceLevel sourceLevel : SourceLevel.values()) { 1.47 for (XlintOption xlint : XlintOption.values()) { 1.48 @@ -173,14 +172,9 @@ 1.49 for (MethodKind methKind : MethodKind.values()) { 1.50 for (SignatureKind sig : SignatureKind.values()) { 1.51 for (BodyKind body : BodyKind.values()) { 1.52 - new Warn5(sourceLevel, 1.53 - xlint, 1.54 - trustMe, 1.55 - suppressLevel, 1.56 - modKind, 1.57 - methKind, 1.58 - sig, 1.59 - body).test(); 1.60 + pool.execute(new Warn5(sourceLevel, 1.61 + xlint, trustMe, suppressLevel, 1.62 + modKind, methKind, sig, body)); 1.63 } 1.64 } 1.65 } 1.66 @@ -189,6 +183,8 @@ 1.67 } 1.68 } 1.69 } 1.70 + 1.71 + checkAfterExec(false); 1.72 } 1.73 1.74 final SourceLevel sourceLevel; 1.75 @@ -202,7 +198,9 @@ 1.76 final JavaSource source; 1.77 final DiagnosticChecker dc; 1.78 1.79 - public Warn5(SourceLevel sourceLevel, XlintOption xlint, TrustMe trustMe, SuppressLevel suppressLevel, ModifierKind modKind, MethodKind methKind, SignatureKind sig, BodyKind body) { 1.80 + public Warn5(SourceLevel sourceLevel, XlintOption xlint, TrustMe trustMe, 1.81 + SuppressLevel suppressLevel, ModifierKind modKind, 1.82 + MethodKind methKind, SignatureKind sig, BodyKind body) { 1.83 this.sourceLevel = sourceLevel; 1.84 this.xlint = xlint; 1.85 this.trustMe = trustMe; 1.86 @@ -215,24 +213,36 @@ 1.87 this.dc = new DiagnosticChecker(); 1.88 } 1.89 1.90 - void test() throws Exception { 1.91 + @Override 1.92 + public void run() { 1.93 final JavaCompiler tool = ToolProvider.getSystemJavaCompiler(); 1.94 - JavacTask ct = (JavacTask)tool.getTask(null, fm, dc, 1.95 - Arrays.asList(xlint.getXlintOption(), "-source", sourceLevel.sourceKey), null, Arrays.asList(source)); 1.96 - ct.analyze(); 1.97 + JavacTask ct = (JavacTask)tool.getTask(null, fm.get(), dc, 1.98 + Arrays.asList(xlint.getXlintOption(), 1.99 + "-source", sourceLevel.sourceKey), 1.100 + null, Arrays.asList(source)); 1.101 + try { 1.102 + ct.analyze(); 1.103 + } catch (Throwable t) { 1.104 + processException(t); 1.105 + } 1.106 check(); 1.107 } 1.108 1.109 void check() { 1.110 1.111 - EnumSet<WarningKind> expectedWarnings = EnumSet.noneOf(WarningKind.class); 1.112 + EnumSet<WarningKind> expectedWarnings = 1.113 + EnumSet.noneOf(WarningKind.class); 1.114 1.115 if (sourceLevel == SourceLevel.JDK_7 && 1.116 trustMe == TrustMe.TRUST && 1.117 suppressLevel != SuppressLevel.VARARGS && 1.118 xlint != XlintOption.NONE && 1.119 - sig.isVarargs && !sig.isReifiableArg && body.hasAliasing && 1.120 - (methKind == MethodKind.CONSTRUCTOR || (methKind == MethodKind.METHOD && modKind != ModifierKind.NONE))) { 1.121 + sig.isVarargs && 1.122 + !sig.isReifiableArg && 1.123 + body.hasAliasing && 1.124 + (methKind == MethodKind.CONSTRUCTOR || 1.125 + (methKind == MethodKind.METHOD && 1.126 + modKind != ModifierKind.NONE))) { 1.127 expectedWarnings.add(WarningKind.UNSAFE_BODY); 1.128 } 1.129 1.130 @@ -247,7 +257,8 @@ 1.131 if (sourceLevel == SourceLevel.JDK_7 && 1.132 trustMe == TrustMe.TRUST && 1.133 (!sig.isVarargs || 1.134 - (modKind == ModifierKind.NONE && methKind == MethodKind.METHOD))) { 1.135 + (modKind == ModifierKind.NONE && 1.136 + methKind == MethodKind.METHOD))) { 1.137 expectedWarnings.add(WarningKind.MALFORMED_SAFEVARARGS); 1.138 } 1.139 1.140 @@ -255,7 +266,8 @@ 1.141 trustMe == TrustMe.TRUST && 1.142 xlint != XlintOption.NONE && 1.143 suppressLevel != SuppressLevel.VARARGS && 1.144 - (modKind != ModifierKind.NONE || methKind == MethodKind.CONSTRUCTOR) && 1.145 + (modKind != ModifierKind.NONE || 1.146 + methKind == MethodKind.CONSTRUCTOR) && 1.147 sig.isVarargs && 1.148 sig.isReifiableArg) { 1.149 expectedWarnings.add(WarningKind.REDUNDANT_SAFEVARARGS); 1.150 @@ -297,19 +309,23 @@ 1.151 } 1.152 } 1.153 1.154 - class DiagnosticChecker implements javax.tools.DiagnosticListener<JavaFileObject> { 1.155 + class DiagnosticChecker 1.156 + implements javax.tools.DiagnosticListener<JavaFileObject> { 1.157 1.158 EnumSet<WarningKind> warnings = EnumSet.noneOf(WarningKind.class); 1.159 1.160 public void report(Diagnostic<? extends JavaFileObject> diagnostic) { 1.161 if (diagnostic.getKind() == Diagnostic.Kind.WARNING) { 1.162 - if (diagnostic.getCode().contains("unsafe.use.varargs.param")) { 1.163 + if (diagnostic.getCode(). 1.164 + contains("unsafe.use.varargs.param")) { 1.165 setWarning(WarningKind.UNSAFE_BODY); 1.166 - } else if (diagnostic.getCode().contains("redundant.trustme")) { 1.167 + } else if (diagnostic.getCode(). 1.168 + contains("redundant.trustme")) { 1.169 setWarning(WarningKind.REDUNDANT_SAFEVARARGS); 1.170 } 1.171 } else if (diagnostic.getKind() == Diagnostic.Kind.MANDATORY_WARNING && 1.172 - diagnostic.getCode().contains("varargs.non.reifiable.type")) { 1.173 + diagnostic.getCode(). 1.174 + contains("varargs.non.reifiable.type")) { 1.175 setWarning(WarningKind.UNSAFE_DECL); 1.176 } else if (diagnostic.getKind() == Diagnostic.Kind.ERROR && 1.177 diagnostic.getCode().contains("invalid.trustme")) { 1.178 @@ -319,7 +335,8 @@ 1.179 1.180 void setWarning(WarningKind wk) { 1.181 if (!warnings.add(wk)) { 1.182 - throw new AssertionError("Duplicate warning of kind " + wk + " in source:\n" + source); 1.183 + throw new AssertionError("Duplicate warning of kind " + 1.184 + wk + " in source:\n" + source); 1.185 } 1.186 } 1.187 1.188 @@ -327,4 +344,5 @@ 1.189 return warnings.contains(wk); 1.190 } 1.191 } 1.192 + 1.193 }