test/tools/javac/varargs/warning/Warn5.java

changeset 1482
954541f13717
parent 1108
b5d0b8effc85
child 1520
5c956be64b9e
     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  }

mercurial