< prev index next >

test/langtools/tools/javac/processing/filer/TestPackageInfo.java

Print this page

        

@@ -1,7 +1,7 @@
 /*
- * Copyright (c) 2006, 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2006, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
  * under the terms of the GNU General Public License version 2 only, as
  * published by the Free Software Foundation.

@@ -21,11 +21,11 @@
  * questions.
  */
 
 /*
  * @test
- * @bug 6380018 6392177 6993311
+ * @bug 6380018 6392177 6993311 8193462
  * @summary Test the ability to create and process package-info.java files
  * @author  Joseph D. Darcy
  * @library /tools/javac/lib
  * @modules java.compiler
  *          jdk.compiler

@@ -33,11 +33,10 @@
  * @compile TestPackageInfo.java
  * @compile -processor TestPackageInfo -proc:only foo/bar/package-info.java TestPackageInfo.java
  */
 
 import java.util.Set;
-import java.util.HashSet;
 import java.util.Map;
 import javax.annotation.processing.*;
 import javax.lang.model.SourceVersion;
 import static javax.lang.model.SourceVersion.*;
 import javax.lang.model.element.*;

@@ -59,12 +58,12 @@
     public boolean process(Set<? extends TypeElement> annotations,
                            RoundEnvironment roundEnv) {
         round++;
 
         // Verify annotations are as expected
-        Set<TypeElement> expectedAnnotations = new HashSet<TypeElement>();
-        expectedAnnotations.add(eltUtils.getTypeElement("java.lang.Deprecated"));
+        Set<TypeElement> expectedAnnotations =
+            Set.of(eltUtils.getTypeElement("java.lang.Deprecated"));
 
         if (!roundEnv.processingOver()) {
             System.out.println("\nRound " + round);
             int rootElementSize = roundEnv.getRootElements().size();
 

@@ -89,36 +88,62 @@
                     try {
                         filer.createClassFile("package-info");
                         throw new RuntimeException("Created class file for \"package-info\".");
                     } catch(FilerException fe) {}
 
-                    PrintWriter pw = new PrintWriter(filer.createSourceFile("foo.package-info").openWriter());
+                    try(PrintWriter pw =
+                        new PrintWriter(filer.createSourceFile("foo.package-info").openWriter())) {
                     pw.println("@Deprecated");
                     pw.println("package foo;");
-                    pw.close();
+                    }
 
+                    attemptReopening("foo.package-info");
+                    attemptReopening("TestPackageInfo");      // Initial input 
+                    attemptReopening("foo.bar.package-info"); // Initial input 
                 } catch(IOException ioe) {
                     throw new RuntimeException(ioe);
                 }
                 break;
 
             case 2:
                 // Expect foo.package-info
-
-                Set<Element> expectedElement = new HashSet<Element>();
-                expectedElement.add(eltUtils.getPackageElement("foo"));
+                Set<Element> expectedElement = Set.of(eltUtils.getPackageElement("foo"));
                 if (!expectedElement.equals(roundEnv.getRootElements()))
                     throw new RuntimeException("Unexpected root element set " + roundEnv.getRootElements());
 
                 if (!expectedAnnotations.equals(annotations)) {
                     throw new RuntimeException("Unexpected annotations: " + annotations);
                 }
 
+                attemptReopening("foo.package-info");
+
                 break;
 
             default:
                 throw new RuntimeException("Unexpected round number " + round);
             }
         }
         return false;
     }
+
+    private void attemptReopening(String name) {
+        final String SHOULD_NOT_REACH = "Should not reach: created ";
+        try {
+            try {
+                filer.createSourceFile(name);
+                throw new AssertionError(SHOULD_NOT_REACH + name + ".java");
+            } catch (FilerException fe) {
+                ; // Expected
+            }
+
+            try {
+                filer.createClassFile(name);
+                throw new AssertionError(SHOULD_NOT_REACH + name + ".class");
+            } catch (FilerException fe) {
+                ; // Expected
+            }
+        } catch (IOException ioe) {
+            throw new RuntimeException(ioe);
+        }
+
+    }
 }
< prev index next >