blob: 6bb3aa47aef3b686c500410a346034f9a00d3c74 [file] [log] [blame]
/*
* Copyright (c) 2004, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
/*
* @test
* @bug 5061485
* @summary Test sematics of ParameterizedType.equals
* @author Joseph D. Darcy
*/
import java.util.*;
import java.lang.reflect.*;
public class TestParameterizedType {
public <T> T genericMethod0() {
return null;
}
public <T> Set<T> genericMethod1() {
return null;
}
public <T> Set<T> genericMethod2() {
return null;
}
public <S> List<S> genericMethod3() {
return null;
}
public <X, Y> Map<X, Y> genericMethod4() {
return null;
}
public <T> T[] genericMethod5() {
return null;
}
public <T> T[] genericMethod6() {
return null;
}
public Set<? extends Cloneable> genericMethod7() {
return null;
}
public Set<? super Number> genericMethod8() {
return null;
}
public Set<?> genericMethod9() {
return null;
}
static List<Type> createTypes() throws Exception {
List<Type> typeList = new ArrayList<Type>(3);
String[] methodNames = {"genericMethod0",
"genericMethod1",
"genericMethod2",
"genericMethod3",
"genericMethod4",
"genericMethod5",
"genericMethod6",
"genericMethod7",
"genericMethod8",
"genericMethod9",
};
for(String s : methodNames) {
Type t = TestParameterizedType.class.getDeclaredMethod(s).getGenericReturnType();
// if (! (t instanceof ParameterizedType))
// throw new RuntimeException("Unexpected kind of return type");
typeList.add(t);
}
return typeList;
}
static boolean testReflexes(List<Type> typeList) {
for(Type t : typeList) {
if (! t.equals(t) ) {
System.err.printf("Bad reflexes for%s %s%n", t, t.getClass());
return true;
}
}
return false;
}
public static void main(String[] argv) throws Exception {
boolean failed = false;
List<Type> take1 = createTypes();
List<Type> take2 = createTypes();
// Test reflexivity
failed = failed | testReflexes(take1);
failed = failed | testReflexes(take2);
for(int i = 0; i < take1.size(); i++) {
Type type1 = take1.get(i);
for(int j = 0; j < take2.size(); j++) {
Type type2 = take2.get(j);
if (i == j) {
// corresponding types should be .equals
if (!type1.equals(type2) ) {
failed = true;
System.err.printf("Unexpected inequality: [%d, %d] %n\t%s%n\t%s%n",
i, j, type1, type2);
}
} else {
// non-corresponding types should *not* be .equals
if (type1.equals(type2) ) {
failed = true;
System.err.printf("Unexpected equality: [%d, %d] %n\t%s%n\t%s%n",
i, j, type1, type2);
}
}
}
}
if (failed)
throw new RuntimeException("Bad equality on ParameterizedTypes");
}
}