提交 2f520223 编写于 作者: A alanb

8007405: Update java.lang.reflect API to replace SYNTHESIZED with MANDATED

Reviewed-by: darcy
上级 c2372510
...@@ -278,6 +278,10 @@ public abstract class Executable extends AccessibleObject ...@@ -278,6 +278,10 @@ public abstract class Executable extends AccessibleObject
* this object. Returns an array of length 0 if the executable * this object. Returns an array of length 0 if the executable
* has no parameters. * has no parameters.
* *
* The parameters of the underlying executable do not necessarily
* have unique names, or names that are legal identifiers in the
* Java programming language (JLS 3.8).
*
* @return an array of {@code Parameter} objects representing all * @return an array of {@code Parameter} objects representing all
* the parameters to the executable this object represents * the parameters to the executable this object represents
*/ */
......
...@@ -342,13 +342,13 @@ class Modifier { ...@@ -342,13 +342,13 @@ class Modifier {
static final int SYNTHETIC = 0x00001000; static final int SYNTHETIC = 0x00001000;
static final int ANNOTATION = 0x00002000; static final int ANNOTATION = 0x00002000;
static final int ENUM = 0x00004000; static final int ENUM = 0x00004000;
static final int SYNTHESIZED = 0x00010000; static final int MANDATED = 0x00008000;
static boolean isSynthetic(int mod) { static boolean isSynthetic(int mod) {
return (mod & SYNTHETIC) != 0; return (mod & SYNTHETIC) != 0;
} }
static boolean isSynthesized(int mod) { static boolean isMandated(int mod) {
return (mod & SYNTHESIZED) != 0; return (mod & MANDATED) != 0;
} }
/** /**
......
...@@ -44,7 +44,7 @@ public final class Parameter implements AnnotatedElement { ...@@ -44,7 +44,7 @@ public final class Parameter implements AnnotatedElement {
private final String name; private final String name;
private final int modifiers; private final int modifiers;
private final Executable executable; private final Executable executable;
private int index; private final int index;
/** /**
* Package-private constructor for {@code Parameter}. * Package-private constructor for {@code Parameter}.
...@@ -95,9 +95,14 @@ public final class Parameter implements AnnotatedElement { ...@@ -95,9 +95,14 @@ public final class Parameter implements AnnotatedElement {
} }
/** /**
* Returns a string representation of the parameter's modifiers, * Returns a string describing this parameter. The format is the
* its attributes, its type, its name, and a trailing ... if it is * modifiers for the parameter, if any, in canonical order as
* a variadic parameter. * recommended by <cite>The Java&trade; Language
* Specification</cite>, followed by the fully- qualified type of
* the parameter (excluding the last [] if the parameter is
* variable arity), followed by "..." if the parameter is variable
* arity, followed by a space, followed by the name of the
* parameter.
* *
* @return A string representation of the parameter and associated * @return A string representation of the parameter and associated
* information. * information.
...@@ -118,7 +123,7 @@ public final class Parameter implements AnnotatedElement { ...@@ -118,7 +123,7 @@ public final class Parameter implements AnnotatedElement {
sb.append(typename); sb.append(typename);
sb.append(" "); sb.append(" ");
sb.append(name); sb.append(getName());
return sb.toString(); return sb.toString();
} }
...@@ -143,11 +148,23 @@ public final class Parameter implements AnnotatedElement { ...@@ -143,11 +148,23 @@ public final class Parameter implements AnnotatedElement {
} }
/** /**
* Returns the name of the parameter represented by this * Returns the name of the parameter. The names of the parameters
* {@code Parameter} object. * of a single executable must all the be distinct. When names
* from the originating source are available, they are returned.
* Otherwise, an implementation of this method is free to create a
* name of this parameter, subject to the unquiness requirments.
*/ */
public String getName() { public String getName() {
return name; // As per the spec, if a parameter has no name, return argX,
// where x is the index.
//
// Note: spec updates now outlaw empty strings as parameter
// names. The .equals("") is for compatibility with current
// JVM behavior. It may be removed at some point.
if(name == null || name.equals(""))
return "arg" + index;
else
return name;
} }
/** /**
...@@ -190,20 +207,21 @@ public final class Parameter implements AnnotatedElement { ...@@ -190,20 +207,21 @@ public final class Parameter implements AnnotatedElement {
private transient volatile Class<?> parameterClassCache = null; private transient volatile Class<?> parameterClassCache = null;
/** /**
* Returns {@code true} if this parameter is a synthesized * Returns {@code true} if this parameter is implicitly declared
* construct; returns {@code false} otherwise. * in source code; returns {@code false} otherwise.
* *
* @return true if and only if this parameter is a synthesized * @return true if and only if this parameter is implicitly
* construct as defined by * declared as defined by <cite>The Java&trade; Language
* <cite>The Java&trade; Language Specification</cite>. * Specification</cite>.
*/ */
public boolean isSynthesized() { public boolean isImplicit() {
return Modifier.isSynthesized(getModifiers()); return Modifier.isMandated(getModifiers());
} }
/** /**
* Returns {@code true} if this parameter is a synthetic * Returns {@code true} if this parameter is neither implicitly
* construct; returns {@code false} otherwise. * nor explicitly declared in source code; returns {@code false}
* otherwise.
* *
* @jls 13.1 The Form of a Binary * @jls 13.1 The Form of a Binary
* @return true if and only if this parameter is a synthetic * @return true if and only if this parameter is a synthetic
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册