JDK 8 code review request for JDK-8004979 java.lang.reflect.Modifier.toString should include "default"
Joe Darcy
joe.darcy at oracle.com
Thu Mar 28 07:03:02 UTC 2013
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();
More information about the core-libs-dev
mailing list