### Eclipse Workspace Patch 1.0
#P drupal_test_7
Index: modules/field/field.info.inc
===================================================================
RCS file: /cvs/drupal/drupal/modules/field/field.info.inc,v
retrieving revision 1.6
diff -u -r1.6 field.info.inc
--- modules/field/field.info.inc	5 Jun 2009 18:25:41 -0000	1.6
+++ modules/field/field.info.inc	26 Jun 2009 18:34:16 -0000
@@ -98,6 +98,7 @@
           $info['field types'][$name]['module'] = $module;
         }
       }
+      drupal_alter('field_info', $info['field types']);
 
       // Populate widget types.
       foreach (module_implements('field_widget_info') as $module) {
@@ -107,6 +108,7 @@
           $info['widget types'][$name]['module'] = $module;
         }
       }
+      drupal_alter('field_widget_info', $info['widget types']);
 
       // Populate formatters.
       foreach (module_implements('field_formatter_info') as $module) {
@@ -116,6 +118,7 @@
           $info['formatter types'][$name]['module'] = $module;
         }
       }
+      drupal_alter('field_formatter_info', $info['formatter types']);
 
       // Populate information about 'fieldable' entities.
       foreach (module_implements('fieldable_info') as $module) {
@@ -138,6 +141,7 @@
           $info['fieldable types'][$name]['module'] = $module;
         }
       }
+      drupal_alter('fieldable_info', $info['fieldable types']);
 
       cache_set('field_info_types', $info, 'cache_field');
     }
Index: modules/field/field.api.php
===================================================================
RCS file: /cvs/drupal/drupal/modules/field/field.api.php,v
retrieving revision 1.15
diff -u -r1.15 field.api.php
--- modules/field/field.api.php	22 Jun 2009 09:10:04 -0000	1.15
+++ modules/field/field.api.php	26 Jun 2009 18:34:16 -0000
@@ -54,6 +54,19 @@
 }
 
 /**
+ * Perform alterations on fieldable types.
+ *
+ * @param $info
+ *   Array of informations on fieldable types exposed by hook_fieldable_info()
+ *   implementations.
+ */
+function hook_fieldable_info_alter(&$info) {
+  // A contributed module handling node-level caching would want to disable
+  // field cache for nodes.
+  $info['node']['cacheable'] = FALSE;
+}
+
+/**
  * @} End of "ingroup field_fieldable_type"
  */
 
@@ -115,6 +128,25 @@
 }
 
 /**
+ * Perform alterations on Field API field types.
+ *
+ * @param $info
+ *   Array of informations on widget types exposed by hook_field_info()
+ *   implementations.
+ */
+function hook_field_info_alter(&$info) {
+  // Add a setting to all field types.
+  foreach ($info as $field_type => $field_type_info) {
+    $info[$field_type]['settings'][] = array('mymodule_additional_setting' => 'default value');
+  }
+
+  // Change the default widget for fields of type 'foo'.
+  if (isset($info['foo'])) {
+    $info['foo']['default widget'] = 'mymodule_widget';
+  }
+}
+
+/**
  * Define the Field API schema for a field structure.
  *
  * @param $field
@@ -186,6 +218,21 @@
 function hook_field_widget_info() {
 }
 
+/**
+ * Perform alterations on Field API widget types.
+ *
+ * @param $info
+ *   Array of informations on widget types exposed by hook_field_widget_info()
+ *   implementations.
+ */
+function hook_field_widget_info_alter(&$info) {
+  // Add a setting to a widget type.
+  $info['text_textfield']['settings'][] = array('mymodule_additional_setting' => 'default value');
+
+  // Let a new field type re-use an existing widget.
+  $info['options_select']['field types'][] = 'my_field_type';
+}
+
 /*
  * Define Field API formatter types.
  *
@@ -201,6 +248,21 @@
 }
 
 /**
+ * Perform alterations on Field API formatter types.
+ *
+ * @param $info
+ *   Array of informations on widget types exposed by
+ *   hook_field_field_formatter_info() implementations.
+ */
+function hook_field_formatter_info_alter(&$info) {
+  // Add a setting to a formatter type.
+  $info['text_default']['settings'][] = array('mymodule_additional_setting' => 'default value');
+
+  // Let a new field type re-use an existing formatter.
+  $info['text_default']['field types'][] = 'my_field_type';
+}
+
+/**
  * Define custom load behavior for this module's field types.
  *
  * Unlike other field hooks, this hook operates on multiple objects. The
