test/jdk/java/lang/annotation/typeAnnotations/TestObjectMethods.java
author chegar
Thu, 17 Oct 2019 20:54:25 +0100
branchdatagramsocketimpl-branch
changeset 58679 9c3209ff7550
parent 58678 9cf78a70fa4f
parent 55387 761b86d5563d
permissions -rw-r--r--
datagramsocketimpl-branch: merge with default
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
52079
5888ef300549 8058202: AnnotatedType implementations don't override toString(), equals(), hashCode()
darcy
parents:
diff changeset
     1
/*
55090
c1ad2862d0dd 8224012: AnnotatedType implementations of hashCode() lead to StackOverflowError
darcy
parents: 52317
diff changeset
     2
 * Copyright (c) 2018, 2019, Oracle and/or its affiliates. All rights reserved.
52079
5888ef300549 8058202: AnnotatedType implementations don't override toString(), equals(), hashCode()
darcy
parents:
diff changeset
     3
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
5888ef300549 8058202: AnnotatedType implementations don't override toString(), equals(), hashCode()
darcy
parents:
diff changeset
     4
 *
5888ef300549 8058202: AnnotatedType implementations don't override toString(), equals(), hashCode()
darcy
parents:
diff changeset
     5
 * This code is free software; you can redistribute it and/or modify it
5888ef300549 8058202: AnnotatedType implementations don't override toString(), equals(), hashCode()
darcy
parents:
diff changeset
     6
 * under the terms of the GNU General Public License version 2 only, as
5888ef300549 8058202: AnnotatedType implementations don't override toString(), equals(), hashCode()
darcy
parents:
diff changeset
     7
 * published by the Free Software Foundation.
5888ef300549 8058202: AnnotatedType implementations don't override toString(), equals(), hashCode()
darcy
parents:
diff changeset
     8
 *
5888ef300549 8058202: AnnotatedType implementations don't override toString(), equals(), hashCode()
darcy
parents:
diff changeset
     9
 * This code is distributed in the hope that it will be useful, but WITHOUT
5888ef300549 8058202: AnnotatedType implementations don't override toString(), equals(), hashCode()
darcy
parents:
diff changeset
    10
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
5888ef300549 8058202: AnnotatedType implementations don't override toString(), equals(), hashCode()
darcy
parents:
diff changeset
    11
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
5888ef300549 8058202: AnnotatedType implementations don't override toString(), equals(), hashCode()
darcy
parents:
diff changeset
    12
 * version 2 for more details (a copy is included in the LICENSE file that
5888ef300549 8058202: AnnotatedType implementations don't override toString(), equals(), hashCode()
darcy
parents:
diff changeset
    13
 * accompanied this code).
5888ef300549 8058202: AnnotatedType implementations don't override toString(), equals(), hashCode()
darcy
parents:
diff changeset
    14
 *
5888ef300549 8058202: AnnotatedType implementations don't override toString(), equals(), hashCode()
darcy
parents:
diff changeset
    15
 * You should have received a copy of the GNU General Public License version
5888ef300549 8058202: AnnotatedType implementations don't override toString(), equals(), hashCode()
darcy
parents:
diff changeset
    16
 * 2 along with this work; if not, write to the Free Software Foundation,
5888ef300549 8058202: AnnotatedType implementations don't override toString(), equals(), hashCode()
darcy
parents:
diff changeset
    17
 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
5888ef300549 8058202: AnnotatedType implementations don't override toString(), equals(), hashCode()
darcy
parents:
diff changeset
    18
 *
5888ef300549 8058202: AnnotatedType implementations don't override toString(), equals(), hashCode()
darcy
parents:
diff changeset
    19
 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
5888ef300549 8058202: AnnotatedType implementations don't override toString(), equals(), hashCode()
darcy
parents:
diff changeset
    20
 * or visit www.oracle.com if you need additional information or have any
5888ef300549 8058202: AnnotatedType implementations don't override toString(), equals(), hashCode()
darcy
parents:
diff changeset
    21
 * questions.
5888ef300549 8058202: AnnotatedType implementations don't override toString(), equals(), hashCode()
darcy
parents:
diff changeset
    22
 */
5888ef300549 8058202: AnnotatedType implementations don't override toString(), equals(), hashCode()
darcy
parents:
diff changeset
    23
5888ef300549 8058202: AnnotatedType implementations don't override toString(), equals(), hashCode()
darcy
parents:
diff changeset
    24
/*
5888ef300549 8058202: AnnotatedType implementations don't override toString(), equals(), hashCode()
darcy
parents:
diff changeset
    25
 * @test
55090
c1ad2862d0dd 8224012: AnnotatedType implementations of hashCode() lead to StackOverflowError
darcy
parents: 52317
diff changeset
    26
 * @bug 8058202 8212081 8224012
52079
5888ef300549 8058202: AnnotatedType implementations don't override toString(), equals(), hashCode()
darcy
parents:
diff changeset
    27
 * @summary Test java.lang.Object methods on AnnotatedType objects.
5888ef300549 8058202: AnnotatedType implementations don't override toString(), equals(), hashCode()
darcy
parents:
diff changeset
    28
 */
5888ef300549 8058202: AnnotatedType implementations don't override toString(), equals(), hashCode()
darcy
parents:
diff changeset
    29
5888ef300549 8058202: AnnotatedType implementations don't override toString(), equals(), hashCode()
darcy
parents:
diff changeset
    30
import java.lang.annotation.*;
5888ef300549 8058202: AnnotatedType implementations don't override toString(), equals(), hashCode()
darcy
parents:
diff changeset
    31
import java.lang.reflect.*;
5888ef300549 8058202: AnnotatedType implementations don't override toString(), equals(), hashCode()
darcy
parents:
diff changeset
    32
import java.util.*;
52317
3c981e581f93 8212081: AnnotatedType.toString implementation don't print annotations on embedded types
darcy
parents: 52079
diff changeset
    33
import java.util.regex.*;
52079
5888ef300549 8058202: AnnotatedType implementations don't override toString(), equals(), hashCode()
darcy
parents:
diff changeset
    34
5888ef300549 8058202: AnnotatedType implementations don't override toString(), equals(), hashCode()
darcy
parents:
diff changeset
    35
/**
5888ef300549 8058202: AnnotatedType implementations don't override toString(), equals(), hashCode()
darcy
parents:
diff changeset
    36
 * Test toString, equals, and hashCode on various AnnotatedType objects.
5888ef300549 8058202: AnnotatedType implementations don't override toString(), equals(), hashCode()
darcy
parents:
diff changeset
    37
 */
52317
3c981e581f93 8212081: AnnotatedType.toString implementation don't print annotations on embedded types
darcy
parents: 52079
diff changeset
    38
52079
5888ef300549 8058202: AnnotatedType implementations don't override toString(), equals(), hashCode()
darcy
parents:
diff changeset
    39
