Program: 179234
Project: 179234
Buggy source:
private static Type getActualType(Type typeToEvaluate,Type parentType,Class<?> rawParentClass){
  if (typeToEvaluate instanceof Class<?>) {
    return typeToEvaluate;
  }
 else   if (typeToEvaluate instanceof ParameterizedType) {
    ParameterizedType castedType=(ParameterizedType)typeToEvaluate;
    Type owner=castedType.getOwnerType();
    Type[] actualTypeParameters=extractRealTypes(castedType.getActualTypeArguments(),parentType,rawParentClass);
    Type rawType=castedType.getRawType();
    return new ParameterizedTypeImpl(rawType,actualTypeParameters,owner);
  }
 else   if (typeToEvaluate instanceof GenericArrayType) {
    GenericArrayType castedType=(GenericArrayType)typeToEvaluate;
    Type componentType=castedType.getGenericComponentType();
    Type actualType=getActualType(componentType,parentType,rawParentClass);
    if (componentType.equals(actualType)) {
      return castedType;
    }
    return actualType instanceof Class<?> ? TypeUtils.wrapWithArray(TypeUtils.toRawClass(actualType)) : new GenericArrayTypeImpl(actualType);
  }
 else   if (typeToEvaluate instanceof TypeVariable<?>) {
    if (parentType instanceof ParameterizedType) {
      TypeVariable<?> fieldTypeVariable=(TypeVariable<?>)typeToEvaluate;
      TypeVariable<?>[] classTypeVariables=rawParentClass.getTypeParameters();
      ParameterizedType objParameterizedType=(ParameterizedType)parentType;
      int indexOfActualTypeArgument=getIndex(classTypeVariables,fieldTypeVariable);
      Type[] actualTypeArguments=objParameterizedType.getActualTypeArguments();
      return actualTypeArguments[indexOfActualTypeArgument];
    }
    throw new UnsupportedOperationException("String_Node_Str" + parentType + "String_Node_Str"+ "String_Node_Str");
  }
 else   if (typeToEvaluate instanceof WildcardType) {
    WildcardType castedType=(WildcardType)typeToEvaluate;
    return getActualType(castedType.getUpperBounds()[0],parentType,rawParentClass);
  }
 else {
    throw new IllegalArgumentException("String_Node_Str" + typeToEvaluate + "String_Node_Str"+ "String_Node_Str");
  }
}

Fixed version (ground truth):
private static Type getActualType(Type typeToEvaluate,Type parentType,Class<?> rawParentClass){
  if (typeToEvaluate instanceof Class<?>) {
    return typeToEvaluate;
  }
 else   if (typeToEvaluate instanceof ParameterizedType) {
    ParameterizedType castedType=(ParameterizedType)typeToEvaluate;
    Type owner=castedType.getOwnerType();
    Type[] actualTypeParameters=extractRealTypes(castedType.getActualTypeArguments(),parentType,rawParentClass);
    Type rawType=castedType.getRawType();
    return new ParameterizedTypeImpl(rawType,actualTypeParameters,owner);
  }
 else   if (typeToEvaluate instanceof GenericArrayType) {
    GenericArrayType castedType=(GenericArrayType)typeToEvaluate;
    Type componentType=castedType.getGenericComponentType();
    Type actualType=getActualType(componentType,parentType,rawParentClass);
    if (componentType.equals(actualType)) {
      return castedType;
    }
    return actualType instanceof Class<?> ? TypeUtils.wrapWithArray(TypeUtils.toRawClass(actualType)) : new GenericArrayTypeImpl(actualType);
  }
 else   if (typeToEvaluate instanceof TypeVariable<?>) {
    if (parentType instanceof ParameterizedType) {
      TypeVariable<?> fieldTypeVariable=(TypeVariable<?>)typeToEvaluate;
      TypeVariable<?>[] classTypeVariables=rawParentClass.getTypeParameters();
      ParameterizedType objParameterizedType=(ParameterizedType)parentType;
      int indexOfActualTypeArgument=getIndex(classTypeVariables,fieldTypeVariable);
      Type[] actualTypeArguments=objParameterizedType.getActualTypeArguments();
      return actualTypeArguments[indexOfActualTypeArgument];
    }
 else     if (typeToEvaluate instanceof TypeVariable<?>) {
      Type theSearchedType=null;
      do {
        theSearchedType=extractTypeForHierarchy(parentType,(TypeVariable<?>)typeToEvaluate);
      }
 while ((theSearchedType != null) && (theSearchedType instanceof TypeVariable<?>));
      if (theSearchedType != null) {
        return theSearchedType;
      }
    }
    throw new UnsupportedOperationException("String_Node_Str" + parentType + "String_Node_Str"+ "String_Node_Str");
  }
 else   if (typeToEvaluate instanceof WildcardType) {
    WildcardType castedType=(WildcardType)typeToEvaluate;
    return getActualType(castedType.getUpperBounds()[0],parentType,rawParentClass);
  }
 else {
    throw new IllegalArgumentException("String_Node_Str" + typeToEvaluate + "String_Node_Str"+ "String_Node_Str");
  }
}