@Override
 public IType getActualType(TypeVarToTypeMap typeMap, boolean bKeepTypeVars) {
   IType typeFromMap = typeMap.getByMatcher(this, JavaClassTypeVarMatcher.instance());
   if (typeFromMap != null && !(typeFromMap instanceof ErrorType)) {
     if (typeFromMap.getName().equals(getName())) {
       IType boundingType = ((ITypeVariableType) typeFromMap).getBoundingType();
       IType boundingTypeFromMap = TypeLord.getActualType(boundingType, typeMap, bKeepTypeVars);
       if (boundingType != boundingTypeFromMap) {
         TypeVariableDefinitionImpl tvd =
             ((TypeVariableDefinitionImpl) ((ITypeVariableType) typeFromMap).getTypeVarDef())
                 .clone(boundingTypeFromMap);
         typeFromMap =
             new TypeVariableType(
                 tvd,
                 ((ITypeVariableType) typeFromMap).getTypeVarDef().getEnclosingType()
                     instanceof IFunctionType);
         ((ITypeVariableType) typeFromMap).getTypeVarDef().setVariance(getVariance());
       }
     }
     return typeFromMap;
   } else {
     return TypeSystem.getErrorType(getName());
   }
 }
 @Override
 public IType getActualType(TypeVarToTypeMap typeMap) {
   return typeMap.getByMatcher(this, JavaClassTypeVarMatcher.instance());
 }