Example #1
0
  /**
   * Package-private routine (exposed to java.lang.Class via ReflectAccess) which returns a copy of
   * this Method. The copy's "root" field points to this Method.
   */
  Method copy() {
    // This routine enables sharing of MethodAccessor objects
    // among Method objects which refer to the same underlying
    // method in the VM. (All of this contortion is only necessary
    // because of the "accessibility" bit in AccessibleObject,
    // which implicitly requires that new java.lang.reflect
    // objects be fabricated for each reflective call on Class
    // objects.)
    Method res =
        new Method(
            clazz,
            name,
            parameterTypes,
            returnType,
            exceptionTypes,
            modifiers,
            slot,
            signature,
            annotations,
            parameterAnnotations,
            annotationDefault);
    res.root = this;
    // Might as well eagerly propagate this if already present
    res.methodAccessor = methodAccessor;

    res.typeAnnotations = typeAnnotations;
    return res;
  }