JDK 9 RFR for adding -source 9 and -target 9 to javac

Joe Darcy joe.darcy at oracle.com
Sat Dec 14 13:19:46 PST 2013


Hello,

Please review the patch below which addresses two start-of-release to-do 
items for JDK 9:

     8028545: Add -source 9 and -target 9 to javac
     8000961: Change javac source and target default to 9
     http://cr.openjdk.java.net/~darcy/8028545.0/

(I'm not adding javax.lang.model.SourveVersion.RELEASE_9 in this 
changeset since the regression test for that change relies on the value 
of JDK_MINOR_VERSION being updated in the jdk repo and that has not 
occurred yet.)

I searched through the Source.java and Target.java files and wherever an 
"8" appears, I checked if a "9" appeared in the same analagous as 
appropriate.

For now, the compact profile options work with either release 8 or 
release 9; this may be changed as modularity is updated later in 9.

All regression tests pass.

Thanks,

-Joe

--- old/src/share/classes/com/sun/tools/javac/code/Source.java 
2013-12-14 12:19:59.000000000 -0800
+++ new/src/share/classes/com/sun/tools/javac/code/Source.java 
2013-12-14 12:19:59.000000000 -0800
@@ -67,8 +67,11 @@
      /** 1.7 introduced try-with-resources, multi-catch, string switch, 
etc. */
      JDK1_7("1.7"),

-    /** 1.8 covers the to be determined language features that will be 
added in JDK 8. */
-    JDK1_8("1.8");
+    /** 1.8 lambda expressions and default methods. */
+    JDK1_8("1.8"),
+
+    /** 1.9 covers the to be determined language features that will be 
added in JDK 9. */
+    JDK1_9("1.9");

      private static final Context.Key<Source> sourceKey
          = new Context.Key<Source>();
@@ -87,7 +90,7 @@

      public final String name;