public class TestObjectMethods {
5888ef300549 8058202: AnnotatedType implementations don't override toString(), equals(), hashCode()
darcy
parents:
diff changeset
    40
    private static int errors = 0;
5888ef300549 8058202: AnnotatedType implementations don't override toString(), equals(), hashCode()
darcy
parents:
diff changeset
    41
5888ef300549 8058202: AnnotatedType implementations don't override toString(), equals(), hashCode()
darcy
parents:
diff changeset
    42
    /*
5888ef300549 8058202: AnnotatedType implementations don't override toString(), equals(), hashCode()
darcy
parents:
diff changeset
    43
     * There are various subtypes of AnnotatedType implementations:
5888ef300549 8058202: AnnotatedType implementations don't override toString(), equals(), hashCode()
darcy
parents:
diff changeset
    44
     *
5888ef300549 8058202: AnnotatedType implementations don't override toString(), equals(), hashCode()
darcy
parents:
diff changeset
    45
     * AnnotatedType
5888ef300549 8058202: AnnotatedType implementations don't override toString(), equals(), hashCode()
darcy
parents:
diff changeset
    46
     * AnnotatedArrayType
5888ef300549 8058202: AnnotatedType implementations don't override toString(), equals(), hashCode()
darcy
parents:
diff changeset
    47
     * AnnotatedParameterizedType
5888ef300549 8058202: AnnotatedType implementations don't override toString(), equals(), hashCode()
darcy
parents:
diff changeset
    48
     * AnnotatedTypeVariable
5888ef300549 8058202: AnnotatedType implementations don't override toString(), equals(), hashCode()
darcy
parents:
diff changeset
    49
     * AnnotatedWildcardType
5888ef300549 8058202: AnnotatedType implementations don't override toString(), equals(), hashCode()
darcy
parents:
diff changeset
    50
     *
5888ef300549 8058202: AnnotatedType implementations don't override toString(), equals(), hashCode()
darcy
parents:
diff changeset
    51
     * The implementations of each these implementations are
5888ef300549 8058202: AnnotatedType implementations don't override toString(), equals(), hashCode()
darcy
parents:
diff changeset
    52
     * examined. Wildcards don't appear as top-level types and need to
5888ef300549 8058202: AnnotatedType implementations don't override toString(), equals(), hashCode()
darcy
parents:
diff changeset
    53
     * be extracted from bounds.
5888ef300549 8058202: AnnotatedType implementations don't override toString(), equals(), hashCode()
darcy
parents:
diff changeset
    54
     *
5888ef300549 8058202: AnnotatedType implementations don't override toString(), equals(), hashCode()
darcy
parents:
diff changeset
    55
     * AnnotatedTypes with and without annotations are examined as
5888ef300549 8058202: AnnotatedType implementations don't override toString(), equals(), hashCode()
darcy
parents:
diff changeset
    56
     * well.
5888ef300549 8058202: AnnotatedType implementations don't override toString(), equals(), hashCode()
darcy
parents:
diff changeset
    57
     */
5888ef300549 8058202: AnnotatedType implementations don't override toString(), equals(), hashCode()
darcy
parents:
diff changeset
    58
    public static void main(String... args) {
5888ef300549 8058202: AnnotatedType implementations don't override toString(), equals(), hashCode()
darcy
parents:
diff changeset
    59
        Class<?>[] testClasses = {TypeHost.class, AnnotatedTypeHost.class};
5888ef300549 8058202: AnnotatedType implementations don't override toString(), equals(), hashCode()
darcy
parents:
diff changeset
    60
5888ef300549 8058202: AnnotatedType implementations don't override toString(), equals(), hashCode()
darcy
parents:
diff changeset
    61
        for (Class<?> clazz : testClasses) {
5888ef300549 8058202: AnnotatedType implementations don't override toString(), equals(), hashCode()
darcy
parents:
diff changeset
    62
            testEqualsReflexivity(clazz);
5888ef300549 8058202: AnnotatedType implementations don't override toString(), equals(), hashCode()
darcy
parents:
diff changeset
    63
            testEquals(clazz);
5888ef300549 8058202: AnnotatedType implementations don't override toString(), equals(), hashCode()
darcy
parents:
diff changeset
    64
        }
5888ef300549 8058202: AnnotatedType implementations don't override toString(), equals(), hashCode()
darcy
parents:
diff changeset
    65
52317
3c981e581f93 8212081: AnnotatedType.toString implementation don't print annotations on embedded types
darcy
parents: 52079
diff changeset
    66
        testToString(TypeHost.class);
3c981e581f93 8212081: AnnotatedType.toString implementation don't print annotations on embedded types
darcy
parents: 52079
diff changeset
    67
        testToString(AnnotatedTypeHost.class);
52079
5888ef300549 8058202: AnnotatedType implementations don't override toString(), equals(), hashCode()
darcy
parents:
diff changeset
    68
5888ef300549 8058202: AnnotatedType implementations don't override toString(), equals(), hashCode()
darcy
parents:
diff changeset
    69
        testAnnotationsMatterForEquals(TypeHost.class, AnnotatedTypeHost.class);
5888ef300549 8058202: AnnotatedType implementations don't override toString(), equals(), hashCode()
darcy
parents:
diff changeset
    70
5888ef300549 8058202: AnnotatedType implementations don't override toString(), equals(), hashCode()
darcy
parents:
diff changeset
    71
        testGetAnnotations(TypeHost.class, false);
5888ef300549 8058202: AnnotatedType implementations don't override toString(), equals(), hashCode()
darcy
parents:
diff changeset
    72
        testGetAnnotations(AnnotatedTypeHost.class, true);
5888ef300549 8058202: AnnotatedType implementations don't override toString(), equals(), hashCode()
darcy
parents:
diff changeset
    73
5888ef300549 8058202: AnnotatedType implementations don't override toString(), equals(), hashCode()
darcy
parents:
diff changeset
    74
        testWildcards();
5888ef300549 8058202: AnnotatedType implementations don't override toString(), equals(), hashCode()
darcy
parents:
diff changeset
    75
55090
c1ad2862d0dd 8224012: AnnotatedType implementations of hashCode() lead to StackOverflowError
darcy
parents: 52317
diff changeset
    76
        testFbounds();
c1ad2862d0dd 8224012: AnnotatedType implementations of hashCode() lead to StackOverflowError
darcy
parents: 52317
diff changeset
    77
52079
5888ef300549 8058202: AnnotatedType implementations don't override toString(), equals(), hashCode()
darcy
parents:
diff changeset
    78
        if (errors > 0) {
5888ef300549 8058202: AnnotatedType implementations don't override toString(), equals(), hashCode()
darcy
parents:
diff changeset
    79
            throw new RuntimeException(errors + " errors");
5888ef300549 8058202: AnnotatedType implementations don't override toString(), equals(), hashCode()
darcy
parents:
diff changeset
    80
        }
5888ef300549 8058202: AnnotatedType implementations don't override toString(), equals(), hashCode()
darcy
parents:
diff changeset
    81
    }
5888ef300549 8058202: AnnotatedType implementations don't override toString(), equals(), hashCode()
darcy
parents:
diff changeset
    82
5888ef300549 8058202: AnnotatedType implementations don't override toString(), equals(), hashCode()
darcy
parents:
diff changeset
    83
    /*
5888ef300549 8058202: AnnotatedType implementations don't override toString(), equals(), hashCode()
darcy
parents:
diff changeset
    84
     * For non-array types, verify toString version of the annotated
5888ef300549 8058202: AnnotatedType implementations don't override toString(), equals(), hashCode()
darcy
parents:
diff changeset
    85
     * type ends with the same string as the generic type.
5888ef300549 8058202: AnnotatedType implementations don't override toString(), equals(), hashCode()
darcy
parents:
diff changeset
    86
     */
52317
3c981e581f93 8212081: AnnotatedType.toString implementation don't print annotations on embedded types
darcy
parents: 52079
diff changeset
    87
    static void testToString(Class<?> clazz) {
52079
5888ef300549 8058202: AnnotatedType implementations don't override toString(), equals(), hashCode()
darcy
parents:
diff changeset
    88
        System.err.println("Testing toString on methods of class " + clazz.getName());
5888ef300549 8058202: AnnotatedType implementations don't override toString(), equals(), hashCode()
darcy
parents:
diff changeset
    89
        Method[] methods = clazz.getDeclaredMethods();
5888ef300549 8058202: AnnotatedType implementations don't override toString(), equals(), hashCode()
darcy
parents:
diff changeset
    90
        for (Method m : methods) {
52317
3c981e581f93 8212081: AnnotatedType.toString implementation don't print annotations on embedded types
darcy
parents: 52079
diff changeset
    91
            // Expected information about the type annotations stored
3c981e581f93 8212081: AnnotatedType.toString implementation don't print annotations on embedded types
darcy
parents: 52079
diff changeset
    92
            // in a *declaration* annotation.
3c981e581f93 8212081: AnnotatedType.toString implementation don't print annotations on embedded types
darcy
parents: 52079
diff changeset
    93
            AnnotTypeInfo annotTypeInfo = m.getAnnotation(AnnotTypeInfo.class);
3c981e581f93 8212081: AnnotatedType.toString implementation don't print annotations on embedded types
darcy
parents: 52079
diff changeset
    94
            int expectedAnnotCount      = annotTypeInfo.count();
3c981e581f93 8212081: AnnotatedType.toString implementation don't print annotations on embedded types
darcy
parents: 52079
diff changeset
    95
            Relation relation           = annotTypeInfo.relation();
3c981e581f93 8212081: AnnotatedType.toString implementation don't print annotations on embedded types
darcy
parents: 52079
diff changeset
    96
52079
5888ef300549 8058202: AnnotatedType implementations don't override toString(), equals(), hashCode()
darcy
parents:
diff changeset
    97
            AnnotatedType annotType = m.getAnnotatedReturnType();
5888ef300549 8058202: AnnotatedType implementations don't override toString(), equals(), hashCode()
darcy
parents:
diff changeset
    98
            String annotTypeString = annotType.toString();
5888ef300549 8058202: AnnotatedType implementations don't override toString(), equals(), hashCode()
darcy
parents:
diff changeset
    99
5888ef300549 8058202: AnnotatedType implementations don't override toString(), equals(), hashCode()
darcy
parents:
diff changeset
   100
            Type type = m.getGenericReturnType();
52317
3c981e581f93 8212081: AnnotatedType.toString implementation don't print annotations on embedded types
darcy
parents: 52079
diff changeset
   101
            String typeString = (type instanceof Class) ?
3c981e581f93 8212081: AnnotatedType.toString implementation don't print annotations on embedded types
darcy
parents: 52079
diff changeset
   102
                type.getTypeName() :
3c981e581f93 8212081: AnnotatedType.toString implementation don't print annotations on embedded types
darcy
parents: 52079
diff changeset
   103
                type.toString();
52079
5888ef300549 8058202: AnnotatedType implementations don't override toString(), equals(), hashCode()
darcy
parents:
diff changeset
   104
5888ef300549 8058202: AnnotatedType implementations don't override toString(), equals(), hashCode()
darcy
parents:
diff changeset
   105
            boolean isArray = annotType instanceof AnnotatedArrayType;
5888ef300549 8058202: AnnotatedType implementations don't override toString(), equals(), hashCode()
darcy
parents:
diff changeset
   106
            boolean isVoid = "void".equals(typeString);
5888ef300549 8058202: AnnotatedType implementations don't override toString(), equals(), hashCode()
darcy
parents:
diff changeset
   107
5888ef300549 8058202: AnnotatedType implementations don't override toString(), equals(), hashCode()
darcy
parents:
diff changeset
   108
            boolean valid;
52317
3c981e581f93 8212081: AnnotatedType.toString implementation don't print annotations on embedded types
darcy
parents: 52079
diff changeset
   109
3c981e581f93 8212081: AnnotatedType.toString implementation don't print annotations on embedded types
darcy
parents: 52079
diff changeset
   110
            switch(relation) {
3c981e581f93 8212081: AnnotatedType.toString implementation don't print annotations on embedded types
darcy
parents: 52079
diff changeset
   111
            case EQUAL:
3c981e581f93 8212081: AnnotatedType.toString implementation don't print annotations on embedded types
darcy
parents: 52079
diff changeset
   112
                valid = annotTypeString.equals(typeString);
3c981e581f93 8212081: AnnotatedType.toString implementation don't print annotations on embedded types
darcy
parents: 52079
diff changeset
   113
                break;
3c981e581f93 8212081: AnnotatedType.toString implementation don't print annotations on embedded types
darcy
parents: 52079
diff changeset
   114
3c981e581f93 8212081: AnnotatedType.toString implementation don't print annotations on embedded types
darcy
parents: 52079
diff changeset
   115
            case POSTFIX:
3c981e581f93 8212081: AnnotatedType.toString implementation don't print annotations on embedded types
darcy
parents: 52079
diff changeset
   116
                valid = annotTypeString.endsWith(typeString) &&
3c981e581f93 8212081: AnnotatedType.toString implementation don't print annotations on embedded types
darcy
parents: 52079
diff changeset
   117
                    !annotTypeString.startsWith(typeString);
3c981e581f93 8212081: AnnotatedType.toString implementation don't print annotations on embedded types
darcy
parents: 52079
diff changeset
   118
                break;
3c981e581f93 8212081: AnnotatedType.toString implementation don't print annotations on embedded types
darcy
parents: 52079
diff changeset
   119
3c981e581f93 8212081: AnnotatedType.toString implementation don't print annotations on embedded types
darcy
parents: 52079
diff changeset
   120
            case STRIPPED:
3c981e581f93 8212081: AnnotatedType.toString implementation don't print annotations on embedded types
darcy
parents: 52079
diff changeset
   121
                String stripped = annotationRegex.matcher(annotTypeString).replaceAll("");
3c981e581f93 8212081: AnnotatedType.toString implementation don't print annotations on embedded types
darcy
parents: 52079
diff changeset
   122
                valid = typeString.replace(" ", "").equals(stripped.replace(" ", ""));
3c981e581f93 8212081: AnnotatedType.toString implementation don't print annotations on embedded types
darcy
parents: 52079
diff changeset
   123
                break;
3c981e581f93 8212081: AnnotatedType.toString implementation don't print annotations on embedded types
darcy
parents: 52079
diff changeset
   124
3c981e581f93 8212081: AnnotatedType.toString implementation don't print annotations on embedded types
darcy
parents: 52079
diff changeset
   125
            case ARRAY:
52079
5888ef300549 8058202: AnnotatedType implementations don't override toString(), equals(), hashCode()
darcy
parents:
diff changeset
   126
                // Find final non-array component type and gets its name.
5888ef300549 8058202: AnnotatedType implementations don't override toString(), equals(), hashCode()
darcy
parents:
diff changeset
   127
                typeString = null;
5888ef300549 8058202: AnnotatedType implementations don't override toString(), equals(), hashCode()
darcy
parents:
diff changeset
   128
5888ef300549 8058202: AnnotatedType implementations don't override toString(), equals(), hashCode()
darcy
parents:
diff changeset
   129
                AnnotatedType componentType = annotType;
5888ef300549 8058202: AnnotatedType implementations don't override toString(), equals(), hashCode()
darcy
parents:
diff changeset
   130
                while (componentType instanceof AnnotatedArrayType) {
5888ef300549 8058202: AnnotatedType implementations don't override toString(), equals(), hashCode()
darcy
parents:
diff changeset
   131
                    AnnotatedArrayType annotatedArrayType = (AnnotatedArrayType) componentType;
5888ef300549 8058202: AnnotatedType implementations don't override toString(), equals(), hashCode()
darcy
parents:
diff changeset
   132
                    componentType = annotatedArrayType.getAnnotatedGenericComponentType();
5888ef300549 8058202: AnnotatedType implementations don't override toString(), equals(), hashCode()
darcy
parents:
diff changeset
   133
                }
5888ef300549 8058202: AnnotatedType implementations don't override toString(), equals(), hashCode()
darcy
parents:
diff changeset
   134
5888ef300549 8058202: AnnotatedType implementations don't override toString(), equals(), hashCode()
darcy
parents:
diff changeset
   135
                String componentName = componentType.getType().getTypeName();
5888ef300549 8058202: AnnotatedType implementations don't override toString(), equals(), hashCode()
darcy
parents:
diff changeset
   136
                valid = annotTypeString.contains(componentName);
52317
3c981e581f93 8212081: AnnotatedType.toString implementation don't print annotations on embedded types
darcy
parents: 52079
diff changeset
   137
                break;
3c981e581f93 8212081: AnnotatedType.toString implementation don't print annotations on embedded types
darcy
parents: 52079
diff changeset
   138
3c981e581f93 8212081: AnnotatedType.toString implementation don't print annotations on embedded types
darcy
parents: 52079
diff changeset
   139
            case OTHER:
3c981e581f93 8212081: AnnotatedType.toString implementation don't print annotations on embedded types
darcy
parents: 52079
diff changeset
   140
                // No additional checks
3c981e581f93 8212081: AnnotatedType.toString implementation don't print annotations on embedded types
darcy
parents: 52079
diff changeset
   141
                valid = true;
3c981e581f93 8212081: AnnotatedType.toString implementation don't print annotations on embedded types
darcy
parents: 52079
diff changeset
   142
                break;
3c981e581f93 8212081: AnnotatedType.toString implementation don't print annotations on embedded types
darcy
parents: 52079
diff changeset
   143
3c981e581f93 8212081: AnnotatedType.toString implementation don't print annotations on embedded types
darcy
parents: 52079
diff changeset
   144
            default:
3c981e581f93 8212081: AnnotatedType.toString implementation don't print annotations on embedded types
darcy
parents: 52079
diff changeset
   145
                throw new AssertionError("Shouldn't be reached");
3c981e581f93 8212081: AnnotatedType.toString implementation don't print annotations on embedded types
darcy
parents: 52079
diff changeset
   146
            }
3c981e581f93 8212081: AnnotatedType.toString implementation don't print annotations on embedded types
darcy
parents: 52079
diff changeset
   147
3c981e581f93 8212081: AnnotatedType.toString implementation don't print annotations on embedded types
darcy
parents: 52079
diff changeset
   148
            // Verify number of type annotations matches expected value
3c981e581f93 8212081: AnnotatedType.toString implementation don't print annotations on embedded types
darcy
parents: 52079
diff changeset
   149
            Matcher matcher = annotationRegex.matcher(annotTypeString);
3c981e581f93 8212081: AnnotatedType.toString implementation don't print annotations on embedded types
darcy
parents: 52079
diff changeset
   150
            if (expectedAnnotCount > 0) {
3c981e581f93 8212081: AnnotatedType.toString implementation don't print annotations on embedded types
darcy
parents: 52079
diff changeset
   151
                int i = expectedAnnotCount;
3c981e581f93 8212081: AnnotatedType.toString implementation don't print annotations on embedded types
darcy
parents: 52079
diff changeset
   152
                int annotCount = 0;
3c981e581f93 8212081: AnnotatedType.toString implementation don't print annotations on embedded types
darcy
parents: 52079
diff changeset
   153
                while (i > 0) {
3c981e581f93 8212081: AnnotatedType.toString implementation don't print annotations on embedded types
darcy
parents: 52079
diff changeset
   154
                    boolean found = matcher.find();
3c981e581f93 8212081: AnnotatedType.toString implementation don't print annotations on embedded types
darcy
parents: 52079
diff changeset
   155
                    if (found) {
3c981e581f93 8212081: AnnotatedType.toString implementation don't print annotations on embedded types
darcy
parents: 52079
diff changeset
   156
                        i--;
3c981e581f93 8212081: AnnotatedType.toString implementation don't print annotations on embedded types
darcy
parents: 52079
diff changeset
   157
                        annotCount++;
3c981e581f93 8212081: AnnotatedType.toString implementation don't print annotations on embedded types
darcy
parents: 52079
diff changeset
   158
                    } else {
3c981e581f93 8212081: AnnotatedType.toString implementation don't print annotations on embedded types
darcy
parents: 52079
diff changeset
   159
                        errors++;
3c981e581f93 8212081: AnnotatedType.toString implementation don't print annotations on embedded types
darcy
parents: 52079
diff changeset
   160
                        System.err.println("\tExpected annotation not found: " + annotTypeString);
3c981e581f93 8212081: AnnotatedType.toString implementation don't print annotations on embedded types
darcy
parents: 52079
diff changeset
   161
                    }
3c981e581f93 8212081: AnnotatedType.toString implementation don't print annotations on embedded types
darcy
parents: 52079
diff changeset
   162
                }
3c981e581f93 8212081: AnnotatedType.toString implementation don't print annotations on embedded types
darcy
parents: 52079
diff changeset
   163
            }
3c981e581f93 8212081: AnnotatedType.toString implementation don't print annotations on embedded types
darcy
parents: 52079
diff changeset
   164
3c981e581f93 8212081: AnnotatedType.toString implementation don't print annotations on embedded types
darcy
parents: 52079
diff changeset
   165
            boolean found = matcher.find();
3c981e581f93 8212081: AnnotatedType.toString implementation don't print annotations on embedded types
darcy
parents: 52079
diff changeset
   166
            if (found) {
3c981e581f93 8212081: AnnotatedType.toString implementation don't print annotations on embedded types
darcy
parents: 52079
diff changeset
   167
                errors++;
3c981e581f93 8212081: AnnotatedType.toString implementation don't print annotations on embedded types
darcy
parents: 52079
diff changeset
   168
                System.err.println("\tAnnotation found unexpectedly: " + annotTypeString);
52079
5888ef300549 8058202: AnnotatedType implementations don't override toString(), equals(), hashCode()
darcy
parents:
diff changeset
   169
            }
5888ef300549 8058202: AnnotatedType implementations don't override toString(), equals(), hashCode()
darcy
parents:
diff changeset
   170
5888ef300549 8058202: AnnotatedType implementations don't override toString(), equals(), hashCode()
darcy
parents:
diff changeset
   171
            if (!valid) {
5888ef300549 8058202: AnnotatedType implementations don't override toString(), equals(), hashCode()
darcy
parents:
diff changeset
   172
                errors++;
5888ef300549 8058202: AnnotatedType implementations don't override toString(), equals(), hashCode()
darcy
parents:
diff changeset
   173
                System.err.println(typeString + "\n" + annotTypeString +
5888ef300549 8058202: AnnotatedType implementations don't override toString(), equals(), hashCode()
darcy
parents:
diff changeset
   174
                                   "\n " + valid  +
5888ef300549 8058202: AnnotatedType implementations don't override toString(), equals(), hashCode()
darcy
parents:
diff changeset
   175
                                   "\n\n");
5888ef300549 8058202: AnnotatedType implementations don't override toString(), equals(), hashCode()
darcy
parents:
diff changeset
   176
            }
5888ef300549 8058202: AnnotatedType implementations don't override toString(), equals(), hashCode()
darcy
parents:
diff changeset
   177
        }
5888ef300549 8058202: AnnotatedType implementations don't override toString(), equals(), hashCode()
darcy
parents:
diff changeset
   178
    }
5888ef300549 8058202: AnnotatedType implementations don't override toString(), equals(), hashCode()
darcy
parents:
diff changeset
   179
55387
761b86d5563d 8164819: Make javac's toString() on annotation objects consistent with core reflection
darcy
parents: 55090
diff changeset
   180
    private static final Pattern annotationRegex = Pattern.compile("@TestObjectMethods\\$AnnotType\\((\\p{Digit})+\\)");
52317
3c981e581f93 8212081: AnnotatedType.toString implementation don't print annotations on embedded types
darcy
parents: 52079
diff changeset
   181
52079
5888ef300549 8058202: AnnotatedType implementations don't override toString(), equals(), hashCode()
darcy
parents:
diff changeset
   182
    static void testGetAnnotations(Class<?> clazz, boolean annotationsExpectedOnMethods) {
5888ef300549 8058202: AnnotatedType implementations don't override toString(), equals(), hashCode()
darcy
parents:
diff changeset
   183
        System.err.println("Testing getAnnotations on methods of class " + clazz.getName());
5888ef300549 8058202: AnnotatedType implementations don't override toString(), equals(), hashCode()
darcy
parents:
diff changeset
   184
        Method[] methods = clazz.getDeclaredMethods();
5888ef300549 8058202: AnnotatedType implementations don't override toString(), equals(), hashCode()
darcy
parents:
diff changeset
   185
        for (Method m : methods) {
5888ef300549 8058202: AnnotatedType implementations don't override toString(), equals(), hashCode()
darcy
parents:
diff changeset
   186
            Type type = m.getGenericReturnType();
5888ef300549 8058202: AnnotatedType implementations don't override toString(), equals(), hashCode()
darcy
parents:
diff changeset
   187
            AnnotatedType annotType = m.getAnnotatedReturnType();
5888ef300549 8058202: AnnotatedType implementations don't override toString(), equals(), hashCode()
darcy
parents:
diff changeset
   188
            Annotation[] annotations = annotType.getAnnotations();
5888ef300549 8058202: AnnotatedType implementations don't override toString(), equals(), hashCode()
darcy
parents:
diff changeset
   189
5888ef300549 8058202: AnnotatedType implementations don't override toString(), equals(), hashCode()
darcy
parents:
diff changeset
   190
            boolean isVoid = "void".equals(type.toString());
5888ef300549 8058202: AnnotatedType implementations don't override toString(), equals(), hashCode()
darcy
parents:
diff changeset
   191
5888ef300549 8058202: AnnotatedType implementations don't override toString(), equals(), hashCode()
darcy
parents:
diff changeset
   192
            if (annotationsExpectedOnMethods && !isVoid) {
5888ef300549 8058202: AnnotatedType implementations don't override toString(), equals(), hashCode()
darcy
parents:
diff changeset
   193
                if (annotations.length == 0 ) {
5888ef300549 8058202: AnnotatedType implementations don't override toString(), equals(), hashCode()
darcy
parents:
diff changeset
   194
                    errors++;
5888ef300549 8058202: AnnotatedType implementations don't override toString(), equals(), hashCode()
darcy
parents:
diff changeset
   195
                    System.err.println("Expected annotations missing on " + annotType);
5888ef300549 8058202: AnnotatedType implementations don't override toString(), equals(), hashCode()
darcy
parents:
diff changeset
   196
                }
5888ef300549 8058202: AnnotatedType implementations don't override toString(), equals(), hashCode()
darcy
parents:
diff changeset
   197
            } else {
5888ef300549 8058202: AnnotatedType implementations don't override toString(), equals(), hashCode()
darcy
parents:
diff changeset
   198
                if (annotations.length > 0 ) {
5888ef300549 8058202: AnnotatedType implementations don't override toString(), equals(), hashCode()
darcy
parents:
diff changeset
   199
                    errors++;
5888ef300549 8058202: AnnotatedType implementations don't override toString(), equals(), hashCode()
darcy
parents:
diff changeset
   200
                    System.err.println("Unexpected annotations present on " + annotType);
5888ef300549 8058202: AnnotatedType implementations don't override toString(), equals(), hashCode()
darcy
parents:
diff changeset
   201
                }
5888ef300549 8058202: AnnotatedType implementations don't override toString(), equals(), hashCode()
darcy
parents:
diff changeset
   202
            }
5888ef300549 8058202: AnnotatedType implementations don't override toString(), equals(), hashCode()
darcy
parents:
diff changeset
   203
        }
5888ef300549 8058202: AnnotatedType implementations don't override toString(), equals(), hashCode()
darcy
parents:
diff changeset
   204
    }
5888ef300549 8058202: AnnotatedType implementations don't override toString(), equals(), hashCode()
darcy
parents:
diff changeset
   205
5888ef300549 8058202: AnnotatedType implementations don't override toString(), equals(), hashCode()
darcy
parents:
diff changeset
   206
    static void testEqualsReflexivity(Class<?> clazz) {
5888ef300549 8058202: AnnotatedType implementations don't override toString(), equals(), hashCode()
darcy
parents:
diff changeset
   207
        System.err.println("Testing reflexivity of equals on methods of class " + clazz.getName());
5888ef300549 8058202: AnnotatedType implementations don't override toString(), equals(), hashCode()
darcy
parents:
diff changeset
   208
        Method[] methods = clazz.getDeclaredMethods();
5888ef300549 8058202: AnnotatedType implementations don't override toString(), equals(), hashCode()
darcy
parents:
diff changeset
   209
        for (Method m : methods) {
5888ef300549 8058202: AnnotatedType implementations don't override toString(), equals(), hashCode()
darcy
parents:
diff changeset
   210
            checkTypesForEquality(m.getAnnotatedReturnType(),
5888ef300549 8058202: AnnotatedType implementations don't override toString(), equals(), hashCode()
darcy
parents:
diff changeset
   211
                                  m.getAnnotatedReturnType(),
5888ef300549 8058202: AnnotatedType implementations don't override toString(), equals(), hashCode()
darcy
parents:
diff changeset
   212
                                  true);
5888ef300549 8058202: AnnotatedType implementations don't override toString(), equals(), hashCode()
darcy
parents:
diff changeset
   213
        }
5888ef300549 8058202: AnnotatedType implementations don't override toString(), equals(), hashCode()
darcy
parents:
diff changeset
   214
    }
5888ef300549 8058202: AnnotatedType implementations don't override toString(), equals(), hashCode()
darcy
parents:
diff changeset
   215
5888ef300549 8058202: AnnotatedType implementations don't override toString(), equals(), hashCode()
darcy
parents:
diff changeset
   216
    private static void checkTypesForEquality(AnnotatedType annotType1,
5888ef300549 8058202: AnnotatedType implementations don't override toString(), equals(), hashCode()
darcy
parents:
diff changeset
   217
                                              AnnotatedType annotType2,
5888ef300549 8058202: AnnotatedType implementations don't override toString(), equals(), hashCode()
darcy
parents:
diff changeset
   218
                                              boolean expected) {
5888ef300549 8058202: AnnotatedType implementations don't override toString(), equals(), hashCode()
darcy
parents:
diff changeset
   219
        boolean comparison = annotType1.equals(annotType2);
5888ef300549 8058202: AnnotatedType implementations don't override toString(), equals(), hashCode()
darcy
parents:
diff changeset
   220
5888ef300549 8058202: AnnotatedType implementations don't override toString(), equals(), hashCode()
darcy
parents:
diff changeset
   221
        if (comparison) {
5888ef300549 8058202: AnnotatedType implementations don't override toString(), equals(), hashCode()
darcy
parents:
diff changeset
   222
            int hash1 = annotType1.hashCode();
5888ef300549 8058202: AnnotatedType implementations don't override toString(), equals(), hashCode()
darcy
parents:
diff changeset
   223
            int hash2 = annotType2.hashCode();
5888ef300549 8058202: AnnotatedType implementations don't override toString(), equals(), hashCode()
darcy
parents:
diff changeset
   224
            if (hash1 != hash2) {
5888ef300549 8058202: AnnotatedType implementations don't override toString(), equals(), hashCode()
darcy
parents:
diff changeset
   225
                errors++;
5888ef300549 8058202: AnnotatedType implementations don't override toString(), equals(), hashCode()
darcy
parents:
diff changeset
   226
                System.err.format("Equal AnnotatedTypes with unequal hash codes: %n%s%n%s%n",
5888ef300549 8058202: AnnotatedType implementations don't override toString(), equals(), hashCode()
darcy
parents:
diff changeset
   227
                                  annotType1.toString(), annotType2.toString());
5888ef300549 8058202: AnnotatedType implementations don't override toString(), equals(), hashCode()
darcy
parents:
diff changeset
   228
            }
5888ef300549 8058202: AnnotatedType implementations don't override toString(), equals(), hashCode()
darcy
parents:
diff changeset
   229
        }
5888ef300549 8058202: AnnotatedType implementations don't override toString(), equals(), hashCode()
darcy
parents:
diff changeset
   230
5888ef300549 8058202: AnnotatedType implementations don't override toString(), equals(), hashCode()
darcy
parents:
diff changeset
   231
        if (comparison != expected) {
5888ef300549 8058202: AnnotatedType implementations don't override toString(), equals(), hashCode()
darcy
parents:
diff changeset
   232
            errors++;
5888ef300549 8058202: AnnotatedType implementations don't override toString(), equals(), hashCode()
darcy
parents:
diff changeset
   233
            System.err.println(annotType1);
5888ef300549 8058202: AnnotatedType implementations don't override toString(), equals(), hashCode()
darcy
parents:
diff changeset
   234
            System.err.println(expected ? " is not equal to " : " is equal to ");
5888ef300549 8058202: AnnotatedType implementations don't override toString(), equals(), hashCode()
darcy
parents:
diff changeset
   235
            System.err.println(annotType2);
5888ef300549 8058202: AnnotatedType implementations don't override toString(), equals(), hashCode()
darcy
parents:
diff changeset
   236
            System.err.println();
5888ef300549 8058202: AnnotatedType implementations don't override toString(), equals(), hashCode()
darcy
parents:
diff changeset
   237
        }
5888ef300549 8058202: AnnotatedType implementations don't override toString(), equals(), hashCode()
darcy
parents:
diff changeset
   238
    }
5888ef300549 8058202: AnnotatedType implementations don't override toString(), equals(), hashCode()
darcy
parents:
diff changeset
   239
5888ef300549 8058202: AnnotatedType implementations don't override toString(), equals(), hashCode()
darcy
parents:
diff changeset
   240
    /*
5888ef300549 8058202: AnnotatedType implementations don't override toString(), equals(), hashCode()
darcy
parents:
diff changeset
   241
     * For each of the type host classes, the return type of a method
5888ef300549 8058202: AnnotatedType implementations don't override toString(), equals(), hashCode()
darcy
parents:
diff changeset
   242
     * should only equal the return type of that method.
5888ef300549 8058202: AnnotatedType implementations don't override toString(), equals(), hashCode()
darcy
parents:
diff changeset
   243
     */
5888ef300549 8058202: AnnotatedType implementations don't override toString(), equals(), hashCode()
darcy
parents:
diff changeset
   244
    static void testEquals(Class<?> clazz) {
5888ef300549 8058202: AnnotatedType implementations don't override toString(), equals(), hashCode()
darcy
parents:
diff changeset
   245
        Method[] methods = clazz.getDeclaredMethods();
5888ef300549 8058202: AnnotatedType implementations don't override toString(), equals(), hashCode()
darcy
parents:
diff changeset
   246
5888ef300549 8058202: AnnotatedType implementations don't override toString(), equals(), hashCode()
darcy
parents:
diff changeset
   247
        for (int i = 0; i < methods.length; i++) {
5888ef300549 8058202: AnnotatedType implementations don't override toString(), equals(), hashCode()
darcy
parents:
diff changeset
   248
            for (int j = 0; j < methods.length; j++) {
5888ef300549 8058202: AnnotatedType implementations don't override toString(), equals(), hashCode()
darcy
parents:
diff changeset
   249
                if (i == j)
5888ef300549 8058202: AnnotatedType implementations don't override toString(), equals(), hashCode()
darcy
parents:
diff changeset
   250
                    continue;
5888ef300549 8058202: AnnotatedType implementations don't override toString(), equals(), hashCode()
darcy
parents:
diff changeset
   251
                else {
5888ef300549 8058202: AnnotatedType implementations don't override toString(), equals(), hashCode()
darcy
parents:
diff changeset
   252
                    checkTypesForEquality(methods[i].getAnnotatedReturnType(),
5888ef300549 8058202: AnnotatedType implementations don't override toString(), equals(), hashCode()
darcy
parents:
diff changeset
   253
                                          methods[j].getAnnotatedReturnType(),
5888ef300549 8058202: AnnotatedType implementations don't override toString(), equals(), hashCode()
darcy
parents:
diff changeset
   254
                                          false);
5888ef300549 8058202: AnnotatedType implementations don't override toString(), equals(), hashCode()
darcy
parents:
diff changeset
   255
                }
5888ef300549 8058202: AnnotatedType implementations don't override toString(), equals(), hashCode()
darcy
parents:
diff changeset
   256
            }
5888ef300549 8058202: AnnotatedType implementations don't override toString(), equals(), hashCode()
darcy
parents:
diff changeset
   257
        }
5888ef300549 8058202: AnnotatedType implementations don't override toString(), equals(), hashCode()
darcy
parents:
diff changeset
   258
    }
5888ef300549 8058202: AnnotatedType implementations don't override toString(), equals(), hashCode()
darcy
parents:
diff changeset
   259
5888ef300549 8058202: AnnotatedType implementations don't override toString(), equals(), hashCode()
darcy
parents:
diff changeset
   260
    /**
5888ef300549 8058202: AnnotatedType implementations don't override toString(), equals(), hashCode()
darcy
parents:
diff changeset
   261
     * Roughly, compare the return types of corresponding methods on
5888ef300549 8058202: AnnotatedType implementations don't override toString(), equals(), hashCode()
darcy
parents:
diff changeset
   262
     * TypeHost and AnnotatedtypeHost and verify the AnnotatedType
5888ef300549 8058202: AnnotatedType implementations don't override toString(), equals(), hashCode()
darcy
parents:
diff changeset
   263
     * objects are *not* equal even if their underlying generic types
5888ef300549 8058202: AnnotatedType implementations don't override toString(), equals(), hashCode()
darcy
parents:
diff changeset
   264
     * are.
5888ef300549 8058202: AnnotatedType implementations don't override toString(), equals(), hashCode()
darcy
parents:
diff changeset
   265
     */
5888ef300549 8058202: AnnotatedType implementations don't override toString(), equals(), hashCode()
darcy
parents:
diff changeset
   266
    static void testAnnotationsMatterForEquals(Class<?> clazz1, Class<?> clazz2) {
5888ef300549 8058202: AnnotatedType implementations don't override toString(), equals(), hashCode()
darcy
parents:
diff changeset
   267
        System.err.println("Testing that presence/absence of annotations matters for equals comparison.");
5888ef300549 8058202: AnnotatedType implementations don't override toString(), equals(), hashCode()
darcy
parents:
diff changeset
   268
5888ef300549 8058202: AnnotatedType implementations don't override toString(), equals(), hashCode()
darcy
parents:
diff changeset
   269
        String methodName = null;
5888ef300549 8058202: AnnotatedType implementations don't override toString(), equals(), hashCode()
darcy
parents:
diff changeset
   270
        for (Method method :  clazz1.getDeclaredMethods()) {
5888ef300549 8058202: AnnotatedType implementations don't override toString(), equals(), hashCode()
darcy
parents:
diff changeset
   271
            if ("void".equals(method.getReturnType().toString())) {
5888ef300549 8058202: AnnotatedType implementations don't override toString(), equals(), hashCode()
darcy
parents:
diff changeset
   272
                continue;
5888ef300549 8058202: AnnotatedType implementations don't override toString(), equals(), hashCode()
darcy
parents:
diff changeset
   273
            }
5888ef300549 8058202: AnnotatedType implementations don't override toString(), equals(), hashCode()
darcy
parents:
diff changeset
   274
5888ef300549 8058202: AnnotatedType implementations don't override toString(), equals(), hashCode()
darcy
parents:
diff changeset
   275
            methodName = method.getName();
5888ef300549 8058202: AnnotatedType implementations don't override toString(), equals(), hashCode()
darcy
parents:
diff changeset
   276
            try {
5888ef300549 8058202: AnnotatedType implementations don't override toString(), equals(), hashCode()
darcy
parents:
diff changeset
   277
                checkTypesForEquality(method.getAnnotatedReturnType(),
5888ef300549 8058202: AnnotatedType implementations don't override toString(), equals(), hashCode()
darcy
parents:
diff changeset
   278
                                      clazz2.getDeclaredMethod(methodName).getAnnotatedReturnType(),
5888ef300549 8058202: AnnotatedType implementations don't override toString(), equals(), hashCode()
darcy
parents:
diff changeset
   279
                                      false);
5888ef300549 8058202: AnnotatedType implementations don't override toString(), equals(), hashCode()
darcy
parents:
diff changeset
   280
            } catch (Exception e) {
5888ef300549 8058202: AnnotatedType implementations don't override toString(), equals(), hashCode()
darcy
parents:
diff changeset
   281
                errors++;
5888ef300549 8058202: AnnotatedType implementations don't override toString(), equals(), hashCode()
darcy
parents:
diff changeset
   282
                System.err.println("Method " + methodName + " not found.");
5888ef300549 8058202: AnnotatedType implementations don't override toString(), equals(), hashCode()
darcy
parents:
diff changeset
   283
            }
5888ef300549 8058202: AnnotatedType implementations don't override toString(), equals(), hashCode()
darcy
parents:
diff changeset
   284
        }
5888ef300549 8058202: AnnotatedType implementations don't override toString(), equals(), hashCode()
darcy
parents:
diff changeset
   285
    }
5888ef300549 8058202: AnnotatedType implementations don't override toString(), equals(), hashCode()
darcy
parents:
diff changeset
   286
5888ef300549 8058202: AnnotatedType implementations don't override toString(), equals(), hashCode()
darcy
parents:
diff changeset
   287
    static void testWildcards() {
5888ef300549 8058202: AnnotatedType implementations don't override toString(), equals(), hashCode()
darcy
parents:
diff changeset
   288
        System.err.println("Testing wildcards");
5888ef300549 8058202: AnnotatedType implementations don't override toString(), equals(), hashCode()
darcy
parents:
diff changeset
   289
        // public @AnnotType(10) Set<? extends Number> fooNumberSet() {return null;}
5888ef300549 8058202: AnnotatedType implementations don't override toString(), equals(), hashCode()
darcy
parents:
diff changeset
   290
        // public @AnnotType(11) Set<@AnnotType(13) ? extends Number> fooNumberSet2() {return null;}
5888ef300549 8058202: AnnotatedType implementations don't override toString(), equals(), hashCode()
darcy
parents:
diff changeset
   291
        AnnotatedWildcardType awt1 = extractWildcard("fooNumberSet");
5888ef300549 8058202: AnnotatedType implementations don't override toString(), equals(), hashCode()
darcy
parents:
diff changeset
   292
        AnnotatedWildcardType awt2 = extractWildcard("fooNumberSet2");
5888ef300549 8058202: AnnotatedType implementations don't override toString(), equals(), hashCode()
darcy
parents:
diff changeset
   293
5888ef300549 8058202: AnnotatedType implementations don't override toString(), equals(), hashCode()
darcy
parents:
diff changeset
   294
        if (!awt1.equals(extractWildcard("fooNumberSet")) ||
5888ef300549 8058202: AnnotatedType implementations don't override toString(), equals(), hashCode()
darcy
parents:
diff changeset
   295
            !awt2.equals(extractWildcard("fooNumberSet2"))) {
5888ef300549 8058202: AnnotatedType implementations don't override toString(), equals(), hashCode()
darcy
parents:
diff changeset
   296
            errors++;
5888ef300549 8058202: AnnotatedType implementations don't override toString(), equals(), hashCode()
darcy
parents:
diff changeset
   297
            System.err.println("Bad equality comparison on wildcards.");
5888ef300549 8058202: AnnotatedType implementations don't override toString(), equals(), hashCode()
darcy
parents:
diff changeset
   298
        }
5888ef300549 8058202: AnnotatedType implementations don't override toString(), equals(), hashCode()
darcy
parents:
diff changeset
   299
5888ef300549 8058202: AnnotatedType implementations don't override toString(), equals(), hashCode()
darcy
parents:
diff changeset
   300
        checkTypesForEquality(awt1, awt2, false);
5888ef300549 8058202: AnnotatedType implementations don't override toString(), equals(), hashCode()
darcy
parents:
diff changeset
   301
5888ef300549 8058202: AnnotatedType implementations don't override toString(), equals(), hashCode()
darcy
parents:
diff changeset
   302
        if (awt2.getAnnotations().length == 0) {
5888ef300549 8058202: AnnotatedType implementations don't override toString(), equals(), hashCode()
darcy
parents:
diff changeset
   303
            errors++;
5888ef300549 8058202: AnnotatedType implementations don't override toString(), equals(), hashCode()
darcy
parents:
diff changeset
   304
            System.err.println("Expected annotations not found.");
5888ef300549 8058202: AnnotatedType implementations don't override toString(), equals(), hashCode()
darcy
parents:
diff changeset
   305
        }
5888ef300549 8058202: AnnotatedType implementations don't override toString(), equals(), hashCode()
darcy
parents:
diff changeset
   306
    }
5888ef300549 8058202: AnnotatedType implementations don't override toString(), equals(), hashCode()
darcy
parents:
diff changeset
   307
5888ef300549 8058202: AnnotatedType implementations don't override toString(), equals(), hashCode()
darcy
parents:
diff changeset
   308
    private static AnnotatedWildcardType extractWildcard(String methodName) {
5888ef300549 8058202: AnnotatedType implementations don't override toString(), equals(), hashCode()
darcy
parents:
diff changeset
   309
        try {
5888ef300549 8058202: AnnotatedType implementations don't override toString(), equals(), hashCode()
darcy
parents:
diff changeset
   310
            return (AnnotatedWildcardType)
5888ef300549 8058202: AnnotatedType implementations don't override toString(), equals(), hashCode()
darcy
parents:
diff changeset
   311
                (((AnnotatedParameterizedType)(AnnotatedTypeHost.class.getMethod(methodName).
5888ef300549 8058202: AnnotatedType implementations don't override toString(), equals(), hashCode()
darcy
parents:
diff changeset
   312
                                               getAnnotatedReturnType())).
5888ef300549 8058202: AnnotatedType implementations don't override toString(), equals(), hashCode()
darcy
parents:
diff changeset
   313
                 getAnnotatedActualTypeArguments()[0] );
5888ef300549 8058202: AnnotatedType implementations don't override toString(), equals(), hashCode()
darcy
parents:
diff changeset
   314
        } catch (Exception e) {
5888ef300549 8058202: AnnotatedType implementations don't override toString(), equals(), hashCode()
darcy
parents:
diff changeset
   315
            throw new RuntimeException(e);
5888ef300549 8058202: AnnotatedType implementations don't override toString(), equals(), hashCode()
darcy
parents:
diff changeset
   316
        }
5888ef300549 8058202: AnnotatedType implementations don't override toString(), equals(), hashCode()
darcy
parents:
diff changeset
   317
    }
5888ef300549 8058202: AnnotatedType implementations don't override toString(), equals(), hashCode()
darcy
parents:
diff changeset
   318
55090
c1ad2862d0dd 8224012: AnnotatedType implementations of hashCode() lead to StackOverflowError
darcy
parents: 52317
diff changeset
   319
    static void testFbounds() {
c1ad2862d0dd 8224012: AnnotatedType implementations of hashCode() lead to StackOverflowError
darcy
parents: 52317
diff changeset
   320
        // Make sure equals and hashCode work fine for a type
c1ad2862d0dd 8224012: AnnotatedType implementations of hashCode() lead to StackOverflowError
darcy
parents: 52317
diff changeset
   321
        // involving an F-bound, in particular Comparable<E> in
c1ad2862d0dd 8224012: AnnotatedType implementations of hashCode() lead to StackOverflowError
darcy
parents: 52317
diff changeset
   322
        // java.lang.Enum:
c1ad2862d0dd 8224012: AnnotatedType implementations of hashCode() lead to StackOverflowError
darcy
parents: 52317
diff changeset
   323
        //
c1ad2862d0dd 8224012: AnnotatedType implementations of hashCode() lead to StackOverflowError
darcy
parents: 52317
diff changeset
   324
        // class Enum<E extends Enum<E>>
c1ad2862d0dd 8224012: AnnotatedType implementations of hashCode() lead to StackOverflowError
darcy
parents: 52317
diff changeset
   325
        // implements Constable, Comparable<E>, Serializable
c1ad2862d0dd 8224012: AnnotatedType implementations of hashCode() lead to StackOverflowError
darcy
parents: 52317
diff changeset
   326
c1ad2862d0dd 8224012: AnnotatedType implementations of hashCode() lead to StackOverflowError
darcy
parents: 52317
diff changeset
   327
        AnnotatedType[] types = Enum.class.getAnnotatedInterfaces();
c1ad2862d0dd 8224012: AnnotatedType implementations of hashCode() lead to StackOverflowError
darcy
parents: 52317
diff changeset
   328
c1ad2862d0dd 8224012: AnnotatedType implementations of hashCode() lead to StackOverflowError
darcy
parents: 52317
diff changeset
   329
        for (int i = 0; i < types.length; i ++) {
c1ad2862d0dd 8224012: AnnotatedType implementations of hashCode() lead to StackOverflowError
darcy
parents: 52317
diff changeset
   330
            for (int j = 0; j < types.length; j ++) {
c1ad2862d0dd 8224012: AnnotatedType implementations of hashCode() lead to StackOverflowError
darcy
parents: 52317
diff changeset
   331
                checkTypesForEquality(types[i], types[j], i == j);
c1ad2862d0dd 8224012: AnnotatedType implementations of hashCode() lead to StackOverflowError
darcy
parents: 52317
diff changeset
   332
            }
c1ad2862d0dd 8224012: AnnotatedType implementations of hashCode() lead to StackOverflowError
darcy
parents: 52317
diff changeset
   333
        }
c1ad2862d0dd 8224012: AnnotatedType implementations of hashCode() lead to StackOverflowError
darcy
parents: 52317
diff changeset
   334
    }
c1ad2862d0dd 8224012: AnnotatedType implementations of hashCode() lead to StackOverflowError
darcy
parents: 52317
diff changeset
   335
52079
5888ef300549 8058202: AnnotatedType implementations don't override toString(), equals(), hashCode()
darcy
parents:
diff changeset
   336
    // The TypeHost and AnnotatedTypeHost classes declare methods with
5888ef300549 8058202: AnnotatedType implementations don't override toString(), equals(), hashCode()
darcy
parents:
diff changeset
   337
    // the same name and signatures but with the AnnotatedTypeHost
5888ef300549 8058202: AnnotatedType implementations don't override toString(), equals(), hashCode()
darcy
parents:
diff changeset
   338
    // methods having annotations on their return type, where
5888ef300549 8058202: AnnotatedType implementations don't override toString(), equals(), hashCode()
darcy
parents:
diff changeset
   339
    // possible.
5888ef300549 8058202: AnnotatedType implementations don't override toString(), equals(), hashCode()
darcy
parents:
diff changeset
   340
5888ef300549 8058202: AnnotatedType implementations don't override toString(), equals(), hashCode()
darcy
parents:
diff changeset
   341
    static class TypeHost<E, F extends Number> {
52317
3c981e581f93 8212081: AnnotatedType.toString implementation don't print annotations on embedded types
darcy
parents: 52079
diff changeset
   342
        @AnnotTypeInfo
52079
5888ef300549 8058202: AnnotatedType implementations don't override toString(), equals(), hashCode()
darcy
parents:
diff changeset
   343
        public void fooVoid() {return;}
5888ef300549 8058202: AnnotatedType implementations don't override toString(), equals(), hashCode()
darcy
parents:
diff changeset
   344
52317
3c981e581f93 8212081: AnnotatedType.toString implementation don't print annotations on embedded types
darcy
parents: 52079
diff changeset
   345
        @AnnotTypeInfo
52079
5888ef300549 8058202: AnnotatedType implementations don't override toString(), equals(), hashCode()
darcy
parents:
diff changeset
   346
        public int foo() {return 0;}
52317
3c981e581f93 8212081: AnnotatedType.toString implementation don't print annotations on embedded types
darcy
parents: 52079
diff changeset
   347
3c981e581f93 8212081: AnnotatedType.toString implementation don't print annotations on embedded types
darcy
parents: 52079
diff changeset
   348
        @AnnotTypeInfo
52079
5888ef300549 8058202: AnnotatedType implementations don't override toString(), equals(), hashCode()
darcy
parents:
diff changeset
   349
        public String fooString() {return null;}
5888ef300549 8058202: AnnotatedType implementations don't override toString(), equals(), hashCode()
darcy
parents:
diff changeset
   350
52317
3c981e581f93 8212081: AnnotatedType.toString implementation don't print annotations on embedded types
darcy
parents: 52079
diff changeset
   351
        @AnnotTypeInfo
52079
5888ef300549 8058202: AnnotatedType implementations don't override toString(), equals(), hashCode()
darcy
parents:
diff changeset
   352
        public int[] fooIntArray() {return null;}
52317
3c981e581f93 8212081: AnnotatedType.toString implementation don't print annotations on embedded types
darcy
parents: 52079
diff changeset
   353
3c981e581f93 8212081: AnnotatedType.toString implementation don't print annotations on embedded types
darcy
parents: 52079
diff changeset
   354
        @AnnotTypeInfo
52079
5888ef300549 8058202: AnnotatedType implementations don't override toString(), equals(), hashCode()
darcy
parents:
diff changeset
   355
        public String[] fooStringArray() {return null;}
52317
3c981e581f93 8212081: AnnotatedType.toString implementation don't print annotations on embedded types
darcy
parents: 52079
diff changeset
   356
3c981e581f93 8212081: AnnotatedType.toString implementation don't print annotations on embedded types
darcy
parents: 52079
diff changeset
   357
        @AnnotTypeInfo
52079
5888ef300549 8058202: AnnotatedType implementations don't override toString(), equals(), hashCode()
darcy
parents:
diff changeset
   358
        public String [][] fooStringArrayArray() {return null;}
5888ef300549 8058202: AnnotatedType implementations don't override toString(), equals(), hashCode()
darcy
parents:
diff changeset
   359
52317
3c981e581f93 8212081: AnnotatedType.toString implementation don't print annotations on embedded types
darcy
parents: 52079
diff changeset
   360
        @AnnotTypeInfo
52079
5888ef300549 8058202: AnnotatedType implementations don't override toString(), equals(), hashCode()
darcy
parents:
diff changeset
   361
        public Set<String> fooSetString() {return null;}
52317
3c981e581f93 8212081: AnnotatedType.toString implementation don't print annotations on embedded types
darcy
parents: 52079
diff changeset
   362
3c981e581f93 8212081: AnnotatedType.toString implementation don't print annotations on embedded types
darcy
parents: 52079
diff changeset
   363
        @AnnotTypeInfo
3c981e581f93 8212081: AnnotatedType.toString implementation don't print annotations on embedded types
darcy
parents: 52079
diff changeset
   364
        public Set<Number> fooSetNumber() {return null;}
3c981e581f93 8212081: AnnotatedType.toString implementation don't print annotations on embedded types
darcy
parents: 52079
diff changeset
   365
3c981e581f93 8212081: AnnotatedType.toString implementation don't print annotations on embedded types
darcy
parents: 52079
diff changeset
   366
        @AnnotTypeInfo
52079
5888ef300549 8058202: AnnotatedType implementations don't override toString(), equals(), hashCode()
darcy
parents:
diff changeset
   367
        public E fooE() {return null;}
52317
3c981e581f93 8212081: AnnotatedType.toString implementation don't print annotations on embedded types
darcy
parents: 52079
diff changeset
   368
3c981e581f93 8212081: AnnotatedType.toString implementation don't print annotations on embedded types
darcy
parents: 52079
diff changeset
   369
        @AnnotTypeInfo
52079
5888ef300549 8058202: AnnotatedType implementations don't override toString(), equals(), hashCode()
darcy
parents:
diff changeset
   370
        public F fooF() {return null;}
52317
3c981e581f93 8212081: AnnotatedType.toString implementation don't print annotations on embedded types
darcy
parents: 52079
diff changeset
   371
3c981e581f93 8212081: AnnotatedType.toString implementation don't print annotations on embedded types
darcy
parents: 52079
diff changeset
   372
        @AnnotTypeInfo
52079
5888ef300549 8058202: AnnotatedType implementations don't override toString(), equals(), hashCode()
darcy
parents:
diff changeset
   373
        public <G> G fooG() {return null;}
5888ef300549 8058202: AnnotatedType implementations don't override toString(), equals(), hashCode()
darcy
parents:
diff changeset
   374
52317
3c981e581f93 8212081: AnnotatedType.toString implementation don't print annotations on embedded types
darcy
parents: 52079
diff changeset
   375
        @AnnotTypeInfo
52079
5888ef300549 8058202: AnnotatedType implementations don't override toString(), equals(), hashCode()
darcy
parents:
diff changeset
   376
        public  Set<? extends Number> fooNumberSet() {return null;}
52317
3c981e581f93 8212081: AnnotatedType.toString implementation don't print annotations on embedded types
darcy
parents: 52079
diff changeset
   377
3c981e581f93 8212081: AnnotatedType.toString implementation don't print annotations on embedded types
darcy
parents: 52079
diff changeset
   378
        @AnnotTypeInfo
52079
5888ef300549 8058202: AnnotatedType implementations don't override toString(), equals(), hashCode()
darcy
parents:
diff changeset
   379
        public  Set<? extends Integer> fooNumberSet2() {return null;}
52317
3c981e581f93 8212081: AnnotatedType.toString implementation don't print annotations on embedded types
darcy
parents: 52079
diff changeset
   380
3c981e581f93 8212081: AnnotatedType.toString implementation don't print annotations on embedded types
darcy
parents: 52079
diff changeset
   381
        @AnnotTypeInfo
3c981e581f93 8212081: AnnotatedType.toString implementation don't print annotations on embedded types
darcy
parents: 52079
diff changeset
   382
        public  Set<? extends Long> fooNumberSet3() {return null;}
3c981e581f93 8212081: AnnotatedType.toString implementation don't print annotations on embedded types
darcy
parents: 52079
diff changeset
   383
3c981e581f93 8212081: AnnotatedType.toString implementation don't print annotations on embedded types
darcy
parents: 52079
diff changeset
   384
        @AnnotTypeInfo
3c981e581f93 8212081: AnnotatedType.toString implementation don't print annotations on embedded types
darcy
parents: 52079
diff changeset
   385
        public Set<?> fooObjectSet() {return null;}
3c981e581f93 8212081: AnnotatedType.toString implementation don't print annotations on embedded types
darcy
parents: 52079
diff changeset
   386
3c981e581f93 8212081: AnnotatedType.toString implementation don't print annotations on embedded types
darcy
parents: 52079
diff changeset
   387
        @AnnotTypeInfo
3c981e581f93 8212081: AnnotatedType.toString implementation don't print annotations on embedded types
darcy
parents: 52079
diff changeset
   388
        public List<? extends Object> fooObjectList() {return null;}
52079
5888ef300549 8058202: AnnotatedType implementations don't override toString(), equals(), hashCode()
darcy
parents:
diff changeset
   389
    }
5888ef300549 8058202: AnnotatedType implementations don't override toString(), equals(), hashCode()
darcy
parents:
diff changeset
   390
5888ef300549 8058202: AnnotatedType implementations don't override toString(), equals(), hashCode()
darcy
parents:
diff changeset
   391
    @Retention(RetentionPolicy.RUNTIME)
5888ef300549 8058202: AnnotatedType implementations don't override toString(), equals(), hashCode()
darcy
parents:
diff changeset
   392
    @Target(ElementType.TYPE_USE)
5888ef300549 8058202: AnnotatedType implementations don't override toString(), equals(), hashCode()
darcy
parents:
diff changeset
   393
    static @interface AnnotType {
5888ef300549 8058202: AnnotatedType implementations don't override toString(), equals(), hashCode()
darcy
parents:
diff changeset
   394
        int value() default 0;
5888ef300549 8058202: AnnotatedType implementations don't override toString(), equals(), hashCode()
darcy
parents:
diff changeset
   395
    }
5888ef300549 8058202: AnnotatedType implementations don't override toString(), equals(), hashCode()
darcy
parents:
diff changeset
   396
52317
3c981e581f93 8212081: AnnotatedType.toString implementation don't print annotations on embedded types
darcy
parents: 52079
diff changeset
   397
    @Retention(RetentionPolicy.RUNTIME)
3c981e581f93 8212081: AnnotatedType.toString implementation don't print annotations on embedded types
darcy
parents: 52079
diff changeset
   398
    @Target(ElementType.METHOD)
3c981e581f93 8212081: AnnotatedType.toString implementation don't print annotations on embedded types
darcy
parents: 52079
diff changeset
   399
    static @interface AnnotTypeInfo {
3c981e581f93 8212081: AnnotatedType.toString implementation don't print annotations on embedded types
darcy
parents: 52079
diff changeset
   400
        /**
3c981e581f93 8212081: AnnotatedType.toString implementation don't print annotations on embedded types
darcy
parents: 52079
diff changeset
   401
         * Expected number of @AnnotType
3c981e581f93 8212081: AnnotatedType.toString implementation don't print annotations on embedded types
darcy
parents: 52079
diff changeset
   402
         */
3c981e581f93 8212081: AnnotatedType.toString implementation don't print annotations on embedded types
darcy
parents: 52079
diff changeset
   403
        int count() default 0;
3c981e581f93 8212081: AnnotatedType.toString implementation don't print annotations on embedded types
darcy
parents: 52079
diff changeset
   404
3c981e581f93 8212081: AnnotatedType.toString implementation don't print annotations on embedded types
darcy
parents: 52079
diff changeset
   405
        /**
3c981e581f93 8212081: AnnotatedType.toString implementation don't print annotations on embedded types
darcy
parents: 52079
diff changeset
   406
         * Relation to genericString output.
3c981e581f93 8212081: AnnotatedType.toString implementation don't print annotations on embedded types
darcy
parents: 52079
diff changeset
   407
         */
3c981e581f93 8212081: AnnotatedType.toString implementation don't print annotations on embedded types
darcy
parents: 52079
diff changeset
   408
        Relation relation() default Relation.EQUAL;
3c981e581f93 8212081: AnnotatedType.toString implementation don't print annotations on embedded types
darcy
parents: 52079
diff changeset
   409
    }
3c981e581f93 8212081: AnnotatedType.toString implementation don't print annotations on embedded types
darcy
parents: 52079
diff changeset
   410
3c981e581f93 8212081: AnnotatedType.toString implementation don't print annotations on embedded types
darcy
parents: 52079
diff changeset
   411
    /**
3c981e581f93 8212081: AnnotatedType.toString implementation don't print annotations on embedded types
darcy
parents: 52079
diff changeset
   412
     * Expected relationship of toString output of AnnotatedType to
3c981e581f93 8212081: AnnotatedType.toString implementation don't print annotations on embedded types
darcy
parents: 52079
diff changeset
   413
     * toGenericString output of underlying type.
3c981e581f93 8212081: AnnotatedType.toString implementation don't print annotations on embedded types
darcy
parents: 52079
diff changeset
   414
     */
3c981e581f93 8212081: AnnotatedType.toString implementation don't print annotations on embedded types
darcy
parents: 52079
diff changeset
   415
    static private enum Relation {
3c981e581f93 8212081: AnnotatedType.toString implementation don't print annotations on embedded types
darcy
parents: 52079
diff changeset
   416
        EQUAL,
3c981e581f93 8212081: AnnotatedType.toString implementation don't print annotations on embedded types
darcy
parents: 52079
diff changeset
   417
3c981e581f93 8212081: AnnotatedType.toString implementation don't print annotations on embedded types
darcy
parents: 52079
diff changeset
   418
        /**
3c981e581f93 8212081: AnnotatedType.toString implementation don't print annotations on embedded types
darcy
parents: 52079
diff changeset
   419
         * The toGenericString output is a postfix of the
3c981e581f93 8212081: AnnotatedType.toString implementation don't print annotations on embedded types
darcy
parents: 52079
diff changeset
   420
         * AnnotatedType output; a leading annotation is expected.
3c981e581f93 8212081: AnnotatedType.toString implementation don't print annotations on embedded types
darcy
parents: 52079
diff changeset
   421
         */
3c981e581f93 8212081: AnnotatedType.toString implementation don't print annotations on embedded types
darcy
parents: 52079
diff changeset
   422
        POSTFIX,
3c981e581f93 8212081: AnnotatedType.toString implementation don't print annotations on embedded types
darcy
parents: 52079
diff changeset
   423
3c981e581f93 8212081: AnnotatedType.toString implementation don't print annotations on embedded types
darcy
parents: 52079
diff changeset
   424
        /**
3c981e581f93 8212081: AnnotatedType.toString implementation don't print annotations on embedded types
darcy
parents: 52079
diff changeset
   425
         * If the annotations are stripped from the AnnotatedType
3c981e581f93 8212081: AnnotatedType.toString implementation don't print annotations on embedded types
darcy
parents: 52079
diff changeset
   426
         * output and whitespace adjusted accordingly, it should equal
3c981e581f93 8212081: AnnotatedType.toString implementation don't print annotations on embedded types
darcy
parents: 52079
diff changeset
   427
         * the toGenericString output.
3c981e581f93 8212081: AnnotatedType.toString implementation don't print annotations on embedded types
darcy
parents: 52079
diff changeset
   428
         */
3c981e581f93 8212081: AnnotatedType.toString implementation don't print annotations on embedded types
darcy
parents: 52079
diff changeset
   429
        STRIPPED,
3c981e581f93 8212081: AnnotatedType.toString implementation don't print annotations on embedded types
darcy
parents: 52079
diff changeset
   430
3c981e581f93 8212081: AnnotatedType.toString implementation don't print annotations on embedded types
darcy
parents: 52079
diff changeset
   431
        /**
3c981e581f93 8212081: AnnotatedType.toString implementation don't print annotations on embedded types
darcy
parents: 52079
diff changeset
   432
         * The output of AnnotatedType for arrays would require more
3c981e581f93 8212081: AnnotatedType.toString implementation don't print annotations on embedded types
darcy
parents: 52079
diff changeset
   433
         * extensive transformation to map to toGenericString output.
3c981e581f93 8212081: AnnotatedType.toString implementation don't print annotations on embedded types
darcy
parents: 52079
diff changeset
   434
         */
3c981e581f93 8212081: AnnotatedType.toString implementation don't print annotations on embedded types
darcy
parents: 52079
diff changeset
   435
        ARRAY,
3c981e581f93 8212081: AnnotatedType.toString implementation don't print annotations on embedded types
darcy
parents: 52079
diff changeset
   436
3c981e581f93 8212081: AnnotatedType.toString implementation don't print annotations on embedded types
darcy
parents: 52079
diff changeset
   437
       /**
3c981e581f93 8212081: AnnotatedType.toString implementation don't print annotations on embedded types
darcy
parents: 52079
diff changeset
   438
         * Some other, harder to characterize, relationship. Currently
3c981e581f93 8212081: AnnotatedType.toString implementation don't print annotations on embedded types
darcy
parents: 52079
diff changeset
   439
         * used for a wildcard where Object in "extends Object" is
3c981e581f93 8212081: AnnotatedType.toString implementation don't print annotations on embedded types
darcy
parents: 52079
diff changeset
   440
         * annotated; the "extends Object" is elided in toGenericString.
3c981e581f93 8212081: AnnotatedType.toString implementation don't print annotations on embedded types
darcy
parents: 52079
diff changeset
   441
         */
3c981e581f93 8212081: AnnotatedType.toString implementation don't print annotations on embedded types
darcy
parents: 52079
diff changeset
   442
        OTHER;
3c981e581f93 8212081: AnnotatedType.toString implementation don't print annotations on embedded types
darcy
parents: 52079
diff changeset
   443
    }
3c981e581f93 8212081: AnnotatedType.toString implementation don't print annotations on embedded types
darcy
parents: 52079
diff changeset
   444
52079
5888ef300549 8058202: AnnotatedType implementations don't override toString(), equals(), hashCode()
darcy
parents:
diff changeset
   445
    static class AnnotatedTypeHost<E, F extends Number> {
52317
3c981e581f93 8212081: AnnotatedType.toString implementation don't print annotations on embedded types
darcy
parents: 52079
diff changeset
   446
        @AnnotTypeInfo
52079
5888ef300549 8058202: AnnotatedType implementations don't override toString(), equals(), hashCode()
darcy
parents:
diff changeset
   447
        public /*@AnnotType(0)*/ void fooVoid() {return;} // Illegal to annotate void
5888ef300549 8058202: AnnotatedType implementations don't override toString(), equals(), hashCode()
darcy
parents:
diff changeset
   448
52317
3c981e581f93 8212081: AnnotatedType.toString implementation don't print annotations on embedded types
darcy
parents: 52079
diff changeset
   449
        @AnnotTypeInfo(count =1, relation = Relation.POSTFIX)
3c981e581f93 8212081: AnnotatedType.toString implementation don't print annotations on embedded types
darcy
parents: 52079
diff changeset
   450
        @AnnotType(1)
3c981e581f93 8212081: AnnotatedType.toString implementation don't print annotations on embedded types
darcy
parents: 52079
diff changeset
   451
        public int foo() {return 0;}
3c981e581f93 8212081: AnnotatedType.toString implementation don't print annotations on embedded types
darcy
parents: 52079
diff changeset
   452
3c981e581f93 8212081: AnnotatedType.toString implementation don't print annotations on embedded types
darcy
parents: 52079
diff changeset
   453
        @AnnotTypeInfo(count = 1, relation = Relation.POSTFIX)
3c981e581f93 8212081: AnnotatedType.toString implementation don't print annotations on embedded types
darcy
parents: 52079
diff changeset
   454
        @AnnotType(2)
3c981e581f93 8212081: AnnotatedType.toString implementation don't print annotations on embedded types
darcy
parents: 52079
diff changeset
   455
        public  String fooString() {return null;}
3c981e581f93 8212081: AnnotatedType.toString implementation don't print annotations on embedded types
darcy
parents: 52079
diff changeset
   456
3c981e581f93 8212081: AnnotatedType.toString implementation don't print annotations on embedded types
darcy
parents: 52079
diff changeset
   457
        @AnnotTypeInfo(count = 1, relation = Relation.ARRAY)
3c981e581f93 8212081: AnnotatedType.toString implementation don't print annotations on embedded types
darcy
parents: 52079
diff changeset
   458
        public int @AnnotType(3) [] fooIntArray() {return null;}
52079
5888ef300549 8058202: AnnotatedType implementations don't override toString(), equals(), hashCode()
darcy
parents:
diff changeset
   459
52317
3c981e581f93 8212081: AnnotatedType.toString implementation don't print annotations on embedded types
darcy
parents: 52079
diff changeset
   460
        @AnnotTypeInfo(count = 1, relation = Relation.ARRAY)
3c981e581f93 8212081: AnnotatedType.toString implementation don't print annotations on embedded types
darcy
parents: 52079
diff changeset
   461
        public String @AnnotType(4) [] fooStringArray() {return null;}
3c981e581f93 8212081: AnnotatedType.toString implementation don't print annotations on embedded types
darcy
parents: 52079
diff changeset
   462
3c981e581f93 8212081: AnnotatedType.toString implementation don't print annotations on embedded types
darcy
parents: 52079
diff changeset
   463
        @AnnotTypeInfo(count = 3, relation = Relation.ARRAY)
3c981e581f93 8212081: AnnotatedType.toString implementation don't print annotations on embedded types
darcy
parents: 52079
diff changeset
   464
        @AnnotType(5)
3c981e581f93 8212081: AnnotatedType.toString implementation don't print annotations on embedded types
darcy
parents: 52079
diff changeset
   465
        public String  @AnnotType(0) [] @AnnotType(1) [] fooStringArrayArray() {return null;}
3c981e581f93 8212081: AnnotatedType.toString implementation don't print annotations on embedded types
darcy
parents: 52079
diff changeset
   466
3c981e581f93 8212081: AnnotatedType.toString implementation don't print annotations on embedded types
darcy
parents: 52079
diff changeset
   467
        @AnnotTypeInfo(count = 1, relation = Relation.POSTFIX)
3c981e581f93 8212081: AnnotatedType.toString implementation don't print annotations on embedded types
darcy
parents: 52079
diff changeset
   468
        @AnnotType(6)
3c981e581f93 8212081: AnnotatedType.toString implementation don't print annotations on embedded types
darcy
parents: 52079
diff changeset
   469
        public Set<String> fooSetString() {return null;}
3c981e581f93 8212081: AnnotatedType.toString implementation don't print annotations on embedded types
darcy
parents: 52079
diff changeset
   470
3c981e581f93 8212081: AnnotatedType.toString implementation don't print annotations on embedded types
darcy
parents: 52079
diff changeset
   471
        @AnnotTypeInfo(count = 2, relation = Relation.STRIPPED)
3c981e581f93 8212081: AnnotatedType.toString implementation don't print annotations on embedded types
darcy
parents: 52079
diff changeset
   472
        @AnnotType(7)
3c981e581f93 8212081: AnnotatedType.toString implementation don't print annotations on embedded types
darcy
parents: 52079
diff changeset
   473
        public Set<@AnnotType(8) Number> fooSetNumber() {return null;}
52079
5888ef300549 8058202: AnnotatedType implementations don't override toString(), equals(), hashCode()
darcy
parents:
diff changeset
   474
52317
3c981e581f93 8212081: AnnotatedType.toString implementation don't print annotations on embedded types
darcy
parents: 52079
diff changeset
   475
        @AnnotTypeInfo(count = 1, relation = Relation.POSTFIX)
3c981e581f93 8212081: AnnotatedType.toString implementation don't print annotations on embedded types
darcy
parents: 52079
diff changeset
   476
        @AnnotType(9)
3c981e581f93 8212081: AnnotatedType.toString implementation don't print annotations on embedded types
darcy
parents: 52079
diff changeset
   477
        public E fooE() {return null;}
3c981e581f93 8212081: AnnotatedType.toString implementation don't print annotations on embedded types
darcy
parents: 52079
diff changeset
   478
3c981e581f93 8212081: AnnotatedType.toString implementation don't print annotations on embedded types
darcy
parents: 52079
diff changeset
   479
        @AnnotTypeInfo(count = 1, relation = Relation.POSTFIX)
3c981e581f93 8212081: AnnotatedType.toString implementation don't print annotations on embedded types
darcy
parents: 52079
diff changeset
   480
        @AnnotType(10)
3c981e581f93 8212081: AnnotatedType.toString implementation don't print annotations on embedded types
darcy
parents: 52079
diff changeset
   481
        public F fooF() {return null;}
3c981e581f93 8212081: AnnotatedType.toString implementation don't print annotations on embedded types
darcy
parents: 52079
diff changeset
   482
3c981e581f93 8212081: AnnotatedType.toString implementation don't print annotations on embedded types
darcy
parents: 52079
diff changeset
   483
        @AnnotTypeInfo(count = 1, relation = Relation.POSTFIX)
3c981e581f93 8212081: AnnotatedType.toString implementation don't print annotations on embedded types
darcy
parents: 52079
diff changeset
   484
        @AnnotType(11)
3c981e581f93 8212081: AnnotatedType.toString implementation don't print annotations on embedded types
darcy
parents: 52079
diff changeset
   485
        public <G> G fooG() {return null;}
3c981e581f93 8212081: AnnotatedType.toString implementation don't print annotations on embedded types
darcy
parents: 52079
diff changeset
   486
3c981e581f93 8212081: AnnotatedType.toString implementation don't print annotations on embedded types
darcy
parents: 52079
diff changeset
   487
        @AnnotTypeInfo(count = 1, relation = Relation.POSTFIX)
3c981e581f93 8212081: AnnotatedType.toString implementation don't print annotations on embedded types
darcy
parents: 52079
diff changeset
   488
        @AnnotType(12)
3c981e581f93 8212081: AnnotatedType.toString implementation don't print annotations on embedded types
darcy
parents: 52079
diff changeset
   489
        public Set<? extends Number> fooNumberSet() {return null;}
52079
5888ef300549 8058202: AnnotatedType implementations don't override toString(), equals(), hashCode()
darcy
parents:
diff changeset
   490
52317
3c981e581f93 8212081: AnnotatedType.toString implementation don't print annotations on embedded types
darcy
parents: 52079
diff changeset
   491
        @AnnotTypeInfo(count = 2, relation = Relation.STRIPPED)
3c981e581f93 8212081: AnnotatedType.toString implementation don't print annotations on embedded types
darcy
parents: 52079
diff changeset
   492
        @AnnotType(13)
3c981e581f93 8212081: AnnotatedType.toString implementation don't print annotations on embedded types
darcy
parents: 52079
diff changeset
   493
        public Set<@AnnotType(14) ? extends Number> fooNumberSet2() {return null;}
3c981e581f93 8212081: AnnotatedType.toString implementation don't print annotations on embedded types
darcy
parents: 52079
diff changeset
   494
3c981e581f93 8212081: AnnotatedType.toString implementation don't print annotations on embedded types
darcy
parents: 52079
diff changeset
   495
        @AnnotTypeInfo(count = 2, relation = Relation.STRIPPED)
3c981e581f93 8212081: AnnotatedType.toString implementation don't print annotations on embedded types
darcy
parents: 52079
diff changeset
   496
        @AnnotType(15)
3c981e581f93 8212081: AnnotatedType.toString implementation don't print annotations on embedded types
darcy
parents: 52079
diff changeset
   497
        public Set< ? extends @AnnotType(16) Long> fooNumberSet3() {return null;}
3c981e581f93 8212081: AnnotatedType.toString implementation don't print annotations on embedded types
darcy
parents: 52079
diff changeset
   498
3c981e581f93 8212081: AnnotatedType.toString implementation don't print annotations on embedded types
darcy
parents: 52079
diff changeset
   499
        @AnnotTypeInfo(count = 2, relation = Relation.STRIPPED)
3c981e581f93 8212081: AnnotatedType.toString implementation don't print annotations on embedded types
darcy
parents: 52079
diff changeset
   500
        @AnnotType(16)
3c981e581f93 8212081: AnnotatedType.toString implementation don't print annotations on embedded types
darcy
parents: 52079
diff changeset
   501
        public Set<@AnnotType(17) ?> fooObjectSet() {return null;}
3c981e581f93 8212081: AnnotatedType.toString implementation don't print annotations on embedded types
darcy
parents: 52079
diff changeset
   502
3c981e581f93 8212081: AnnotatedType.toString implementation don't print annotations on embedded types
darcy
parents: 52079
diff changeset
   503
        @AnnotTypeInfo(count = 2, relation = Relation.OTHER)
3c981e581f93 8212081: AnnotatedType.toString implementation don't print annotations on embedded types
darcy
parents: 52079
diff changeset
   504
        @AnnotType(18)
3c981e581f93 8212081: AnnotatedType.toString implementation don't print annotations on embedded types
darcy
parents: 52079
diff changeset
   505
        public List<? extends @AnnotType(19) Object> fooObjectList() {return null;}
52079
5888ef300549 8058202: AnnotatedType implementations don't override toString(), equals(), hashCode()
darcy
parents:
diff changeset
   506
    }
5888ef300549 8058202: AnnotatedType implementations don't override toString(), equals(), hashCode()
darcy
parents:
diff changeset
   507
}