Parser detects wrong include files now
[phpeclipse.git] / net.sourceforge.phpeclipse / src / net / sourceforge / phpdt / internal / core / builder / State.java
index 06bf6ca..1e0fe32 100644 (file)
@@ -13,20 +13,14 @@ package net.sourceforge.phpdt.internal.core.builder;
 import java.io.DataInputStream;
 import java.io.DataOutputStream;
 import java.io.IOException;
-import java.util.ArrayList;
 import java.util.Date;
 
-import net.sourceforge.phpdt.core.compiler.CharOperation;
-import net.sourceforge.phpdt.internal.compiler.util.Util;
 import net.sourceforge.phpdt.internal.core.util.SimpleLookupTable;
 
-import org.eclipse.core.resources.IContainer;
 import org.eclipse.core.resources.IProject;
 import org.eclipse.core.resources.IResource;
 import org.eclipse.core.resources.IResourceDelta;
-import org.eclipse.core.resources.IWorkspaceRoot;
 import org.eclipse.core.runtime.IPath;
-import org.eclipse.core.runtime.Path;
 
 public class State {
   // NOTE: this state cannot contain types that are not defined in this project
@@ -36,9 +30,9 @@ public class State {
   //ClasspathLocation[] binaryLocations;
   // keyed by the project relative path of the type (ie. "src1/p1/p2/A.java"), value is a ReferenceCollection or an
   // AdditionalTypeCollection
-  SimpleLookupTable references;
+//  SimpleLookupTable references;
   // keyed by qualified type name "p1/p2/A", value is the project relative path which defines this type "src1/p1/p2/A.java"
-  SimpleLookupTable typeLocators;
+//  SimpleLookupTable typeLocators;
 
   int buildNumber;
   long lastStructuralBuildTime;
@@ -61,8 +55,8 @@ public class State {
     this.javaProjectName = javaBuilder.currentProject.getName();
     this.sourceLocations = javaBuilder.nameEnvironment.sourceLocations;
     // this.binaryLocations = javaBuilder.nameEnvironment.binaryLocations;
-    this.references = new SimpleLookupTable(7);
-    this.typeLocators = new SimpleLookupTable(7);
+//    this.references = new SimpleLookupTable(7);
+//    this.typeLocators = new SimpleLookupTable(7);
 
     this.buildNumber = 0; // indicates a full build
     this.lastStructuralBuildTime = System.currentTimeMillis();
@@ -70,91 +64,91 @@ public class State {
   }
 
   void copyFrom(State lastState) {
-    try {
+//    try {
       this.knownPackageNames = null;
       this.buildNumber = lastState.buildNumber + 1;
       this.lastStructuralBuildTime = lastState.lastStructuralBuildTime;
-      this.references = (SimpleLookupTable) lastState.references.clone();
-      this.typeLocators = (SimpleLookupTable) lastState.typeLocators.clone();
-    } catch (CloneNotSupportedException e) {
-      this.references = new SimpleLookupTable(lastState.references.elementSize);
-      Object[] keyTable = lastState.references.keyTable;
-      Object[] valueTable = lastState.references.valueTable;
-      for (int i = 0, l = keyTable.length; i < l; i++)
-        if (keyTable[i] != null)
-          this.references.put(keyTable[i], valueTable[i]);
-
-      this.typeLocators = new SimpleLookupTable(lastState.typeLocators.elementSize);
-      keyTable = lastState.typeLocators.keyTable;
-      valueTable = lastState.typeLocators.valueTable;
-      for (int i = 0, l = keyTable.length; i < l; i++)
-        if (keyTable[i] != null)
-          this.typeLocators.put(keyTable[i], valueTable[i]);
-    }
-  }
-
-  char[][] getDefinedTypeNamesFor(String typeLocator) {
-    Object c = references.get(typeLocator);
-    if (c instanceof AdditionalTypeCollection)
-      return ((AdditionalTypeCollection) c).definedTypeNames;
-    return null; // means only one type is defined with the same name as the file... saves space
-  }
-
-  boolean isDuplicateLocator(String qualifiedTypeName, String typeLocator) {
-    String existing = (String) typeLocators.get(qualifiedTypeName);
-    return existing != null && !existing.equals(typeLocator);
-  }
-
-  boolean isKnownPackage(String qualifiedPackageName) {
-    if (knownPackageNames == null) {
-      ArrayList names = new ArrayList(typeLocators.elementSize);
-      Object[] keyTable = typeLocators.keyTable;
-      for (int i = 0, l = keyTable.length; i < l; i++) {
-        if (keyTable[i] != null) {
-          String packageName = (String) keyTable[i]; // is a type name of the form p1/p2/A
-          int last = packageName.lastIndexOf('/');
-          packageName = last == -1 ? null : packageName.substring(0, last);
-          while (packageName != null && !names.contains(packageName)) {
-            names.add(packageName);
-            last = packageName.lastIndexOf('/');
-            packageName = last == -1 ? null : packageName.substring(0, last);
-          }
-        }
-      }
-      knownPackageNames = new String[names.size()];
-      names.toArray(knownPackageNames);
-    }
-    for (int i = 0, l = knownPackageNames.length; i < l; i++)
-      if (knownPackageNames[i].equals(qualifiedPackageName))
-        return true;
-    return false;
+//      this.references = (SimpleLookupTable) lastState.references.clone();
+//      this.typeLocators = (SimpleLookupTable) lastState.typeLocators.clone();
+//    } catch (CloneNotSupportedException e) {
+//      this.references = new SimpleLookupTable(lastState.references.elementSize);
+//      Object[] keyTable = lastState.references.keyTable;
+//      Object[] valueTable = lastState.references.valueTable;
+//      for (int i = 0, l = keyTable.length; i < l; i++)
+//        if (keyTable[i] != null)
+//          this.references.put(keyTable[i], valueTable[i]);
+//
+//      this.typeLocators = new SimpleLookupTable(lastState.typeLocators.elementSize);
+//      keyTable = lastState.typeLocators.keyTable;
+//      valueTable = lastState.typeLocators.valueTable;
+//      for (int i = 0, l = keyTable.length; i < l; i++)
+//        if (keyTable[i] != null)
+//          this.typeLocators.put(keyTable[i], valueTable[i]);
+//    }
   }
 
-  void record(String typeLocator, char[][][] qualifiedRefs, char[][] simpleRefs, char[] mainTypeName, ArrayList typeNames) {
-    if (typeNames.size() == 1 && CharOperation.equals(mainTypeName, (char[]) typeNames.get(0))) {
-      references.put(typeLocator, new ReferenceCollection(qualifiedRefs, simpleRefs));
-    } else {
-      char[][] definedTypeNames = new char[typeNames.size()][]; // can be empty when no types are defined
-      typeNames.toArray(definedTypeNames);
-      references.put(typeLocator, new AdditionalTypeCollection(definedTypeNames, qualifiedRefs, simpleRefs));
-    }
-  }
-
-  void recordLocatorForType(String qualifiedTypeName, String typeLocator) {
-    this.knownPackageNames = null;
-    typeLocators.put(qualifiedTypeName, typeLocator);
-  }
+//  char[][] getDefinedTypeNamesFor(String typeLocator) {
+//    Object c = references.get(typeLocator);
+//    if (c instanceof AdditionalTypeCollection)
+//      return ((AdditionalTypeCollection) c).definedTypeNames;
+//    return null; // means only one type is defined with the same name as the file... saves space
+//  }
+
+//  boolean isDuplicateLocator(String qualifiedTypeName, String typeLocator) {
+//    String existing = (String) typeLocators.get(qualifiedTypeName);
+//    return existing != null && !existing.equals(typeLocator);
+//  }
+
+//  boolean isKnownPackage(String qualifiedPackageName) {
+//    if (knownPackageNames == null) {
+//      ArrayList names = new ArrayList(typeLocators.elementSize);
+//      Object[] keyTable = typeLocators.keyTable;
+//      for (int i = 0, l = keyTable.length; i < l; i++) {
+//        if (keyTable[i] != null) {
+//          String packageName = (String) keyTable[i]; // is a type name of the form p1/p2/A
+//          int last = packageName.lastIndexOf('/');
+//          packageName = last == -1 ? null : packageName.substring(0, last);
+//          while (packageName != null && !names.contains(packageName)) {
+//            names.add(packageName);
+//            last = packageName.lastIndexOf('/');
+//            packageName = last == -1 ? null : packageName.substring(0, last);
+//          }
+//        }
+//      }
+//      knownPackageNames = new String[names.size()];
+//      names.toArray(knownPackageNames);
+//    }
+//    for (int i = 0, l = knownPackageNames.length; i < l; i++)
+//      if (knownPackageNames[i].equals(qualifiedPackageName))
+//        return true;
+//    return false;
+//  }
+
+//  void record(String typeLocator, char[][][] qualifiedRefs, char[][] simpleRefs, char[] mainTypeName, ArrayList typeNames) {
+//    if (typeNames.size() == 1 && CharOperation.equals(mainTypeName, (char[]) typeNames.get(0))) {
+//      references.put(typeLocator, new ReferenceCollection(qualifiedRefs, simpleRefs));
+//    } else {
+//      char[][] definedTypeNames = new char[typeNames.size()][]; // can be empty when no types are defined
+//      typeNames.toArray(definedTypeNames);
+//      references.put(typeLocator, new AdditionalTypeCollection(definedTypeNames, qualifiedRefs, simpleRefs));
+//    }
+//  }
+//
+//  void recordLocatorForType(String qualifiedTypeName, String typeLocator) {
+//    this.knownPackageNames = null;
+//    typeLocators.put(qualifiedTypeName, typeLocator);
+//  }
 
   void recordStructuralDependency(IProject prereqProject, State prereqState) {
     if (prereqState != null)
       structuralBuildTimes.put(prereqProject.getName(), new Long(prereqState.lastStructuralBuildTime));
   }
 
-  void removeLocator(String typeLocatorToRemove) {
-    this.knownPackageNames = null;
-    references.removeKey(typeLocatorToRemove);
-    typeLocators.removeValue(typeLocatorToRemove);
-  }
+//  void removeLocator(String typeLocatorToRemove) {
+//    this.knownPackageNames = null;
+//    references.removeKey(typeLocatorToRemove);
+//    typeLocators.removeValue(typeLocatorToRemove);
+//  }
 
   void removePackage(IResourceDelta sourceDelta) {
     IResource resource = sourceDelta.getResource();
@@ -166,15 +160,15 @@ public class State {
         return;
       case IResource.FILE :
         IPath typeLocatorPath = resource.getProjectRelativePath();
-        if (Util.isJavaFileName(typeLocatorPath.lastSegment()))
-          removeLocator(typeLocatorPath.toString());
+//        if (ProjectPrefUtil.isJavaFileName(typeLocatorPath.lastSegment()))
+//          removeLocator(typeLocatorPath.toString());
     }
   }
 
-  void removeQualifiedTypeName(String qualifiedTypeNameToRemove) {
-    this.knownPackageNames = null;
-    typeLocators.removeKey(qualifiedTypeNameToRemove);
-  }
+//  void removeQualifiedTypeName(String qualifiedTypeNameToRemove) {
+//    this.knownPackageNames = null;
+//    typeLocators.removeKey(qualifiedTypeNameToRemove);
+//  }
 
   static State read(IProject project, DataInputStream in) throws IOException {
     if (PHPBuilder.DEBUG)
@@ -194,9 +188,10 @@ public class State {
     }
     newState.buildNumber = in.readInt();
     newState.lastStructuralBuildTime = in.readLong();
-
-    int length = in.readInt();
-    newState.sourceLocations = new ClasspathMultiDirectory[0];
+    
+    int length;
+//    int length = in.readInt();
+//    newState.sourceLocations = new ClasspathMultiDirectory[0];
     // newState.sourceLocations = new ClasspathMultiDirectory[length];
     // for (int i = 0; i < length; i++) {
     //         IContainer sourceFolder = project, outputFolder = project;
@@ -210,7 +205,7 @@ public class State {
     //         newState.sourceLocations[i] = md;
     // }
 
-    length = in.readInt();
+//    length = in.readInt();
     // newState.binaryLocations = new ClasspathLocation[length];
     // IWorkspaceRoot root = project.getWorkspace().getRoot();
     // for (int i = 0; i < length; i++) {
@@ -237,51 +232,51 @@ public class State {
     for (int i = 0; i < length; i++)
       newState.structuralBuildTimes.put(in.readUTF(), new Long(in.readLong()));
 
-    String[] internedTypeLocators = new String[length = in.readInt()];
-    for (int i = 0; i < length; i++)
-      internedTypeLocators[i] = in.readUTF();
-
-    newState.typeLocators = new SimpleLookupTable(length = in.readInt());
-    for (int i = 0; i < length; i++)
-      newState.typeLocators.put(in.readUTF(), internedTypeLocators[in.readInt()]);
-
-    char[][] internedSimpleNames = ReferenceCollection.internSimpleNames(readNames(in), false);
-    char[][][] internedQualifiedNames = new char[length = in.readInt()][][];
-    for (int i = 0; i < length; i++) {
-      int qLength = in.readInt();
-      char[][] qName = new char[qLength][];
-      for (int j = 0; j < qLength; j++)
-        qName[j] = internedSimpleNames[in.readInt()];
-      internedQualifiedNames[i] = qName;
-    }
-    internedQualifiedNames = ReferenceCollection.internQualifiedNames(internedQualifiedNames);
-
-    newState.references = new SimpleLookupTable(length = in.readInt());
-    for (int i = 0; i < length; i++) {
-      String typeLocator = internedTypeLocators[in.readInt()];
-      ReferenceCollection collection = null;
-      switch (in.readByte()) {
-        case 1 :
-          char[][] additionalTypeNames = readNames(in);
-          char[][][] qualifiedNames = new char[in.readInt()][][];
-          for (int j = 0, m = qualifiedNames.length; j < m; j++)
-            qualifiedNames[j] = internedQualifiedNames[in.readInt()];
-          char[][] simpleNames = new char[in.readInt()][];
-          for (int j = 0, m = simpleNames.length; j < m; j++)
-            simpleNames[j] = internedSimpleNames[in.readInt()];
-          collection = new AdditionalTypeCollection(additionalTypeNames, qualifiedNames, simpleNames);
-          break;
-        case 2 :
-          char[][][] qNames = new char[in.readInt()][][];
-          for (int j = 0, m = qNames.length; j < m; j++)
-            qNames[j] = internedQualifiedNames[in.readInt()];
-          char[][] sNames = new char[in.readInt()][];
-          for (int j = 0, m = sNames.length; j < m; j++)
-            sNames[j] = internedSimpleNames[in.readInt()];
-          collection = new ReferenceCollection(qNames, sNames);
-      }
-      newState.references.put(typeLocator, collection);
-    }
+//    String[] internedTypeLocators = new String[length = in.readInt()];
+//    for (int i = 0; i < length; i++)
+//      internedTypeLocators[i] = in.readUTF();
+
+//    newState.typeLocators = new SimpleLookupTable(length = in.readInt());
+//    for (int i = 0; i < length; i++)
+//      newState.typeLocators.put(in.readUTF(), internedTypeLocators[in.readInt()]);
+
+//    char[][] internedSimpleNames = ReferenceCollection.internSimpleNames(readNames(in), false);
+//    char[][][] internedQualifiedNames = new char[length = in.readInt()][][];
+//    for (int i = 0; i < length; i++) {
+//      int qLength = in.readInt();
+//      char[][] qName = new char[qLength][];
+//      for (int j = 0; j < qLength; j++)
+//        qName[j] = internedSimpleNames[in.readInt()];
+//      internedQualifiedNames[i] = qName;
+//    }
+//    internedQualifiedNames = ReferenceCollection.internQualifiedNames(internedQualifiedNames);
+//
+//    newState.references = new SimpleLookupTable(length = in.readInt());
+//    for (int i = 0; i < length; i++) {
+//      String typeLocator = internedTypeLocators[in.readInt()];
+//      ReferenceCollection collection = null;
+//      switch (in.readByte()) {
+//        case 1 :
+//          char[][] additionalTypeNames = readNames(in);
+//          char[][][] qualifiedNames = new char[in.readInt()][][];
+//          for (int j = 0, m = qualifiedNames.length; j < m; j++)
+//            qualifiedNames[j] = internedQualifiedNames[in.readInt()];
+//          char[][] simpleNames = new char[in.readInt()][];
+//          for (int j = 0, m = simpleNames.length; j < m; j++)
+//            simpleNames[j] = internedSimpleNames[in.readInt()];
+//          collection = new AdditionalTypeCollection(additionalTypeNames, qualifiedNames, simpleNames);
+//          break;
+//        case 2 :
+//          char[][][] qNames = new char[in.readInt()][][];
+//          for (int j = 0, m = qNames.length; j < m; j++)
+//            qNames[j] = internedQualifiedNames[in.readInt()];
+//          char[][] sNames = new char[in.readInt()][];
+//          for (int j = 0, m = sNames.length; j < m; j++)
+//            sNames[j] = internedSimpleNames[in.readInt()];
+//          collection = new ReferenceCollection(qNames, sNames);
+//      }
+//      newState.references.put(typeLocator, collection);
+//    }
     if (PHPBuilder.DEBUG)
       System.out.println("Successfully read state for " + newState.javaProjectName); //$NON-NLS-1$
     return newState;
@@ -338,14 +333,14 @@ public class State {
     /*
         * ClasspathMultiDirectory[] int id String path(s)
         */
-    out.writeInt(length = sourceLocations.length);
-    for (int i = 0; i < length; i++) {
-      ClasspathMultiDirectory md = sourceLocations[i];
-      out.writeUTF(md.sourceFolder.getProjectRelativePath().toString());
-      out.writeUTF(md.binaryFolder.getProjectRelativePath().toString());
-      writeNames(md.exclusionPatterns, out);
-      out.writeBoolean(md.hasIndependentOutputFolder);
-    }
+//    out.writeInt(length = sourceLocations.length);
+//    for (int i = 0; i < length; i++) {
+//      ClasspathMultiDirectory md = sourceLocations[i];
+//      out.writeUTF(md.sourceFolder.getProjectRelativePath().toString());
+//      out.writeUTF(md.binaryFolder.getProjectRelativePath().toString());
+//      writeNames(md.exclusionPatterns, out);
+//      out.writeBoolean(md.hasIndependentOutputFolder);
+//    }
 
     /*
         * ClasspathLocation[] int id String path(s)
@@ -399,115 +394,115 @@ public class State {
     /*
         * String[] Interned type locators
         */
-    out.writeInt(length = references.elementSize);
-    ArrayList internedTypeLocators = new ArrayList(length);
-    if (length > 0) {
-      keyTable = references.keyTable;
-      for (int i = 0, l = keyTable.length; i < l; i++) {
-        if (keyTable[i] != null) {
-          length--;
-          String key = (String) keyTable[i];
-          out.writeUTF(key);
-          internedTypeLocators.add(key);
-        }
-      }
-      if (PHPBuilder.DEBUG && length != 0)
-        System.out.println("references table is inconsistent"); //$NON-NLS-1$
-    }
+//    out.writeInt(length = references.elementSize);
+//    ArrayList internedTypeLocators = new ArrayList(length);
+//    if (length > 0) {
+//      keyTable = references.keyTable;
+//      for (int i = 0, l = keyTable.length; i < l; i++) {
+//        if (keyTable[i] != null) {
+//          length--;
+//          String key = (String) keyTable[i];
+//          out.writeUTF(key);
+//          internedTypeLocators.add(key);
+//        }
+//      }
+//      if (PHPBuilder.DEBUG && length != 0)
+//        System.out.println("references table is inconsistent"); //$NON-NLS-1$
+//    }
 
     /*
         * Type locators table String type name int interned locator id
         */
-    out.writeInt(length = typeLocators.elementSize);
-    if (length > 0) {
-      keyTable = typeLocators.keyTable;
-      valueTable = typeLocators.valueTable;
-      for (int i = 0, l = keyTable.length; i < l; i++) {
-        if (keyTable[i] != null) {
-          length--;
-          out.writeUTF((String) keyTable[i]);
-          out.writeInt(internedTypeLocators.indexOf((String) valueTable[i]));
-        }
-      }
-      if (PHPBuilder.DEBUG && length != 0)
-        System.out.println("typeLocators table is inconsistent"); //$NON-NLS-1$
-    }
+//    out.writeInt(length = typeLocators.elementSize);
+//    if (length > 0) {
+//      keyTable = typeLocators.keyTable;
+//      valueTable = typeLocators.valueTable;
+//      for (int i = 0, l = keyTable.length; i < l; i++) {
+//        if (keyTable[i] != null) {
+//          length--;
+//          out.writeUTF((String) keyTable[i]);
+//          out.writeInt(internedTypeLocators.indexOf((String) valueTable[i]));
+//        }
+//      }
+//      if (PHPBuilder.DEBUG && length != 0)
+//        System.out.println("typeLocators table is inconsistent"); //$NON-NLS-1$
+//    }
 
     /*
         * char[][][] Interned qualified names char[][] Interned simple names
         */
-    ArrayList internedQualifiedNames = new ArrayList(31);
-    ArrayList internedSimpleNames = new ArrayList(31);
-    valueTable = references.valueTable;
-    for (int i = 0, l = valueTable.length; i < l; i++) {
-      if (valueTable[i] != null) {
-        ReferenceCollection collection = (ReferenceCollection) valueTable[i];
-        char[][][] qNames = collection.qualifiedNameReferences;
-        for (int j = 0, m = qNames.length; j < m; j++) {
-          char[][] qName = qNames[j];
-          if (!internedQualifiedNames.contains(qName)) { // remember the names have been interned
-            internedQualifiedNames.add(qName);
-            for (int k = 0, n = qName.length; k < n; k++) {
-              char[] sName = qName[k];
-              if (!internedSimpleNames.contains(sName)) // remember the names have been interned
-                internedSimpleNames.add(sName);
-            }
-          }
-        }
-        char[][] sNames = collection.simpleNameReferences;
-        for (int j = 0, m = sNames.length; j < m; j++) {
-          char[] sName = sNames[j];
-          if (!internedSimpleNames.contains(sName)) // remember the names have been interned
-            internedSimpleNames.add(sName);
-        }
-      }
-    }
-    char[][] internedArray = new char[internedSimpleNames.size()][];
-    internedSimpleNames.toArray(internedArray);
-    writeNames(internedArray, out);
-    // now write the interned qualified names as arrays of interned simple names
-    out.writeInt(length = internedQualifiedNames.size());
-    for (int i = 0; i < length; i++) {
-      char[][] qName = (char[][]) internedQualifiedNames.get(i);
-      int qLength = qName.length;
-      out.writeInt(qLength);
-      for (int j = 0; j < qLength; j++)
-        out.writeInt(internedSimpleNames.indexOf(qName[j]));
-    }
-
-    /*
-        * References table int interned locator id ReferenceCollection
-        */
-    out.writeInt(length = references.elementSize);
-    if (length > 0) {
-      keyTable = references.keyTable;
-      for (int i = 0, l = keyTable.length; i < l; i++) {
-        if (keyTable[i] != null) {
-          length--;
-          out.writeInt(internedTypeLocators.indexOf((String) keyTable[i]));
-          ReferenceCollection collection = (ReferenceCollection) valueTable[i];
-          if (collection instanceof AdditionalTypeCollection) {
-            out.writeByte(1);
-            AdditionalTypeCollection atc = (AdditionalTypeCollection) collection;
-            writeNames(atc.definedTypeNames, out);
-          } else {
-            out.writeByte(2);
-          }
-          char[][][] qNames = collection.qualifiedNameReferences;
-          int qLength = qNames.length;
-          out.writeInt(qLength);
-          for (int j = 0; j < qLength; j++)
-            out.writeInt(internedQualifiedNames.indexOf(qNames[j]));
-          char[][] sNames = collection.simpleNameReferences;
-          int sLength = sNames.length;
-          out.writeInt(sLength);
-          for (int j = 0; j < sLength; j++)
-            out.writeInt(internedSimpleNames.indexOf(sNames[j]));
-        }
-      }
-      if (PHPBuilder.DEBUG && length != 0)
-        System.out.println("references table is inconsistent"); //$NON-NLS-1$
-    }
+//    ArrayList internedQualifiedNames = new ArrayList(31);
+//    ArrayList internedSimpleNames = new ArrayList(31);
+//    valueTable = references.valueTable;
+//    for (int i = 0, l = valueTable.length; i < l; i++) {
+//      if (valueTable[i] != null) {
+//        ReferenceCollection collection = (ReferenceCollection) valueTable[i];
+//        char[][][] qNames = collection.qualifiedNameReferences;
+//        for (int j = 0, m = qNames.length; j < m; j++) {
+//          char[][] qName = qNames[j];
+//          if (!internedQualifiedNames.contains(qName)) { // remember the names have been interned
+//            internedQualifiedNames.add(qName);
+//            for (int k = 0, n = qName.length; k < n; k++) {
+//              char[] sName = qName[k];
+//              if (!internedSimpleNames.contains(sName)) // remember the names have been interned
+//                internedSimpleNames.add(sName);
+//            }
+//          }
+//        }
+//        char[][] sNames = collection.simpleNameReferences;
+//        for (int j = 0, m = sNames.length; j < m; j++) {
+//          char[] sName = sNames[j];
+//          if (!internedSimpleNames.contains(sName)) // remember the names have been interned
+//            internedSimpleNames.add(sName);
+//        }
+//      }
+//    }
+//    char[][] internedArray = new char[internedSimpleNames.size()][];
+//    internedSimpleNames.toArray(internedArray);
+//    writeNames(internedArray, out);
+//    // now write the interned qualified names as arrays of interned simple names
+//    out.writeInt(length = internedQualifiedNames.size());
+//    for (int i = 0; i < length; i++) {
+//      char[][] qName = (char[][]) internedQualifiedNames.get(i);
+//      int qLength = qName.length;
+//      out.writeInt(qLength);
+//      for (int j = 0; j < qLength; j++)
+//        out.writeInt(internedSimpleNames.indexOf(qName[j]));
+//    }
+//
+//    /*
+//      * References table int interned locator id ReferenceCollection
+//      */
+//    out.writeInt(length = references.elementSize);
+//    if (length > 0) {
+//      keyTable = references.keyTable;
+//      for (int i = 0, l = keyTable.length; i < l; i++) {
+//        if (keyTable[i] != null) {
+//          length--;
+//          out.writeInt(internedTypeLocators.indexOf((String) keyTable[i]));
+//          ReferenceCollection collection = (ReferenceCollection) valueTable[i];
+//          if (collection instanceof AdditionalTypeCollection) {
+//            out.writeByte(1);
+//            AdditionalTypeCollection atc = (AdditionalTypeCollection) collection;
+//            writeNames(atc.definedTypeNames, out);
+//          } else {
+//            out.writeByte(2);
+//          }
+//          char[][][] qNames = collection.qualifiedNameReferences;
+//          int qLength = qNames.length;
+//          out.writeInt(qLength);
+//          for (int j = 0; j < qLength; j++)
+//            out.writeInt(internedQualifiedNames.indexOf(qNames[j]));
+//          char[][] sNames = collection.simpleNameReferences;
+//          int sLength = sNames.length;
+//          out.writeInt(sLength);
+//          for (int j = 0; j < sLength; j++)
+//            out.writeInt(internedSimpleNames.indexOf(sNames[j]));
+//        }
+//      }
+//      if (PHPBuilder.DEBUG && length != 0)
+//        System.out.println("references table is inconsistent"); //$NON-NLS-1$
+//    }
   }
 
   private void writeNames(char[][] names, DataOutputStream out) throws IOException {