6305N/A * Copyright (c) 2003, 2013, Oracle and/or its affiliates. All rights reserved. 0N/A * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 0N/A * This code is free software; you can redistribute it and/or modify it 0N/A * under the terms of the GNU General Public License version 2 only, as 2362N/A * published by the Free Software Foundation. Oracle designates this 0N/A * particular file as subject to the "Classpath" exception as provided 2362N/A * by Oracle in the LICENSE file that accompanied this code. 0N/A * This code is distributed in the hope that it will be useful, but WITHOUT 0N/A * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 0N/A * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 0N/A * version 2 for more details (a copy is included in the LICENSE file that 0N/A * accompanied this code). 0N/A * You should have received a copy of the GNU General Public License version 0N/A * 2 along with this work; if not, write to the Free Software Foundation, 0N/A * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 2362N/A * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 2362N/A * or visit www.oracle.com if you need additional information or have any 0N/A * InvocationHandler for dynamic proxy implementation of Annotation. 0N/A * @author Josh Bloch 0N/A // Handle Object and Annotation methods 0N/A // Handle annotation member accessors 0N/A * This method, which clones its array argument, would not be necessary 0N/A * if Cloneable had a public clone method. 0N/A * Implementation of dynamicProxy.toString() 0N/A * Translates a member value (in "dynamic proxy return form") into a string 0N/A * Implementation of dynamicProxy.equals(Object o) 0N/A * Returns an object's invocation handler if that object is a dynamic 0N/A * proxy with a handler of type AnnotationInvocationHandler. 0N/A * Returns null otherwise. 0N/A * Returns true iff the two member values in "dynamic proxy return form" 0N/A * are equal using the appropriate equality function depending on the 0N/A * member type. The two values will be of the same type unless one of 0N/A * the containing annotations is ill-formed. If one of the containing 0N/A * annotations is ill-formed, this method will return false unless the 0N/A * two members are identical object references. 0N/A // Check for primitive, string, class, enum const, annotation, 0N/A // or ExceptionProxy 0N/A // Check for array of string, class, enum const, annotation, 0N/A // or ExceptionProxy 0N/A // Check for ill formed annotation(s) 0N/A // Deal with array of primitives 0N/A * Returns the member methods for our annotation type. These are 0N/A * obtained lazily and cached, as they're expensive to obtain 0N/A * and we only need them if our equals method is invoked (which should 0N/A * Implementation of dynamicProxy.hashCode() 0N/A * Computes hashCode of a member value (in "dynamic proxy return form") 0N/A // Check to make sure that types have not evolved incompatibly 6305N/A // Class is no longer an annotation type; time to punch out 6305N/A // If there are annotation members without values, that 6305N/A // situation is handled by the invoke method.