Direct generics resolution

Generics resolution process is actually building a map of all types and their generics (this map is used inside resolution context for types navigation).

class Base<T extends Number> {}

class Root extends Base<Integer> {}

Get generics hierarchy:

GenericsResolutionUtils.resolve(Root.class) == [Root.class : [], Base.class: ["T": Integer.class]];

Or just resolve generics resolution from definition:

GenericsResolutionUtils.resolveRawGenerics(Base.class) == ["T": Number.class ];

Or, if generics already known as List, it could be converted to map:

Map<String, Type> generics = GenericsUtils.createGenericsMap(Some.class, knownGenericsList);

For example, we know that class MyType<T, K> has [String.class, Integer.class] generics. Then we can convert it to map:

GenericsUtils.createGenericsMap(MyType.class, [String.class, Integer.class]) 
                == ["T": String.class, "K": Integer.class]

And use resulted map for utility calls (e.g. GenericsUtils or ToStringUtils).