1.1 --- a/test/tools/javac/defaultMethods/syntax/TestDefaultMethodsSyntax.java Mon Jan 21 20:15:16 2013 +0000 1.2 +++ b/test/tools/javac/defaultMethods/syntax/TestDefaultMethodsSyntax.java Mon Jan 21 20:19:53 2013 +0000 1.3 @@ -23,7 +23,7 @@ 1.4 1.5 /* 1.6 * @test 1.7 - * @bug 7192245 8005851 1.8 + * @bug 7192245 8005851 8005166 1.9 * @summary Automatic test for checking set of allowed modifiers on interface methods 1.10 */ 1.11 1.12 @@ -54,7 +54,7 @@ 1.13 } 1.14 1.15 List<String> getOptions() { 1.16 - return Arrays.asList("-source", versionString); 1.17 + return Arrays.asList("-XDallowStaticInterfaceMethods", "-source", versionString); 1.18 } 1.19 } 1.20 1.21 @@ -77,32 +77,6 @@ 1.22 this.modStr = modStr; 1.23 } 1.24 1.25 - boolean isAllowed(EnclosingKind ek, ModifierKind otherMod) { 1.26 - if (this == otherMod) return false; 1.27 - switch (this) { 1.28 - case NONE: 1.29 - return true; 1.30 - case ABSTRACT: 1.31 - return otherMod != PRIVATE; 1.32 - case NATIVE: 1.33 - return otherMod != ABSTRACT && 1.34 - otherMod != STRICTFP; 1.35 - case FINAL: 1.36 - case STATIC: 1.37 - case SYNCHRONIZED: 1.38 - case STRICTFP: 1.39 - return otherMod != ABSTRACT; 1.40 - case PUBLIC: 1.41 - return true; 1.42 - case PROTECTED: 1.43 - return ek == EnclosingKind.ABSTRACT_CLASS; 1.44 - case DEFAULT: 1.45 - return otherMod != ABSTRACT; 1.46 - default: 1.47 - return true; 1.48 - } 1.49 - } 1.50 - 1.51 static boolean intersect(ModifierKind mk, ModifierKind... mks) { 1.52 for (ModifierKind mk2 : mks) { 1.53 if (mk == mk2) return true; 1.54 @@ -113,7 +87,7 @@ 1.55 static boolean compatible(MethodKind mk, ModifierKind mod1, ModifierKind mod2, EnclosingKind ek) { 1.56 if (intersect(ABSTRACT, mod1, mod2) || intersect(NATIVE, mod1, mod2)) { 1.57 return mk == MethodKind.NO_BODY; 1.58 - } else if (intersect(DEFAULT, mod1, mod2)) { 1.59 + } else if (intersect(DEFAULT, mod1, mod2) || intersect(STATIC, mod1, mod2)) { 1.60 return mk == MethodKind.BODY; 1.61 } else { 1.62 return ek == EnclosingKind.INTERFACE ? 1.63 @@ -123,7 +97,6 @@ 1.64 1.65 boolean compatible(EnclosingKind ek) { 1.66 switch (this) { 1.67 - case STATIC: 1.68 case PRIVATE: 1.69 case PROTECTED: 1.70 return ek != EnclosingKind.INTERFACE; 1.71 @@ -176,16 +149,16 @@ 1.72 1.73 static Result[][] allowedModifierPairs = { 1.74 /* NONE PUBLIC PROTECTED PRIVATE ABSTRACT STATIC NATIVE SYNCHRONIZED FINAL STRICTFP DEFAULT */ 1.75 - /* NONE */ { T , T , C , C , T , C , C , C , C , C , I }, 1.76 - /* PUBLIC */ { T , F , F , F , T , C , C , C , C , C , I }, 1.77 + /* NONE */ { T , T , C , C , T , T , C , C , C , C , I }, 1.78 + /* PUBLIC */ { T , F , F , F , T , T , C , C , C , C , I }, 1.79 /* PROTECTED */ { C , F , F , F , C , C , C , C , C , C , F }, 1.80 /* PRIVATE */ { C , F , F , F , F , C , C , C , C , C , F }, 1.81 /* ABSTRACT */ { T , T , C , F , F , F , F , F , F , F , F }, 1.82 - /* STATIC */ { C , C , C , C , F , F , C , C , C , C , F }, 1.83 + /* STATIC */ { T , T , C , C , F , F , C , C , C , T , F }, 1.84 /* NATIVE */ { C , C , C , C , F , C , F , C , C , F , F }, 1.85 /* SYNCHRONIZED */ { C , C , C , C , F , C , C , F , C , C , F }, 1.86 /* FINAL */ { C , C , C , C , F , C , C , C , F , C , F }, 1.87 - /* STRICTFP */ { C , C , C , C , F , C , F , C , C , F , I }, 1.88 + /* STRICTFP */ { C , C , C , C , F , T , F , C , C , F , I }, 1.89 /* DEFAULT */ { I , I , F , F , F , F , F , F , F , I , F }}; 1.90 } 1.91 1.92 @@ -291,6 +264,9 @@ 1.93 errorExpected |= ModifierKind.intersect(ModifierKind.DEFAULT, modk1, modk2) && 1.94 vk == VersionKind.PRE_LAMBDA; 1.95 1.96 + errorExpected |= ModifierKind.intersect(ModifierKind.STATIC, modk1, modk2) && 1.97 + ek == EnclosingKind.INTERFACE && vk == VersionKind.PRE_LAMBDA; 1.98 + 1.99 checkCount++; 1.100 if (diagChecker.errorFound != errorExpected) { 1.101 throw new AssertionError("Problem when compiling source:\n" + source.getCharContent(true) +