langtools/src/share/classes/com/sun/tools/javac/parser/JavacParser.java
changeset 14267 6321fbe0cf50
parent 14263 473b1eaede64
child 14359 d4099818ab70
--- a/langtools/src/share/classes/com/sun/tools/javac/parser/JavacParser.java	Tue Oct 16 21:03:36 2012 -0700
+++ b/langtools/src/share/classes/com/sun/tools/javac/parser/JavacParser.java	Wed Oct 17 16:43:26 2012 +0100
@@ -116,6 +116,8 @@
                 fac.options.isSet("allowLambda"); //pre-lambda guard
         this.allowMethodReferences = source.allowMethodReferences() &&
                 fac.options.isSet("allowMethodReferences"); //pre-lambda guard
+        this.allowDefaultMethods = source.allowDefaultMethods() &&
+                fac.options.isSet("allowDefaultMethods"); //pre-lambda guard
         this.keepDocComments = keepDocComments;
         docComments = newDocCommentTable(keepDocComments);
         this.keepLineMap = keepLineMap;
@@ -185,6 +187,10 @@
      */
     boolean allowMethodReferences;
 
+    /** Switch: should we allow default methods in interfaces?
+     */
+    boolean allowDefaultMethods;
+
     /** Switch: should we keep docComments?
      */
     boolean keepDocComments;
@@ -2311,6 +2317,7 @@
             case SYNCHRONIZED: flag = Flags.SYNCHRONIZED; break;
             case STRICTFP    : flag = Flags.STRICTFP; break;
             case MONKEYS_AT  : flag = Flags.ANNOTATION; break;
+            case DEFAULT     : checkDefaultMethods(); flag = Flags.DEFAULT; break;
             case ERROR       : flag = 0; nextToken(); break;
             default: break loop;
             }
@@ -3361,6 +3368,12 @@
             allowMethodReferences = true;
         }
     }
+    void checkDefaultMethods() {
+        if (!allowDefaultMethods) {
+            log.error(token.pos, "default.methods.not.supported.in.source", source.name);
+            allowDefaultMethods = true;
+        }
+    }
 
     /*
      * a functional source tree and end position mappings