Index: src/java/org/apache/lucene/index/FieldInfos.java
===================================================================
--- src/java/org/apache/lucene/index/FieldInfos.java	(revision 834847)
+++ src/java/org/apache/lucene/index/FieldInfos.java	Sun Mar 21 01:11:45 CET 2010
@@ -112,8 +112,7 @@
 
   /** Adds field info for a Document. */
   synchronized public void add(Document doc) {
-    List<Fieldable> fields = doc.getFields();
-    for (Fieldable field : fields) {
+    for (Fieldable field : doc) {
       add(field.name(), field.isIndexed(), field.isTermVectorStored(), field.isStorePositionWithTermVector(),
               field.isStoreOffsetWithTermVector(), field.getOmitNorms(), false, field.getOmitTermFreqAndPositions());
     }
Index: src/test/org/apache/lucene/index/TestParallelReader.java
===================================================================
--- src/test/org/apache/lucene/index/TestParallelReader.java	(revision 922583)
+++ src/test/org/apache/lucene/index/TestParallelReader.java	Sun Mar 21 01:04:19 CET 2010
@@ -90,9 +90,9 @@
     Document doc24 = pr.document(1, new MapFieldSelector(Arrays.asList(new String[] {"f4"})));
     Document doc223 = pr.document(1, new MapFieldSelector(new String[] {"f2", "f3"}));
     
-    assertEquals(1, doc11.getFields().size());
-    assertEquals(1, doc24.getFields().size());
-    assertEquals(2, doc223.getFields().size());
+    assertEquals(1, doc11.getNumFields());
+    assertEquals(1, doc24.getNumFields());
+    assertEquals(2, doc223.getNumFields());
     
     assertEquals("v1", doc11.get("f1"));
     assertEquals("v2", doc24.get("f4"));
Index: src/test/org/apache/lucene/index/TestSegmentMerger.java
===================================================================
--- src/test/org/apache/lucene/index/TestSegmentMerger.java	(revision 887181)
+++ src/test/org/apache/lucene/index/TestSegmentMerger.java	Sun Mar 21 01:30:25 CET 2010
@@ -76,10 +76,10 @@
     Document newDoc1 = mergedReader.document(0);
     assertTrue(newDoc1 != null);
     //There are 2 unstored fields on the document
-    assertTrue(DocHelper.numFields(newDoc1) == DocHelper.numFields(doc1) - DocHelper.unstored.size());
+    assertTrue(newDoc1.getNumFields() == doc1.getNumFields() - DocHelper.unstored.size());
     Document newDoc2 = mergedReader.document(1);
     assertTrue(newDoc2 != null);
-    assertTrue(DocHelper.numFields(newDoc2) == DocHelper.numFields(doc2) - DocHelper.unstored.size());
+    assertTrue(newDoc2.getNumFields() == doc2.getNumFields() - DocHelper.unstored.size());
     
     TermDocs termDocs = mergedReader.termDocs(new Term(DocHelper.TEXT_FIELD_2_KEY, "field"));
     assertTrue(termDocs != null);
Index: src/java/org/apache/lucene/index/ParallelReader.java
===================================================================
--- src/java/org/apache/lucene/index/ParallelReader.java	(revision 892224)
+++ src/java/org/apache/lucene/index/ParallelReader.java	Sun Mar 21 01:11:01 CET 2010
@@ -297,8 +297,8 @@
           }
       }
       if (include) {
-        List<Fieldable> fields = reader.document(n, fieldSelector).getFields();
-        for (Fieldable field : fields) {
+        Document document = reader.document(n, fieldSelector);
+        for (Fieldable field : document) {
           result.add(field);
         }
       }
Index: src/java/org/apache/lucene/index/FieldsWriter.java
===================================================================
--- src/java/org/apache/lucene/index/FieldsWriter.java	(revision 916755)
+++ src/java/org/apache/lucene/index/FieldsWriter.java	Sun Mar 21 01:11:24 CET 2010
@@ -222,8 +222,7 @@
         indexStream.writeLong(fieldsStream.getFilePointer());
 
         int storedCount = 0;
-        List<Fieldable> fields = doc.getFields();
-        for (Fieldable field : fields) {
+        for (Fieldable field : doc) {
             if (field.isStored())
                 storedCount++;
         }
@@ -231,7 +230,7 @@
 
         
 
-        for (Fieldable field : fields) {
+        for (Fieldable field : doc) {
             if (field.isStored())
               writeField(fieldInfos.fieldInfo(field.name()), field);
         }
Index: src/test/org/apache/lucene/index/TestDirectoryReader.java
===================================================================
--- src/test/org/apache/lucene/index/TestDirectoryReader.java	(revision 922583)
+++ src/test/org/apache/lucene/index/TestDirectoryReader.java	Sun Mar 21 01:29:52 CET 2010
@@ -78,10 +78,10 @@
     assertTrue(reader != null);
     Document newDoc1 = reader.document(0);
     assertTrue(newDoc1 != null);
-    assertTrue(DocHelper.numFields(newDoc1) == DocHelper.numFields(doc1) - DocHelper.unstored.size());
+    assertTrue(newDoc1.getNumFields() == doc1.getNumFields() - DocHelper.unstored.size());
     Document newDoc2 = reader.document(1);
     assertTrue(newDoc2 != null);
-    assertTrue(DocHelper.numFields(newDoc2) == DocHelper.numFields(doc2) - DocHelper.unstored.size());
+    assertTrue(newDoc2.getNumFields() == doc2.getNumFields() - DocHelper.unstored.size());
     TermFreqVector vector = reader.getTermFreqVector(0, DocHelper.TEXT_FIELD_2_KEY);
     assertTrue(vector != null);
     TestSegmentReader.checkNorms(reader);
Index: src/test/org/apache/lucene/index/TestFieldsReader.java
===================================================================
--- src/test/org/apache/lucene/index/TestFieldsReader.java	(revision 925462)
+++ src/test/org/apache/lucene/index/TestFieldsReader.java	Sun Mar 21 00:59:22 CET 2010
@@ -191,8 +191,7 @@
     Document doc = reader.doc(0, fieldSelector);
     assertTrue("doc is null and it shouldn't be", doc != null);
     int count = 0;
-    List<Fieldable> l = doc.getFields();
-    for (final Fieldable fieldable : l ) {
+    for (final Fieldable fieldable : doc) {
       Field field = (Field) fieldable;
 
       assertTrue("field is null and it shouldn't be", field != null);
Index: src/test/org/apache/lucene/index/TestIndexReader.java
===================================================================
--- src/test/org/apache/lucene/index/TestIndexReader.java	(revision 925462)
+++ src/test/org/apache/lucene/index/TestIndexReader.java	Sun Mar 21 00:59:22 CET 2010
@@ -1362,11 +1362,9 @@
         if (!index1.isDeleted(i)) {
           Document doc1 = index1.document(i);
           Document doc2 = index2.document(i);
-          List<Fieldable> fieldable1 = doc1.getFields();
-          List<Fieldable> fieldable2 = doc2.getFields();
-          assertEquals("Different numbers of fields for doc " + i + ".", fieldable1.size(), fieldable2.size());
-          Iterator<Fieldable> itField1 = fieldable1.iterator();
-          Iterator<Fieldable> itField2 = fieldable2.iterator();
+          assertEquals("Different numbers of fields for doc " + i + ".", doc1.getNumFields(), doc2.getNumFields());
+          Iterator<Fieldable> itField1 = doc1.iterator();
+          Iterator<Fieldable> itField2 = doc2.iterator();
           while (itField1.hasNext()) {
             Field curField1 = (Field) itField1.next();
             Field curField2 = (Field) itField2.next();
Index: src/test/org/apache/lucene/search/TestThreadSafe.java
===================================================================
--- src/test/org/apache/lucene/search/TestThreadSafe.java	(revision 922583)
+++ src/test/org/apache/lucene/search/TestThreadSafe.java	Sun Mar 21 01:09:48 CET 2010
@@ -86,8 +86,7 @@
                 }
               );
 
-      List<Fieldable> fields = doc.getFields();
-      for (final Fieldable f : fields ) {
+      for (final Fieldable f : doc ) {
         validateField(f);
       }
 
Index: src/test/org/apache/lucene/index/TestSegmentReader.java
===================================================================
--- src/test/org/apache/lucene/index/TestSegmentReader.java	(revision 917019)
+++ src/test/org/apache/lucene/index/TestSegmentReader.java	Sun Mar 21 01:31:16 CET 2010
@@ -51,7 +51,7 @@
     assertTrue(dir != null);
     assertTrue(reader != null);
     assertTrue(DocHelper.nameValues.size() > 0);
-    assertTrue(DocHelper.numFields(testDoc) == DocHelper.all.size());
+    assertTrue(testDoc.getNumFields() == DocHelper.all.size());
   }
   
   public void testDocument() throws IOException {
@@ -60,10 +60,9 @@
     Document result = reader.document(0);
     assertTrue(result != null);
     //There are 2 unstored fields on the document that are not preserved across writing
-    assertTrue(DocHelper.numFields(result) == DocHelper.numFields(testDoc) - DocHelper.unstored.size());
+    assertTrue(result.getNumFields() == testDoc.getNumFields() - DocHelper.unstored.size());
     
-    List<Fieldable> fields = result.getFields();
-    for (final Fieldable field : fields ) { 
+    for (final Fieldable field : result ) { 
       assertTrue(field != null);
       assertTrue(DocHelper.nameValues.containsKey(field.name()));
     }
Index: src/test/org/apache/lucene/index/TestStressIndexing2.java
===================================================================
--- src/test/org/apache/lucene/index/TestStressIndexing2.java	(revision 925462)
+++ src/test/org/apache/lucene/index/TestStressIndexing2.java	Sun Mar 21 01:08:57 CET 2010
@@ -237,7 +237,9 @@
     while (iter.hasNext()) {
       Document d = iter.next();
       ArrayList<Fieldable> fields = new ArrayList<Fieldable>();
-      fields.addAll(d.getFields());
+      for (Fieldable field : d) {
+        fields.add(field);
+      }
       // put fields in same order each time
       Collections.sort(fields, fieldNameComparator);
       
@@ -403,8 +405,14 @@
   }
 
   public static void verifyEquals(Document d1, Document d2) {
-    List<Fieldable> ff1 = d1.getFields();
-    List<Fieldable> ff2 = d2.getFields();
+    List<Fieldable> ff1 = new ArrayList<Fieldable>();
+    for (Fieldable field : d1) {
+      ff1.add(field);
+    }
+    List<Fieldable> ff2 = new ArrayList<Fieldable>();
+    for (Fieldable field : d2) {
+      ff2.add(field);
+    }
 
     Collections.sort(ff1, fieldNameComparator);
     Collections.sort(ff2, fieldNameComparator);
Index: src/test/org/apache/lucene/index/TestIndexWriter.java
===================================================================
--- src/test/org/apache/lucene/index/TestIndexWriter.java	(revision 925462)
+++ src/test/org/apache/lucene/index/TestIndexWriter.java	Sun Mar 21 00:59:22 CET 2010
@@ -4578,7 +4578,7 @@
     w.addDocument(doc);
     IndexReader r = w.getReader();
     doc = r.document(0);
-    Iterator<Fieldable> it = doc.getFields().iterator();
+    Iterator<Fieldable> it = doc.iterator();
     assertTrue(it.hasNext());
     Field f = (Field) it.next();
     assertEquals(f.name(), "zzz");
Index: src/java/org/apache/lucene/index/DocFieldProcessorPerThread.java
===================================================================
--- src/java/org/apache/lucene/index/DocFieldProcessorPerThread.java	(revision 901662)
+++ src/java/org/apache/lucene/index/DocFieldProcessorPerThread.java	Sun Mar 21 01:17:31 CET 2010
@@ -166,16 +166,12 @@
     
     final int thisFieldGen = fieldGen++;
 
-    final List<Fieldable> docFields = doc.getFields();
-    final int numDocFields = docFields.size();
-
     // Absorb any new fields first seen in this document.
     // Also absorb any changes to fields we had already
     // seen before (eg suddenly turning on norms or
     // vectors, etc.):
 
-    for(int i=0;i<numDocFields;i++) {
-      Fieldable field = docFields.get(i);
+    for(Fieldable field : doc) {
       final String fieldName = field.name();
 
       // Make sure we have a PerField allocated
Index: src/test/org/apache/lucene/index/TestBackwardsCompatibility.java
===================================================================
--- src/test/org/apache/lucene/index/TestBackwardsCompatibility.java	(revision 925462)
+++ src/test/org/apache/lucene/index/TestBackwardsCompatibility.java	Sun Mar 21 00:59:22 CET 2010
@@ -285,7 +285,6 @@
     for(int i=0;i<35;i++) {
       if (!reader.isDeleted(i)) {
         Document d = reader.document(i);
-        List<Fieldable> fields = d.getFields();
         if (!oldName.startsWith("19.") &&
             !oldName.startsWith("20.") &&
             !oldName.startsWith("21.") &&
@@ -293,7 +292,7 @@
 
           if (d.getField("content3") == null) {
             final int numFields = oldName.startsWith("29.") ? 7 : 5;
-            assertEquals(numFields, fields.size());
+            assertEquals(numFields, d.getNumFields());
             Field f =  d.getField("id");
             assertEquals(""+i, f.stringValue());
 
Index: src/test/org/apache/lucene/index/DocHelper.java
===================================================================
--- src/test/org/apache/lucene/index/DocHelper.java	(revision 922583)
+++ src/test/org/apache/lucene/index/DocHelper.java	Sun Mar 21 01:14:53 CET 2010
@@ -243,7 +243,15 @@
     return info;
   }
 
+  /**
+   * Returns the number of fields in the given Document
+   *
+   * @param doc Document to determine how many fields it has
+   * @return Number of fields in the Document
+   * @deprecated Use {@link org.apache.lucene.document.Document#getNumFields()} directly.
+   *             This method will be removed in a future version
+   */
   public static int numFields(Document doc) {
-    return doc.getFields().size();
+    return doc.getNumFields();
   }
 }
Index: src/test/org/apache/lucene/index/TestLazyBug.java
===================================================================
--- src/test/org/apache/lucene/index/TestLazyBug.java	(revision 925462)
+++ src/test/org/apache/lucene/index/TestLazyBug.java	Sun Mar 21 01:02:16 CET 2010
@@ -101,9 +101,8 @@
     for (int i = 0; i < docs.length; i++) {
       Document d = reader.document(docs[i], SELECTOR);
       d.get(MAGIC_FIELD);
-      
+
-      List<Fieldable> fields = d.getFields();
-      for (Iterator<Fieldable> fi = fields.iterator(); fi.hasNext(); ) {
+      for (Iterator<Fieldable> fi = d.iterator(); fi.hasNext(); ) {
         Fieldable f=null;
         try {
           f =  fi.next();
@@ -111,7 +110,7 @@
           String fval = f.stringValue();
           assertNotNull(docs[i]+" FIELD: "+fname, fval);
           String[] vals = fval.split("#");
-          if (!dataset.contains(vals[0]) || !dataset.contains(vals[1])) {        
+          if (!dataset.contains(vals[0]) || !dataset.contains(vals[1])) {
             fail("FIELD:"+fname+",VAL:"+fval);
           }
         } catch (Exception e) {
Index: src/test/org/apache/lucene/search/TestMultiSearcher.java
===================================================================
--- src/test/org/apache/lucene/search/TestMultiSearcher.java	(revision 922583)
+++ src/test/org/apache/lucene/search/TestMultiSearcher.java	Sun Mar 21 01:09:31 CET 2010
@@ -257,7 +257,7 @@
     assertTrue(hits.length + " does not equal: " + 2, hits.length == 2);
     Document document = searcher.doc(hits[0].doc);
     assertTrue("document is null and it shouldn't be", document != null);
-    assertTrue("document.getFields() Size: " + document.getFields().size() + " is not: " + 2, document.getFields().size() == 2);
+    assertTrue("document.getFields() Size: " + document.getNumFields() + " is not: " + 2, document.getNumFields() == 2);
     //Should be one document from each directory
     //they both have two fields, contents and other
     Set<String> ftl = new HashSet<String>();
@@ -265,7 +265,7 @@
     SetBasedFieldSelector fs = new SetBasedFieldSelector(ftl, Collections. <String> emptySet());
     document = searcher.doc(hits[0].doc, fs);
     assertTrue("document is null and it shouldn't be", document != null);
-    assertTrue("document.getFields() Size: " + document.getFields().size() + " is not: " + 1, document.getFields().size() == 1);
+    assertTrue("document.getFields() Size: " + document.getNumFields() + " is not: " + 1, document.getNumFields() == 1);
     String value = document.get("contents");
     assertTrue("value is not null and it should be", value == null);
     value = document.get("other");
