blob: 36406bb49eae5357206a0dbe1c960dcc056a2dd1 [file] [log] [blame]
// Copyright (c) 2017, the R8 project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
package minifygeneric;
import java.lang.reflect.Field;
import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
import java.lang.reflect.TypeVariable;
public class Minifygeneric {
public static void main(String[] args) throws NoSuchMethodException, SecurityException, NoSuchFieldException {
for (TypeVariable<Class<Generic>> var : Generic.class.getTypeParameters()) {
System.out.println(var.getName());
Type bound = var.getBounds()[0];
System.out.println(((Class<?>) bound).getName().equals(AA.class.getName()));
}
Field f = Generic.class.getField("f");
ParameterizedType fieldType = (java.lang.reflect.ParameterizedType)f.getGenericType();
checkOneParameterType(fieldType, Generic.class, AA.class);
ParameterizedType methodReturnType =
(ParameterizedType) Generic.class.getMethod("get").getGenericReturnType();
checkOneParameterType(methodReturnType, Generic.class, AA.class);
}
private static void checkOneParameterType(ParameterizedType toCheck, Class<?> rawType,
Class<?>... bounds) {
System.out.println(((Class<?>) toCheck.getRawType()).getName()
.equals(rawType.getName()));
Type[] parameters = toCheck.getActualTypeArguments();
System.out.println(parameters.length);
TypeVariable<?> parameter = (TypeVariable<?>) parameters[0];
System.out.println(parameter.getName());
Type[] actualBounds = parameter.getBounds();
for (int i = 0; i < bounds.length; i++) {
System.out.println(((Class<?>) actualBounds[i]).getName().equals(bounds[i].getName()));
}
}
}