Hi Jeroen, See http://hg.openjdk.java.net/jdk8/tl/jdk/rev/cf0049037deb
I'm not sure if this is in a promoted build yet. cheers /Joel On 28 mar 2013, at 11:38, Jeroen Frijters <jer...@sumatra.nl> wrote: > Hi Joe, > > I notice that Method.isDefault() returns true for static interface methods. I > assume that is not correct. > > Regards, > Jeroen > >> -----Original Message----- >> From: core-libs-dev-boun...@openjdk.java.net [mailto:core-libs-dev- >> boun...@openjdk.java.net] On Behalf Of Joe Darcy >> Sent: Thursday, March 28, 2013 8:03 >> To: Core-Libs-Dev >> Subject: JDK 8 code review request for JDK-8004979 >> java.lang.reflect.Modifier.toString should include "default" >> >> Hello, >> >> Please review these changes to add support for the "default" modifier to >> the output of Method.to[Generic]String: >> >> 8004979 java.lang.reflect.Modifier.toString should include >> "default" >> http://cr.openjdk.java.net/~darcy/8004979.0/ >> >> Patch also included below. >> >> Thanks, >> >> -Joe >> >> diff -r d254a5f9b93f >> src/share/classes/java/lang/reflect/Constructor.java >> --- a/src/share/classes/java/lang/reflect/Constructor.java Wed Mar 27 >> 13:40:26 2013 -0400 >> +++ b/src/share/classes/java/lang/reflect/Constructor.java Thu Mar 28 >> 00:02:06 2013 -0700 >> @@ -284,9 +284,13 @@ >> * modifiers {@code public}, {@code protected} or >> * {@code private}. Only one of these may appear, or none if the >> * constructor has default (package) access. >> + * >> + * @return a string describing this {@code Constructor} >> + * @jls 8.8.3. Constructor Modifiers >> */ >> public String toString() { >> return sharedToString(Modifier.constructorModifiers(), >> + false, >> parameterTypes, >> exceptionTypes); >> } >> @@ -328,10 +332,11 @@ >> * include type parameters >> * >> * @since 1.5 >> + * @jls 8.8.3. Constructor Modifiers >> */ >> @Override >> public String toGenericString() { >> - return sharedToGenericString(Modifier.constructorModifiers()); >> + return sharedToGenericString(Modifier.constructorModifiers(), >> false); >> } >> >> @Override >> diff -r d254a5f9b93f src/share/classes/java/lang/reflect/Executable.java >> --- a/src/share/classes/java/lang/reflect/Executable.java Wed Mar 27 >> 13:40:26 2013 -0400 >> +++ b/src/share/classes/java/lang/reflect/Executable.java Thu Mar 28 >> 00:02:06 2013 -0700 >> @@ -89,20 +89,24 @@ >> >> } >> >> - void printModifiersIfNonzero(StringBuilder sb, int mask) { >> + void printModifiersIfNonzero(StringBuilder sb, int mask, boolean >> isDefault) { >> int mod = getModifiers() & mask; >> if (mod != 0) { >> sb.append(Modifier.toString(mod)).append(' '); >> } >> + if (isDefault) { >> + sb.append("default "); >> + } >> } >> >> String sharedToString(int modifierMask, >> + boolean isDefault, >> Class<?>[] parameterTypes, >> Class<?>[] exceptionTypes) { >> try { >> StringBuilder sb = new StringBuilder(); >> >> - printModifiersIfNonzero(sb, modifierMask); >> + printModifiersIfNonzero(sb, modifierMask, isDefault); >> specificToStringHeader(sb); >> >> sb.append('('); >> @@ -124,11 +128,11 @@ >> */ >> abstract void specificToStringHeader(StringBuilder sb); >> >> - String sharedToGenericString(int modifierMask) { >> + String sharedToGenericString(int modifierMask, boolean isDefault) { >> try { >> StringBuilder sb = new StringBuilder(); >> >> - printModifiersIfNonzero(sb, modifierMask); >> + printModifiersIfNonzero(sb, modifierMask, isDefault); >> >> TypeVariable<?>[] typeparms = getTypeParameters(); >> if (typeparms.length > 0) { diff -r d254a5f9b93f >> src/share/classes/java/lang/reflect/Field.java >> --- a/src/share/classes/java/lang/reflect/Field.java Wed Mar 27 >> 13:40:26 2013 -0400 >> +++ b/src/share/classes/java/lang/reflect/Field.java Thu Mar 28 >> 00:02:06 2013 -0700 >> @@ -288,6 +288,9 @@ >> * {@code protected} or {@code private} first, and then other >> * modifiers in the following order: {@code static}, {@code >> final}, >> * {@code transient}, {@code volatile}. >> + * >> + * @return a string describing this {@code Field} >> + * @jls 8.3.1 Field Modifiers >> */ >> public String toString() { >> int mod = getModifiers(); >> @@ -315,6 +318,7 @@ >> * its generic type >> * >> * @since 1.5 >> + * @jls 8.3.1 Field Modifiers >> */ >> public String toGenericString() { >> int mod = getModifiers(); >> diff -r d254a5f9b93f src/share/classes/java/lang/reflect/Method.java >> --- a/src/share/classes/java/lang/reflect/Method.java Wed Mar 27 >> 13:40:26 2013 -0400 >> +++ b/src/share/classes/java/lang/reflect/Method.java Thu Mar 28 >> 00:02:06 2013 -0700 >> @@ -343,10 +343,16 @@ >> * {@code public}, {@code protected} or {@code private} first, >> * and then other modifiers in the following order: >> * {@code abstract}, {@code static}, {@code final}, >> - * {@code synchronized}, {@code native}, {@code strictfp}. >> + * {@code synchronized}, {@code native}, {@code strictfp}, >> + * {@code default}. >> + * >> + * @return a string describing this {@code Method} >> + * >> + * @jls 8.4.3 Method Modifiers >> */ >> public String toString() { >> return sharedToString(Modifier.methodModifiers(), >> + isDefault(), >> parameterTypes, >> exceptionTypes); >> } >> @@ -389,16 +395,19 @@ >> * {@code public}, {@code protected} or {@code private} first, >> * and then other modifiers in the following order: >> * {@code abstract}, {@code static}, {@code final}, >> - * {@code synchronized}, {@code native}, {@code strictfp}. >> + * {@code synchronized}, {@code native}, {@code strictfp}, >> + * {@code default}. >> * >> * @return a string describing this {@code Method}, >> * include type parameters >> * >> * @since 1.5 >> + * >> + * @jls 8.4.3 Method Modifiers >> */ >> @Override >> public String toGenericString() { >> - return sharedToGenericString(Modifier.methodModifiers()); >> + return sharedToGenericString(Modifier.methodModifiers(), >> isDefault()); >> } >> >> @Override >> diff -r d254a5f9b93f >> test/java/lang/reflect/Method/GenericStringTest.java >> --- a/test/java/lang/reflect/Method/GenericStringTest.java Wed Mar 27 >> 13:40:26 2013 -0400 >> +++ b/test/java/lang/reflect/Method/GenericStringTest.java Thu Mar 28 >> 00:02:06 2013 -0700 >> @@ -23,7 +23,7 @@ >> >> /* >> * @test >> - * @bug 5033583 6316717 6470106 >> + * @bug 5033583 6316717 6470106 8004979 >> * @summary Check toGenericString() and toString() methods >> * @author Joseph D. Darcy >> */ >> @@ -39,6 +39,7 @@ >> classList.add(TestClass1.class); >> classList.add(TestClass2.class); >> classList.add(Roebling.class); >> + classList.add(TestInterface1.class); >> >> >> for(Class<?> clazz: classList) @@ -129,6 +130,20 @@ >> void varArg(Object ... arg) {} >> } >> >> +interface TestInterface1 { >> + @ExpectedGenericString( >> + "public default void TestInterface1.foo()") >> + @ExpectedString( >> + "public default void TestInterface1.foo()") >> + public default void foo(){;} >> + >> + @ExpectedString( >> + "public default java.lang.Object TestInterface1.bar()") >> + @ExpectedGenericString( >> + "public default <A> A TestInterface1.bar()") >> + default <A> A bar(){return null;} >> +} >> + >> @Retention(RetentionPolicy.RUNTIME) >> @interface ExpectedGenericString { >> String value(); >