-    private static final Map<String,Source> tab = new 
HashMap<String,Source>();
+    private static final Map<String,Source> tab = new HashMap<>();
      static {
          for (Source s : values()) {
              tab.put(s.name, s);
@@ -96,19 +99,21 @@
          tab.put("6", JDK1_6); // Make 6 an alias for 1.6
          tab.put("7", JDK1_7); // Make 7 an alias for 1.7
          tab.put("8", JDK1_8); // Make 8 an alias for 1.8
+        tab.put("9", JDK1_9); // Make 9 an alias for 1.9
      }

      private Source(String name) {
          this.name = name;
      }

-    public static final Source DEFAULT = JDK1_8;
+    public static final Source DEFAULT = JDK1_9;

      public static Source lookup(String name) {
          return tab.get(name);
      }

      public Target requiredTarget() {
+        if (this.compareTo(JDK1_9) >= 0) return Target.JDK1_9;
          if (this.compareTo(JDK1_8) >= 0) return Target.JDK1_8;
          if (this.compareTo(JDK1_7) >= 0) return Target.JDK1_7;
          if (this.compareTo(JDK1_6) >= 0) return Target.JDK1_6;
@@ -243,6 +248,8 @@
              return RELEASE_7;
          case JDK1_8:
              return RELEASE_8;
+        case JDK1_9:
+            return RELEASE_8; // Adjust once RELEASE_9 exists
          default:
              return null;
          }
--- old/src/share/classes/com/sun/tools/javac/jvm/Profile.java 
2013-12-14 12:19:59.000000000 -0800
+++ new/src/share/classes/com/sun/tools/javac/jvm/Profile.java 
2013-12-14 12:19:59.000000000 -0800
@@ -39,9 +39,9 @@
   *  deletion without notice.</b>
   */
  public enum Profile {
-    COMPACT1("compact1", 1, Target.JDK1_8),
-    COMPACT2("compact2", 2, Target.JDK1_8),
-    COMPACT3("compact3", 3, Target.JDK1_8),
+    COMPACT1("compact1", 1, Target.JDK1_8, Target.JDK1_9),
+    COMPACT2("compact2", 2, Target.JDK1_8, Target.JDK1_9),
+    COMPACT3("compact3", 3, Target.JDK1_8, Target.JDK1_9),

      DEFAULT {
          @Override
--- old/src/share/classes/com/sun/tools/javac/jvm/Target.java 2013-12-14 
12:20:00.000000000 -0800
+++ new/src/share/classes/com/sun/tools/javac/jvm/Target.java 2013-12-14 
12:20:00.000000000 -0800
@@ -48,7 +48,7 @@
      /** J2SE1.4 = Merlin. */
      JDK1_4("1.4", 48, 0),

-    /** Tiger. */
+    /** JDK 5, codename Tiger. */
      JDK1_5("1.5", 49, 0),

      /** JDK 6. */
@@ -58,7 +58,10 @@
      JDK1_7("1.7", 51, 0),

      /** JDK 8. */
-    JDK1_8("1.8", 52, 0);
+    JDK1_8("1.8", 52, 0),
+
+    /** JDK 9, initially an alias for 8. */
+    JDK1_9("1.9", 52, 0);

      private static final Context.Key<Target> targetKey =
          new Context.Key<Target>();
@@ -81,7 +84,7 @@
      private static final Target MAX = values()[values().length - 1];
      public static Target MAX() { return MAX; }

-    private static final Map<String,Target> tab = new 
HashMap<String,Target>();
+    private static final Map<String,Target> tab = new HashMap<>();
      static {
          for (Target t : values()) {
              tab.put(t.name, t);
@@ -90,6 +93,7 @@
          tab.put("6", JDK1_6);
          tab.put("7", JDK1_7);
          tab.put("8", JDK1_8);
+        tab.put("9", JDK1_9);
      }

      public final String name;
@@ -101,7 +105,7 @@
          this.minorVersion = minorVersion;
      }

-    public static final Target DEFAULT = JDK1_8;
+    public static final Target DEFAULT = JDK1_9;

      public static Target lookup(String name) {
          return tab.get(name);
--- old/test/tools/javac/6330997/T6330997.java    2013-12-14 
12:20:00.000000000 -0800
+++ new/test/tools/javac/6330997/T6330997.java    2013-12-14 
12:20:00.000000000 -0800
@@ -1,5 +1,5 @@
  /*
- * Copyright (c) 2006, 2011, Oracle and/or its affiliates. All rights 
reserved.
+ * Copyright (c) 2006, 2013, 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
@@ -23,12 +23,12 @@

  /**
   * @test
- * @bug     6330997 7025789
+ * @bug     6330997 7025789 8000961
   * @summary javac should accept class files with major version of the 
next release
   * @author  Wei Tao
   * @clean T1 T2
- * @compile -target 8 T1.java
- * @compile -target 8 T2.java
+ * @compile -source 8 -target 8 T1.java
+ * @compile -source 8 -target 8 T2.java
   * @run main/othervm T6330997
   */

@@ -67,19 +67,16 @@

      // Increase class file cfile's major version by delta
      static void increaseMajor(String cfile, int delta) {
-        try {
-            RandomAccessFile cls = new RandomAccessFile(
-                    new File(System.getProperty("test.classes", "."), 
cfile), "rw");
-            FileChannel fc = cls.getChannel();
+        try (RandomAccessFile cls =
+             new RandomAccessFile(new 
File(System.getProperty("test.classes", "."), cfile), "rw");
+             FileChannel fc = cls.getChannel()) {
              ByteBuffer rbuf = ByteBuffer.allocate(2);
              fc.read(rbuf, 6);
              ByteBuffer wbuf = ByteBuffer.allocate(2);
              wbuf.putShort(0, (short)(rbuf.getShort(0) + delta));
              fc.write(wbuf, 6);
              fc.force(false);
-            cls.close();
-         } catch (Exception e){
-            e.printStackTrace();
+        } catch (Exception e){
              throw new RuntimeException("Failed: unexpected exception");
           }
       }
--- 
old/test/tools/javac/processing/warnings/TestSourceVersionWarnings.java 
2013-12-14 12:20:00.000000000 -0800
+++ 
new/test/tools/javac/processing/warnings/TestSourceVersionWarnings.java 
2013-12-14 12:20:00.000000000 -0800
@@ -1,5 +1,5 @@
  /*
- * Copyright (c) 2006, 2011, Oracle and/or its affiliates. All rights 
reserved.
+ * Copyright (c) 2006, 2013, 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
@@ -36,7 +36,7 @@
   * @compile/ref=gold_sv_none.out       -XDrawDiagnostics -processor 
TestSourceVersionWarnings -proc:only -ASourceVersion=RELEASE_6 -source 
1.6 -Xlint:-options HelloWorld.java
   * @compile/ref=gold_unsp_warn.out     -XDrawDiagnostics -processor 
TestSourceVersionWarnings -proc:only -ASourceVersion=RELEASE_6 -source 
1.6 -Xlint:-options -Aunsupported HelloWorld.java
   * @compile/ref=gold_sv_none.out       -XDrawDiagnostics -processor 
TestSourceVersionWarnings -proc:only -ASourceVersion=RELEASE_7 -source 
1.7 -Xlint:-options HelloWorld.java
- * @compile/ref=gold_sv_none.out       -XDrawDiagnostics -processor 
TestSourceVersionWarnings -proc:only -ASourceVersion=RELEASE_8 -source 
1.8                 HelloWorld.java
+ * @compile/ref=gold_sv_none.out       -XDrawDiagnostics -processor 
TestSourceVersionWarnings -proc:only -ASourceVersion=RELEASE_8 -source 
1.8 -Xlint:-options HelloWorld.java
   */

  import java.util.Set;
--- old/test/tools/javac/profiles/ProfileOptionTest.java 2013-12-14 
12:20:01.000000000 -0800
+++ new/test/tools/javac/profiles/ProfileOptionTest.java 2013-12-14 
12:20:01.000000000 -0800
@@ -23,7 +23,7 @@

  /*
   * @test
- * @bug 8004182
+ * @bug 8004182 8028545
   * @summary Add support for profiles in javac
   */

@@ -110,7 +110,7 @@
              }

              for (Profile p: Profile.values()) {
-                List<String> opts = new ArrayList<String>();
+                List<String> opts = new ArrayList<>();
                  opts.addAll(Arrays.asList("-source", t.name, 
"-target", t.name));
                  opts.add("-Xlint:-options"); // dont warn about no 
-bootclasspath
                  if (p != Profile.DEFAULT)
@@ -128,6 +128,7 @@

                  switch (t) {
                      case JDK1_8:
+                    case JDK1_9:
                          if (!out.isEmpty())
                              error("unexpected output from compiler");
                          break;
--- old/test/tools/javac/versions/check.sh    2013-12-14 
12:20:01.000000000 -0800
+++ new/test/tools/javac/versions/check.sh    2013-12-14 
12:20:01.000000000 -0800
@@ -1,5 +1,5 @@
  #
-# Copyright (c) 2004, 2012, Oracle and/or its affiliates. All rights 
reserved.
+# Copyright (c) 2004, 2013, 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
@@ -22,7 +22,7 @@
  #

  # @test
-# @bug 4981566 5028634 5094412 6304984 7025786 7025789 8001112
+# @bug 4981566 5028634 5094412 6304984 7025786 7025789 8001112 8028545 
8000961
  # @summary Check interpretation of -target and -source options
  # @build CheckClassFileVersion
  # @run shell check.sh
@@ -44,7 +44,7 @@
  check() {
    V=$1; shift
    echo "+ javac $* [$V]"
-  "$JC" ${TESTTOOLVMOPTS} -d $TC $* $TC/X.java && "$J" $CFV $TC/X.class 
$V || exit 2
+  "$JC" ${TESTTOOLVMOPTS} -Xlint:-options -d $TC $* $TC/X.java && "$J" 
$CFV $TC/X.class $V || exit 2
  }

  # check for all combinations of target values
@@ -78,6 +78,10 @@
  check_source_target 52.0 7   8
  check_source_target 52.0 8   8

+check_target        52.0 1.5 9
+check_source_target 52.0 8   9
+check_source_target 52.0 9   9
+
  # and finally the default with no options
  check 52.0

@@ -85,7 +89,7 @@

  fail() {
    echo "+ javac $*"
-  if "$JC" ${TESTTOOLVMOPTS} -d $TC $*; then
+  if "$JC" ${TESTTOOLVMOPTS} -Xlint:-options -d $TC $*; then
      echo "-- did not fail as expected"
      exit 3
    else
@@ -95,7 +99,7 @@

  pass() {
    echo "+ javac $*"
-  if "$JC" ${TESTTOOLVMOPTS} -d $TC $*; then
+  if "$JC" ${TESTTOOLVMOPTS} -Xlint:options -d $TC $*; then
      echo "-- passed"
    else
      echo "-- failed"
@@ -109,6 +113,7 @@
  checksrc16() { checksrc15 $* ; }
  checksrc17() { checksrc15 $* ; }
  checksrc18() { checksrc15 $* ; }
+checksrc19() { checksrc15 $* ; }

  checksrc14 -source 1.4
  checksrc14 -source 1.4 -target 1.5
@@ -126,14 +131,19 @@
  checksrc17 -source 1.7 -target 1.7
  checksrc17 -source 7 -target 7

-checksrc18
-checksrc18 -target 1.8
-checksrc18 -target 8
  checksrc18 -source 1.8
  checksrc18 -source 8
  checksrc18 -source 1.8 -target 1.8
  checksrc18 -source 8 -target 8

+checksrc19
+checksrc19 -source 1.9
+checksrc19 -source 9
+checksrc19 -source 1.9 -target 1.9
+checksrc19 -source 9 -target 9
+checksrc19 -target 1.9
+checksrc19 -target 9
+
  fail -source 1.5 -target 1.4 $TC/X.java
  fail -source 1.6 -target 1.4 $TC/X.java
  fail -source 6   -target 1.4 $TC/X.java
@@ -142,3 +152,5 @@
  fail -source 7   -target 1.6 $TC/X.java
  fail -source 8   -target 1.6 $TC/X.java
  fail -source 8   -target 1.7 $TC/X.java
+fail -source 9   -target 1.7 $TC/X.java
+fail -source 9   -target 1.8 $TC/X.java



More information about the compiler-dev mailing list