/**
* ��context�в������ͱ�����Ӧ��ʵ�����͡�
*/
static TypeInfo resolveTypeVariable(TypeVariableInfo var, GenericDeclarationInfo context, boolean includeBaseType) {
GenericDeclarationInfo declaration = assertNotNull(var, "var").getGenericDeclaration();
TypeInfo result = null;
// ��ǰvar��declaration�����ǣ� Class�������Ͳ�����method�������Ͳ�����constructor��
//
// ����1. delcaration��Class��contextҲ��Class������context.
// supertypes�в��Һ�declarationƥ���type
if (declaration instanceof ClassTypeInfo && context instanceof ClassTypeInfo) {
TypeInfo declarationEquivalent = findSupertype((ClassTypeInfo) context,
((ClassTypeInfo) declaration).getRawType());
if (declarationEquivalent != null) {
if (!includeBaseType && declarationEquivalent instanceof RawTypeInfo) {
result = var;
} else {
TypeInfo declarationResolved = declarationEquivalent.resolve(context, includeBaseType);
assertTrue(declarationResolved instanceof GenericDeclarationInfo,
"Unexpected declarationResolved: %s", declarationResolved);
result = ((GenericDeclarationInfo) declarationResolved).getActualTypeArgument(var.getName());